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.

电源库中这一句是我理解错误还是TI失误?



在TI的电源库中的F2803x器件(其它没有注意),有ADC_SOC_Cnf.c这个文件。

其中有:

 if (mode == 0)  // Start-Stop conv mode
 {
  AdcRegs.ADCINTFLG.bit.ADCINT1 = 0;  // clear interrupt flag for ADCINT1
……

 if (mode == 2)  // CLA mode, Start Stop ADC with auto clr ADC Flag
 {
  AdcRegs.ADCINTFLG.bit.ADCINT1 = 0;  // clear interrupt flag for ADCINT1
……

我对照TI的ADC文档,寄存器ADCINTFLG里面的9个位均为只读。那么AdcRegs.ADCINTFLG.bit.ADCINT1 = 0; 这一句怎么理解呢?

  • ADCINTFLG不会自动清除,需要手动去清除。

  • ADCINTFLG是只 读的。向它写入是不起作用的。ADCINTOVFCLR才是用于清除标志的。

  • 您说的第一点有道理,那句话实际上没起到任何作用。

    应该是写此软件的人没有认真读User Guide。

    关于第二点,用哪个语句,不是您说的哪个OVFCLR,这个是溢出OVF清除寄存器,不是INT状态清除。

    如果需要清除FLG,需要用ADCINTFLGCLR寄存器,但前提是ADC在非contious mode,continous mode不careADCFLG的状态。

    如有疑问,请参考spruge5f文档。

    另,其实那句话,根本就没起到任何作用,只是为了保险起见,清一下FLG,但还实际上没清除。

    楼主可自行改成ADCINTFLGCLR语句。