打印
[技术问答]

HC32L136 ADC疑问

[复制链接]
1431|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vinci25031891|  楼主 | 2020-5-11 15:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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;
    }
    //其他模式
   ....
这里也没有清理中断标记。
这个代码应该是已经到了最底层了,没法在往下面查了
呃,明白了,M0P_ADC->ICR_f.REGIC = 0u;这个应该就是清除,而M0P_ADC->IFR是只读寄存器,无法清楚。  没写过硬件程序,没经验啊

使用特权

评论回复
评论
martinhu 2020-5-13 15:50 回复TA
M0P_ADC->ICR_f.REGIC = 0u就是这个中断标志的清零 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

23

帖子

0

粉丝