ESP8266 RTOS 筆記(二)-GPIO(2)_OUTPUT設定與介紹

    此章節為記錄 esp8266的gpio output部分

從關方手冊可以看到幾個有關GPIO的registers:

  • Output enable register: GPIO_ENABLE_W1TS
  • Output disable register: GPIO_ENABLE_W1TC
  • Output low level register GPIO_OUT_W1TC  
  • Output high level register GPIO_OUT_W1TS 

每個REGISTER皆為16個bits,bit[15:0]


1.GPIO_ENABLE_W1TS:
相對應的bit設為1,此IO的output將至能
例如:
  欲將gpio4設為output,則此register設為0x10
  欲將gpio5設為output,則此register設為0x20
  若希望gpio4與gpio5皆設為output,則此register設為0x30


2.GPIO_ENABLE_W1TC:
關閉output功能,
相對應的bit設為1,此IO的output將被關閉
例如:
  欲將gpio4的output失能,則此register設為0x10
  欲將gpio5的output失能,則此register設為0x20

  gpio4與gpio5的output皆失能,則此register設為0x30

3.GPIO_OUT_W1TC  
bit[15:0] output low level bit
設為1則腳位為為High level
例如:

gpio4要設為low,則此register設為0x10

4.GPIO_OUT_W1TS 
bit[15:0] output high level bit
設為1則腳位為為High level
例如:
gpio4要設為high,則此register設為0x10



看完register後再來看一下gpio.h中的一些定義:
void gpio_output_conf(uint32 set_mask, uint32 clear_mask, uint32 enable_mask, uint32 disable_mask)
{
    GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, set_mask);
    GPIO_REG_WRITE(GPIO_OUT_W1TC_ADDRESS, clear_mask);
    GPIO_REG_WRITE(GPIO_ENABLE_W1TS_ADDRESS, enable_mask);
    GPIO_REG_WRITE(GPIO_ENABLE_W1TC_ADDRESS, disable_mask);
}

仔細看gpio.h,有許多output或input的定義都是透過gpio_output_conf(...)來進行設定
比如說:

#define GPIO_OUTPUT(gpio_bits, bit_value) \
    if(bit_value) gpio_output_conf(gpio_bits, 0, gpio_bits, 0);\
    else gpio_output_conf(0, gpio_bits, gpio_bits, 0)



實例:
使用前先進行init:
void init_output(void)
{
 GPIO_ConfigTypeDef gpio_in_cfg;    //Define GPIO Init Structure
 gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_DISABLE;
 gpio_in_cfg.GPIO_Mode = GPIO_Mode_Output;
 gpio_in_cfg.GPIO_Pullup = GPIO_PullUp_DIS;
 gpio_in_cfg.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;    // Enable GPIO
 gpio_config(&gpio_in_cfg);    //Initialization function
}

gpio_config(),這支韓是點進去看,會發現其實也就是用gpio_output_conf(...)來設定而已。


gpio5希望是 high,有幾種方法可以使用

GPIO_OUTPUT_SET(GPIO_ID_PIN(5),1);
gpio_output_conf(GPIO_Pin_5,0,0,0);
在使用上非常簡單,原廠已經將煩人的暫存器封裝成函式了,節省大家的開發時間









留言

這個網誌中的熱門文章

FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete)

FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil()

C語言筆記-文本處理(1) 善用 asprintf取代sprintf