打印
[DSP编程]

28335 SPI 接收 FPGA数据

[复制链接]
3183|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mitianhui9|  楼主 | 2014-7-24 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  试了好几天,感觉没什么错误啊,我是采用GPIO11接收外部FPGA传来控制命令,GPIO11设置为输入引脚,当其为高电平说明数据已经准备传,随后在FPGA那边按照SPI 时钟依次传8个数到DSP的MISO口,SpiaRegs.SPIFFRX.bit.RXFFST=1时说明装完1个字,再将BUFFER中数据给RDATA,按理说应该没错,可是RDATA就是没反应,编译时警告我RDATA虽然设置了,但是没有用到。求大神指教,点通了也就实现了DSP通过FPGA读数据了,而且可以实时处理,作用超屌的。实在不行,我就考虑用中断试试了。备注:(我这程序是在28335例程中找的,也就是SPI_LOOPBACK的那个,在那个的基础上改的,SPICCR寄存器中禁用了自测模式,GPIO11默认为禁止内部上拉引脚)

#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File

void delay_loop(void);
void spi_xmit(Uint16 a);
void spi_fifo_init(void);
void spi_init(void);
void error(void);

void main(void)
{
//  Uint16 sdata;  // send data
   Uint16 rdata;  // received data
   

   InitSysCtrl();


   InitSpiaGpio();


   DINT;

   InitPieCtrl();

   IER = 0x0000;
   IFR = 0x0000;
   
   InitPieVectTable();

相关帖子

沙发
mitianhui9|  楼主 | 2014-7-24 11:48 | 只看该作者
怎么看不到后面程序了,我再发:
       
EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0;         // GPI11
   GpioCtrlRegs.GPADIR.bit.GPIO11= 0;          // input
   GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 0;      
EDIS;       
       

   spi_fifo_init();          // Initialize the Spi FIFO
   spi_init();                  // init SPI

// Step 5. User specific code:
// Interrupts are not used in this example.
   rdata = 0x0000;                                                       
   for(;;)
   {   
     // Transmit data
     while(GpioDataRegs.GPADAT.bit.GPIO11==1)
        {
        while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { }                        
        rdata = SpiaRegs.SPIRXBUF;                               
        }
   }
}        




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

void spi_xmit(Uint16 a)
{
    SpiaRegs.SPITXBUF=a;
}   

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

使用特权

评论回复
板凳
airwill| | 2014-7-24 20:48 | 只看该作者
我看抓个通信波形后, 再分析问题比较好一些. 可以用示波器或逻辑分析仪

使用特权

评论回复
地板
zhangmangui| | 2014-7-24 23:20 | 只看该作者
mitianhui9 发表于 2014-7-24 11:48
怎么看不到后面程序了,我再发:
       
EALLOW;

这里是不是写的有问题啊    再排查一下
while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { }   

使用特权

评论回复
5
jeremyshw| | 2014-8-7 00:32 | 只看该作者
试试中断嘛

使用特权

评论回复
6
raoxianbin| | 2014-8-18 16:21 | 只看该作者
本帖最后由 raoxianbin 于 2014-8-19 20:46 编辑

警告是编译器的问题,查查FPGA那边的时序吧,记住FPGA那边,当时钟下降沿到达之前,必须把要需要传输的第一位放到MISO上去,不然就不会正确,还有我建议用中断,我之前写没什么问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

51

帖子

0

粉丝