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相关函数就移植结束了。

后面会对这些函数使用写教程。

猜你喜欢

转载自blog.csdn.net/rootuseres/article/details/103610374