CC2640R2F+W5500SPI通信(1)
使用的开发板是TI公司的蓝牙BLE CC2640R2F,主要研究的是CC2640R2F与以太网模块W5500的spi通信,使用的代码调试软件为CCS,
将原本在51单片机上运行的W5500例程,移植到CC2640R2F的开发板上,具体一直步骤如下:
(1)将w5500在51上的例程拷贝到CC2640R2F的驱动的uartecho目录下:
E:\ti\simplelink_cc2640r2_sdk_2_30_00_28\examples\rtos\CC2640R2_LAUNCHXL\drivers\uartecho
将51中的w5500 主程序主程序改为SPIW5500.c,不该的话将会在例程运行时与CC2640R2F运行的main_tirtos.c主程序发生冲突,导致程序运行不了。
(2)打开CC2640R2F的uartecho例程:
(3)将刚刚拷贝到CC2640R2F的驱动的uartecho目录下的w5500驱动函数库与main程序也就是SPIW5500和w5500.h添加到uartecho例程下:
一定要雨泽ECHLIPSE_HOME,
同样的操作将另两个程序添加到uartecho例程下:
点击运行例程我们会发现w5500的驱动函数库会报出很多的错误
#29 expected an expression
这个错误与CCS软件无关,是一种表达式错误,因为原本51的例程硬件连接不需要定义引脚的功能号,蓝牙C2640R2F需要定义引脚的功能号,这些引脚在协议中都有定义,我们只需将原本51中SPI对应的引脚换成CC2640R2F的spi引脚,在定义好他的功能号就好。
在w5500.h中将对应的引脚换成CC2640R2F的管脚号:
然后在驱动函数库中添加这些管脚的宏定义
在写管教的功能号之前一定要定义好管脚的输入输出功能:sclk;cs mosi,miso 的输入输出功能为输入定义为:
GPIO_setOutputEnableDio(IOID_10, GPIO_OUTPUT_ENABLE);
GPIO_setOutputEnableDio(IOID_20, GPIO_OUTPUT_ENABLE);
GPIO_setOutputEnableDio(IOID_9, GPIO_OUTPUT_ENABLE);
GPIO_setOutputEnableDio(IOID_8, GPIO_OUTPUT_DISABLE);
将原本在51中的时钟SCLK,使能CS,主机发送从机接收MOSI. 主机接收从机发送MISO 对应的功能语句改掉就可以了:
如
W5500_SCLK=0;改为 HWREG( GPIO_BASE + GPIO_O_DOUTCLR31_0) = (1<<10 );
W5500_SCLK=1;改为 HWREG( GPIO_BASE + GPIO_O_DOUTSET31_0) = (1<<10 );
W5500_MOSI=0; 改为 HWREG( GPIO_BASE + GPIO_O_DOUTCLR31_0) = (1<<9 );
W5500_MOSI=1;改为 HWREG( GPIO_BASE + GPIO_O_DOUTSET31_0) = (1<<9 );
W5500_SCS=0;改为 HWREG( GPIO_BASE + GPIO_O_DOUTCLR31_0) = (1<<20 );
W5500_SCS=1;改为 HWREG( GPIO_BASE + GPIO_O_DOUTSET31_0) = (1<<20 );
W5500_RST=0;改为 HWREG( GPIO_BASE + GPIO_O_DOUTCLR31_0) = (1<<13 );
W5500_RST=1;改为 HWREG( GPIO_BASE + GPIO_O_DOUTSET31_0) = (1<<13 );
注:
务必将此处的MISO
rByte<<=1;
rByte|=W5500_MISO;
改为宏之前定义中的RX接收语句:
rByte<<=1;
if( RX ) rByte |= 0x01;
最后将SPIW5500.C中的主函数int main(void)改为void *mainThread(void *arg0 )
再次点击运行程序完美运行,用逻辑分析仪进行抓包可以清楚地看到与51的抓包波形是一样的,因为51的板子上MISO引脚p3_4连接着时钟因此我们可以看到在逻辑分析仪上的MISO 波形,而CC2640R2F的MISO:IOID_8 与插针J2连接没有预期连接的芯片所以他不显示波形,只需将CC2640R2F与W5500对应引脚进行连接就可以看到MISO的波形了。
第一次写博客,写的不好望大家见谅。