6655GPIO 6655总共有32个IO口,GPIO[0-15]为普通IO口,在DSP启动的时候会用作启动方式选择开关,GPIO[16-31]都是复用IO口,复用的外设有tiM,UART,SPI。其结构如图1所示。 1.1 GPIO图解 图1表示GPIO外设的图解。一些GPIO引脚是外设引脚复用型引脚。GPIO[0:15]可以作为所有同步事件和中断源给CPU的中断源。 图1 GPIO图解 1.2 GPIO功能 可以单独配置每个GPIO引脚(GPn)为输入或者输出,通过配置GPIO方向寄存器DIR指定相应引脚的方向。逻辑0表示GPIO引脚配置为输出,逻辑1表示GPIO引脚配置为输入。写一个1给设置数据寄存器则对应的GPn会输出一个逻辑高电平,写一个1给清楚数据寄存器则对应的GPn会输出一个逻辑地电平。输出状态也可以直接控制输出数据寄存器。例如配置GP8为一个逻辑高电平状态配置方式有: 1给SET_DATA寄存器写0x100 2读OUT_DATA寄存器,改变第8位为1,把新的值写入到OUT_DATA寄存器 配置GP8为一个逻辑高低平状态配置方式有: 1给CLR_DATA寄存器写0x100 2读OUT_DATA寄存器,改变第8位为0,把新的值写入到OUT_DATA寄存器 注意:写0给SET_DATA寄存器和CLR_DATA寄存器是不会影响GPIO引脚的状态的。还有,若是GPIO引脚被配置为输入的话,对SET_DATA,CLR_DATA,OUT_DATA寄存器是不会影响引脚的状态的。读SET_DATA寄存器和CLR_DATA寄存器时会返回一个值给OUT_DATA,但这个值不是引脚的真实状态,该引脚的状态有效读取方式是读取IN_DATA寄存器的值。 1.3 中断和事件发生 每一个GPIO引脚可以被配置为一个CPU中断源(GPINTn)以及EDMA的同步事件(GPINTn)。该中断以及同步事件可以发生在上升沿,下降沿或者双边沿,这个时钟的逻辑电平与GPIO外设时钟同步。 两个内部寄存器RIS_TRIG和FAL_TRIG决定GPn信号发生是在哪种边沿触发中断以及EDMA事件。每一位对应一个GPIO pin。图1.2表示相应引脚的CPU中断和EDMA事件的触发通过配置RIS_TRIG和FAL_TRIG寄存器。 图1.2 GPIO中断配置图 GPIO配置为CPU中断源和EDMA事件源则中断使能寄存器的BINTEN(0位)位必须设置为1。 1.4 GPIO寄存器地址和配置 GPIO寄存器的基地址为0x02320000, 对应开发板上宏定义:#define SOC_GPIO_0_REGS (0x02320000) 各个寄存器偏移地址和描述如图1.3所示。 图1.3 GPIO寄存器地址 配置: 主要用到了开发板上核心板的DSP LED灯,对应于GPIO26和GPIO27,底板的DSP LED灯,对应于GPIO19,GPIO22,GPIO23,按键开关GPIO15以及SPI复用引脚GPIO28和GPIO29。其中GPIO26,GPIO27,GPIO19,GPIO22,GPIO23,GPIO15配置为普通I/O口,GPIO28和GPIO29配置为功能引脚。 // 核心板 LED 所在 GPIO 口 GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0, GPIO26_UARTCTS1,GPIO_NORMAL_ENABLED); GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0, GPIO27_UARTRTS1,GPIO_NORMAL_ENABLED); // 底板 LED 所在 GPIO 口 GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0,GPIO19_TIMO1, GPIO_NORMAL_ENABLED); GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0,GPIO22_UARTCTS0, GPIO_NORMAL_ENABLED); GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0,GPIO23_UARTRTS0, GPIO_NORMAL_ENABLED); //由于底板按键会影响自启动,所以换成15号GPIO GPIOPinMuxSet(SOC_DSC_BASE_REGS+SOC_DSC_PIN_CONTROL_0,GPIO15_PCIESSMODE1,GPIO_NORMAL_ENABLED); //SPI配置为功能引脚 GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0,GPIO28_SPICS0, GPIO_FUNCTION_ENABLED); GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0,GPIO29_SPICS1, GPIO_FUNCTION_ENABLED);
|