TI-RTOS学习笔记(四)—— GPIO驱动

前言:因为在网上没有找到TI-RTOS的学习视频,虽然很多地方与free-RTOS相通,但是本人仍不想为了学习TI-RTOS先去学习freeRTOS,所幸关于TI-RTOS,ti公司给了许多相关的文档资料,虽然本人英文不太好,但没有办法,只能抱着试一试的心态,努力啃一啃,故在此做学习笔记。


GPIO是我们日常使用最频繁的驱动了,因此TI为了简化GPIO的编程开发,GPIO的驱动相对于其余外设的驱动更为简单

所有应用程序中使用到的GPIO引脚都包含在GPIO_PinConfig这个数组中,当我们调用了GPIO_init()函数后,这个数组中存储的引脚便都可以正常使用了。但是通过上一节我们知道,TI所有外设驱动的实现都是通过一个xxConfig结构体实现的,GPIO也不例外。

GPIO_Config Structure

虽然GPIO也有配置结构体,但是为了使GPIO的应用更为简单,GPIO的驱动实现采用了与其余驱动格式不同的配置结构体。

其结构如下:

typedef struct GPIOxxx_Config {
 /*! Pointer to the board's GPIO_PinConfig array */
 GPIO_PinConfig *pinConfigs;
 /*! Pointer to the board's GPIO_CallbackFxn array */
 GPIO_CallbackFxn *callbacks;
 /*! number of GPIO_PinConfigs defined */
 uint32_t numberOfPinConfigs;
 /*! number of GPIO_Callbacks defined */
 uint32_t numberOfCallbacks;
 /*! GPIO interrupt priority. Setting (~0) configures lowest priority */
 uint32_t intPriority;
} GPIOxxx_Config;

该结构体主要储存了两个数组(GPIO_PinConfig 数组和GPIO_Callback 数组)的地址和元素数目,以及输入引脚的中断优先级变量。

GPIO_PinConfig 数组

在这个数组中元素对应着应用程序中用到的所有引脚对与物理地址的定义名称配置属性

并且这些定义名称配置属性均在GPIO.hGPIOxx.h中进行了预定义,直接指向对应的物理地址

GPIO_PinConfig gpioPinConfigs[] = {
 /* Input pins */
 /* EK_TM4C1294XL_USR_SW1 */
 GPIOTiva_PJ_0 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_RISING,
   【定义名称】 |      【配置属性】    ,
 /* Output pins */
 /* EK_TM4C1294XL_USR_D1 */
 GPIOTiva_PN_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
   【定义名称】 |      【配置属性】    ,
};

但是在应用程序中,若要引用某一引脚并非使用该定义名称,而是用其在此数组中的对应索引引用即配置结构体中的numberOfPinConfigs指向的GPIOName共用体中的元素,GPIOName共用体中的元素序号与GPIO_PinConfig数组中的元素一一对应,被定义在LAUNCHPAD.h文件中,而GPIO_PinConfig数组被定义在LAUNCHPAD.c文件中。

可见,LAUNCHPAD.h文件主要是为各种驱动的实例提供索引名称的

GPIO_callbackFxn Array

这个数组中的每个元素都是一个回调函数指针,指向被配置为中断设备的每个GPIO引脚

GPIO_CallbackFxn gpioCallbackFunctions[] = {
 NULL, 
 NULL 
/*留了两个元素位置,说明有两个输入引脚可以配置为中断模式*/
};

若要调用这些回调函数指针,同样也是调用GPIOName中的序号,这些函数指针可以通过在数组元素中引用回调函数名来静态定义,也可以通过将数组元素设置为NULL并在运行时使用GPIO _setCallback()函数插入回调条目来动态定义。

注意:一般只有输入引脚才触发中断,因此若要使用GPIOName共用体中的序号来索引对应引脚产生中断,必须在GPIO_PinConfig 数组中将输入引脚放在数组前列,就如上面数组定义所示

intPriority

在使用引脚中断优先级配置成员时,应该先了解设备的中断控制器的运作原理

该成员一般幅值为~(0),代表引脚中断应该使用可用的最低优先级

提示:GPIO驱动程序使用SYS/BIOS提供的Log_print() api记录以下GPIO具体引脚的电平状态和中断状态

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值