1. 程式人生 > >DA14683開發:GPIO

DA14683開發:GPIO

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