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.

[参考译文] CCS/MSP430FR5739:错误的 ADC10会导致存储器中出现错误

Guru**** 1145030 points
Other Parts Discussed in Thread: MSP430FR5739, MSP-EXP430FR5739
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/771363/ccs-msp430fr5739-wrong-adc10-results-in-the-memory

器件型号:MSP430FR5739
主题中讨论的其他器件: MSP-EXP430FR5739

工具/软件:Code Composer Studio

尊敬的社区:

我几乎使用演示代码中的软件示例:

CCS8.2/MSP430FR5739/DMA (64)-ADC10

我喜欢使用几乎完整的16位空间(64*1023=65472),并且不会发生溢出。

重点是、溢出会多次发生、查看寄存器值就说明了这一点。

例如:ADC10RESULSE[20]=7651。 ADC10模块如何生成比1023更高的值?

有人能给我一个提示吗?

此致

Volker

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Volker、

    请您分享您的代码、以便我们查看问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     这是 ADC 代码的一部分:

    unsigned int adc_result[64];
    unsigned int k;
    unsigned int adc_result_sum;

     //配置 ADC10 -脉冲采样模式;软件触发;
     ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10MSC;// 16ADCclks、ADC 打开
     ADC10CTL1 = ADC10SHP + ADC10CONSEQ_2;    //脉冲采样模式、rpt 单通道
     ADC10CTL2 = ADC10RES;                    // 10位分辨率
    // ADC10MCTL0 = ADC10INCH_1;                // AVCC ref、A1
     ADC10HI = 950;                //窗口比较器高阈值
     ADC10LO = 75;                 //窗口比较器低阈值

     //配置 DMA (ADC10IFG 触发器)
     DMACTL0 = DMA0TSEL__ADC10IFG;                    // ADC10IFG 触发器
     __data16_write_addr ((unsigned short)&DMA0SA、(unsigned long)&ADC10MEM0);
                                               //源单个地址
     __data16_write_addr ((无符号短整型)&DMA0DA、(无符号长整型)&ADC_Result [0]);
                                               //目标数组地址
     DMA0SZ = 66;                             // 64次转换
     // rpt、inc dest、word access、
     DMA0CTL = DMADT_4 + DMADSTINCR_3 + DMAEN + DMAIE + DMALEVEL;
                                            //在66次转换后启用 int


    //在 while 循环中:

    IF (DMA64ISR)
         {
             ADC_RESULT_SUM = 0x0;                  //清除累加寄存器
             for (k=2;k<66;k++){                     //此处为断点;查看 ADC_Result
             ADC_RESULT_SUM += ADC_RESULSE[k];
             }
             DMA64ISR = 0;
             相红= 1;
         }
    IF (ADCSW)
         {
             DMA0CTL |=DMAEN + DMAIE;  // DMA-ADC-routine
             ADC10CTL0 |= ADC10ENC + ADC10SC;       //采样和转换开始
             ADCSW = 0;
         }

    // UART 中的调用-功能示例:

    否则、如果((c_Befehl[1]='i')|(c_Befehl[1]='i'))
       {

       //Auslesen des Motorstroms
       ADC10CTL0 &=~ADC10ENC;
       ADC10MCTL0 = ADC10INCH_13;                // AVCC ref、A13
       ADC = 13;
       ADCSW = 1;
       返回;
       }

    // IRQ 中的部分:


    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=dma_vector
    _interrupt void DMA0_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((中断(DMA_vector)) DMA0_ISR (void)
    其他
    错误编译器不受支持!
    #endif

     switch (__evo_in_range (DMAIV、16))
     {
       情况 0:中断;                         //无中断
       案例 2:
         // 64次转换完成
         ADC10CTL0 &=~ADC10ENC;
         DMA64ISR = 1;    //开始和
         中断;                                // DMA0IFG
       案例 4:中断;                         // DMA1IFG
       案例 6:中断;                         // DMA2IFG
       案例 8:中断;                         //保留
       案例10:中断;                         //保留
       案例12:中断;                         //保留
       案例14:中断;                         //保留
       案例16:中断;                         //保留
       默认值:break;
     }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Volker、

    很抱歉耽误你的答复。

    我查看了您的代码、发现您声明了无符号整型(默认为16位)的 ADC_Result [64]。 但在 DMA 配置中、您将类型更改为无符号长整型(默认为32位)。 您可以将 ADC_Result[64]的声明更改为无符号长整型(32位)、该值与 DMA 部分中的代码保持一致。 更新声明后、请告诉我您的测试结果。

    顺便说一下、我已经在 MSP-EXP430FR5739上尝试过您的代码、它没有显示出0x3FF 中的 ADC 结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、非常感谢您的回答、

    我刚刚复制了 DMA 示例(不理解代码;-)),他们使用的方式是相同的。

    我将尝试向您提供反馈

    Volker

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Volker、

    感谢您的回复。 如果您有任何更新、请随时返回。

    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。