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); 

   

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DAPLink是一种基于CMSIS-DAP的固件,它可以让开发人员使用DAPLink设备作为USB接口来进行程序下载和调试。在这里,我将简要介绍一下DAPLink的代码结构。 DAPLink码位于daplink目录下,包含以下子目录: - bootloader:DAPLink固件的引导加载程序,用于更新固件。 - cmsis_core:CMSIS-CORE标准库,提供了与处理器相关的基本功能。 - cmsis_dap:CMSIS-DAP标准库,提供了与DAPLink设备相关的功能。 - interface:DAPLink的接口代码,提供了与目标设备之间的通信功能。 - target:DAPLink的目标设备代码,提供了针对不同处理器的调试功能。 其中,bootloader和cmsis_core、cmsis_dap是DAPLink的基础组件,interface和target则是根据具体目标设备实现的。 在interface目录下,可以看到以下文件: - board.c:定义了DAPLink设备的GPIO口、LED、按键等硬件资的初始化函数。 - communication.c:定义了DAPLink与目标设备之间通信的函数,如读写寄存器、读写内存、执行指令等。 - flash_intf.c:定义了DAPLink与目标设备之间进行程序烧录的函数,如擦除扇区、编程扇区等。 - target_config.h:定义了目标设备的相关配置信息,如芯片类型、JTAG/SWD接口类型、Flash大小等。 在target目录下,可以看到以下文件: - cmsis_os2.c:定义了操作系统相关的函数,如线程创建、互斥锁等。 - target_family.c:定义了针对不同处理器系列的调试功能,如ARM Cortex-M系列、NXP LPC系列、ST STM32系列等。 - target_config.h:定义了目标设备的相关配置信息,如芯片类型、JTAG/SWD接口类型、Flash大小等。 总的来说,DAPLink的码主要包含了基础组件、接口代码和目标设备代码三个部分,其中接口代码和目标设备代码是根据具体目标设备实现的。如果需要使用DAPLink对某个芯片进行调试,需要先确定该芯片的目标设备代码是否已经被实现,并进行相应的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值