是这样的,通过我的一些分析,SPI作为 从机只接收是,把 SPI0_SlaveInit();里面的miso使能替换为MOSI使能,但是在通过中断每次只接收1个字节的情况下,我接收到的数据出错了,我可以肯定主机上的设置是没有问题,因为我在另外一个平台上实现了双线接收SPI数据,且没有错误这个过程,下面是我的代码,希望可以得到指点,我初始化哪里出现了问题?
(另外,我主机SPI上的时钟空闲状态是高电平,上升沿采样)
void SPI_INIT(void)
{
// PRINT("1.spi0 mul slave mode \n");
GPIOA_ModeCfg( GPIO_Pin_13 | GPIO_Pin_14 , GPIO_ModeIN_PU); //PA13 SCK PA15 MISO
SPI0_SlaveInit();
SPI0_ITCfg(ENABLE,SPI0_IT_BYTE_END);// 开启中断
PFIC_EnableIRQ(SPI0_IRQn);
}
void SPI0_SlaveInit(void)
{
R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
R8_SPI0_CTRL_MOD = RB_SPI_MOSI_OE | RB_SPI_MODE_SLAVE;
R8_SPI0_CTRL_MOD &= ~RB_SPI_MST_SCK_MOD;//空闲状态高电平
R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF;
}
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void SPI0_IRQHandler(void)
{
if(SPI0_GetITFlag(SPI0_IT_BYTE_END))
{
SPI_Rx_Buffer[RxIdx] = SPI0_SlaveRecvByte();
SPI_line_START_END();
RxIdx++;
SPI0_ClearITFlag(SPI0_IT_BYTE_END); // 清除中断标志
}
}