低功耗蓝牙芯片CH582,CH592等IC的SPI例程主机利用两线模式实现半双工通讯

发布时间 2024-01-04 16:20:35作者: ZDeST

主机初始化
void SPI0_MasterDefInit(void)
{
    R8_SPI0_CLOCK_DIV = 4; // 主频时钟4分频
    R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
    R8_SPI0_CTRL_MOD =  RB_SPI_SCK_OE | RB_SPI_2WIRE_MOD;//使能两线模式
    R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF;     // 访问BUFFER/FIFO自动清除IF_BYTE_END标志
    R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE; // 不启动DMA方式
}

 

    // 单字节发送
    GPIOA_SetBits(GPIO_Pin_15);
    GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_5mA);//配置IO为输出方向
    R8_SPI0_CTRL_MOD |= RB_SPI_MISO_OE;//MISO 输出使能,用作两线SPI模式下的SPI输出
    GPIOA_ResetBits(GPIO_Pin_12);
    SPI0_MasterSendByte(0x55);
    GPIOA_SetBits(GPIO_Pin_12);
    PRINT("send end\n");

 

    GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU);//配置IO为输入方向
    R8_SPI0_CTRL_MOD &= ~RB_SPI_MISO_OE;//MISO 输出禁止,用作两线SPI模式下的SPI输入
    GPIOA_ResetBits(GPIO_Pin_12);
    i = SPI0_MasterRecvByte();
    GPIOA_SetBits(GPIO_Pin_12);
    PRINT("receive %x\n",i);