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

3.1 GPIO接口应用

CC3200的所有数字引脚和部分模拟引脚可作为通用输入/输出(GPIO)使用,GPIO分为4组(GPIOA0~3),每组8个(具体引脚分配参见表D.1)。

● GPIOA0:GPIO_00~GPIO_07,对应GPIOA0.0~GPIOA0.7。

● GPIOA1:GPIO_08~GPIO_15,对应GPIOA1.0~GPIOA1.7。

● GPIOA2:GPIO_16~GPIO_23,对应GPIOA2.0~GPIOA2.7。

● GPIOA3:GPIO_24~GPIO_31,对应GPIOA3.0~GPIOA3.7。

CC3200 GPIO具有下列特性。

● 根据功能引脚的配置不同,GPIO的数量多达27个。

● 所有GPIO引脚具有中断能力。

✧ 电平有效或边沿有效。

✧ 上升沿或下降沿。

✧ 可选择中断屏蔽。

● 可以用于触发DMA操作。

● 可选择作为唤醒源。

● 可编程引脚配置。

✧ 内部10μA上拉或下拉。

✧ 2 mA、4 mA、6 mA、8 mA、10 mA、12 mA、14 mA可配置驱动能力。

✧ 开漏模式。

● 可通过高速内部总线矩阵进行GPIO寄存器读操作。

3.1.1 GPIO示例程序分析

GPIO示例程序在“example\blinky”目录中,Blinky项目CC3200 LaunchPad电路如图3.1所示。

图3.1 Blinky项目CC3200 LaunchPad电路图

两个用户按键SW2和SW3分别通过GPIO_22(PIN_15)和GPIO_13(PIN_04)与CC3200相连,按键未按下时GPIO为低电平,按键按下时GPIO为高电平。

3个用户LED D5~D7分别通过驱动电路和GPIO_11(PIN_02)、GPIO_10(PIN_01)和GPIO_09(PIN_64)与CC3200相连,GPIO输出低电平时LED熄灭,GPIO输出高电平时LED点亮。

(1)将CC3200 LaunchPad通过USB线与PC连接。

(2)参考2.1.2节中的“CCS使用”,将Blinky项目导入CCS,在“Project Explorer”(项目浏览器)视图中可以看出,Blinky项目包含下列4个程序文件。

● main.c:主程序文件。

● pinmux.c:PinMux应用程序生成的GPIO引脚配置程序文件。

● gpio_if.c:GPIO接口驱动程序文件。

● startup_ccs.c:CCS启动程序文件。

Blinky项目程序流程图如图3.2所示。

图3.2 Blinky项目程序流程图

(3)在CCS中单击“Project”(项目)→“Properties”(属性)或右击“Project Explorer”(项目浏览器)中的Blinky项目,在弹出菜单中单击“Properties”(属性),打开“属性”对话框,确认“Device”(器件)选择CC3200,选择“Compiler version”(编译器版本)为TI v5.2.2,参见图2.17。

(4)单击“View”(视图)→“Target Configuration”(目标配置),打开“目标配置”视图,确认默认的目标配置为CC3200.ccxml,如图3.3所示。

图3.3 Blinky项目“目标配置”视图

(5)在 CCS 中单击“Run”(运行)→“Debug”(调试)或按“F11”键,CCS首先编译生成目标文件blinky.out,然后将目标文件blinky.out下载到CC3200并进入调试界面。

(6)单击“Run”(运行)→“Resume”(运行)或单击调试工具栏中的“Resume”(运行)按钮 或按“F8”键,运行程序,开发板上的3个用户LED首先全部熄灭,然后红LED、黄LED和绿LED依次循环闪烁。

(7)单击调试工具栏中的“Suspend”(暂停)按钮 暂停程序的运行。

(8)单击调试工具栏中的“Restart”(重新开始)按钮 ,程序停在main()函数的开始处,如图3.4所示。

图3.4 Blinky项目main()函数

注意:在程序的分析过程中,可随时单击“Restart”(重新开始)按钮 复位程序。下面详细介绍程序的分析步骤,主要包括下列内容。

● 初始化开发板:BoardInit()。

● 引脚复用配置:PinMuxConfig()。

● LED操作。

1.初始化开发板BoardInit()

单击调试工具栏中的“Step Into”(单步进入)按钮 两次,进入BoardInit()函数,如图3.5所示。

图3.5 Blinky项目BoardInit()函数

从图3.5中可以看出,初始化开发板BoardInit()包括下列内容。

● 设置中断向量表:IntVTableBaseSet()。

● 允许处理器中断:IntMasterEnable()。

● 允许中断:IntEnable()。

● 初始化MCU:PRCMCC3200MCUInit()。

(1)设置中断向量表IntVTableBaseSet()。

功能:设置中断向量表基地址。

参数说明:ulVtableBase,中断向量表基地址,中断向量表在startup_ccs.c中定义。

IntVTableBaseSet()的声明在interrupt.h中,代码在interrupt.c中。

(2)允许处理器中断IntMasterEnable()。

功能:允许处理器中断。

IntMasterEnable()调用CPUcpsie()实现允许处理器中断操作,其声明在interrupt.h中,代码在interrupt.c中。

功能:允许CPU中断。

CPUcpsie()调用汇编语言程序段实现允许CPU中断操作,其声明在cpu.h中,代码在cpu.c中。

(3)允许中断IntEnable()。

功能:允许中断。

参数说明:ulInterrupt,中断号,FAULT_SYSTICK是SysTick的中断号常量,中断号是15,在hw_ints.h中定义。

IntEnable()的声明在interrupt.h中,代码在interrupt.c中。

(4)初始化MCU PRCMCC3200MCUInit()。

功能:初始化MCU。

加电启动或从低功耗休眠模式退出时,应用程序应该通过调用PRCMCC3200MCUInit()配置MCU参数。PRCMCC3200MCUInit()的声明在prcm.h中,代码在prcm.c中。

单击调试工具栏中的“Step Return”(单步返回)按钮 ,运行上述函数,然后退出BoardInit()函数,回到main()函数的PinMuxConfig()语句。

2.引脚复用配置PinMuxConfig()

引脚复用配置程序由PinMux应用程序根据设计须自动生成,程序代码在pinmux.c或rom_pin_mux_config.c中,其中调用了相应的PRCM、PIN和GPIO API函数。

单击调试工具栏中的“Step Into”(单步进入)按钮 ,进入 PinMuxConfig()函数,如图3.6所示。

图3.6 Blinky项目PinMuxConfig()函数

从图中可以看出:GPIO引脚复用配置包括下列内容。

● 允许GPIO时钟:PRCMPeripheralClkEnable()。

● 配置GPIO引脚:PinTypeGPIO()。

● 配置GPIO方向:GPIODirModeSet()。

(1)允许GPIO时钟PRCMPeripheralClkEnable()。

① 单击调试工具栏中的“Step Into”(单步进入)按钮 两次,进入PRCMPeripheralClk Enable()函数,如图3.7所示。

图3.7 Blinky项目PRCMPeripheralClkEnable()函数

从图3.7中可以看出,PRCMPeripheralClkEnable()等API函数通过硬件寄存器操作HWREG()实现相应的功能。

功能:允许外设时钟。

参数说明:

● ulPeripheral:外设号,GPIOA0~3的外设号是6~9,在prcm.h中定义。

● ulClkFlags:时钟标志,设置值是PRCM_RUN_MODE_CLK(运行模式时钟)。ulClkFlags包括下列值。

✧ PRCM_RUN_MODE_CLK:运行模式时钟,0x0000 0001。

✧ PRCM_SLP_MODE_CLK:睡眠模式时钟,0x0000 0100。

✧ PRCM_DSLP_MODE_CLK:深睡眠模式时钟,0x0001 0000。

PRCMPeripheralClkEnable()的声明在prcm.h中,代码在prcm.c中。

② 单击调试工具栏中的“Step Return”(单步返回)按钮 ,运行上述函数,然后退出函数,返回到PinMuxConfig()函数的MAP_PinTypeGPIO()语句。

(2)配置GPIO引脚PinTypeGPIO()。

① 单击调试工具栏中的“Step Into”(单步进入)按钮 ,进入PinTypeGPIO()函数,如图3.8所示。

图3.8 Blinky项目PinTypeGPIO()函数

功能:配置GPIO引脚。

参数说明:

● ulPin:引脚号,PIN_01~64,在pin.h中定义。

● ulPinMode:引脚模式,PIN_MODE_0为GPIO模式。

● bOpenDrain:开漏输出,true表示是,false表示否。

PinTypeGPIO()的声明在pin.h中,代码在pin.c中。PinTypeGPIO()通过调用PinConfigSet()和PinModeSet()实现引脚类型的配置。

功能:设置引脚类型。

参数说明:

● ulPin:引脚号,PIN_01~64,在pin.h中定义。

● ulPinStrength:引脚强度,引脚的输出驱动电流(2 mA、4 mA或6 mA等)。

● ulPinType:引脚类型,设置值是 PIN_TYPE_STD(标准输入输出)。ulPinType 主要包括下列值。

✧ PIN_TYPE_STD:标准输入输出,0x0000 0000。

✧ PIN_TYPE_OD:开漏输出,0x0000 0010。

✧ PIN_TYPE_ANALOG:模拟引脚,0x1000 0000。

PinConfigSet()的声明在pin.h中,代码在pin.c中。

功能:设置引脚模式。

参数说明:

● ulPin:引脚号,PIN_01~64,在pin.h中定义。

● ulPinMode:引脚模式,PIN_MODE_0为GPIO模式。

PinModeSet()的声明在pin.h中,代码在pin.c中。

② 单击调试工具栏中的“Step Return”(单步返回)按钮 ,运行上述函数,然后退出函数,返回到PinMuxConfig()函数的MAP_GPIODirModeSet()语句。

(3)配置GPIO方向GPIODirModeSet()。

① 单击调试工具栏中的“Step Into”(单步进入)按钮 ,进入GPIODirModeSet()函数,如图3.9所示。

功能:配置GPIO方向。

图3.9 Blinky项目GPIODirModeSet()函数

参数说明:

● ulPort:GPIO端口基地址,在hw_memmap.h中定义。

● ucPins:引脚位权,4个GPIO组(GPIOA0~3)中8个GPIO的引脚位权从低到高依次为0x01、0x02、0x04、0x08、0x10、0x20、0x40和0x80。

● ulPinIO:GPIO引脚方向,包括下列值。

✧ GPIO_DIR_MODE_IN:输入,0x0000 0000。

✧ GPIO_DIR_MODE_OUT:输出,0x0000 0001。

GPIODirModeSet()的声明在gpio.h中,代码在gpio.c中。

② 单击调试工具栏中的“Step Return”(单步返回)按钮 ,运行上述函数,然后退出函数,返回到PinMuxConfig()函数的MAP_PinTypeGPIO()语句。

③ 单击调试工具栏中的“Step Return”(单步返回)按钮 ,对其他引脚进行配置,然后退出函数,返回main()函数的GPIO_IF_LedConfigure()语句。

3.LED操作

LED操作主要包括下列内容。

● 配置LED:GPIO_IF_LedConfigure()。

● 熄灭LED:GPIO_IF_LedOff()(GPIOPinWrite())。

● 点亮LED:GPIO_IF_LedOn()(GPIOPinWrite())。

程序代码在gpio_if.c中,其中调用了相应的GPIO API函数,主要是GPIOPinWrite(),和GPIOPinWrite()对应的是GPIOPinRead()。

(1)配置LED函数GPIO_IF_LedConfigure()。

① 单击调试工具栏中的“Step Into”(单步进入)按钮 ,进入GPIO_IF_LedConfigure()。

功能:配置LED。

参数说明:ucPins表示引脚定义。

GPIO_IF_LedConfigure()通过调用GPIO_IF_GetPortNPin()获得LED使用GPIO的端口基地址和引脚位权,用于后续的LED操作。

② 单击调试工具栏中的“Step Into”(单步进入)按钮 三次,进入GPIO_IF_GetPortN Pin(),如图3.10所示。

图3.10 Blinky项目GPIO_IF_GetPortNPin()函数

功能:根据引脚名称号获取端口基地址和引脚位权。

参数说明:

● ucPin:引脚名称号,GPIO0~39。

●*puiGPIOPort:GPIO端口基地址指针,端口基地址通过数组ulReg[]获得,数组下标是引脚名称号ucPin整除8,取值为0~4,对应GPIOA0~4。

●*pucGPIOPin:GPIO引脚位权指针,引脚位权是1左移0~7位,左移位数是引脚名称号ucPin余除8,取值为0~7,对应GPIOAx.0~7。

③ 单击调试工具栏中的“Step Return”(单步返回)按钮 两次,获取端口基地址和对应的引脚位权,然后退出函数,返回main()函数的GPIO_IF_LedOff()语句。

(2)熄灭LED函数GPIO_IF_LedOff()。

① 单击调试工具栏中的“Step Into”(单步进入)按钮 ,进入GPIO_IF_LedOff()。

功能:熄灭LED。

参数说明:ledNum,LED标识,MCU_ALL_LED_IND表示红黄绿3个LED。

GPIO_IF_LedOff()通过调用GPIO_IF_Set()熄灭LED。

② 单击调试工具栏中的“Step Into”(单步进入)按钮 三次,进入GPIO_IF_Set()。

功能:根据引脚名称号、端口基地址和引脚位权设置GPIO引脚的值。

参数说明:

● ucPin:引脚名称号,GPIO0~31。

● uiGPIOPort:GPIO端口基地址。

● ucGPIOPin:GPIO引脚位权。

● ucGPIOValue:GPIO引脚值,0或1对于CC3200 LaunchPad,0表示LED熄灭,1表示LED点亮。

GPIO_IF_Set()通过调用GPIO API函数GPIOPinWrite()对GPIO引脚进行写操作。

(3)写GPIO引脚GPIOPinWrite()。

① 单击调试工具栏中的“Step Into”(单步进入)按钮 三次,进入 GPIOPinWrite(),如图3.11所示。

图3.11 Blinky项目GPIOPinWrite()函数

功能:根据端口基地址和引脚位权写GPIO引脚。

参数说明:

● ulPort:GPIO端口基地址。

● ucPins:GPIO引脚位权,4个GPIO组(GPIOA0~3)中8个GPIO的引脚位权从低到高依次为0x01、0x02、0x04、0x08、0x10、0x20、0x40和0x80。

● ucVal:GPIO引脚值。

GPIOPinWrite()的声明在gpio.h中,代码在gpio.c中。

和写GPIO引脚GPIOPinWrite()对应的读GPIO引脚GPIOPinRead()的函数格式为

功能:根据端口基地址和引脚位权读GPIO引脚。

参数说明:

● ulPort:GPIO端口基地址。

● ucPins:GPIO引脚位权。

返回值:GPIO引脚值。

GPIOPinRead()的声明在gpio.h中,代码在gpio.c中。

② 单击调试工具栏中的“Step Return”(单步返回)按钮 ,运行写GPIO引脚,开发板上的绿LED熄灭,然后退出GPIOPin Write()函数,返回GPIO_IF_Set()函数。

③ 再单击调试工具栏中的“Step Return”(单步返回)按钮 ,退出GPIO_IF_Set()函数,返回GPIO_IF_LedOff()函数的第二条GPIO_IF_Set()语句。

④ 单击调试工具栏中的“Step Over”(单步跨越)按钮 ,运行第二条 GPIO_IF_Set()语句,开发板上的黄LED熄灭。

⑤ 再单击调试工具栏中的“Step Over”(单步跨越)按钮 ,运行第三条GPIO_IF_Set()语句,开发板上的红LED熄灭(默认已熄灭)。

⑥ 单击调试工具栏中的“Step Return”(单步返回)按钮 ,退出GPIO_IF_LedOff()函数,返回main()函数的LEDBlinkyRoutine()语句。

(4)LED闪烁LEDBlinkyRoutine()。LED闪烁通过延时熄灭LED和延时点亮LED实现。

① 单击调试工具栏中的“Step Into”(单步进入)按钮 ,进入 LEDBlinkyRoutine()函数,如图3.12所示。

图3.12 Blinky项目LEDBlinkyRoutine()函数

② 单击调试工具栏中的“Step Over”(单步跨越)按钮 ,运行 GPIO_IF_LedOff()和UtilsDelay()。

③ 单击调试工具栏中的“Step Into”(单步进入)按钮 ,进入GPIO_IF_LedOn()。

功能:点亮LED。

参数说明:ledNum,LED标识,包括下列值。

● MCU_RED_LED_GPIO:红LED。

● MCU_ORANGE_LED_GPIO:黄(橙)LED。

● MCU_GREEN_LED_GPIO:绿LED。

GPIO_IF_LedOn()也通过调用GPIO_IF_Set()和GPIO API GPIOPinWrite()点亮LED。

注意:GPIO_IF_LedOn()和GPIO_IF_LedOff()都通过调用GPIO_IF_Set()设置LED,但调用GPIO_IF_Set()的第4个参数ucGPIOValue的值不同。

④ 单击调试工具栏中的“Step Return”(单步返回)按钮 ,运行GPIO_IF_LedOn()语句,开发板上的红LED点亮。

⑤ 单击调试工具栏中的“Step Over”(单步跨越)按钮 两次,运行 UtilsDelay()和GPIO_IF_LedOff()语句,开发板上的红LED熄灭。

⑥ 单击调试工具栏中的“Step Over”(单步跨越)按钮 两次,运行 UtilsDelay()和GPIO_IF_LedOn()语句,开发板上的黄LED点亮。

⑦ 单击调试工具栏中的“Step Over”(单步跨越)按钮 两次,运行 UtilsDelay()和GPIO_IF_LedOff()语句,开发板上的黄LED熄灭。

⑧ 单击调试工具栏中的“Resume”(运行)按钮 运行程序,开发板上的3个LED循环闪烁。

⑨ 单击调试工具栏中的“Terminate”(结束)按钮 ,结束调试返回编辑界面。

综上所述,Blinky项目使用的API函数如表3.1所示。

表3.1 Blinky项目使用的API函数

3.1.2 GPIO使用简介

GPIO的使用主要包括引脚复用配置和GPIO读写操作等。

1.引脚复用配置

引脚复用配置包括允许GPIO时钟PRCMPeripheralClkEnable()、配置GPIO引脚类型PinTypeGPIO()和配置GPIO引脚方向GPIODirModeSet(),API声明如下。

PinTypeGPIO()的ulPin参数与GPIODirModeSet()的ulPort和ucPins参数的关系为:首先根据ulPin(引脚号)从附录C中找到对应的引脚名称号,然后根据引脚名称号确定ulPort(端口基地址)和ucPins(引脚位权),参见GPIO_IF_GetPortNPin()内容。

例如,PIN_01对应的引脚名称是GPIO10,GPIO10是第2组的第3个引脚,所以引脚的端口基地址是GPIOA1_BASE,引脚位权是2 3-1 =4,参见PinMuxConfig()内容。

GPIODirModeSet()的ulPinIO参数包括下列值。

● GPIO_DIR_MODE_IN:输入,0x0000 0000。

● GPIO_DIR_MODE_OUT:输出,0x0000 0001。

2.GPIO读写操作

GPIO读写操作分别使用读GPIO引脚GPIOPinRead()和写GPIO引脚GPIOPinWrite()实现,API声明如下。

3.1.3 按键控制LED闪烁时间程序设计

在GPIO示例程序的基础上稍加修改,可以用按键控制LED的闪烁时间,同时直接使用GPIO API对GPIO进行操作,具体步骤如下。

1.修改PinMuxConfig()函数

在pinmux.c文件的PinMuxConfig()函数中添加下列语句,实现按键接口的配置。

2.修改main()函数

修改main()函数的内容如下。

运行程序,3个LED延时闪烁。按下SW3,3个LED闪烁延时时间逐遍缩短,闪烁8次后,延时时间最短。按下SW2,3个LED闪烁延时时间逐遍加长,闪烁8次后,延时时间恢复到最长。因为主程序采用查询方式检测按键,3个LED闪烁一遍后按键才能再起作用,所以按键反应比较迟钝。为了及时响应按键操作,可以采用中断方式检测按键。

3.1.4 PinMux使用介绍

如果开发板上的用户按键和用户LED使用的GPIO引脚与CC3200 LaunchPad不同,例如,两个用户按键使用GPIO7和GPIO8,3个用户LED分别使用GPIO22、GPIO28和GPIO30,可以像3.1.3节中”修改PinMuxConfig()函数”一样直接修改PinMuxConfig()函数的内容,但TI强烈建议使用CC3200引脚复用实用工具PinMux获得需要的引脚配置。

1.用PinMux生成引脚复用配置文件

(1)打开TI Pin Mux Tool,选择CC3200器件,单击“Start”按钮,如图3.13所示。

图3.13 Pin Mux选择器件

(2)单击“Available Peripherals”(可用外设)下“GPIO”右边的加号“+”添加“My GPIO 1”,单击“My GPIOs”下的“GPIO Signals”(GPIO信号),消除所有信号引脚前的对号(不选择所有信号),如图3.14所示。

图3.14 Pin Mux可用外设

(3)单击“GPIO07”和“GPIO08”,选择这两个输入引脚;单击“GPIO22”、“GPIO28”和“GPIO30”,选择这三个输出引脚,并单击信号右边的“Output”(输出)项,如图3.15所示。

图3.15 Pin Mux输入引脚和输出引脚

(4)单击“Generate”(生成)按钮,打开“浏览文件夹”对话框,浏览到“D:\TI\CC3200 SDK_1.1.0\example\blinky”文件夹,如图3.16所示。

(5)单击“确定”按钮,在“blinky”文件夹生成下列4个文件。

● pin_mux_config.c:引脚复用配置源文件。

● pin_mux_config.h:引脚复用配置头文件。

● rom_pin_mux_config.c:ROM引脚复用配置源文件。

● summary.csv:引脚复用配置表。

(6)关闭Pin Mux,单击“Yes”(是)。

2.替换引脚复用配置文件

(1)在CCS的“Project Explorer”视图中右击blinky项目下的“pinmux.c”,在弹出菜单中单击“Delete”(删除)将pinmux.c从项目中删除,在弹出对话框中单击“OK”按钮确认删除。

(2)在CCS的“Project Explorer”视图中右击“blinky [Active-Release]”,在弹出菜单中单击“Add Files…”(添加文件),选择rom_pin_mux_config.c,在弹出对话框“File Operation”(文件操作)中选择“Copy files”(复制文件),单击“OK”按钮,将rom_pin_mux_config.c添加到项目中,如图3.17所示。

图3.16 Pin Mux“浏览文件夹”对话框

图3.17 Blinky项目替换引脚复用配置文件

(3)重复步骤(1)和步骤(2),将pinmux.h替换为pin_mux_config.h。

(4)将main.c中包含的头文件名pinmux.h修改为pin_mux_config.h。 TDtobOGptZnDj36SAlrinaBPy9DDKfirTw3v3L3oCZFB8kIcbZyWV38yLB8C0hls

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