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

主机初始化
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);

 

posted on 2024-01-04 16:20  ZDeST  阅读(187)  评论(0编辑  收藏  举报