DA14683開發:GPIO
阿新 • • 發佈:2018-11-20
DA14683的GPIO操作
勤基科技 陳杰明
新增GPIO初始化函式
在main.c中,新增以下子函式,初始化GPIO口,按鍵的引腳設定為輸入,LED燈的引腳設定為輸出。
/按鍵GPIO設定/
void key_led_init() { hw_gpio_set_pin_function(HW_GPIO_PORT_1,HW_GPIO_PIN_6, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_GPIO);//按鍵 hw_gpio_set_pin_function(HW_GPIO_PORT_1,HW_GPIO_PIN_5, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO);//LED }
然後在以下位置呼叫該函式:
這樣我們的GPIO口初始化就完成了。
新增按鍵和LED開關定義
同樣在main.c中新增以下巨集定義和子函式
/按鍵巨集定義/
#define IS_KEY1_DONE()\
!hw_gpio_get_pin_status(HW_GPIO_PORT_1,HW_GPIO_PIN_6)
/*LED狀態翻轉*/
void led_toggle()
{
hw_gpio_toggle(HW_GPIO_PORT_1, HW_GPIO_PIN_5 );
}
以上程式碼定義了按鍵按下的狀態,低電平表示按下按鍵,led_toggle函式為GPIO輸出狀態取反。
新增任務實體函式
在main.c中加入以下任務處理函式:
/簡單的按鍵處理執行緒/
void key_led_task(void *keydeal) { static unsigned char key_press_sta=0;//按鍵標誌位 for( ;; )//等同 while(1) { if(IS_KEY1_DONE()&&key_press_sta==0) { printf("IS_KEY1_DONE\r\n"); led_toggle(); key_press_sta=1;// 按下一次,標誌位置1,防止抖動和長按多次執行 } if(!IS_KEY1_DONE())//按鍵擡起則標誌位置0 key_press_sta=0; } } 這個是任務執行緒處理函式。
建立按鍵LED任務
在mian.c的system_init函式中建立按鍵LED任務,程式碼如下:
OS_TASK handle1;// 建立新的任務控制代碼
OS_TASK_CREATE(“KEY_LED_TASK”,
key_led_task,
NULL,
512,
mainPXP_REPORTER_TASK_PRIORITY,
handle1);
OS_ASSERT(handle1);
編譯、下載、執行
完成以上程式碼新增以後,編譯程式,下載執行,把按鍵的GPIO接地,LED燈的引腳就會輸出反狀態。
通過以上的簡單GPIO操作,使用者即可瞭解GPIO口的大致操作方法。
更多GPIO操作方法請查閱hw_gpio.h,瞭解具體實現方法請查閱hw_gpio.c。
Dialog技術討論,QQ群871600668