CH573 SPI從機(jī)干擾其它引腳問(wèn)題

CH573F,調(diào)試SPI從機(jī),功能已經(jīng)OK,經(jīng)過(guò)IO定向,用在PB口這一組SPI,

我將PA15,用作一個(gè)檢測(cè)輸入,配置為上拉,中斷,測(cè)試到主機(jī)訪問(wèn)MCU時(shí),改IO口會(huì)誤檢測(cè)。

產(chǎn)生中斷信號(hào),實(shí)際測(cè)量PB口的SPI通訊時(shí),PA15會(huì)隨著CS信號(hào)產(chǎn)生低電平。

硬件確認(rèn)兩個(gè)PIN是沒(méi)有短路的,將PA15懸空,用示波器抓也確定是有干擾。

是否還有什么原因呢問(wèn)題沒(méi)有考慮到的呢?

下圖為MCU的SPI初始化。

//SPI0 初始化

void userSPI0Init(void)

{

//PRINT( "SPI0 Init\n");

GPIOPinRemap( ENABLE, RB_PIN_SPI0 );//SPI0重映射到PB口

GPIOB_ModeCfg( GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15, GPIO_ModeIN_Floating );

SPI0_SlaveInit();

SetFirstData(0xA5);

SPI0_ITCfg( ENABLE, RB_SPI_IE_FST_BYTE);

PFIC_EnableIRQ( SPI0_IRQn );

R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;//關(guān)閉DMA

spiSendData.u32Data = 0;

}

//SPI0 中斷服務(wù)函數(shù)

//調(diào)試pritf時(shí),要主要主機(jī)時(shí)鐘不要太快。

__attribute__((interrupt("WCH-Interrupt-fast")))

__attribute__((section(".highcode")))

void SPI0_IRQHandler(void)

{

UINT8 temp;

if(SendOrRecvMode == RECEIVE_MODE)//接收模式

{

if(SPI0_GetITFlag(RB_SPI_IF_FST_BYTE))

{

temp = (UINT8)(R8_SPI0_BUFFER);

//PRINT("CMD_%02X\n", temp);

SPI0_ClearITFlag(RB_SPI_IF_FST_BYTE);//重置首字節(jié)接收中斷標(biāo)記

SPI0_ClearITFlag(RB_SPI_IF_BYTE_END);

SPI0_ITCfg( ENABLE, RB_SPI_IE_BYTE_END);//啟用字節(jié)傳輸完成中斷

rwFlag = (UINT8)(temp&0x80?MCU_CMD_READ:MCU_CMD_WRITE);

recCMD = (UINT8)(temp&0x7f);

if(rwFlag == MCU_CMD_READ)//讀指令,即將進(jìn)入發(fā)送模式

{

SendOrRecvMode = SEND_MODE;

readCommandProcess(recCMD);//刷新spiSendBuff內(nèi)容4個(gè)字節(jié)。

GPIOB_ModeCfg(SPI_MISO_PIN, GPIO_ModeOut_PP_5mA);//配置MISO發(fā)送

R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR; //配置FIFO方向?yàn)榘l(fā)送

rCnt = 0;

R8_SPI0_FIFO = spiSendData.u8Buff[rCnt];

//PRINT("S_%d %02X\n", rCnt, R8_SPI0_FIFO);

rCnt++;

}

else

{

rCnt = 0;

//PRINT("SPI_R\n");

}

}

else if(SPI0_GetITFlag(RB_SPI_IF_BYTE_END))//接收完單個(gè)字節(jié)

{

if(rCnt < SPI_BUFF_LEN)

{

recOK = 1;

spiRecData.u8Buff[rCnt] = (UINT8)(R8_SPI0_BUFFER);

//PRINT("R = %02X\n", spiRecData.u8Buff[rCnt]);

rCnt++;

}

SPI0_ClearITFlag(RB_SPI_IF_BYTE_END);

}

}

else//指令已經(jīng)成立,發(fā)送模式

{

if(SPI0_GetITFlag(RB_SPI_IF_BYTE_END))//接收完單個(gè)字節(jié)

{

R8_SPI0_FIFO = spiSendData.u8Buff[rCnt];

//PRINT("S_%d %02X\n", rCnt, R8_SPI0_FIFO);

rCnt++;

SPI0_ClearITFlag(RB_SPI_IF_BYTE_END);

}

}

}


PA15不要開(kāi)啟上拉模式,可以設(shè)置下拉或者推挽輸出,這樣就沒(méi)有影響了。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频