/*
 * @Description: 低功耗模块-bsp层
 * @Author: yangsw
 * @Date: 2021-06-28 13:44:52
 * @LastEditTime: 2024-01-29 09:49:54
 * @LastEditors: LiDa
 * @Reference: 
 */
#include "sr_bsp_lp.h"
#include "sr_gpio.h"
#include "sr_uart.h"
#include "sr_timer.h"
#include "sr_adc.h"



/**
 * @brief: 初始化引脚配置
 * @param  {void}
 * @return {void}
 * @see: 
 */
void BspLpInit(void)//全部引脚上拉输入，防止有引脚未初始化  //浮空状态设置成reset功耗才能下降??
{
    SR_GPIO_CFG_T gpioCfg={0};
    gpioCfg.altFun = SR_GPIO_NOAF;      //无复用
    
    //PB4:PWR_PAUSE_EN   SR_GPIO24
    gpioCfg.gpioMode = SR_GPIO_OUTPUT;  //推挽输出
    gpioCfg.pull = SR_GPIO_NP;          //无上下拉   
    gpioCfg.initLvl = SR_GPIO_HIGH;     //初始电平 高
    SR_HalGpioInit(SR_GPIO24,&gpioCfg);

    //未使用：PB1/PB2/PB5/PB8/PB9
    //SR_GPIO21/SR_GPIO22/SR_GPIO25/SR_GPIO28/SR_GPIO29
    gpioCfg.gpioMode = SR_GPIO_INPUT;   //输入
    gpioCfg.pull = SR_GPIO_PU;          //上拉   
    SR_HalGpioInit(SR_GPIO21,&gpioCfg);
    SR_HalGpioInit(SR_GPIO22,&gpioCfg);
    SR_HalGpioInit(SR_GPIO25,&gpioCfg);
    SR_HalGpioInit(SR_GPIO28,&gpioCfg);
    SR_HalGpioInit(SR_GPIO29,&gpioCfg);


    //DEBUG串口脚：PB14(A_RX)/PB15(B_TX)
    //SR_GPIO34/SR_GPIO35  上拉输入
    SR_HalGpioInit(SR_GPIO34,&gpioCfg);
    SR_HalGpioInit(SR_GPIO35,&gpioCfg);
  
}



/**
 * @brief: 低功耗引脚配置
 * @param  {void}
 * @return {void}
 * @note: U1(MD5336):最大2.5uA、典型1.2uA
 * U7(R8025T):典型0.8uA/3V
 * U5(SPX3010):典型0.1uA
 * U3(MP3414DJ):关机最大电流3uA、典型1uA
 * U4(HT24LC32):最大3uA
 * LCD80278:8uA~10uA
 * 红外RX使能:3.3uA~4uA
 * 所有外部未接设备的引脚配置为上拉输入
 * @see: 
 */
void BspLpGpioSet(void)
{
    SR_GPIO_CFG_T gpioCfg={0};
    gpioCfg.altFun = SR_GPIO_NOAF;      //无复用

    if(Svc_Com_Sys_Get_Work_Mode()==E_FactoryTestMode)
    {
      //DEBUG串口脚：PB14(A_RX)/PB15(B_TX) 模拟
      gpioCfg.gpioMode = SR_GPIO_ANALOG;  //模拟
      gpioCfg.pull = SR_GPIO_NP;          //无上下拉   
      SR_HalGpioInit(SR_GPIO34,&gpioCfg);
      SR_HalGpioInit(SR_GPIO35,&gpioCfg);


      //PB6(P)/B7(N)  SR_GPIO26/SR_GPIO27  模拟
      SR_HalGpioInit(SR_GPIO26,&gpioCfg);
      SR_HalGpioInit(SR_GPIO27,&gpioCfg);


      //PA11：  SR_GPIO11  输入上拉
      gpioCfg.gpioMode = SR_GPIO_INPUT;  //输入
      gpioCfg.pull = SR_GPIO_PU;         //上拉 
      SR_HalGpioInit(SR_GPIO11,&gpioCfg);

      //PA12：  SR_GPIO12  输入上拉
      SR_HalGpioInit(SR_GPIO11,&gpioCfg);

      //PA10:   SR_GPIO10   置0
      SR_HalGpioWrite(SR_GPIO10, SR_GPIO_LOW);

    }
    else
    {
      //DEBUG串口脚：PB14(A_RX)/PB15(B_TX) 输入上拉
      gpioCfg.gpioMode = SR_GPIO_INPUT;  //输入
      gpioCfg.pull = SR_GPIO_PU;         //上拉 
      SR_HalGpioInit(SR_GPIO34,&gpioCfg);
      SR_HalGpioInit(SR_GPIO35,&gpioCfg);

      //PB6(P)/B7(N)  SR_GPIO26/SR_GPIO27  输入上拉
      SR_HalGpioInit(SR_GPIO26,&gpioCfg);
      SR_HalGpioInit(SR_GPIO27,&gpioCfg);    

    }

    /****ADC****/  
    //PA0(vin_check_en ) 推挽输出、无上下拉
    gpioCfg.gpioMode = SR_GPIO_OUTPUT;  //推挽输出
    gpioCfg.pull = SR_GPIO_NP;          //无上下拉 
    gpioCfg.initLvl = SR_GPIO_LOW;      //初始电平  低
    SR_HalGpioInit(SR_GPIO0,&gpioCfg);  

    //PA1(vin_check_ad )
    gpioCfg.gpioMode = SR_GPIO_INPUT;  //输入
    gpioCfg.pull = SR_GPIO_NP;          //无上下拉 
    SR_HalGpioInit(SR_GPIO1,&gpioCfg);  
    SR_HalGpioWrite(SR_GPIO1, SR_GPIO_LOW);  //置0

    /****flash****/
    //PB0(FLASH_CS)
    gpioCfg.gpioMode = SR_GPIO_OUTPUT;  //推挽输出
    gpioCfg.pull = SR_GPIO_NP;          //无上下拉 
    gpioCfg.initLvl = SR_GPIO_LOW;      //初始电平  低
    SR_HalGpioInit(SR_GPIO20,&gpioCfg); 

    //PA5/PA6/PA7  FLASH_SPI_MOSI,FLASH_SPI_MISO,FLASH_SPI_CLK
    SR_HalGpioInit(SR_GPIO5,&gpioCfg); 
    SR_HalGpioInit(SR_GPIO6,&gpioCfg); 
    SR_HalGpioInit(SR_GPIO7,&gpioCfg); 

    //PA4(FLASH_EN) 
    gpioCfg.initLvl = SR_GPIO_HIGH;      //初始电平  高
    SR_HalGpioInit(SR_GPIO4,&gpioCfg); 

    /****网卡（NB）****/
    //PA9(nb_en)  PA2(TX)  PB12(rst)
    gpioCfg.initLvl = SR_GPIO_LOW;      //初始电平  低
    SR_HalGpioInit(SR_GPIO9,&gpioCfg); 
    SR_HalGpioInit(SR_GPIO2,&gpioCfg); 
    SR_HalGpioInit(SR_GPIO32,&gpioCfg);

    //PA3(RX)
    gpioCfg.gpioMode = SR_GPIO_INPUT;  //输入
    gpioCfg.pull = SR_GPIO_NP;         //无上下拉
    SR_HalGpioInit(SR_GPIO3,&gpioCfg); 
    SR_HalGpioWrite(SR_GPIO3, SR_GPIO_HIGH);  //置1

    /****红外****/
    //PA8
    gpioCfg.gpioMode = SR_GPIO_OUTPUT;  //推挽输出
    gpioCfg.pull = SR_GPIO_NP;          //无上下拉 
    gpioCfg.initLvl = SR_GPIO_LOW;      //初始电平  低
    SR_HalGpioInit(SR_GPIO8,&gpioCfg); 

    /****LED****/
    //PA15/PB3
    gpioCfg.gpioMode = SR_GPIO_OUTPUT;  //推挽输出
    gpioCfg.pull = SR_GPIO_NP;          //无上下拉 
    gpioCfg.initLvl = SR_GPIO_HIGH;      //初始电平  高
    SR_HalGpioInit(SR_GPIO15,&gpioCfg); 
    SR_HalGpioInit(SR_GPIO23,&gpioCfg); 
}

/**
 * @brief: 低功耗外设失能
 * @param  {void}
 * @return {void}
 * @note: 
 * @see: 
 */
void BspLpFuncDisable(void)
{
    //调用相关外设的close去初始化，去初始化外设、时钟、中断等等
    SR_DEVICE_T *dev=SR_NULL;

    //debug串口
    //红外串口，不能失能，否则唤醒后需要重新初始化，来不及接收数据

    //UART2  网卡的串口
    dev = SR_HalUartOpen(SR_UART2);
    SR_HalUartClose(dev);

    //定时器1
    dev = SR_HalTimOpen(SR_TIM1);
    SR_HalUartClose(dev);

    //ADC
    dev = SR_HalAdcOpen(SR_ADC1);
    SR_HalAdcClose(dev);
}

/**
 * @brief: 低功耗降频
 * @param  {void}
 * @return {void}
 * @note: halt模式下，16M主频比2M主频多1.5uA左右的电流
 * @see: 
 */
void BspLpHaltClk(void)
{
  // // //寄存器重置
  // CLK_DeInit();
  // //   /* Select HSE as system clock source */
  // CLK_SYSCLKSourceSwitchCmd(ENABLE);
  // CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
  // /* system clock prescaler: 1*/
  // CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
  // //while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI);
}