学习笔记Word格式文档下载.docx
- 文档编号:22413658
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:36.52KB
学习笔记Word格式文档下载.docx
《学习笔记Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学习笔记Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
位地址,取值范围是0~7
GPIO学习
在Stellaris系列ARM里,GPIO管脚可以被配置为多种工作模式,其中有3种比较常用:
高阻输入、推挽输出、开漏输出。
每个GPIO端口包含8个管脚,如PA端口是PA0~PA7
开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用4.7~10kΩ)开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换。
GPIO内部具有钳位保护二极管。
其作用是防止从外部管脚Pin输入的电压过高或者过低
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//使能GPIOB模块
几个函数用来设置GPIO管脚的方向和模式、电流驱动强度和类型。
但是在我们的实际编程当中它们并不常用,而是采用更加方便的GPIOPinType系列函数来代替。
设置所选GPIO端口指定管脚的方向和模式
1)voidGPIODirModeSet(unsignedlongulPort,unsignedcharucPins,unsignedlongulPinIO)
ulPort:
所选GPIO端口的基址,应当取下列值之一:
GPIO_PORTA_BASE//GPIOA的基址(0x40004000)
GPIO_PORTB_BASE//GPIOB的基址(0x40005000)
GPIO_PORTC_BASE//GPIOC的基址(0x40006000)
GPIO_PORTD_BASE//GPIOD的基址(0x40007000)
GPIO_PORTE_BASE//GPIOE的基址(0x40024000)
GPIO_PORTF_BASE//GPIOF的基址(0x40025000)
GPIO_PORTG_BASE//GPIOG的基址(0x40026000)
GPIO_PORTH_BASE//GPIOH的基址(0x40027000)
AHB功能(GPIO高速总线访问)。
如果已经用函数SysCtlGPIOAHBEnable()使能了AHB功能,则ulPort应当取下列值之一:
GPIO_PORTA_AHB_BASE//GPIOA的AHB基址
GPIO_PORTB_AHB_BASE//GPIOB的AHB基址
GPIO_PORTC_AHB_BASE//GPIOC的AHB基址
GPIO_PORTD_AHB_BASE//GPIOD的AHB基址
GPIO_PORTE_AHB_BASE//GPIOE的AHB基址
GPIO_PORTF_AHB_BASE//GPIOF的AHB基址
GPIO_PORTG_AHB_BASE//GPIOG的AHB基址
GPIO_PORTH_AHB_BASE//GPIOH的AHB基址
ucPins:
指定管脚的位组合表示,应当取下列值之一或者它们之间的任意“或运算”组合形式:
GPIO_PIN_0//GPIO管脚0的位表示(0x01)
GPIO_PIN_1//GPIO管脚1的位表示(0x02)
GPIO_PIN_2//GPIO管脚2的位表示(0x04)
GPIO_PIN_3//GPIO管脚3的位表示(0x08)
GPIO_PIN_4//GPIO管脚4的位表示(0x10)
ulPinIO:
管脚的方向或模式,应当取下列值之一:
GPIO_DIR_MODE_IN//输入方向
GPIO_DIR_MODE_OUT//输出方向
GPIO_DIR_MODE_HW//硬件控制
2)GPIODirModeGet()获取所选GPIO端口指定管脚的方向和模式
unsignedlongGPIODirModeGet(unsignedlongulPort,unsignedcharucPin)
所选GPIO端口的基址ucPins:
指定管脚的位组合表示
函数GPIOPadConfigSet()
设置所选GPIO端口指定管脚的驱动强度和类型
3)voidGPIOPadConfigSet(unsignedlongulPort,unsignedcharucPins,
unsignedlongulStrength,unsignedlongulPadType)
所选GPIO端口的基址
指定管脚的位组合表示
ulStrength:
指定输出驱动强度,应当取下列值之一:
GPIO_STRENGTH_2MA//2mA驱动强度
GPIO_STRENGTH_4MA//4mA驱动强度
GPIO_STRENGTH_8MA//8mA驱动强度
GPIO_STRENGTH_8MA_SC//带转换速率(SlewRate)控制的8mA驱动
ulPadType:
指定管脚类型。
应当取下列值之一:
GPIO_PIN_TYPE_STD//推挽
GPIO_PIN_TYPE_STD_WPU//带弱上拉的推挽
GPIO_PIN_TYPE_STD_WPD//带弱下拉的推挽
GPIO_PIN_TYPE_OD//开漏
GPIO_PIN_TYPE_OD_WPU//带弱上拉的开漏
GPIO_PIN_TYPE_OD_WPD//带弱下拉的开漏
GPIO_PIN_TYPE_ANALOG//模拟比较器
4)函数GPIOPadConfigGet()获取所选GPIO端口指定管脚的配置信息
voidGPIOPadConfigGet(unsignedlongulPort,unsignedcharucPin,
unsignedlong*pulStrength,unsignedlong*pulPadType)
pulStrength:
指针,指向保存输出驱动强度信息的存储单元
pulPadType:
指针,指向保存输出驱动类型信息的存储单元
以GPIOPinType开头的函数。
其中前3个函数用来配置GPIO管脚的类型,很常用,其它函数用于将GPIO管脚配置为其它外设模块的硬件功能。
实际编程当中常常采用简短的定义:
#defineGPIOPinTypeInGPIOPinTypeGPIOInput
#defineGPIOPinTypeOutGPIOPinTypeGPIOOutput
#defineGPIOPinTypeODGPIOPinTypeGPIOOutputOD
1)GPIOPinTypeGPIOInput()设置所选GPIO端口指定的管脚高阻输入模式
voidGPIOPinTypeGPIOInput(unsignedlongulPort,unsignedcharucPins)
2)GPIOPinTypeGPIOOutput()设置所选GPIO端口指定的管脚为推挽输出模式
GPIOPinTypeGPIOOutput(unsignedlongulPort,unsignedcharucPins)
3)函数GPIOPinTypeGPIOOutputOD()设置所选GPIO端口指定的管脚为开漏输出模式
GPIOPinTypeGPIOOutputOD(unsignedlongulPort,unsignedcharucPins)
4)函数GPIOPinTypeADC()
设置所选GPIO端口指定的管脚为ADC功能
voidGPIOPinTypeADC(unsignedlongulPort,unsignedcharucPins)
5)函数GPIOPinTypeCAN()
设置所选GPIO端口指定的管脚为CAN功能
voidGPIOPinTypeCAN(unsignedlongulPort,unsignedcharucPins)
6)函数GPIOPinTypeComparator()
设置所选GPIO端口指定的管脚为模拟比较器功能
voidGPIOPinTypeComparator(unsignedlongulPort,unsignedcharucPins)
7)函数GPIOPinTypeI2C()
设置所选GPIO端口指定的管脚为I2C功能
voidGPIOPinTypeI2C(unsignedlongulPort,unsignedcharucPins)
8)函数GPIOPinTypePWM()
设置所选GPIO端口指定的管脚为PWM功能
voidGPIOPinTypePWM(unsignedlongulPort,unsignedcharucPins)
9)函数GPIOPinTypeQEI()
设置所选GPIO端口指定的管脚为QEI功能
voidGPIOPinTypeQEI(unsignedlongulPort,unsignedcharucPins)
10)函数GPIOPinTypeSSI()
设置所选GPIO端口指定的管脚为SSI功能
voidGPIOPinTypeSSI(unsignedlongulPort,unsignedcharucPins)
11)函数GPIOPinTypeTimer()
设置所选GPIO端口指定的管脚为Timer的CCP功能
voidGPIOPinTypeTimer(unsignedlongulPort,unsignedcharucPins)
12)函数GPIOPinTypeUART()
设置所选GPIO端口指定的管脚为UART功能
voidGPIOPinTypeUART(unsignedlongulPort,unsignedcharucPins)
13)函数GPIOPinTypeUSBDigital()
设置所选GPIO端口指定的管脚为USB数字功能
voidGPIOPinTypeUSBDigital(unsignedlongulPort,unsignedcharucPins)
GPIO管脚读写
对GPIO管脚的读写操作是通过函数GPIOPinWrite()和GPIOPinRead()实现的,这是两个非常重要而且很常用的库函数。
1)函数GPIOPinWrite()
向所选GPIO端口的指定管脚写入一个值,以更新管脚状态
voidGPIOPinWrite(unsignedlongulPort,unsignedcharucPins,unsignedcharucVal);
指定管脚的位组合表示ucVal:
写入指定管脚的值
2)函数GPIOPinRead()
读取所选GPIO端口指定管脚的值
longGPIOPinRead(unsignedlongulPort,unsignedcharucPins)
5.GPIO中断
1)函数GPIOIntTypeSet()
设置所选GPIO端口指定管脚的中断触发类型
voidGPIOIntTypeSet(unsignedlongulPort,unsignedcharucPins,unsignedlongulIntType)
ulIntType:
指定中断触发机制的类型,应当取下列值之一:
GPIO_FALLING_EDGE//下降沿触发中断
GPIO_RISING_EDGE//上升沿触发中断
GPIO_BOTH_EDGES//双边沿触发中断(上升沿和下降沿都会触发中断)
GPIO_LOW_LEVEL//低电平触发中断
GPIO_HIGH_LEVEL//高电平触发中断
2)函数GPIOIntTypeGet()
获取所选GPIO端口指定管脚的中断触发类型
unsignedlongGPIOIntTypeGet(unsignedlongulPort,unsignedcharucPin)
3)函数GPIOPinIntEnable()
使能所选GPIO端口指定管脚的中断
voidGPIOPinIntEnable(unsignedlongulPort,unsignedcharucPins)
4)函数GPIOPinIntDisable()
禁止所选GPIO端口指定管脚的中断
voidGPIOPinIntDisable(unsignedlongulPort,unsignedcharucPins)
函数GPIOPinIntStatus()
5)函数GPIOPinIntStatus()
获取所选GPIO端口所有管脚的中断状态
longGPIOPinIntStatus(unsignedlongulPort,tBooleanbMasked)
bMasked:
屏蔽标志,如果是true则返回屏蔽的中断状态,如果是false则返回原始的中断状态
返回值为1个位组合字节。
在该字节中置位的位用来识别一个有效的屏蔽中断或原始中断。
字节的位0代表GPIO端口管脚0、位1代表GPIO端口管脚1,等等。
返回值已被强制转换为long型,因此位31:
8应该忽略。
(即第8位到第31位)
6)函数GPIOPinIntClear()
清除所选GPIO端口指定管脚的中断
voidGPIOPinIntClear(unsignedlongulPort,unsignedcharucPins)
7)函数GPIOPortIntRegister()
注册所选GPIO端口的一个中断处理程序
voidGPIOPortIntRegister(unsignedlongulPort,void(*pfnIntHandler)(void))
pfnIntHandler:
函数指针,指向GPIO端口中断处理函数
8)函数GPIOPortIntUnregister()
注销所选GPIO端口的中断处理程序
voidGPIOPortIntUnregister(unsignedlongulPort)
6.中断基本编程方法
1.使能相关片内外设,并进行基本的配置
调用头文件<
sysctl.h>
中的函数SysCtlPeripheralEnable()。
2.设置具体中断的类型或触发方式
GPIO分为边沿触发、电平触发两大类,共5种,通过调用函数GPIOIntTypeSet()来进行设置。
3.使能中断
1)调用片内外设具体中断的使能函数
2)调用函数IntEnable(),使能片内外设的总中断
3)调用函数IntMasterEnable(),使能处理器总中断
4.编写中断服务函数
对于GCC编译器下的程序,中断服务函数的名称是事先约定好的。
用户可以打开启动文件“LM3S_Startup.s”来查看每个中断服务函数的标准名称。
在Keil或IAR开发环境下,中断服务函数的名称可以由程序员自己指定,但还是推荐采用GCC下的标准名称,这样有利于程序移植。
4.中断状态查询
一个具体的片内外设可能存在多个子中断源,但是都共用同一个中断向量。
例如GPIOA有8个管脚,每个管脚都可以产生中断,但是都共用同一个中断向量号16,任一管脚发生中断时都会进入同一个中断服务函数。
为了能够准确区分每一个子中断源,就需要利用中断状态查询函数,例如GPIO的中断状态查询函数是GPIOPinIntStatus()。
5.中断清除
对于Stellaris系列ARM的所有片内外设,在进入其中断服务函数后,中断态并不能自动清除,而必须采用软件清除(但是属于Cortex-M3内核的中断源例外,因为们不属于“外设”)。
如果中断未被及时清除,则在退出中断服务函数时会立即再次触发中而造成混乱。
清除中断的方法是调用相应片内外设的中断清除函数。
例如,GPIO端口的断清除函数是GPIOPinIntClear()。
6.注册中断服务函数
注册中断服务函数。
注册方法有两种,一是直接利用中断注册函数,好处是操作简单、可移植性好,缺点是由于把中断向量表重新映射到SRAM中而导致执行效率下降;
另一种方法需要修改启动文件,好处是执行效率很高,缺点是可移植性不够
在IAR开发环境下,启动文件“startup_ewarm.c”是用C语言写的,很好理解。
仍以中断服务函数“voidI2C_ISR(void)”为例,先插入函数声明“voidI2C_ISR(void);
”,然后在中断向量表里,根据注释内容把相应的“IntDefaultHandler”替换为“I2C_ISR”,完成。
表1.1GCC编译器下的中断服务函数名称
向量号
中断服务函数名
向量号
0
(堆栈初值)
22
UART1_ISR
44
System_Control_ISR
1
reset_handler
23
SSI_ISR
45
FLASH_Control_ISR
2
Nmi_ISR
24
I2C_ISR
46
GPIO_Port_F_ISR
3
Fault_ISR
25
PWM_Fault_ISR
47
GPIO_Port_G_ISR
4
(MPU)
26
PWM_Generator_0_ISR
48
GPIO_Port_H_ISR
5
(Busfault)
27
PWM_Generator_1_ISR
49
UART2_ISR
6
(Usagefault)
28
PWM_Generator_2_ISR
50
SSI1_ISR
7
(Reserved)
29
QEI_ISR
51
Timer3A_ISR
8
30
ADC_Sequence_0_ISR
52
Timer3B_ISR
9
31
ADC_Sequence_1_ISR
53
I2C1_ISR
10
32
ADC_Sequence_2_ISR
54
QEI1_ISR
11
SVCall_ISR
33
ADC_Sequence_3_ISR
55
CAN0_ISR
12
(Debugmonitor)
34
Watchdog_Timer_ISR
56
CAN1_ISR
13
35
Timer0A_ISR
57
CAN2_ISR
14
PendSV_ISR
36
Timer0B_ISR
58
ETHERNET_ISR
15
SysTick_ISR
37
Timer1A_ISR
59
HIBERNATE_ISR
16
GPIO_Port_A_ISR
38
Timer1B_ISR
60
USB0_ISR
17
GPIO_Port_B_ISR
39
Timer2A_ISR
61
PWM_Generator_3_ISR
18
GPIO_Port_C_ISR
40
Timer2B_ISR
62
uDMA_ISR
19
GPIO_Port_D_ISR
41
Analog_Comparator_0_ISR
63
uDMA_Error_ISR
20
GPIO_Port_E_ISR
42
Analog_Comparator_1_ISR
21
UART0_ISR
43
Analog_Comparator_2_ISR
7.中断库函数及例程
1.中断使能与禁止
调用库函数IntMasterEnable()将使能ARMCortex-M3处理器内核的总中断,调用库函数IntMasterDisable()将禁止ARMCortex-M3处理器内核响应所有中断。
复位(ResetISR)、不可屏蔽中断(NMIISR)、硬件故障中断(FaultISR),它们可能随时发生而无法通过软件禁止。
中断分为两大类:
一类是属于ARMCortex-M3内核的,如NMI、SysTick等,中断向量号在15以内;
另一类是Stellaris系列ARM特有的,如GPIO、UART、PWM等,中断向量号在16以上。
1)函数IntMasterEnable()使能处理器中断
tBooleanIntMasterEnable(void)
如果在调用该函数之前处理器中断是使能的,则返回false
如果在调用该函数之前处理器中断是禁止的,则返回true
2)函数IntMasterDisable()禁止处理器中断
tBooleanIntMaster
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)