单片机/MCU论坛
直播中

石飞鹏

7年用户 971经验值
私信 关注

psoc6在进入睡眠前配置了spi的口为高阻态,spi无法正常工作是为什么?

现在使用psoc6.  发现spi口。 在进入deepsleep模式前,我想降低功耗,将spi口配置为高阻态模式:
//----------------------------------------------------
    Cy_GPIO_SetDrivemode( SPI_GSensor_sclk_m_PORT, SPI_GSensor_sclk_m_NUM,CY_GPIO_DM_ANALOG);
    Cy_GPIO_SetDrivemode( SPI_GSensor_mosi_m_PORT, SPI_GSensor_mosi_m_NUM,CY_GPIO_DM_ANALOG);
    Cy_GPIO_SetDrivemode( SPI_GSensor_miso_m_PORT, SPI_GSensor_miso_m_NUM,CY_GPIO_DM_ANALOG);
    Cy_GPIO_SetDrivemode( SPI_GSensor_ss0_m_PORT, SPI_GSensor_ss0_m_NUM,CY_GPIO_DM_ANALOG);

   Cy_SysPm_DeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);

  BMI270_SPI_Init();
//-------------------------------------------------------
void BMI270_SPI_Init( void )
{
    Cy_SCB_SPI_Init(SPI_GSensor_HW,  SPI_GSensor_config, NULL);
    Cy_SCB_SPI_SetActiveSlaveSelect(SPI_GSensor_HW, SPI_GSensor_SPI_SLAVE_SELECT0);
    /* Unmasking only the spi done interrupt bit */
    SPI_GSensor_HW->INTR_M_MASK = SCB_INTR_M_SPI_DONE_Msk;


    /* Configure User ISR */
    Cy_SysInt_Init( ISR_SPI2_cfg,  ISR_SPI2 );
   
    /* Enable the interrupt */
    NVIC_EnableIRQ( ISR_SPI2_cfg.intrSrc );   
    Cy_SCB_SPI_Enable(SPI_GSensor_HW);
}

//-----------------------------------------------------------
我发现一个问题就是我如果在进入睡眠前配置了spi的口为高阻态,在睡眠唤醒后,我的spi重新初始化也无法正常工作。 读到的设备数据异常。 我在程序中屏蔽掉配置高阻态的代码才能正常工作,请问是否我在睡眠唤醒后需要从新配置一下io口,在哪里配置,有参考代码吗?  
                                                                                                                                                                                                                                                                                                                                                                                                

回帖(1)

李凤璐

2024-2-21 14:06:04
SCB组件管脚在低功耗模式下可能会造成漏电流,如RX脚上的未知电平,因此需要在进入低功耗模式之前将RX配置为阻性上/下拉模式,CLK/CS需要视情况配置为Analog High-Z, 唤醒后再配回原来的模式,如果PSoC 6 SPI做主设备,CLK/CS也可以不用配置,你可以试下。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分