首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助mangui哥,关于DSP的SPI问题

求助mangui哥,关于DSP的SPI问题

本帖最后由 zhangmangui 于 2013-10-26 00:22 编辑

问题是这样的,我用DSP的SPI与AD5360通过SPI通信
AD5360的控制字是24个bit,而DSP的发送寄存器是16位
DSP的SPICCR寄存器里面有一个字符长度控制,是bit3~bit0对应控制
现在在进行这个SPI通信的时候,DSP一次只能发16个bit,而AD5360从CS片选下降沿开始接收信号,接收24个bit的时候,CS必须给一个高电平上升沿信号结束通信,
请问,DSP怎么实现16个bit的buffer与AD5360的24个bit通信呢》
我仔细查阅过DSP的字符长度控制bit
它指的是作为一个字符发送的长度,主要是用在控制接受数据时决定接受几个bit产生中断
如果我把这个长度设成8,那么我写三次DSP的buffer,是不是每次都只发送BUFFER里面16个bit的高8位或者低8位呢?还是不管字符控制长度是多少,buffer一次性都是发送16个bit?
事实上我用示波器测试过,不管字符长度怎么设置,每写一次DSP的buffer ,DSP都会发送16个bit
所以,如果我只发一次,则AD5360无法接受24个bit ,若发送两次,则AD5360会接收到32个bit
总而言之,DSP发送的长度无法满足刚好是24个bit
不知道以上描述是否清楚,请mangui哥指点以下。谢谢。

求助mangui哥,关于DSP的SPI问题

SPI的配置;
void spi_init()
{   
        SpiaRegs.SPICCR.all =0x0007;                     // Reset on, rising edge, 16-bit char bits  
        SpiaRegs.SPICTL.all =0x0006;                         // Enable master mode, normal phase,
           SpiaRegs.SPIBRR =0x00FF;                                             // enable talk, and SPI int disabled.
//        SpiaRegs.SPIBRR =0x0085;                                                                        
    SpiaRegs.SPICCR.all =0x0087;                         // Relinquish SPI from Reset   
    SpiaRegs.SPIPRI.bit.FREE = 1;                // Set so breakpoints don't disturb xmission
}


void spi_fifo_init()                                                                                
{
// Initialize SPI FIFO registers
   SpiaRegs.SPIFFTX.all=0xE040;
   SpiaRegs.SPIFFRX.all=0x204F;
   SpiaRegs.SPIFFCT.all=0x0;
}



实际使用时:


                                AD_CS=0;
                                   SpiaRegs.SPITXBUF=DA_Data[0];

                                   SpiaRegs.SPITXBUF=DA_Data[1];     

                                   SpiaRegs.SPITXBUF=DA_Data[2];
                                while(1)
                                {
                                        if((SpiaRegs.SPISTS.all&0x40)==1)        break;//如果的中断标志位为1,则证明SPI已经发送成功,则停止等待        
                                }
                                SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;//虚读SPIRXBUF,以清除SPI中断标志
                        //    while(SpiaRegs.SPIFFTX.bit.TXFFST!=0){}   
                                AD_CS=1;
返回列表