Ti的C28x系列的DSP(28069)使用经验,SPI通讯经验

本文分享了在DSP C28x(具体型号为28069)上使用SPI进行与FPGA通信的经验,重点探讨了SPI作为主机在16位模式下的工作原理和基于FIFO的轮询方式。作者指出,SPI的片选(CS)引脚不宜使用普通IO,因为可能在CLK信号未结束时就提前拉高,导致问题。为解决此问题,选择了SPI内置的CS引脚,并限制SPI读写不超过4级FIFO( DSP28069的限制)。文章包含SPI初始化和读写函数的代码示例。
摘要由CSDN通过智能技术生成

本人使用SPI通讯经验不多,当初是为了实现DSP与FPGA之间的通讯,DSP在SPI通讯中作主机,SPI数据位数为16位模式。SPI的原理我不多说了,我对这种通讯的方式理解,这是一种高速通讯,同时还有个特点,就是接收了多少位数据的同时意味着发送了多少位数据,比如你希望接收2个字节的数据,那么你应该发送2个字节的数据,发送数据就意味着接收数据,接收数据就意味着发送数据,关键看你需要的是接收还是发送的数据。嘿嘿,有点像绕口令。

本文提出的SPI通讯也是基于FIFO的轮询方式,这种SPI函数要么在DSP架构中的主中断,或者主循环中运行。

关于SPI的CS引脚,我这里用的是SPI自带的CS引脚,简而言之,不是普通的IO引脚,为啥我不用普通的IO引脚,是因为我用了之后,我用示波器观看,SPI的CLK信号还没结束,充当CS的IO引脚已经拉高了,然后我增加延时,效果不显著,这延时会随不同SPI读写的数据长度的改变而改变,实在太麻烦了,最终我没有选择这种CS引脚的使用方式。如果使用普通的IO引脚,大部分人是这么做的,在SPI函数之前将充当CS的IO引脚拉低,然后在在SPI函数之后将充当CS的IO引脚拉高,我用的也是这种办法,但会出现上述的问题。

所以我干脆把GPIO配置成SPI的CS引脚,让SPI自动控制,不过我这种用法,SPI读写的字节数不过超过FIFO的级数,可怜的DSP28069,只有4级FIFO,而DSP28377D有16级的FIFO。

代码:

  • SPI初始化;
void InitSpia(void)
{
	SpiaRegs.SPICCR.bit.SPISWRESET = 1;		//Clear the SPI Software Reset bit to force 
                                            //the SPI to the reset state
	SpiaRegs.SPICCR.bit.SPILBK = 0;			//loopback mode
	SpiaRegs.SPICCR.bit.SPICHAR = 0xf;		//data format  16bit mode


	SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;	//spi master
	SpiaRegs.SPICTL.bit.TALK = 1;			//enable transmit

	SpiaR
  • 3
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值