本次新建工程用于不同功能的測試,我們主要是要對板載的外設進行功能驗證:
一、新建一個工程
新建工程:
填寫工程名:
工程配置:
在打開的對話框中,將Chip type設置為MAX78000,board type 設置為FTHR_RevA,以及CMSIS-DAP的適配器類型(直接選擇)。
注意:新建好的例程是基于BOARD ?= EvKit_V1板子的,雖然咱們選擇了FTHR_RevA,編譯時還是要在Makefile文件里面改一下,兩個板子的硬件是有差異的。
打開后縱觀看了一眼,居然沒有看到初始化程序,不過并不會影響我們的的編譯調試;通過層層的查找還是沒有看到初始化最終在哪里調用了,由于除了基礎功能包外已經重新封裝了一層,我們就不糾結了,盡情的進行應用設計吧。
本工程是基于“Hello_World”進行的編譯的,里面的主要功能是LED和串口(printf)的測試,可以看到通過修改延時程序和LED觀察變化,同時通過打印信息如下:
二、按鍵功能測試
SW1用戶可編程功能按鈕通過消碼器IC連接到MAX78000 0.2端口。
SW2用戶可編程功能按鈕通過消碼器IC連接到MAX78000 1.7端口。
板載的用戶按鍵有2個,我們測試使用一下,并結合到上述的新建工程那種。
原理圖如下:
上圖可以看出按鍵按下是下降沿觸發,不過在進行中斷模式檢測按鍵的時候出現了一個大問題,先看一下調了半天的代碼:
/***** Definitions *****/
#define SW1 0
#define SW2 1
/***** Globals *****/
int key_cnt = 0;
int key_cnt_old = 0xff;
/***** Functions *****/
void SW1_Callback()
{
key_cnt++;
printf("key1!\n");
// PB_RegisterCallback(SW1, NULL);
}
void SW2_Callback()
{
key_cnt--;
printf("key2!\n");
// PB_RegisterCallback(SW2, NULL);
}
// *****************************************************************************
int main(void)
{
PB_RegisterCallback(SW1, SW1_Callback);
PB_IntEnable(SW1);
PB_RegisterCallback(SW2, SW2_Callback);
PB_IntEnable(SW2);
printf("Hello World!\n");
while (1) {
if(key_cnt != key_cnt_old) {
LED_Off(LED_RED);
LED_Off(LED_GREEN);
LED_Off(LED_BLUE);
switch(key_cnt%3) {
case 0:
LED_On(LED_RED);
printf("LED_RED %d\n", key_cnt);
break;
case 1:
LED_On(LED_GREEN);
printf("LED_GREEN %d\n", key_cnt);
break;
case 2:
LED_On(LED_BLUE);
printf("LED_BLUE %d\n", key_cnt);
break;
default:
break;
}
key_cnt_old = key_cnt;
}
}
}
進行按鍵的基礎功能測試準備是通過按鍵SW1控制LED的變換(紅-綠-藍),SW2反向循環,為此創建了一個全局變量key_cnt,出現了一個非常奇葩的現象,就是外部中斷可以正常進入(通過斷點可以發現進入并修改了變量),但是主while里面對key_cnt的判斷確實一直為0,導致無法進入操作,為此嘗試了很多,最終是通過在while里面加了一個MXC_Delay(1)正常了,只是加了一個1微妙的延時,雖然解決了,可是還是不能理解。
串口接收如下(正常后):
精彩視頻分享:
串口接收情況(GPIO和外部中斷測試)
GPIO和外部中斷測試效果展示