W600-AliOS-Things開發教程(GPIO)

如下圖,AliOS Things是一個分層+組件架構,可以較簡單的移植到各類MCU及Connectivity SoC平臺上。

block_digram

典型移植流程是這樣的

查看我們的源碼目錄可以看到目前官方已經進行了HAL層的UART、flash和網絡部分適配。我們想實現硬件的點燈就要使用GPIO

需要我們自行移植HAL部分實現。就我的實現流程進行一個記錄。

通過API文檔可以瞭解我們需要對如下函數進行適配。

實質上AliOS-Things也是使用了原廠的SDK進行修改適配

所以我們可以根據原廠的demo對GPIO部分進行了解。

driver/wm_gpio.c是w600的原廠GPIO庫,我們可以根據這個重新封裝我們AliOS-Things抽象函數

首先是hal_gpio_init,這是GPIO初始化函數,通過api參考我們可以看到SDK提供的tls_gpio_cfg和hal_gpio_init結構很相似,所以我們只需要按照接口說明進行稍加修改就可以適配(文檔接口部分寫錯了個地方,第二個OUTPUT_OPEN_DRAIN_NO_PULL 應該爲OUTPUT_OPEN_DRAIN_PULL_UP)

我們在platform\mcu\wm_w600\hal新建一個gpio.c作爲GPIO部分的一個接管。根據兩者的文檔可以得到以下代碼。

int32_t hal_gpio_init(gpio_dev_t *gpio)
{
    if (gpio->port == NULL)
    {
        return -1;
    }

    u8_t gpio_dir = 0;
    u8_t gpio_attr = 0;

    switch (gpio->config)
    {
    /* 管腳用作功能引腳,如用於pwm輸出,uart的輸入引腳 */
    case ANALOG_MODE:
        break;
        /* 中斷模式,配置爲中斷源 */
    case IRQ_MODE:
        gpio_dir = WM_GPIO_DIR_INPUT;
        gpio_attr = WM_GPIO_ATTR_FLOATING;
        break;
        /* 輸入模式,內部包含一個上拉電阻 */
    case INPUT_PULL_UP:
        gpio_dir = WM_GPIO_DIR_INPUT;
        gpio_attr = WM_GPIO_ATTR_PULLHIGH;
        break;
        /* 輸入模式,內部包含一個下拉電阻 */
    case INPUT_PULL_DOWN:
        gpio_dir = WM_GPIO_DIR_INPUT;
        gpio_attr = WM_GPIO_ATTR_PULLLOW;
        break;
        /* 輸入模式,內部爲高阻模式 */
    case INPUT_HIGH_IMPEDANCE:
        return -1; //W600沒有高阻模式
        /* 輸出模式,普通模式 */
    case OUTPUT_PUSH_PULL:
        gpio_dir = WM_GPIO_DIR_OUTPUT;
        gpio_attr = WM_GPIO_ATTR_FLOATING;
        break;
        /* 輸出模式,輸出高電平時,內部爲高阻狀態 */
    case OUTPUT_OPEN_DRAIN_PULL_UP:
        gpio_dir = WM_GPIO_DIR_OUTPUT;
        gpio_attr = WM_GPIO_ATTR_PULLLOW;
        break;
        /* 輸出模式,輸出高電平時,被內部電阻拉高 */
    case OUTPUT_OPEN_DRAIN_NO_PULL:
        gpio_dir = WM_GPIO_DIR_OUTPUT;
        gpio_attr = WM_GPIO_ATTR_PULLHIGH;
        break;
    default:
        break;
    }
    tls_gpio_cfg(gpio->port, gpio_dir, gpio_attr);
    return 0;
}

其他幾個設置輸出獲取輸入都比較簡單,就不做解釋了。針對中斷部分再進行一下說明。我們可以參考SDK中demo\wm_gpio_demo.c的方法。

tls_gpio_isr_register

tls_gpio_irq_enable配置中斷模式,AliOS-Things的中斷表和W600庫不相同,我們需要在我們的文件裏重新定向一下。

實現函數

然後把gpio.c添加到platform\mcu\wm_w600\aos.mk即可

到此GPIO相關函數就移植結束了。

後面會對這些函數使用寫教程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章