2 Replies Latest reply on Jan 12, 2020 10:22 PM by ShipingW_81

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

    JeHa_3912621

      现在使用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. Re: 关于deepsleep的IO口配置问题请教
          JeHa_3912621

          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初始化。 发现可以正常工作了。 但是这方面的细节资料,是否有,如果有能否提供一下作为参考。

          • 2. Re: 关于deepsleep的IO口配置问题请教
            ShipingW_81

            JeHa_3912621

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

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