Hello,
I use TMS320F28069. My aim is to use mcBSP for getting data from an ADC. I have doubts about initialization, my current code looks as follows:
void mcbsp_spi_init()
{
// McBSP-A register settings
McbspaRegs.SPCR2.all =0x0000; // Reset FS generator, sample rate generator & transmitter
McbspaRegs.SPCR1.all =0x0000; // Reset Receiver, Right justify word, Digital loopback dis.
McbspaRegs.PCR.all =0x0F08; // (CLKXM=CLKRM=FSXM=FSRM= 1, FSXP = 1)
McbspaRegs.SPCR1.bit.CLKSTP =2; // Together with CLKXP/CLKRP determines clocking scheme (->SPI)
McbspaRegs.PCR.bit.CLKRP =0; // CLKRP = 0 receive data is sampled on the rising edge of CLKX
McbspaRegs.RCR2.bit.RDATDLY =01; // FSX setup time 1 in master mode. 0 for slave mode (Receive)
McbspaRegs.RCR1.bit.RWDLEN1 =4; // 24-bit word
McbspaRegs.SRGR2.all =0x2000; // CLKSM=1, FPER = 1 CLKG periods
McbspaRegs.SRGR1.all =0x000F; // Frame Width = 1 CLKG period, CLKGDV=16
McbspaRegs.SPCR2.bit.GRST =1; // Enable the sample rate generator
delay_loop(); // Wait at least 2 SRG clock cycles
McbspaRegs.SPCR2.bit.XRST =1; // Release TX from Reset
McbspaRegs.SPCR1.bit.RRST =1; // Release RX from Reset
McbspaRegs.SPCR2.bit.FRST =1; // Frame Sync Generator reset
}
Collecting of the data should take place when a data ready signal from ADC is sent, so I use interrupt service routine:
interrupt void adc_drdy(void)
{
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {} // Master waits until RX data is ready
rdata2 = McbspaRegs.DRR2.all; // Read DRR2 first
rdata1 = McbspaRegs.DRR1.all; // Then read DRR1 to complete receiving of data
}
Unfortunately, program stops in line
while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {} // Master waits until RX data is ready
so it looks like RRDY is never set.
I have doubts about SRGR1 and SRGR2 registers, could you please explain in more details how to use it?
Or maybe there are some other things that I should check?