recently, I have encountered the same problem with the DSPI POP Register as Rehan Kehan .The original question issued by Rehan Kehan before, so i quote the detail of the problem as following:
We are using DSPI 0 of MPC5645S device. We have configured the module as RXFIFO disable. Following are our configuration.
DSPI_0.MCR.B.DIS_RXF = 1;
DSPI_0.MCR.B.ROOE = 1;
DSPI_0.RSER.B.RFDF_RE = 0x1; //enable Rx interrupt
DSPI_0.RSER.B.TCF_RE = 0x1; //enable Tx interrupt
DSPI_0.MCR.B.HALT=0; //start the transfers.
This is my ISR
DSPI_0.RSER.B.RFDF_RE = 0;
receive_dspi_data0 = (uint16_t) DSPI_0.POPR.R;
DSPI_0.SR.R = DSPI_0.SR.R | 0x80020000;
receive_flag0 = 1;
DSPI_0.RSER.B.RFDF_RE = 1;
The problem is whenever ISR gets triggered. The data in variable receive_dspi_data0 read as zero every time even if the POP register value in debugger window shows valid data. What I have found is, this peripherals are memory mapped registers and the DSPI_0.POP is mapped to address 0xfff90038, when I look into memory window the value at this address is zero, but in debugger window it is valid data. what I observed is it takes time to see the valid data at 0xfff90038. but I cannot read the data by using DSPI_0.POPR.R in one time. That's why I am always getting zero value.
In reference manual it is written that
For compatibility, configure the TLB (MMU table) entry for DSPIx_POPR as guarded.
What does it mean. how to make DSPI_0.POP value to be read in one ISR cycle. what I can do so that value at address 0xfff90038 becomes valid data as soon program enters the receive ISR.
the answer to this problem seems didn't work，so i wonder if there is some configurations i missed, pls help！
I'm not sure what's going on but - have you checked if the RFDF flag is set when reading the POPR register? Do you use correct interrupt vector? Have you tried to use polling method? Make sure that the DSPI_POPR register is not read by debugger (close memory window or DSPI registers during test...).