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 10:48 编辑
又有一个新问题,在几个例子中,先是调用了Adc_Enable(),查源码它是M0P_ADC->CR0_f.IE = 1u;就是把adc中断使能,但是在设置完通道后,再一次调用Adc_EnableIrq(),看源码也是M0P_ADC->CR0_f.IE = 1u;就是把adc中断使能。 为什么要调用两次?
你说的这个清中断标志,在老的库里面,是在adc.c里面的中断回调函数内清除的。之前的中断回调层级有点多,后来改了
你可以看ftp上L136新的库,【STEP1】打开【我的电脑】 ; 【STEP2】在地址栏输入地址 ftp://HdscCustomer:HdscGuest2019!@ftp.hdsc.com.cn/ 即可直接访问 本帖最后由 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]