问答

汇集网友智慧,解决技术难题

21ic问答首页 - HC32F4A0使用AWD模拟看门狗无法进入中断,该怎么办?

使用 HC32F4 模拟看门狗 F4A0

HC32F4A0使用AWD模拟看门狗无法进入中断,该怎么办?

song20042026-01-26
HC32F4A0使用AWD无法进入中断,AWDSR有置位,但是没有进入中断,这是什么原因?
回答 +关注 0
111人浏览 1人回答问题 分享 举报
1 个回答
  • 在ADC+DMA循环采集的基础上增加以下代码:
    /**
    * @brief  AWD configuration.
    * @param  None
    * @retval None
    */
    static void AdcAwdConfig(void)
    {
        stc_adc_awd_config_t stcAwd;
        //外部电源电压
        stcAwd.u16WatchdogMode  = ADC_AWD_MD;
        stcAwd.u16LowThreshold  = ADC_Ex_AWD_LOW_THRESHOLD_VAL;
        stcAwd.u16HighThreshold = ADC_Ex_AWD_HIGH_THRESHOLD_VAL;
        (void)ADC_AWD_Config(ADC_UNIT, AWD_0, ADC_AWD_CH_ExPower, &stcAwd);
       
        ADC_AWD_Cmd(ADC_UNIT, AWD_0, ENABLE);   
        //外部电池电压
        stcAwd.u16WatchdogMode  = ADC_AWD_MD;
        stcAwd.u16LowThreshold  = ADC_BAT_AWD_LOW_THRESHOLD_VAL;
        stcAwd.u16HighThreshold = ADC_BAT_AWD_HIGH_THRESHOLD_VAL;
        (void)ADC_AWD_Config(ADC_UNIT, AWD_1, ADC_AWD_CH_Batter, &stcAwd);  
       
        ADC_AWD_Cmd(ADC_UNIT, AWD_1, ENABLE);   
       
        ADC_AWD_SetCombMode(ADC_UNIT,ADC_AWD_COMB_AND);
       

    //

    }
    /**
    * @brief  AWD0 IRQ callback.
    * @param  None
    * @retval None
    */
    static void ADC1_Cmp0_IrqCallback(void)
    {
        ADC_AWD_ClearStatus(ADC_UNIT, ADC_AWD_FLAG_AWD0);
        m_u32AdcIrqFlag |= ADC_AWD_FLAG_AWD0;
    }
    /**
    * @brief  AWD0 IRQ callback.
    * @param  None
    * @retval None
    */
    static void ADC1_Cmp1_IrqCallback(void)
    {
        ADC_AWD_ClearStatus(ADC_UNIT, ADC_AWD_FLAG_AWD1);
        m_u32AdcIrqFlag |= ADC_AWD_FLAG_AWD1;
    }


    /**
    * @brief  ADC IRQ configuration.
    * @param  None
    * @retval None
    */
    static void AdcIrqConfig(void)
    {
        stc_irq_signin_config_t stcIrq;

        stcIrq.enIntSrc    = ADC_AWD_INT_SRC0;//
        stcIrq.enIRQn      = ADC_AWD_INT_IRQn;
        stcIrq.pfnCallback = &ADC1_Cmp0_IrqCallback;
        (void)INTC_IrqSignIn(&stcIrq);
       
        NVIC_ClearPendingIRQ(stcIrq.enIRQn);
        NVIC_SetPriority(stcIrq.enIRQn, ADC_AWD_INT_PRIO);
        NVIC_EnableIRQ(stcIrq.enIRQn);
       
        stcIrq.enIntSrc    = ADC_AWD_INT_SRC1;//
        stcIrq.enIRQn      = ADC_AWD_INT_IRQn;
        stcIrq.pfnCallback = &ADC1_Cmp1_IrqCallback;
        (void)INTC_IrqSignIn(&stcIrq);
       
        NVIC_ClearPendingIRQ(stcIrq.enIRQn);
        NVIC_SetPriority(stcIrq.enIRQn, ADC_AWD_INT_PRIO);
        NVIC_EnableIRQ(stcIrq.enIRQn);
        ADC_AWD_IntCmd(ADC_UNIT, ADC_AWD_INT_AWD0, ENABLE);
        ADC_AWD_IntCmd(ADC_UNIT, ADC_AWD_INT_AWD1, ENABLE);
    //    ADC_IntCmd(ADC_UNIT, ADC_INT_EOCA, ENABLE);   

       
    //    ADC_AWD_IntCmd(ADC_UNIT, ADC_AWD_INT_ALL, ENABLE);   
    }

    但是AWD无法进入中断

您需要登录后才可以回复 登录 | 注册