请教ch579四线全双工SPI读写函数

两个问题:

(1)spi全双工能否这样写?谢谢

uint8_t ch57x_hal_spi_transfer(uint8_t data) {

    R8_SPI0_BUFFER = data;

    while ( !(R8_SPI0_INT_FLAG & RB_SPI_FREE) );

    return ( R8_SPI0_BUFFER );

}



(2)官方给的例程这样写,读、写分开的:

ch579的datasheet描述 :FIFO 方向设置位RB_SPI_FIFO_DIR置为1:输入模式(指示接收数据)

但官方给的函数无论是写还是读,RB_SPI_FIFO_DIR都是置0

如下:

/*******************************************************************************

* Function Name  : SPI0_MasterSendByte

* Description    : 发送单字节 (buffer)

* Input          : d: 发送字节

* Return         : None

*******************************************************************************/

void SPI0_MasterSendByte( UINT8 d )

{

    R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR;

    R8_SPI0_BUFFER = d;

    while( !(R8_SPI0_INT_FLAG & RB_SPI_FREE) );

}


/*******************************************************************************

* Function Name  : SPI0_MasterRecvByte

* Description    : 接收单字节 (buffer)

* Input          : None

* Return         : 接收到的字节

*******************************************************************************/

UINT8 SPI0_MasterRecvByte( void )

{

    R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR;

    R8_SPI0_BUFFER = 0xFF;           // 启动传输

    while( !(R8_SPI0_INT_FLAG & RB_SPI_FREE) );

    return ( R8_SPI0_BUFFER );

}


QQ拼音截图20231215144107.jpg

RB_SPI_FIFO_DIR这个设置是不是仅对FIFO方式?单字节读写无需关注?


多字节的接收注意配置该位为1,注意初始化的时候配置一下即可。

可以直接使用例程的操作,收发都可以参考的。

操作SPI中断DMA可以参考:

CH58xSPI0中断DMA - SweetTea_lllpc - 博客园 (cnblogs.com)


只有登录才能回复,可以选择微信账号登录