/**
* @brief ReadByteFromSPI(int *pbyByte, const int msb_lsb)
* @param
Reads one byte from the spi port. This may or may not cause a sclk or send
event. If there is something waiting in the spi RX buffer, this will not
cause an sclk shift from the spi
* @retval NO_ERR
*/
ERROR_CODE ReadByteFromSPI(int*pbyByte,constint msb_lsb){int nTimeOut =1000;if( NO_ERR !=Wait_For_SPIF()){return POLL_TIMEOUT;}// don't read until there is something to read.// as a master mode needs to send data to slave first then read the datas*pTXSPIB =0x0000;while(!(RXS &*pSPISTATB)){if( nTimeOut--<0){return POLL_TIMEOUT;}}*pbyByte =*pRXSPIB &0x0FF0;*pbyByte >>=4;/*Low four bits is garbage data*/return NO_ERR;}
voidClear_SPI_CS(void);voidAssert_SPI_CS(void);/* Exported constants --------------------------------------------------------*/voidAssert_SPI_CS(void){//Then control the level of flag 4sysreg_bit_clr( sysreg_FLAGS, FLG4 );//logic low}voidClear_SPI_CS(void){//Then control the level of flag 4sysreg_bit_set( sysreg_FLAGS, FLG4 );//Logic high}/**
* @brief SPI init function
DPI PINs:
DPI_P06 --> SPI_DS (Master mode)
DPI_P10 <-- SPI_CLK
DPI_P09 --> SPI_MISO
SPI_MOSI unused!
* @retval None
*/
ERROR_CODE SetupSPIforADC(void){SRU2(SPIB_CLK_O,DPI_PB10_I);SRU2(HIGH,DPI_PBEN10_I);//SRU2(SPIB_CLK_PBEN_O, DPI_PBEN10_I);SRU2(DPI_PB09_O, SPIB_MISO_I);/*Connect DPI PB9 to MISO*/SRU2(LOW, DPI_PBEN09_I);/*set DPI PB09 input*///SRU(SPIB_MISO_PBEN_O, DPI_PBEN09_I);#if SPIFLGB_EN// for the ADC pins to act as chip selectSRU2(SPIB_FLG0_O, DPI_PB06_I);/*Connect SPI_FLG0 DS to DPI PB06.*/SRU2(SPIB_FLG0_PBEN_O, DPI_PBEN06_I);//SRU2(HIGH, DPI_PBEN06_I); /*set DPI PB06 output*/*pSPIFLGB =0xF81;#else// for the flag pins to act as chip selectSRU2(FLAG4_O, DPI_PB06_I);SRU2(HIGH, DPI_PBEN06_I);//First set flag 4 as an outputsysreg_bit_set( sysreg_FLAGS, FLG4O );//asm("bit set flags FLG4O;");sysreg_bit_set( sysreg_FLAGS, FLG4 );//Logic high#endif*pSPIDMACB =0;*pSPIBAUDB = BAUD_RATE_DIVISOR;*pSPICTLB =(SPIEN|SPIMS|SENDZ|TIMOD1|WL16|MSBF);return NO_ERR;}/**
* @brief ReadBuffer
* @PURPOSE (1 Byte)
Returns the 16-bit value of the Buffer
* @OUTPUTS second read byte ,
first 4 read bit is garbage.
Core sends the command
* @retval None
*/
ERROR_CODE ReadADC(int*pBuffer){// clear the TX or RX buffer*pSPICTLB |=(RXFLSH | TXFLSH);asm("nop;");asm("nop;");asm("nop;");// enable TX and RX buffer*pSPICTLB &=((~RXFLSH)&(~TXFLSH));#if SPIFLGB_EN// This is a dummy read which pulls in the// SO data clocked in from the write.if( NO_ERR !=ReadByteFromSPI(pBuffer, MSBF)){return POLL_TIMEOUT;}#elseAssert_SPI_CS();// This is a dummy read which pulls in the// SO data clocked in from the write.if( NO_ERR !=ReadByteFromSPI(pBuffer, MSBF)){Clear_SPI_CS();return POLL_TIMEOUT;}Clear_SPI_CS();#endifreturn NO_ERR;}