BCM_GPIO驱动测试
在写内核驱动的时候,最好先在uboot上,进行裸板测试,验证寄存器,再移植到内核中,这样可以熟悉寄存器,也排除内核中的一些干扰。
/***********************************************************
* led.c
* 53344中有16个GPIO,但是却不是在统一个GPIO寄存器中设置的,
* GPIO0-GPIO3是以CMIC开头的寄存器,
* GPIO4-GPIO16才是以GPIO开头的寄存器。
*********************************************************/
typedef volatile unsigned int U32; #define GPIO_INPUT *(U32 *)0x18000060
#define GPIO_OUT *(U32 *)0x18000064
#define GPIO_OUT_EN *(U32 *)0x18000068 #define CMIC_GP_DATA_IN *(U32 *)0x48002000
#define CMIC_GP_DATA_OUT *(U32 *)0x48002004
#define CMIC_GP_OUT_EN *(U32 *)0x48002008
#define CMIC_GP_INT_TYPE *(U32 *)0x4800200c void configure_output(int gpio);
void configure_input(int gpio);
void led_on(int gpio);
void led_off(int gpio);
void delay(void);
void delays(int count); int _start(void)
{
configure_output();
configure_output();
configure_output(); CMIC_GP_OUT_EN |= 0xf;
CMIC_GP_DATA_OUT &= ~0xf; while () {
led_on();
led_on();
led_on();
delay();
led_off();
led_off();
led_off();
delay();
} return ;
}
void configure_output(int gpio)
{
GPIO_OUT_EN |= ( << gpio);
} void configure_input(int gpio)
{
GPIO_OUT_EN &= ~( << gpio);
} void led_on(int gpio)
{
GPIO_OUT &= ~( << gpio);
} void led_off(int gpio)
{
GPIO_OUT |= ( << gpio);
} void delay(void)
{
__asm__ __volatile__ (
"ldr r0 , =0x4ffffff \n"
"delayloop: \n"
"subs r0 , r0 , #1 \n"
"bne delayloop \n"
:::"r0"
);
} void delays(int count)
{
__asm__ __volatile__ (
"mov r0 , %0 \n"
"delaysloop: \n"
"subs r0 , r0 , #1 \n"
"bne delaysloop \n"
::"r"(count)
:"r0"
);
Makefile, 链接脚本led.lds用于指定代码运行的位子
all:
arm-linux-gcc -c led.c -o led.o -fno-builtin
arm-linux-ld -T led.lds led.o -o led
arm-linux-objcopy -O binary led led.bin
clean:
rm -rf led led.bin *.o
链接脚本led.lds,用于指定代码运行的地址,以及编译的时候,如果有多个文件,每个文件存放在内存中的位置。
当一个文件的时候,上面中间一条,也可以直接写成如下的写法,用于指定起始地址。
arm-linux-ld -T0x61000000 led.o -o led
链接脚本,生成方法
arm-linux-ld --verbose > led.lds
再根据实际修改生成的文件。
/* Script for -z combreloc: combine and sort reloc sections */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
"elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
SECTIONS
{
. = 0x61000000 ; /* 程序的起始地址 */ .text :
{
led.o(.text) ;
*(.text) ;
}
align = ;
}
将生成的led.bin下载到板中,然后
go 0x61000000
BCM_GPIO驱动测试的更多相关文章
- Win8驱动测试模式
打开驱动测试模式(保存成bat文件,双击执行) bcdedit /set testsigning on pause 执行完成后,看见提示操作成功的提示,之后我们重启一下,再次进入系统,在桌面的右下角会 ...
- selenium+python(模块化驱动测试)
模块化驱动测试,就是借鉴编程语言中模块化的思想,把重复的操作独立成功公告模块,懂用例执行过程中需要用到这一模块操作时则被调用,这样可以极大的消除重复从而提高测试用例的可维护性 下面具体以126邮箱为例 ...
- linux驱动开发之九鼎板载蜂鸣器驱动测试【转】
本文转载自:http://whylinux.blog.51cto.com/10900429/1932491 字符设备驱动用的fileopretion结构体. 1.板载蜂鸣器的驱动测试 我手里有一个BS ...
- DevOps on DevCloud|如何实现应用接口的混合驱动测试
引言:在"DevOps能力之屋(Capabilities House of DevOps)"中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力. ...
- Selenium(十四):自动化测试模型介绍、模块化驱动测试案例、数据驱动测试案例
1. 自动化测试模型介绍 随着自动化测试技术的发展,演化为了集中模型:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试. 下面分别介绍这几种自动化测试模型的特点. 1.1 线性测试 通过录制或编 ...
- 流程及迭代驱动测试管理软件, itest 发布到开源中国
itest 源码已发布到码云 ,项目已被开源中国收录!详见 https://www.oschina.net/p/itest-cn 测试人自己开发,汇聚10年沉淀,独创流程驱动测试.度量展现测试人价值 ...
- web自动化测试-模块驱动测试实例和数据驱动测试实例
一.模块驱动测试实例 把登录和退出统一封装在login类中,若把login类单独放在一个文件中,就可以给任一测试脚本调用,这里就跟测试脚本放一起 from selenium import webdri ...
- 自动化测试架构设计 &&自动化持续集成测试任务实战[线性测试、模块驱动测试、数据驱动测试、关键字驱动测试]
1 为什么设计自动化测试架构 1.1 企业现状分析 压力大:产品需求不明确,上线时间确定,压力山大. 混乱:未立项,开发时间已过半,前期无控制,后期无保障. 疲于应付:开发人员交付的文件质量差,测试跟 ...
- Kiwi iOS驱动测试开发
Kiwi是iOS开发一个行为驱动开发库.目标是提供一个BDD库,精美的简单安装和使用. 安装 使用CocoaPods安装: pod 'Kiwi'如果使用Xcode5则使用: pod 'Kiwi/XCT ...
随机推荐
- 温故而知新: 关于 js Form 方式提交的一些新认知
这里介绍的是通过js进行异步form提交,而不是表单Form Submit提交. 提交方式主要有以下两种: 参数为字符串方式的提交,如:a=b&c=d formData方式提交, 如:new ...
- LaTeX 编辑软件WinEdt使用简要介绍
LaTeX 编辑软件WinEdt使用简要介绍 LaTeX 的起源非常牛逼,有一套书大家可能听说过<计算机程序设计艺术>,写了好几本.当然能在计算机方面写上艺术俩字的书恐怕不是我们一般人 ...
- Spring cloud子项目
目前来说spring主要集中于spring boot(用于开发微服务)和spring cloud相关框架的开发,我们从几张图着手理解,然后再具体介绍: spring cloud子项目包括: Sprin ...
- cocos2d-x开发记录:二,基本概念(粒子系统,Scheduler和定时器)
七,粒子系统 1.导言 术语粒子系统是指计算机图形学技术,它使用大量非常小的精灵或其他图形对象来模拟某些种类的“模糊”现象,于传统渲染技术相比,它很难复制.通常是高度混沌无序的系统,自然现象.化学反应 ...
- [na]代理arp导致的问题(路由卷)
已过期... 一 理论概述 \ 二 实验 实验一:代理arp在nat中的作用(实验发现一下是错的) 实验二.代理arp导致的问题 pc访问服务器想让走路由器(写32bit静态路由),右边的R arp ...
- cpu降频问题
cpu做为能耗很高的硬件,最近几年厂商在节能方面做了很多处理,在服务器运行时,基于负载情况可调节成节能模式,节省电能,副作用是cpu的频率会降低,导致应用程序性能降低. 有第三方统计,服务器规模达到万 ...
- Python asyncio文档阅读摘要
文档地址:https://docs.python.org/3/library/asyncio.html 文档第一句话说得很明白,asyncio是单线程并发,这种event loop架构是很多新型异步并 ...
- angular学习笔记(十)-src和href处理
本篇主要介绍angular中图片的src和链接的href的处理: 用到了以下两个属性: ng-src: 绑定了数据的路径表达式 ng-href: 绑定了数据的路径表达式 例如: <!DOCTYP ...
- 从INT 到STRING的几种方法
1. int sprintf( char *buffer, const char *format [, argument] ... ); <stdio.h>例如: int s ...
- 转-webstorm快捷键
默认配置-Eclipse的常用快捷键对照表 查找/代替 Webstorm快捷键 Eclipse快捷键 说明 ctrl+shift+N ctrl+shift+R 通过文件名快速查找工程内的文件(必记) ...