U8 SpiRxBuf[16];
void LcdSpiInit(void)
{
Ab_SpiParam init_parm;
DRV_PinMux_GrpSet(SPI_PIN_MASK0, PIN_SPI);
//init_parm.clk = 1000000;
//init_parm.clk = 8000000;
init_parm.clk = 24000000;
init_parm.mode = SPI_MODE0;//ok
//init_parm.mode = SPI_MODE1;//failure
//init_parm.mode = SPI_MODE2;//failure
//init_parm.mode = SPI_MODE3;//ok
init_parm.is_bidirection = false;
AB_SPI_Open(spi1_ins, &init_parm);
DRV_SPI_Int(0, false);
SPI.CONFIG.field.FDM = false;
LCD_PRINT("spi master is open on spi %d mode:%d\n", spi1_ins, init_parm.mode);
}
void DRV_SPI_No_Wait_WriteRead (uint8_t* txbuf, uint16_t txsize, uint8_t* rxbuf, uint16_t rxsize)
{
SPI.TXSRCADDR.reg = (uint32_t)txbuf;
SPI.RXDSTADDR.reg = (uint32_t)rxbuf;
SPI.TBC.reg = txsize;
SPI.RBC.reg = rxsize;
SPI.TXFIFOSZ.reg = txsize + 1;
SPI.RXFIFOSZ.reg = rxsize + 1;
SPI.TXWPTR.field.PTR = txsize;
SPI.RXRPTR.field.PTR = 0;
SPI.CONTROL.field.START = 1;
while(! SPI.STATUS.field.READY);
}
void LcdSpiWriteOneByte(U8 regData)
{
U8 spi_tx_buf[256];
spi_tx_buf[0] = regData;
SPI.TXSRCADDR.reg = (uint32_t)spi_tx_buf;
SPI.RXDSTADDR.reg = (uint32_t)SpiRxBuf;
SPI.TBC.reg = 1;
SPI.RBC.reg = 0;
SPI.TXFIFOSZ.reg = 1 + 1;
SPI.RXFIFOSZ.reg = 0 + 1;
SPI.TXWPTR.field.PTR = 1;
SPI.RXRPTR.field.PTR = 0;
SPI.CONTROL.field.START = 1;
while(! SPI.STATUS.field.READY);
}
U8 LcdSpiReadOneByte(void)
{
U8 spi_tx_buf[256];
SPI.TXSRCADDR.reg = (uint32_t)spi_tx_buf;
SPI.RXDSTADDR.reg = (uint32_t)SpiRxBuf;
SPI.TBC.reg = 0;
SPI.RBC.reg = 1;
SPI.TXFIFOSZ.reg = 0 + 1;
SPI.RXFIFOSZ.reg = 1 + 1;
SPI.TXWPTR.field.PTR = 0;
SPI.RXRPTR.field.PTR = 0;
SPI.CONTROL.field.START = 1;
while(! SPI.STATUS.field.READY);
return SpiRxBuf[0];
}
void LcdSpiWriteMulByte(U8 *pData, U8 dataLen)
{
U16 i;
U8 spi_tx_buf[256];
for(i=0; i<dataLen; i++)
{
spi_tx_buf[i] = pData[i];
}
DRV_SPI_No_Wait_WriteRead(spi_tx_buf, dataLen, SpiRxBuf, 0);
}
U8 LcdSpiReadMulByte(U8 *spi_rx_buf, U8 dataLen)
{
U16 i;
U8 spi_tx_buf[256];
DRV_SPI_No_Wait_WriteRead(spi_tx_buf, 0, SpiRxBuf, dataLen);
for(i=0; i<dataLen; i++)
{
spi_rx_buf[i] = SpiRxBuf[i];
}
return dataLen;
}