原创
NUC100SeriesBSP 中 SPI 功能扩充
在BSP中提供了几个对SPI进行操作的函数
uint8_t DrvSPI_SingleRead(E_DRVSPI_PORT eSpiPort, uint32_t *pu32Data){
if(SPI_PORT[eSpiPort]->CNTRL.GO_BUSY==1)
return FALSE;
*pu32Data = SPI_PORT[eSpiPort]->RX[0];
SPI_PORT[eSpiPort]->CNTRL.GO_BUSY = 1;
return TRUE;;
uint8_t DrvSPI_SingleWrite(E_DRVSPI_PORT eSpiPort, uint32_t *pu32Data);
上面是读和写的函数.
DrvSPI_SingleRead 这个函数有些缺陷,第一次读的数据是无效的.也不符合使用习惯.
一般8位SPI读需要发送一个读命令并带上地址,后跟的8位时钟把返回的数据读入.所以增加一个下面的函数.
uint8_t DrvSPI_ReadAfterWrite(E_DRVSPI_PORT eSpiPort, uint32_t *pu32TxData, uint32_t *pu32RxData){
if(SPI_PORT[eSpiPort]->CNTRL.GO_BUSY==1)
return FALSE;
SPI_PORT[eSpiPort]->TX[0] = *pu32TxData;
SPI_PORT[eSpiPort]->CNTRL.GO_BUSY = 1;
while(SPI_PORT[eSpiPort]->CNTRL.GO_BUSY);
*pu32RxData = SPI_PORT[eSpiPort]->RX[0];
return TRUE;
}
将SPI配置成16位收发,8位数据左移8位变成16位,在前8个时钟发送出去,后8个时钟接收到8位数据.
文章评论(0条评论)
登录后参与讨论