一:GPIO函数
1: void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulPinIO)
设置所选GPIO端口指定管脚的方向和模式
如 GPIODirModeSe(GPIO_PORTA_BASE,GPIO_PIN_2 ,GPIO_DIR_MODE_IN ) 函数设置PA2为输入,但第三个参数为“GPIO_DIR_MODE_HW // 硬件控制”时指此管脚启用第二功能;
2:unsigned long GPIODirModeGet(unsigned long ulPort, unsigned char ucPin)
获取所选GPIO端口指定管脚的方向和模式
如 unsigned long SetValue=GPIODirModeGer(GPIO_PORTA_BASE,GPIO_PIN_2);返回PA2脚的方向和模式,返回的值为上一个函数第三个参数的取值,分别为
GPIO_DIR_MODE_IN // 输入方向
GPIO_DIR_MODE_OUT // 输出方向
GPIO_DIR_MODE_HW // 硬件控制
3:void GPIOPadConfigSet(unsigned long ulPort,
unsigned char ucPins,
unsigned long ulStrength,
unsigned long ulPadType)
设置所选GPIO端口指定管脚的驱动强度和类型
如 GPIOPadConfigSet(GPIO_PORTA_BASE,GPIO_PIN_2,GPIO_STRENGTH_4MA ,GPIO_PIN_TYPE_STD) 设置PA2脚的驱动强度为4MA的推挽输出;
ulStrength:指定输出驱动强度,应当取下列值之一:
GPIO_STRENGTH_2MA // 2mA驱动强度
GPIO_STRENGTH_4MA // 4mA驱动强度
GPIO_STRENGTH_8MA // 8mA驱动强度
GPIO_STRENGTH_8MA_SC // 带转换速率(Slew Rate)控制的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:void GPIOPadConfigGet(unsigned long ulPort,
unsigned char ucPin,
unsigned long *pulStrength,
unsigned long *pulPadType)
获取所选GPIO端口指定管脚的配置信息
如 GPIOPadConfigGet(GPIO_PORTA_BASE,GPIO_PIN_2,pulStrength,pulPadType);输出驱动强度信息保存到pulStrength指向的地址中,输出驱动类型信息保存到pulPadType指向的地址中,返回的值为上一个函数设置的内容。
5:void GPIOPinTypeGPIOInput(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为高阻输入模式
如 GPIOPinTypeGPIOInput(GPIO_PORTA_BASE,GPIO_PIN_2);设置PA2脚为高阻输入模式
6:void GPIOPinTypeGPIOOutput(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为推挽输出模式
如 GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_2) 设置PA2脚为推挽输出模式
7:void GPIOPinTypeGPIOOutputOD(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为开漏输出模式
如 GPIOPinTypeGPIOOutputOD(GPIO_PORTA_BASE,GPIO_PIN_2) 设置PA2为开漏输出模式
但由于函数5,6,7函数名太长一般做如下简化:
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
#define GPIOPinTypeOD GPIOPinTypeGPIOOutputOD
8: void GPIOPinTypeADC(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为ADC功能
这个函数只对有adc功能复用的管脚有用如LM3S811的1,2,3,4脚。。
9:void GPIOPinTypeCAN(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为CAN功能
10:void GPIOPinTypeComparator(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为CAN功能
11:void GPIOPinTypeComparator(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为模拟比较器功能
12:void GPIOPinTypeI2C(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为I2C功能
13:void GPIOPinTypePWM(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为PWM 功能
14:void GPIOPinTypeQEI(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为QEI功能
15:void GPIOPinTypeSSI(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为SSI功能
16:void GPIOPinTypeTimer(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为Timer的CCP功能
17:void GPIOPinTypeUART(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为UART 功能
18: void GPIOPinTypeUSBDigital(unsigned long ulPort, unsigned char ucPins)
设置所选GPIO端口指定的管脚为USB数字功能
对 GPIO管脚的读写操作是通过函数 GPIOPinWrite( )和 GPIOPinRead( )实现的,这是两个非常重要而且很常用的库函数。
19: void GPIOPinWrite(unsigned long ulPort, unsigned char ucPins, unsigned char ucVal);
向所选GPIO 端口的指定管脚写入一个值,以更新管脚状态, ucVal:写入指定管脚的值
注:ucPins 指定的管脚对应的 ucVal 当中的位如果是 1,则置位相应的管脚,如果是 0,则清零相应的管脚;ucPins未指定的管脚不受影响。
如 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); // 清除PA3
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, 0xFF); // 置位PB5
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_6, 0xFF); //同时置位PD2、PD6
GPIOPinWrite(GPIO_PORTA_BASE, 0xFF, ucData); // 变量ucData 输出到PA0~PA7
20:long GPIOPinRead(unsigned long ulPort, unsigned char ucPins)
读取所选GPIO端口指定管脚的值,返回1个位组合的字节。该字节提供了由ucPins指定管脚的状态,对应的位值表示GPIO 管脚的高低状态。ucPins未指定的管脚位值是0。返回值已强制转换为long型,因此位31:8应该忽略。 这个函数应该在相应管脚已经设置为输出状态的情况下,由于GPIO得管脚结构我们知道在输出模式下,不管是开漏还是推挽用此函数读回来的值都是管脚的输出锁存值,
如 // 读取PA4,返回值保存在ucData里,可能的值是0x00或 0x10
ucData = GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_4);
// 同时读取PB1、PB2和 PB6,返回PB1、PB2和 PB6的位组合保存在ucData里
ucData = GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_6);
// 读取整个PF端口
ucData = GPIOPinRead(GPIO_PORTF_BASE, 0xFF);
在Stellaris 系列 ARM 里,每个 GPIO 管脚都可以作为外部中断输入。中断的触发类型分为边沿触发和电平触发两大类,共 5 种,用起来非常灵活。配置 GPIO管脚的中断触发方式可以通过调用函数 GPIOIntTypeSet( )来实现,函数 GPIOIntTypeGet( )用来获取配置情况。函数 GPIOPinIntEnable( )和 GPIOPinIntDisable( )用来使能和禁止 GPIO管脚中断。函数 GPIOPinIntStatus( )用来获取 GPIO管脚的中断状态。在同一个 GPIO 端口上,8 个GPIO管脚的中断向量都是共用的。如果同时配置了同一端口上的多个管脚中断,则可以先利用函数 GPIOPinIntStatus( )读取中断状态, 再进一步确认具体是哪个管脚产生的中断请求。函数 GPIOPinIntClear( )用来及时清除 GPIO管脚的中断状态。函GPIOPortIntRegister( )用来注册一个 GPIO端口中断服务函数,而注销的方法是调用函数GPIOPortIntUnregister( )。