vinci25031891 发表于 2020-5-11 15:05

HC32L136 ADC疑问

本帖最后由 vinci25031891 于 2020-5-12 10:48 编辑

在HC32L136手册的NVIC 7.4中说,如果中断请求在异常处理中没有被清除,异常返回后会被有一次激活
但是在HC32L136example中,并没有清理这个中断请求。这是为什么呢?

void AdcContIrqCallback(void)
{   
    Adc_GetSqrResult(&u16AdcRestult0, 0);
    Adc_GetSqrResult(&u16AdcRestult2, 1);
    Adc_GetSqrResult(&u16AdcRestult5, 2);
    Adc_GetAccResult(&u16AdcRestultAcc);
    stcAdcIrqFlag.bAdcSQRIrq = TRUE;
}
刚接触arm没几天,还请大神指教

vinci25031891 发表于 2020-5-12 08:36

本帖最后由 vinci25031891 于 2020-5-12 10:48 编辑

又有一个新问题,在几个例子中,先是调用了Adc_Enable(),查源码它是M0P_ADC->CR0_f.IE = 1u;就是把adc中断使能,但是在设置完通道后,再一次调用Adc_EnableIrq(),看源码也是M0P_ADC->CR0_f.IE = 1u;就是把adc中断使能。 为什么要调用两次?

martinhu 发表于 2020-5-12 17:28

你说的这个清中断标志,在老的库里面,是在adc.c里面的中断回调函数内清除的。之前的中断回调层级有点多,后来改了
你可以看ftp上L136新的库,【STEP1】打开【我的电脑】 ; 【STEP2】在地址栏输入地址 ftp://HdscCustomer:HdscGuest2019!@ftp.hdsc.com.cn/ 即可直接访问

vinci25031891 发表于 2020-5-13 10:15

本帖最后由 vinci25031891 于 2020-5-13 10:32 编辑

martinhu 发表于 2020-5-12 17:28
你说的这个清中断标志,在老的库里面,是在adc.c里面的中断回调函数内清除的。之前的中断回调层级有点多, ...
多谢大神指点我这个菜鸟,我还是不太明白。我也是按照这个下载的。在HC32L136_DDL_Rev1.2.0.zip的样例。
在ddl.h中
    #define ADC_IRQHandler(void)                IRQ024_Handler(void)
再adc.c中定义了Adc_IRQHandler 如下:
if (TRUE == M0P_ADC->IFR_f.REGIF)
    {
      if (NULL != stcAdcIrqCalbaks.pfnAdcRegIrq)
      {
            stcAdcIrqCalbaks.pfnAdcRegIrq();
      }
      M0P_ADC->ICR_f.REGIC = 0u;
    }
    //其他模式
   ....
这里也没有清理中断标记。
这个代码应该是已经到了最底层了,没法在往下面查了{:cry:}
呃,明白了,M0P_ADC->ICR_f.REGIC = 0u;这个应该就是清除,而M0P_ADC->IFR是只读寄存器,无法清楚。没写过硬件程序,没经验啊{:shy:}
页: [1]
查看完整版本: HC32L136 ADC疑问