另外一种BitBand操作的方式 - 让IDE来帮忙算地址
2014-09-18 16:42
204 查看
要使用Bitband来访问外设,一定要得出对应的映射地址。人工计算肯定是不靠谱的,而且也没人想这么干。因此可以通过Excel,拉个列表来计算,想想,这也是一个不错的招数。但是后来想想,还是嫌麻烦,毕竟还是需要建立表格,填入公式,从reference manual中找寻寄存器的地址。
后来看到EFM32的头文件,想到,既然头文件里已经把所有的寄存器的地址都制定好了的,为什么不直接拿来用的?利用IDE编译器帮我们计算呢?想来这也是比较简便的一条路子了。于是马上动手。
经过半个小时的奋斗,终于ok了。为什么要经历这么久的时间,主要是*号,()号,实在是有点多啊。。指针,地址,指针值来着。。各位看官就不需要重复这个过程了。
举个例子,想要通过bitband来控制PD7的输出,则宏定义如下:
#define SCK_Port gpioPortD
#define SCK_Pin 7
#define SCK (*((uint32_t *)(BITBAND_PER_BASE + (((uint32_t)&(GPIO->P[SCK_Port].DOUT) - PER_MEM_BASE) * 32) + (SCK_Pin * 4))))
在主函数中操作如下:
int main(void)
{
CHIP_Init();
CMU_ClockEnable(cmuClock_GPIO, true);
GPIO_PinModeSet(gpioPortD,7,gpioModePushPull,1);
while(1)
{
unsigned long Delay = 1000000;
while(Delay--);
SCK = 1;
Delay = 1000000;
while(Delay--);
SCK = 0;
}
}
通过查看IAR的汇编窗口,也能看到汇编指令也只需要3条而已。。
后来看到EFM32的头文件,想到,既然头文件里已经把所有的寄存器的地址都制定好了的,为什么不直接拿来用的?利用IDE编译器帮我们计算呢?想来这也是比较简便的一条路子了。于是马上动手。
经过半个小时的奋斗,终于ok了。为什么要经历这么久的时间,主要是*号,()号,实在是有点多啊。。指针,地址,指针值来着。。各位看官就不需要重复这个过程了。
举个例子,想要通过bitband来控制PD7的输出,则宏定义如下:
#define SCK_Port gpioPortD
#define SCK_Pin 7
#define SCK (*((uint32_t *)(BITBAND_PER_BASE + (((uint32_t)&(GPIO->P[SCK_Port].DOUT) - PER_MEM_BASE) * 32) + (SCK_Pin * 4))))
在主函数中操作如下:
int main(void)
{
CHIP_Init();
CMU_ClockEnable(cmuClock_GPIO, true);
GPIO_PinModeSet(gpioPortD,7,gpioModePushPull,1);
while(1)
{
unsigned long Delay = 1000000;
while(Delay--);
SCK = 1;
Delay = 1000000;
while(Delay--);
SCK = 0;
}
}
通过查看IAR的汇编窗口,也能看到汇编指令也只需要3条而已。。
相关文章推荐
- 第二种BitBand操作的方式 - 让IDE来帮忙算地址
- mysql 命令行操作另外一种进入方式
- mysql 命令行操作另外一种进入方式
- 精品软件推荐—百度云另外一种破解限速的方式<提取资源下载地址>
- iphone在加载摄像头情况下的设计交互操作的一种处理方式
- JAVA中操作数据库方式与设计模式的应用(文章地址整理)
- linux下mysql 5.x得到root密码后的另外一种利用方式
- Spring与Hibernate Dao中操作数据库的另外方式
- [★] TreeView 开发 资源管理器 另外一种绑定方式
- form的另外一种提交方式(伪装提交)
- 1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
- curl外另外一种发送http请求和接收http请求的方式
- java中写构造函数的另外一种方式
- for 循环得另外一种方式
- tomcat部署项目的另外一种方式
- SQL 在查询中插入行号--自定义分页的另外一种实现方式
- linux下mysql 5.x得到root密码后的另外一种利用方式
- 使用临时表的另外一种方式
- 向MOSS页面中添加服务器端代码的另外一种方式 zt
- Win8 的另外一种安装方式