原创 NUC100SeriesBSP 中 SPI 功能扩充

2011-7-12 11:38 2019 10 5 分类: MCU/ 嵌入式
在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位数据.
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条