TI 280045使用SPI FIFO中断接收数据总结

1 基本方案

最近调试STM32与DSP双芯片SPI通讯的调试,总结一下基本使用过程供初学者参考。通讯方案中使用STM32作为主机,TI280045作为从机。因dsp需要执行更高优先级的任务,因此不能将大部分资源用在SPI通讯上,因此使用了SPI FIFO缓存模式,关于SPI FIFO模式此处不再过多介绍,感兴趣的朋友可以查阅相关知识点。为了避免DSP SPI接收FIFO中的数据溢出导出的数据错帧问题,使用了FIFO接收中断,当SPI 接收FIFO深度达到16级时,产生一个中断任务,在中断中读取FIFO缓存数据并保存,耗时较长的解析数据帧的任务放置在主循环。

2 部分实现代码

SPI FIFO配置代码如下所示:
(1)使能SPI接收中断

    PieCtrlRegs.PIEIER6.bit.INTx1 = 1;          //SPI RX中断

(2)配置SPI寄存器

    SpiaRegs.SPISTS.all=0x0000;   //所有状态位清零
    SpiaRegs.SPICCR.all = 0x0027;//上升沿发数据下降沿收数据
    SpiaRegs.SPICTL.all = 0x0003;//从机模式
    SpiaRegs.SPICCR.all = 0x00A7;
    SpiaRegs.SPIPRI.bit.FREE = 0;
    //设置FIFO功能
    SpiaRegs.SPIFFTX.all = 0xE040;   //使能FIFO;清除发送中断标志位;禁止FIFO发送中断;
    SpiaRegs.SPIFFRX.all = 0X604F;
    SpiaRegs.SPIFFRX.bit.RXFFIL = 16;   //FIFO中有16个字时产生中断
    SpiaRegs.SPIFFRX.bit.RXFFIENA = 1;  //开启FIFO接收中断
    SpiaRegs.SPIFFCT.all = 0X0;      //SPITXBUF到移位寄存器传送不延迟;

(3)在中断函数中接收数据

interrupt void SPIA_RX_ISR(void)
{
    Uint i;
    //读取FIFO中数据
    for(i = 0;i < 16 ;i++){
        RxData[i]= SpiaRegs.SPIRXBUF;
    }
	//以下操作为了使下一次中断正常发生
    SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 1;  //清除FIFO接收中断
    SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 1;  //清除接收中断
    PieCtrlRegs.PIEACK.bit.ACK6 = 1;      // Issue PIE ACK
}
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值