注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
myredback的个人空间 https://home.eeworld.com.cn/space-uid-166710.html [收藏] [复制] [分享] [RSS]
日志

GPIO端口库函数

已有 3245 次阅读2010-8-6 11:31 |个人分类:LM3S8962|

一: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( )。
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章