AB1601快速SPI数据传输程序

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值