C8051F410单片机用SPI加载DSP程序。下面数组数据加载给DSP,是可以让DSP实现闪灯的。可是不行啊。请帮我改

C8051F410单片机用SPI加载DSP程序。下面数组数据加载给DSP,是可以让DSP实现闪灯的。可是不行啊。请帮我改,第1张

uchar DSP_LED[]={0x5449,0x5041,0x6359,0x5358,0x0D59,0x5358,0x0100,0x0100,}

这个赋值编译器应该会报错的。改为:

uint DSP_LED[2002]={0x5449,0x5041,0x6359,0x5358,0x0D59,0x5358,0x0100,0x0100,}

uchar k = 0 改为: uint k = 0 ;

DSP_LED[k]=SPI_Write() 改为: SPI_Write(DSP_LED[k])

以下不细看了。。。。。。

找个51单片机GPIO口模拟SPI的程序,稍微改一下就能用了用MCBSP通信的话通信时序方面的问题DSP用硬件帮你做了,而你用上面的方法,需要程序里面自己添加延时。如果你做的系统比较复杂(比如你还需要处理音频数据,还要读写SD卡等等),不推荐用GPIO口模拟SPI。芯片官方网站会有你这块芯片SPI通信的示例程序的。你仔细找找。

首先NSS配置为硬件的话,相应引脚的GPIO应配置为第二功能;

其次确认SPI外设的时钟和使能设置;

还有主从机的配置;

如果STM32是主机,当需要读取从机数据的时候,必须有主机发起,由主机来提供总线时钟。

如果要发数据,发出数据后返回值不关心,但还是要读取以清空寄存器;

如果要收数据,不关心发出什么数据,可以发0X00或0XFF;

还取决于从机的控制协议;

比如从机受到0X55后会返回2个字节数据;用下面的函数

LTD0=spi1_sr_byte(0x55) // 发送指令,不关心收什么

LTD1=spi1_sr_byte(0x00) // 接收数据,不关心发什么

LTD2=spi1_sr_byte(0x00) // 接收数据,不关心发什么

下面是个例程

unsigned char spi1_sr_byte(unsigned char ltd) // LTD是要发送的数据

{

unsigned char ltrd // 接收的数据

while(!SPI1_TXE) // 等待发送完毕

while(SPI1_BUSY) // 等待总线忙

SPI1->DR=(unsigned short)ltd// 发数

while(!SPI1_RXNE)// 等待接收完成

ltrd=SPI1->DR //收数 注意SPI总线的特点,每次发一个数才能收一个数。

return ltrd

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11115351.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存