购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第四章

实例二
——通用输入输出GPIOs

4.1 GPIO概述

4.1.1 GPIO基本情况

CC3200 的通用输入输出(General-Purpose Input / Outputs, GPIOs)模块由四个独立的物理功能块端口A0、端口A1、端口A2 和端口A3 组成。

GPIO模块支持最多 32 个可编程输入输出,分别对应于 4 组且每组有 8 位的 32 个GPIO信号。GPIO模块具有如下特点:

1)多达 26 个GPIO取决于引脚复用器配置,不包括两个SWD引脚(TMS, TCK)和专用于天线开关控制的两个引脚:其中,2 线调试对应于上电检测模式;若采用 4 线JTAG模式,则数字输入输出的数目为 24。

2)用于GPIO中断的可编程控制:中断屏蔽;上升沿,下降沿,或者上升和下降沿触发中断;高电平或低电平触发中断。

4.1.2 GPIO寄存器

CC3200 嵌入式处理器中的GPIO端口基地址如表 4.1。

表 4.1 GPIO端口基地址

表 4.2 为GPIO寄存器的内存映射。寄存器偏移地址为相对于GPIO端口基地址的十六进制增量。每个GPIO端口均可以通过处理器内的高级外围总线访问(Advanced Peripheral Bus,APB)。

表 4.2 GPIO寄存器内存映射

在对GPIO寄存器编程之前,需要有效相应GPIO模块的时钟。在GPIO模块时钟有效之后,相应GPIO模块寄存器访问之前,必须有 3 个系统时钟的延迟。

数据方向寄存器GPIODIR配置GPIO为输入或输出,数据寄存器GPIODATA读取引脚输入的数据或者将数据输出至引脚。

关于GPIO寄存器详细信息,请参见CC3200 Technical Reference Manual技术参考手册 【1】

4.1.3 中断控制

每个GPIO端口的中断由 7 个寄存器控制,如表 4.2。这些寄存器选择中断源、极性和边缘属性。当一个或更多个GPIO触发中断条件时,对于整个GPIO端口而言,单个中断将输出至中断控制器。GPIOIS寄存器、GPIOIBE寄存器、GPIOIEV寄存器用于定义中断触发的类型,例如边缘或电平。GPIOIM寄存器用于有效或禁止中断。

当中断发生时,可以在两个位置查看中断信号的状态:GPIORIS寄存器和GPIOMIS寄存器。GPIOMIS寄存器仅显示被允许传递到中断控制器的中断条件。GPIORIS寄存器表明GPIO引脚符合中断的条件,但不一定已经发送至中断控制器。

对于一个GPIO电平中断,产生中断的中断信号在处理(服务)之前必须保持状态。一旦来自于中断产生逻辑的输入信号被重置,GPIORIS寄存器中相应的RIS位被清除。对于一个GPIO边缘触发中断,通过写 1 至GPIOICR寄存器的相应位,可以清除GPIORIS寄存器中的RIS位。GPIOMIS寄存器中相应位反映了RIS位的掩码值。

当编程(操作)中断控制寄存器GPIOIS、GPIOIBE或GPIOIEV时,需要先屏蔽中断(清除GPIOIM)。若果相应位被有效,往任一中断控制寄存器写数据将触发一个虚假中断。

通过APPS_GPIO_TRIG_EN寄存器,任一GPIO引脚可以配置为μDMA的外部触发源。

4.1.4 初始化和配置

GPIO端口引脚的配置流程如下:

1)通过设置GPIO0CLKEN、GPIO1CLKEN、GPIO2CLKEN、GPIO3CLKEN、GPIO4CLKEN寄存器中对应的位来有效端口的时钟。

2)通过编程GPIODIR寄存器设置GPIO端口引脚的方向。相应位写 1 表示输出,写 0 表示输入。

3)配置GPIOPADCONFIG#___寄存器的每一位,设置相应引脚为GPIO或其他外围功能。GPIODMACTL寄存器可编程某一GPIO引脚为μDMA的触发源。

4)编程GPIOIS, GPIOIBE, GPIOEV, and GPIOIM寄存器,配置类型、事件、以及每个端口的中断掩码。

关于GPIO详细编程信息,请参见CC3200 Technical Reference Manual技术参考手册 【1】

4.2 按键和LED

4.2.1 复位功能及LED显示

CC3200-LAUNCHXL开发板中按钮SW1 实现系统复位功能。CC3200-LAUNCHXL开发板复位电路如图 4.1 所示 【11】 。默认状态下,SW1 断开,信号CC_nRESET高电平,CC3200 处于正常工作状态;此时,场效应管MOSFET Q1 处于导通状态,LED灯D1 点亮。按下复位按钮SW1,电流流经R1,相对于R5 和R287,R1 阻值很低,因此R1 压降很小,信号CC_nRESET低电平,CC3200 处于复位状态;此时,场效应管MOSFET Q1 处于截止状态,LED灯D1 熄灭。

图 4.1 CC3200-LAUNCHXL开发板复位电路

4.2.2按键输入和LED显示

本示例采用中断方式实现按键的信息输入,同时控制LED的点亮和熄灭。本示例采用了CC3200-LAUNCHXL开发板中的按钮SW2 和SW3 以及LED灯D5、D6 和D7。从CC3200LAUNCHXL原理图可知,按钮SW2 和SW3 的信号分别与CC_GPIO_22 和CC_GPIO_13 连接,LED灯D5、D6 和D7 的信号分别与CC_GPIO_11、CC_GPIO_10 和CC_GPIO_09 连接。

图 4.2 按钮SW2 和SW3 以及LED灯D5、D6 和D7 电路原理图

默认或释放状态时,按钮SW2 和SW3 处于断开状态,从图 4.2 可知,此时CC_GPIO_22 和CC_GPIO_13 为低电平;当按钮SW2 和SW3 按下时,处于闭合状态,CC_GPIO_22 和CC_GPIO_13 为高电平。

经查询数据手册,可知MOSFET场效应管Q3 导通时的栅极-源极门限电压VGS为 0.5~1.5V。当CC_GPIO_11 输出低电平,电压小于VGS,场效应管Q3 处于截止状态,LED灯D5 中无电流,D5 不亮;当CC_GPIO_11 输出高电平,电压大于VGS,场效应管Q3 处于导通状态,LED灯D5点亮。通过控制CC_GPIO_11、CC_GPIO_10 和CC_GPIO_09 输出高低电平,实现LED灯D5、D6和D7 的控制。

4.3 IO程序

在系统端口配置程序中,有效通用输入输出端口GPIOA1/2 和串口UART0 的时钟;分别设置PIN_64、PIN_01 和PIN_02 为通用输出接口;分别设置PIN_55 和PIN_57 为串口UART0 的数据发送接口和数据接收接口;分别设置PIN_04 和PIN_15 为通用输入接口,并设置为上升沿触发方式。

在系统主程序或配置程序中,分别设置通用输入输出端口GPIOA1 和GPIOA2 的中断处理函数,并有效中断接口;分别配置并有效与LED灯连接的GPIO接口D7/GP9/Pin64、D6/GP10/Pin1 和D5/GP11/Pin2;循环程序中实现LED灯D7 周期为 2 秒的循环点亮和熄灭。

在通用输入输出端口GPIOA1 和GPIOA2 的中断处理函数中,程序先读取相应端口的中断状态,若该中断为指定接口的中断信息,则先清除该中断,转换相应LED灯的状态,增加计数值。中断处理函数中的终端打印信息主要用于调试或监测运行状态。程序实际应用时,中断处理函数运行优先级高且时间关键,不建议在中断处理程序中增加终端打印信息。

4.4 IO功能测试

将以上程序整合进项目工程文件,并在CC3200-LAUNCHXL目标板运行,分别操作按钮SW2和SW3,实现GPIO中断处理,超级终端中的打印信息输出如图 4.3。

图 4.3 按钮SW2 和SW3 功能测试的打印信息 ebBNen+6sJ9kfy7dgXY8ONRvwJiZVgxpTDjjYJQw3dMHe6X9I+38oA/flO8ho1Hy

点击中间区域
呼出菜单
上一章
目录
下一章
×