后来看到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条而已。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)