CH573 SPI从机干扰其它引脚问题

CH573F,调试SPI从机,功能已经OK,经过IO定向,用在PB口这一组SPI,

我将PA15,用作一个检测输入,配置为上拉,中断,测试到主机访问MCU时,改IO口会误检测。

产生中断信号,实际测量PB口的SPI通讯时,PA15会随着CS信号产生低电平。

硬件确认两个PIN是没有短路的,将PA15悬空,用示波器抓也确定是有干扰。

是否还有什么原因呢问题没有考虑到的呢?

下图为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;//关闭DMA

spiSendData.u32Data = 0;

}

//SPI0 中断服务函数

//调试pritf时,要主要主机时钟不要太快。

__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);//重置首字节接收中断标记

SPI0_ClearITFlag(RB_SPI_IF_BYTE_END);

SPI0_ITCfg( ENABLE, RB_SPI_IE_BYTE_END);//启用字节传输完成中断

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

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

if(rwFlag == MCU_CMD_READ)//读指令,即将进入发送模式

{

SendOrRecvMode = SEND_MODE;

readCommandProcess(recCMD);//刷新spiSendBuff内容4个字节。

GPIOB_ModeCfg(SPI_MISO_PIN, GPIO_ModeOut_PP_5mA);//配置MISO发送

R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR; //配置FIFO方向为发送

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))//接收完单个字节

{

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//指令已经成立,发送模式

{

if(SPI0_GetITFlag(RB_SPI_IF_BYTE_END))//接收完单个字节

{

R8_SPI0_FIFO = spiSendData.u8Buff[rCnt];

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

rCnt++;

SPI0_ClearITFlag(RB_SPI_IF_BYTE_END);

}

}

}


PA15不要开启上拉模式,可以设置下拉或者推挽输出,这样就没有影响了。


只有登录才能回复,可以选择微信账号登录