This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的团队:
我的客户想要修改两个 F280049C 芯片之间的通信例程(SPI_ex1_loopback.c)。 (例程能够正常通信)
客户已将内部回送模式下的程序分为主程序和从程序,分别启用 FIFO 及其中断,但在连接相应的引脚后未观察到正确的传输波形。
他主要修改了以下两个代码:
SpiaRegs.SPICCR.bit.SPILBK = 0;
(笑声)
SpiaRegs.SPICTL.bit.master_slave = 1;
需要进行哪些更改?
#include "F28x_Project.h" interrupt void spiTxFifoIsr(void); interrupt void spiRxFifoIsr(void); void delay_loop(void); void initSPIFIFO(void); void InitSpi(void); void error(void); Uint16 sdata[8]; // Send data buffer Uint16 rdata[8]; // Receive data buffer Uint16 errcounter; Uint16 rdata_point; // Keep track of where we are // in the data stream to check received data int m=0,n=0; void main(void) { Uint16 i; InitSysCtrl(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); InitSpiaGpio(); EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.SPIA_RX_INT = &spiRxFifoIsr; PieVectTable.SPIA_TX_INT = &spiTxFifoIsr; EDIS; // This is needed to disable write to EALLOW protected registers initSPIFIFO(); for(i=0;i<8;i++) { sdata[i]=i; } rdata_point = 0; errcounter=0; PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block PieCtrlRegs.PIEIER6.bit.INTx1=1; // Enable PIE Group 6, INT 1 PieCtrlRegs.PIEIER6.bit.INTx2=1; // Enable PIE Group 6, INT 2 IER=0x20; // IER = M_INT6// Enable CPU INT6 EINT; // sdata = 0; for(;;); } void error(void) { errcounter++; asm(" ESTOP0"); // Test failed!! Stop! for(;;); } void delay_loop() { long i; for (i = 0; i < 10; i++) {} } void initSPIFIFO(void) { SpiaRegs.SPIFFTX.all =0xC028; SpiaRegs.SPIFFRX.all = 0x0028; SpiaRegs.SPIFFCT.all =0x00; SpiaRegs.SPIFFTX.bit.TXFIFO=1; SpiaRegs.SPIFFRX.bit.RXFIFORESET=1; // SpiaRegs.SPICCR.bit.SPISWRESET =0; // SpiaRegs.SPICCR.all =0x001F; // SpiaRegs.SPICTL.all =0x0017; // SpiaRegs.SPISTS.all =0x0000; // SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR; // SpiaRegs.SPIFFTX.all =0xC028; // SpiaRegs.SPIFFRX.all =0x0028; // SpiaRegs.SPIFFCT.all =0x00; // SpiaRegs.SPIPRI.all =0x0010; // SpiaRegs.SPICCR.bit.SPISWRESET =1; // SpiaRegs.SPIFFTX.bit.TXFIFO =1; // SpiaRegs.SPIFFRX.bit.RXFIFORESET =1; InitSpi(); } void InitSpi(void) { // Set reset low before configuration changes // Clock polarity (0 == rising, 1 == falling) // 16-bit character // Enable loop-back(1:使能回环 0:禁用回环) // SpiaRegs.SPICCR.bit.SPISWRESET = 0; SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; SpiaRegs.SPICCR.bit.SPICHAR = (16-1); SpiaRegs.SPICCR.bit.SPILBK = 1; // // Enable master (0 == slave, 1 == master) // Enable transmission (Talk) // Clock phase (0 == normal, 1 == delayed) // SPI interrupts are disabled // SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; SpiaRegs.SPICTL.bit.TALK = 1; SpiaRegs.SPICTL.bit.CLK_PHASE = 0; SpiaRegs.SPICTL.bit.SPIINTENA = 0; // Set the baud rate // // SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR; SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = 0x007F; // Set FREE bit // Halting on a breakpoint will not halt the SPI SpiaRegs.SPIPRI.bit.FREE = 1; // // Release the SPI from reset SpiaRegs.SPICCR.bit.SPISWRESET = 1; } /******发送中断配置*******/ interrupt void spiTxFifoIsr(void) { m++; Uint16 i; for(i=0;i<8;i++) { SpiaRegs.SPITXBUF =sdata[i]; } for(i=0;i<8;i++) // Increment data for next cycle { sdata[i]++; } SpiaRegs.SPIFFTX.bit.TXFFINTCLR =1; PieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ACK } /*****接收中断配置********/ interrupt void spiRxFifoIsr(void) { n++; Uint16 i; for(i=0;i<8;i++) { rdata[i]=SpiaRegs.SPIRXBUF; } for(i=0;i<8;i++) { if(rdata[i]!=rdata_point+i) { error();} } rdata_point++; SpiaRegs.SPIFFRX.bit.RXFFOVFCLR =1; SpiaRegs.SPIFFRX.bit.RXFFINTCLR =1; PieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ACK }
绿色,
客户是否有任何理由更喜欢使用位域示例? 他们是否会考虑使用以下路径中基于驱动程序库的示例。 它具有 sysconfig 支持,还有许多其他示例。
下面提供的示例非常接近您要实现的目标。
路径:C:\ti\c2000\C2000Ware_4_00_00_00\driverlib\f28004x\examples\SPI
文件:SPI_ex4_external_loopback_fifo_interrupts
此致,
马诺伊
您好,Manoj:
也许客户更喜欢使用钻头现场例行程序。 我向他推荐了这种程序,但客户表示他不想使用。
此外,客户提到,根据上述配置修改程序后,可以观察波形。 主波形的 Simo 波形与从属波形的 SOMI 波形一致,但从属波形的 Simo 波形发生偏移。 (由于某些原因,客户无法提供波形图...)
结果是否正确?
此致
这一观察听起来是正确的。