第二種BitBand操作的方式 - 讓IDE來幫忙算地址
要使用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條而已。。
第二種BitBand操作的方式 - 讓IDE來幫忙算地址