Hi Sir,
I used F2812 McBSP as an SPI Slave. F2812 receive data from ADC device per 3600/sec. When F2812 receive 3600 times , F2812 will transmit 1 command data to ADC device. sometime the F2812 can't detect McbspaRegs.SPCR2.bit.XRDY = 1
TX : polling
RX: interrupt
initial setting:
void InitMcBSP(void)
{ //int i;
//*************** RESET MCBSP
McbspaRegs.SPCR2.bit.FRST=0; // Frame Sync generator reset
McbspaRegs.SPCR2.bit.GRST=0; // Sample Rate generator Reset
McbspaRegs.SPCR2.bit.XRST=0; // Transmitter reset
McbspaRegs.SPCR1.bit.RRST=0; // Receiver reset
//*************** Initialise McBSP Registers
// McBSP register settings for Digital loop back
McbspaRegs.SPCR2.all=0x0000; // XRST =0, XINTM=00b, GRST=0, FRST=0
McbspaRegs.SPCR1.all=0x0000; // RRST =0, RINTM=00b, CLKSTOP =00b; DLB disabled
McbspaRegs.RCR2.all=0x0005; // Single phase; receive frame length2, word length=>don't care; 1-bit delay
McbspaRegs.RCR1.all=0x0040; // Receive frame length1:1 word, receive word length:16bits
McbspaRegs.XCR2.all=0x0005; // Single phase; transmit frame length2, word length=>don't care; 1-bit delay
McbspaRegs.XCR1.all=0x0040; // Transmit frame length1:1 word, Transmit word length:16bits
McbspaRegs.SRGR2.all=0x2000;
McbspaRegs.SRGR1.all=0x0001;
McbspaRegs.MCR2.all=0x0000;
McbspaRegs.MCR1.all=0x0000;
McbspaRegs.PCR.all=0x0800;
McbspaRegs.MFFTX.all=0x4021;
McbspaRegs.MFFRX.all=0x002d;
McbspaRegs.MFFCT.all=0x0000;
McbspaRegs.MFFINT.all=0x0000;
McbspaRegs.MFFST.all=0x000;
//************** Enable FIFO
McbspaRegs.MFFTX.bit.TXFIFO_RESET=1;
McbspaRegs.MFFRX.bit.RXFIFO_RESET=1;
//************* Enable Sample rate generator
McbspaRegs.SPCR2.bit.GRST=1;
delay_loop();
//************ Enable TX/RX INT in nonFIFO mode
// McbspaRegs.MFFINT.bit.XINT=1;
//McbspaRegs.MFFINT.bit.RINT=1;
//************ Enable TX/RX unit
McbspaRegs.SPCR2.bit.XRST=1;
McbspaRegs.SPCR1.bit.RRST=1;
}
//=============================================
McBSP write program
void McBSP_write16(unsigned int mcbspdata)
{ int i;
for (i=0; i<5; i++)
{ McbspaRegs.DXR1.all= mcbspdata;
while (McbspaRegs.SPCR2.bit.XRDY != 1); ---> F2812 sometime will HALT here
asm(" nop");
asm(" nop");
asm(" nop");
}
}
======================================================
when F2812 HALT CCS watch window