关于deepsleep的IO口配置问题请教

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
JeHa_3912621
Level 3
Level 3
25 replies posted 10 replies posted 10 questions asked

现在使用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口,在哪里配置,有参考代码吗? 

0 点赞
1 解答
ShipingW_81
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 replies posted

JeHa_3912621

目前还没有专门的文档介绍这块。

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

在原帖中查看解决方案

0 点赞
2 回复数
JeHa_3912621
Level 3
Level 3
25 replies posted 10 replies posted 10 questions asked

void BMI_GPIO_Init( void )

{

    Cy_GPIO_SetDrivemode( SPI_GSensor_sclk_m_PORT, SPI_GSensor_sclk_m_NUM, CY_GPIO_DM_STRONG_IN_OFF );

    Cy_GPIO_SetDrivemode( SPI_GSensor_mosi_m_PORT, SPI_GSensor_mosi_m_NUM, CY_GPIO_DM_STRONG);

    Cy_GPIO_SetDrivemode( SPI_GSensor_miso_m_PORT, SPI_GSensor_miso_m_NUM, CY_GPIO_DM_STRONG);

    Cy_GPIO_SetDrivemode( SPI_GSensor_ss0_m_PORT, SPI_GSensor_ss0_m_NUM, CY_GPIO_DM_STRONG_IN_OFF );      

}

我在程序唤醒后首先增加了这段代码。 然后在spi初始化。 发现可以正常工作了。 但是这方面的细节资料,是否有,如果有能否提供一下作为参考。

0 点赞
ShipingW_81
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 replies posted

JeHa_3912621

目前还没有专门的文档介绍这块。

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

0 点赞