现在使用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口,在哪里配置,有参考代码吗?
已解决! 转到解答。
目前还没有专门的文档介绍这块。
SCB组件管脚在低功耗模式下可能会造成漏电流,如RX脚上的未知电平,因此需要在进入低功耗模式之前将RX配置为阻性上/下拉模式,CLK/CS需要视情况配置为Analog High-Z, 唤醒后再配回原来的模式,如果PSoC 6 SPI做主设备,CLK/CS也可以不用配置,你可以试下。
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初始化。 发现可以正常工作了。 但是这方面的细节资料,是否有,如果有能否提供一下作为参考。
目前还没有专门的文档介绍这块。
SCB组件管脚在低功耗模式下可能会造成漏电流,如RX脚上的未知电平,因此需要在进入低功耗模式之前将RX配置为阻性上/下拉模式,CLK/CS需要视情况配置为Analog High-Z, 唤醒后再配回原来的模式,如果PSoC 6 SPI做主设备,CLK/CS也可以不用配置,你可以试下。