打印
[技术问答]

HC32L196的LPTIM0可用XTL时钟吗

[复制链接]
1199|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
maxfall|  楼主 | 2022-3-25 12:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
就用官方的示例程序,试用rcl时钟正常,但用xtl时钟不能触发中断。硬件没问题,因为XTL作为RTC时钟正常。


int32_t main(void)
{
    ///< 系统时钟初始化
    App_SysClkInit();     
    ///< GPIO初始化
    App_GPIOInit();
    ///< LPTimer0初始化
    App_LPTimer0Init();
   
   // while (Gpio_GetInputIO(Button_PORT,Button_PIN) == 1);   //等待user key按下
    Lptim_Cmd(M0P_LPTIMER0, TRUE);                          //启动lptimer0运行   
   // Gpio_WriteOutputIO(LED_PORT, LED_PIN, FALSE);           //熄灭LED

    ///< 休眠模式GPIO配置
  //  App_LowPowerModeGpioSet();
   // Lpm_GotoDeepSleep(TRUE);                                //进入深度睡眠模式
    while (1)
    {
        if(ItFlag == 1)
        {
            ItFlag = 0;
        }
    }
}



/**
******************************************************************************
** \brief  LPTIMER0中断服务函数
**
** \return 无
******************************************************************************/
void LpTim0_IRQHandler(void)
{
    if (TRUE == Lptim_GetItStatus(M0P_LPTIMER0))
    {
        ItFlag = 1;
        Lptim_ClrItStatus(M0P_LPTIMER0);//清除LPTIMER0的中断标志位      

        Gpio_WriteOutputIO(STK_LED_PORT, STK_LED_PIN, TRUE);     //输出高,点亮LED
        delay1ms(500);
        Gpio_WriteOutputIO(STK_LED_PORT, STK_LED_PIN, FALSE);     //输出高,点亮LED
    }
}


static void App_SysClkInit(void)
{
    stc_sysctrl_clk_cfg_t  stcClkCfg;
   
    //CLK INIT
    stcClkCfg.enClkSrc  = SysctrlClkRCH;
    stcClkCfg.enHClkDiv = SysctrlHclkDiv1;
    stcClkCfg.enPClkDiv = SysctrlPclkDiv1;
    Sysctrl_ClkInit(&stcClkCfg);
   
    //使能RCL
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
   
      Sysctrl_ClkSourceEnable(SysctrlClkXTL, TRUE);   


}

/**
******************************************************************************
** \brief  初始化外部GPIO引脚
**
** \return 无
******************************************************************************/
static void App_GPIOInit(void)
{
    stc_gpio_cfg_t         GpioInitStruct;
    DDL_ZERO_STRUCT(GpioInitStruct);
   
    //使能GPIO外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
   
    //PD14设置为GPIO-->LED控制脚
    GpioInitStruct.enDir  = GpioDirOut;
    Gpio_Init(STK_LED_PORT, STK_LED_PIN, &GpioInitStruct);

    //PA07作为按键输入
    GpioInitStruct.enDir  = GpioDirIn;
    Gpio_Init(STK_USER_PORT, STK_USER_PIN, &GpioInitStruct);
   
    Gpio_WriteOutputIO(STK_LED_PORT, STK_LED_PIN, TRUE);     //输出高,点亮LED   
}

/**
******************************************************************************
** \brief  初始化LPTIMER0
**
** \return 无
******************************************************************************/
static void App_LPTimer0Init(void)
{
    stc_lptim_cfg_t    stcLptCfg;   
    DDL_ZERO_STRUCT(stcLptCfg);

    ///< 使能LPTIM0 外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim0, TRUE);
   
    stcLptCfg.enGate   = LptimGateLow;
    stcLptCfg.enGatep  = LptimGatePLow;
    stcLptCfg.enTcksel = LptimXtl;
    stcLptCfg.enTogen  = LptimTogEnLow;
    stcLptCfg.enCt     = LptimTimerFun;         //计数器功能
    stcLptCfg.enMd     = LptimMode1;            //工作模式为模式1:无自动重装载16位计数器/定时器
    stcLptCfg.u16Arr   = 0;                     //预装载寄存器值
    Lptim_Init(M0P_LPTIMER0, &stcLptCfg);
   
    Lptim_ClrItStatus(M0P_LPTIMER0);        //清除中断标志位
    Lptim_ConfIt(M0P_LPTIMER0, TRUE);       //允许LPTIMER中断   
    EnableNvic(LPTIM_0_1_IRQn, IrqLevel3, TRUE);
}

使用特权

评论回复
沙发
maxfall|  楼主 | 2022-3-25 12:50 | 只看该作者
寄存器如下

无标题.png (308.75 KB )

无标题.png

使用特权

评论回复
板凳
maxfall|  楼主 | 2022-3-25 12:58 | 只看该作者
解决了,贴图过程发现XTL_CR寄存器参数可以修改,把DRIVER改成最大就可以了

使用特权

评论回复
评论
martinhu 2022-3-25 17:55 回复TA
选一个合适的驱动能力,不然可能XTL没跑起来 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

1

粉丝