6678-GPIO源码解析(2)

6678-GPIO源码解析(2)

1.寄存器相关的结构体

6678的GPIO0-15共十六个GPIO。这些GPIO的工作模式通过寄存器进行配置。

#define CSL_GPIO_REGS           (0x02320000)      (cslr_device.h中定义)

CSL_GpioRegs * gpGPIO_regs= (CSL_GpioRegs * )CSL_GPIO_REGS;(keystonecommon中定义,通过结构体指针定义,后续方便赋值配置寄存器)

cslr_gpio.h中对

typedef struct  {
    volatile Uint32 DIR;   /*方向寄存器,0输入,1输出*/     
    volatile Uint32 OUT_DATA;/*控制相应的GPn引脚驱动状态。这些位不会影响那些配置为输入引脚的状态。读取将返回这些寄存器的值,而不是引脚的状态。*/
    volatile Uint32 SET_DATA;/*写 1 置位相应的输出数据寄存器位。读取该寄存器返回输出数据寄存器的内容。写0没有影响。*/
    volatile Uint32 CLR_DATA;/*写 1 清除输出数据寄存器相应的位。读取该寄存器返回输出数据寄存器的内容。写0没有影响,*/
    volatile Uint32 IN_DATA;/*读取GPIO信号*/
    volatile Uint32 SET_RIS_TRIG;/*使能上升沿中断*/
    volatile Uint32 CLR_RIS_TRIG;/*写1到CLR_RIS_TRIG清除RIS_TRIG相对应的位。写0无作用。读取CLR_RIS_TRIG返回RIS_TRIG内的值。*/
    volatile Uint32 SET_FAL_TRIG;/*使能下降沿中断*/
    volatile Uint32 CLR_FAL_TRIG;
    volatile Uint32 INTSTAT;
} CSL_GpioBank_registersRegs;

/**************************************************************************\
* Register Overlay Structure
\**************************************************************************/
typedef struct  {
    volatile Uint32 PID;
    volatile Uint32 PCR;
    volatile Uint32 BINTEN;/*使能GPIO中断*/
    volatile Uint8 RSVD0[4];
    CSL_GpioBank_registersRegs BANK_REGISTERS[4];
} CSL_GpioRegs;

GPIO的高低电平变化ns级别。

2. 基于CSL库的函数

这些函数控制引脚的输出,基本都是实现对单个引脚的操作,可进一步在此基础上进行封装。

cslr_gpio.h 声明了打开实例的函数并返回一个实例,未找到函数实现,预计为将gpio寄存器的结构体指向gpio寄存器地址并返回这个实例。

cslr_gpioAux.h其他函数的声明,可以看到详细的实现。

Functions

CSL_IDEF_INLINE void CSL_GPIO_getPID (CSL_GpioHandle hGpio, Uint8 *scheme, Uint16 *function, Uint8 *rtl, Uint8 *major, Uint8 *custom, Uint8 *minor)
CSL_IDEF_INLINE void CSL_GPIO_getPCR (CSL_GpioHandle hGpio, Uint8 *soft, Uint8 *free)
CSL_IDEF_INLINE void CSL_GPIO_bankInterruptEnable (CSL_GpioHandle hGpio, Uint8 bankNum)
CSL_IDEF_INLINE void CSL_GPIO_bankInterruptDisable (CSL_GpioHandle hGpio, Uint8 bankNum)
CSL_IDEF_INLINE Bool CSL_GPIO_isBankInterruptEnabled (CSL_GpioHandle hGpio, Uint8 bankNum)
CSL_IDEF_INLINE void CSL_GPIO_setPinDirOutput (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_setPinDirInput (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE Bool CSL_GPIO_getPinDirection (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_getOutputData (CSL_GpioHandle hGpio, Uint8 pinNum, Uint8 *outData)
CSL_IDEF_INLINE void CSL_GPIO_setOutputData (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_clearOutputData (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_getInputData (CSL_GpioHandle hGpio, Uint8 pinNum, Uint8 *inData)
CSL_IDEF_INLINE void CSL_GPIO_setRisingEdgeDetect (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_clearRisingEdgeDetect (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE Bool CSL_GPIO_isRisingEdgeDetect (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_setFallingEdgeDetect (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_clearFallingEdgeDetect (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE Bool CSL_GPIO_isFallingEdgeDetect (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE Bool CSL_GPIO_getInterruptStatus (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_IDEF_INLINE void CSL_GPIO_clearInterruptStatus (CSL_GpioHandle hGpio, Uint8 pinNum)
CSL_GpioHandle CSL_GPIO_open (Int32 instNum)必须首先被调用 ,如
 CSL_GpioHandle   hnd;
   ...
 hnd = CSL_GPIO_open (0); 

   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值