void SPI0_MasterDefInit(void) { R8_SPI0_CLOCK_DIV = 64; // 主频时钟4分频 R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR; R8_SPI0_CTRL_MOD = RB_SPI_SCK_OE | RB_SPI_MST_SCK_MOD; R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF; // 访问BUFFER/FIFO自动清除IF_BYTE_END标志 R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE; // 不启动DMA方式 } void SPI0_Recv_nByte(uint8_t *pbuf, uint16_t len) { uint16_t readlen; readlen = len; R32_PB_DIR &= ~GPIO_Pin_15; R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR; // 设置数据方向为输入 R8_SPI0_CTRL_MOD &= ~RB_SPI_MISO_OE; //禁止MISO输出 R16_SPI0_TOTAL_CNT = len; // 设置需要接收的数据长度,FIFO方向为输入长度不为0则会启动传输 */ R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END; while(readlen) { if(R8_SPI0_FIFO_COUNT) { *pbuf = R8_SPI0_FIFO; pbuf++; readlen--; } } } void SPI0_Send_nByte(uint8_t *pbuf, uint16_t len) { uint16_t sendlen; sendlen = len; R32_PB_DIR |= GPIO_Pin_15; R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR; // 设置数据方向为输出 R8_SPI0_CTRL_MOD |= RB_SPI_MISO_OE; R16_SPI0_TOTAL_CNT = sendlen; // 设置要发送的数据长度 R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END; while(sendlen) { if(R8_SPI0_FIFO_COUNT < SPI_FIFO_SIZE) { R8_SPI0_FIFO = *pbuf; pbuf++; sendlen--; } } while(R8_SPI0_FIFO_COUNT != 0); // 等待FIFO中的数据全部发送完成 }
以上三个函数是我跟库函数修改,请帮忙看看逻辑是否有问题,现在无法正常通讯。
热门产品 :
CH182: 以太网PHY收发器芯片