是這樣的,通過(guò)我的一些分析,SPI作為 從機(jī)只接收是,把?SPI0_SlaveInit();里面的miso使能替換為MOSI使能,但是在通過(guò)中斷每次只接收1個(gè)字節(jié)的情況下,我接收到的數(shù)據(jù)出錯(cuò)了,我可以肯定主機(jī)上的設(shè)置是沒有問(wèn)題,因?yàn)槲以诹硗庖粋€(gè)平臺(tái)上實(shí)現(xiàn)了雙線接收SPI數(shù)據(jù),且沒有錯(cuò)誤這個(gè)過(guò)程,下面是我的代碼,希望可以得到指點(diǎn),我初始化哪里出現(xiàn)了問(wèn)題?
(另外,我主機(jī)SPI上的時(shí)鐘空閑狀態(tài)是高電平,上升沿采樣)
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;//空閑狀態(tài)高電平
? ? 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); // 清除中斷標(biāo)志
? ? ? ? }
}