1. 写在前面
今天下午做了一个C5509A和C6748两个DSP的数据传输,经由RF24L01设备传输,都是模拟SPI协议,对于两个DSP来说,无非是配GPIO引脚,写好时序和延时。C5509A的GPIO口配置比较好说,关键是C6748的引脚实在是不好弄,网上也没有太多的资料,而且对于C6748来说,不一样厂家生产出来的Demo板子,编程库也是不一样的,我用的是RK的板子,经过一下午的研究,反正配置是学会了。过几天在TI上下载C6748的原库重新编一下。
2. C5509A的GPIO口配置
C5509A有CSL编程标准库,#include "csl_gpio.h",按照API文档写没什么太大难度。在本设计中的C5509A用的是普通IO口,没用HGPIO和MCBSP的GPIO。使用普通IO口也就是GPIO0-GPIO7(非BGA封装没有GPIO5)不需要像C2000系列一样配置MUX寄存器,直接可以用宏函数操作。
2.1 方向配置
方向配置可以单个配置也可以一起配置。
2.1.1 单个配置
函数GPIO_pinDirection(Uint32 mask, Uint16 value);
GPIO_pinDirection( GPIO_PIN0, 0 ); // 配置GPIO0号为输入方向 GPIO_pinDirection( GPIO_PIN1, 1 ); // 配置GPIO1号为输出方向
2.1.2 一起配置
宏函数GPIO_RSET(IODIR,0x80); 高位对应GPIO7,低位对应GPIO0,可以一起赋值。
GPIO_RSET(IODIR,0x80); // 7 6 5 4 3 2 1 0
2.2 写操作
2.2.1 单个写操作
GPIO_pinWrite( GPIO_PIN3,1 ); // gpio3口拉高 GPIO_pinWrite( GPIO_PIN4,0 ); // GPIO4口拉低
2.2.2 整体写操作
GPIO_RSET(IODAT,0xFF); // GPIO7-GPIO0 全部写高
2.3 读操作
GPIO_pinRead( GPIO_PIN3 ); // 读GPIO3 引脚的电平,前提是GPIO3配置为输入引脚
2.4 小结
以上就为对于C5509A的GPIO口配置,通过这样的配置我们可以模拟很多时序了,也可以驱动很多外设传感器。至于高端的无缝接口尚未研究。先研究到这里。类似的,本设计中需要模拟RF24L01的时序,对于几个引脚CE,IRQ,MOSI,MISO,SCK,CSN都需要占用GPIO口,本文设计就分配了GPIO0-GPIO7的引脚,宏定义如下:
//============================================================================== #define RF24L01_CE_0 GPIO_pinWrite( GPIO_PIN4,0 ) #define RF24L01_CE_1 GPIO_pinWrite( GPIO_PIN4,1 ) //=============================RF24L01_CSN端口================================== #define RF24L01_CSN_0 GPIO_pinWrite( GPIO_PIN6,0 ) #define RF24L01_CSN_1 GPIO_pinWrite( GPIO_PIN6,1 ) //=============================RF24L01_SCK====================================== #define RF24L01_SCK_0 GPIO_pinWrite( GPIO_PIN3,0 ) #define RF24L01_SCK_1 GPIO_pinWrite( GPIO_PIN3,1 ) //============================= RF24L01_MOSI端口================================ #define RF24L01_MOSI_0 GPIO_pinWrite( GPIO_PIN1,0 ) #define RF24L01_MOSI_1 GPIO_pinWrite( GPIO_PIN1,1 ) //=============================MISO端口========================================= #define RF24L01_MISO_0 GPIO_pinWrite( GPIO_PIN0,0 ) #define RF24L01_MISO_1 GPIO_pinWrite( GPIO_PIN0,1 ) //==========================IRQ状态============================================ #define RF24L01_IRQ_0 GPIO_pinWrite( GPIO_PIN7,0 ) #define RF24L01_IRQ_1 GPIO_pinWrite( GPIO_PIN7,1 ) //-------------------------------------------------------------------------------
5.3 C6748的IO口配置
C6748的GPIO口初始化程序如下。
void GPIO_INIT( void ) { RK6748_pinmuxConfig(13,0x80088808,0x80088808); // 需要配合一个软件算出这个值。 RK6748_pinmuxConfig(18,0x00800000,0x00800000); RK6748_pinmuxConfig(19,0x00800000,0x00800000); GPIO_setDir( GPIO_BANK6, GPIO_PIN13, GPIO_INPUT ); // IRQ GPIO_setDir( GPIO_BANK6, GPIO_PIN15, GPIO_OUTPUT ); // MOSI GPIO_setDir( GPIO_BANK6, GPIO_PIN1, GPIO_OUTPUT ); // CSN GPIO_setDir( GPIO_BANK6, GPIO_PIN11, GPIO_INPUT ); // MISO GPIO_setDir( GPIO_BANK6, GPIO_PIN12, GPIO_OUTPUT ); // SCK GPIO_setDir( GPIO_BANK0, GPIO_PIN8, GPIO_OUTPUT ); // CE printf("GPIO initi finish! "); }