请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TMS320F2.8377万S 大家好,
我正在尝试将SPIA外围设备与FIFO一起用作从属设备,以便与FPGA高速通信。 我有微控制器设置,在接收到3,8位字后跳闸SPIRXINT。 从调试器中,我可以看到RXFFINT位为真,但我也看到FIFO已完成,我的ISR未运行。 最终结果是我永远不能维修SPI外围设备。 关于为什么这不起作用的任何想法。 我在下面附上了我的配置代码和为SPI模块提供服务的例程。
void SPI_CNF (void){ //为SPI外设将SYSCLK分频器比率设置为1 => 200MHz LSPCLK设置 EALLOW; ClkCfgRegs.LOSPPCN.bit.LSPCLKDIV = 0; EDIS; //SPICCR寄存器 SpiaRegs.SPICCR.bit.SPISWRESET = 0; SpiaRegs.SPICCR.bit.SPICHAR = 0x7;//8位字符 SpaRegs.SPICCR.bit.CLKPOLARITY = 0;//时钟极性(数据在上升时钟边缘输出)//SPICSTER.CL/SPICRASTER.SPICRA.CL/SPICSTA1.STA1.STA1.STAN.SPICRAL= SPICSTA1.STA1.STAN.CLK.CLKPOL/ SPICSTRELASTRELASTA1.STA1.STAEL = 0 ;SPICSTAEL与SPICSTREDA.CLKPOL.CLKPOL.CLKPOL.CLKPOL= 0 //通过SPI SpiaRegs.SPICTL.bit.SPIINTENA = 1启用数据传输; //启用SPI中断 //SPIPRI寄存器 SpiaRegs.SPIPRI.Bit.STEINV = 0; //SPISTE bar acitve Low SpiaRegs.SPIPRI.Bit.TRIWIRE = 0; //SPIFHS SPIFEC1.BISPFRAST/ 最大SPF1 位 SPIFEC1模式SPIFICSPIFEC1;SPIFICRACX.SPIFEC_SPIFEC1位寄存器SPIFICSPIFFAST/最大速度SPIFEC1位SPIFICSPIFICRASPIFEC/最大SPIFECA模式 //启用FIFO功能 //SPIFFRX寄存器 SpiaRegs.SPIFFRX.bit.RXFFIENA = 1; //启用FIFO RX中断 SpiaRegs.SPIFFRX.bit.RXFFIL = 0x3; //生成中断前收到的3个字 //SPIBRR寄存 器SpiaRegs.SPIBRR.All = 0; //将波特率设置为最大速率 SpiRegs.SPIFFTX.Bit.SPIRST = 1; SpiaRegs.SPIFFTX.Bit.TXISIR.TXI = 1; SPIFAIR.SPIRT.SPEAT.SPIRT.SPET.SPIRT = 1; SPETCSPET.SPIFAIRT.SPET.SPETCIRT.SPETCREGISETC1 = SPETCSPETCSPEAST.SPET.SPET.SPETCIR.SPETCIR.SPETCIR.SPETCIR.SPIR.SPIR.SPIR.SPIR.SPET.1;SPET.SPETC 静态命令command_state; 易失性int data_rx[3]; 易失性int data_tx[3]; 无符号int I; 对于(i = 0;i < 3;I++){ DATA_Rx[i]= SpiaRegs.SPIRXBUF; } command_state =(命令) data_rx[0]; switch (command_state){ 案例(FW_REVISION)://将FW修订版写入TX FIFO DATA_TX[0]= g_STATUS_WORD_FPGA; DATA_TX[1]=(g_FW_REVISION | 0xFF00)>> 8; DATA_TX[2]=(g_FW_REVISION | 0x00FF); 对于(i = 0;i < 3;I++){ SpiaRegs.SPITXBUF=DATA_TX[I]; } 中断; CASE (converter_index)://读取转换器索引,即master,slave1,slave2等 DATA_TX[0]= g_STATUS_WORD_FPGA; DATA_TX[1]= 0; DATA_TX[2]= 0; g_converter_index =((data_rx[1]<8)+ data_rx[2]); 对于(i = 0;i < 3;I++){ SpiaRegs.SPITXBUF=DATA_TX[I]; } 中断; CASE (loop_BACK_MODE)://将最近读取的数据放入TX FIFO DATA_TX[0]= g_STATUS_WORD_FPGA; DATA_TX[1]= DATA_RX[1]; DATA_TX[2]= DATA_RX[2]; 对于(i = 0;i < 3;I++){ SpiaRegs.SPITXBUF=DATA_TX[I]; } 中断; 默认: DATA_TX[0]= g_STATUS_WORD_FPGA; DATA_TX[1]= 0xFFFF; DATA_TX[2]= 0xFFFF; 对于(i = 0;i < 3;I++){ SpiaRegs.SPITXBUF=DATA_TX[I]; } } CPU2CLA_comm_fault =假; SpiaRegs.SPIFFRX.Bit.RXFFOVFCLR=1;//清除溢出标志 SpiaRegs.SPIFFRX.Bit.RXFFINTCLR=1;//清除中断标志 PieCtrlRegs.PIEACK.ALL = M_INT6; }
此致,
Lance Hummel