您的位置:首页 > 其它

另外一种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条而已。。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: