This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2540两个问题,DMA传送结束的标志位是哪个?以及程序中电量检测的电压值和实际值得误差是什么原因?



1.串口轮询部分。通过如下代码调串口回调函数。

if (cnt >= HAL_UART_DMA_FULL)
{
evt = HAL_UART_RX_FULL;
}
else if (cnt >= HAL_UART_DMA_HIGH)
{
evt = HAL_UART_RX_ABOUT_FULL;
PxOUT |= HAL_UART_Px_RTS;
}
else if (cnt && !dmaCfg.rxTick)
{
evt = HAL_UART_RX_TIMEOUT;

但是我们希望当收到一条指令,大概8~10个字节,接收完就调回调函数。如果设置

if (cnt >= 8)
{
evt = HAL_UART_RX_IND;
}

则会出现DMA未接收完就调用回调函数的情况,则会出现接收错误。如果将cnt>24,则势必会在缓冲区堵塞一条指令。

想问一下,如何判断DMA串口接收完成?

我理解的是根据DMAIRQ寄存器中,DMAIF的状态位来判断,但硬件调试的过程中,一直没发现变为1的情况,所以,无法用来判断接收完成。

2.程序中,电源电压检测部分,BattMeasure函数中,

HalAdcSetReference( HAL_ADC_REF_125V );
adc = HalAdcRead( HAL_ADC_CHANNEL_VDD, HAL_ADC_RESOLUTION_10 );

adc测量的数,换算成电压值后,和用稳压电源输出的电压值(搭配着万用表测量电压),有大致0.1V的误差,当电压逼近2.0V时,误差会减小。

很想问一下,这是什么原因?

是CC2540adc检测过程中不可避免的误差还是什么原因造成的?如果恒定误差有0.1V的话,在程序中电量检测部分,可以做出调整,否则低电量报警也会导致误差。

希望能有一个官方的说法。

非常希望技术支持给予答复,非常感谢您的帮助。