快速入门


3.1.1 GPIO的使用

/***************************************************************************** 
* 
* File Name : main.c
* 
* Description: main 
* 
* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd. 
* All rights reserved. 
* 
* Author : dave
* 
* Date : 2014-6-14
*****************************************************************************/ 
#include "wm_include.h"

// PA0 中断回调函数
static void demo_gpio_isr_callback(void *context)
{
    // 或者PA0中断标准位
    u16 ret = tls_get_gpio_irq_status(WM_IO_PA_00);
    if(ret)
    {
        // 清除中断标准位
        tls_clr_gpio_irq_status(WM_IO_PA_00);
        // 打印函数名称所在行及名称
        printf("--->:%d %s\r\n", __LINE__, __func__);
    }
}
        
void UserMain(void)
{

    printf("\n user task \n");
    // 配置PA0输入模式,浮空
    tls_gpio_cfg(WM_IO_PA_00, WM_GPIO_DIR_INPUT, WM_GPIO_ATTR_FLOATING);
    // 为PA0注册回调函数
    tls_gpio_isr_register(WM_IO_PA_00, demo_gpio_isr_callback, NULL);
    // PA0中断使能,上升沿触发中断
    tls_gpio_irq_enable(WM_IO_PA_00, WM_GPIO_IRQ_TRIG_RISING_EDGE);
    // 配置PB0 输出模式,默认内部上拉
    tls_gpio_cfg(WM_IO_PB_00, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);

    bool val = 0;
    while(1)
    {
        // 读取PA0电平状态
        val = tls_gpio_read(WM_IO_PA_00);
        // 将读取到的电平状态写到PB0
        tls_gpio_write(WM_IO_PB_00, val);
        // 延时 1 ticks
        tls_os_time_delay(1);
    }

#if DEMO_CONSOLE
    CreateDemoTask();
#endif
//用户自己的task
}

使用某个io时首先需要设置tls_gpio_cfg(gpio_pin, WM_GPIO_DIR_INPUT, WM_GPIO_ATTR_FLOATING);,第一个参数是管脚号,第二个是作为输入或输出方式,第三个是io的属性

页面列表

ITEM_HTML