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.

[参考译文] MSP430F5359:尝试按顺序读取P6和P7端口上的8+2 ADC线路

Guru**** 2614265 points
Other Parts Discussed in Thread: MSP430F5359

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/667435/msp430f5359-trying-to-read-sequentially-8-2-adc-lines-on-p6-and-p7-ports

部件号:MSP430F5359

您好,  

问题很简单,我假设答案也很简单,但我无法看到发生了什么。

我想从P6 (0..7)和P7 (5,7)读取ADC值。 我已经从P6.X进行了ADC测量,但我无法在P7端口时触发中断。 我不知道我应该使用“ADC12IFG15”(因为WFP 7.7 被标记为A15),还是 使用ADC12IFG9 (ADC12IFG7 加上两个端口)。  

我一直在查看TI的示例,但仍然看不到连接...  

下面是我的代码的一些快照(我正在使用TI的ADC12_a.h库):

> GPIO _setAsPeripheralModuleFunctionInputPin (GPIO端口P6,GPIO _PIN0 + GPIO _PIN1 + GPIO _PIN2 + GPIO _PIN3 + GPIO _PIN4 + GPIO _PIN5 + GPIO _PIN6 + GPIO _PIN7);
> GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P7, GPIO _PIN5 + GPIO _PIN7);

...

>ADC12_A_INIT (ADC12_A_BASE,ADC12_A_SAMPLEHOLDSOURCE_SC,ADC12_A_CLOCKSOURCE_ADC12OSC,ADC12_A_CLOCKDIVIDER_1);

>ADC12_A_setupSamplingTimer(ADC12_a_base, ADC12_A_CYCLEHOLD_256_CYCLES,ADC12_A_CYCLEHOLD_4_CYCLES,ADC12_A_MULTIPLESAMPLESENABLE);

> ADC12_a_enable (ADC12_a_base);

//相同 的0..7:

ADC12_A_configureMemoryParam param0 ={0};
Param0.memoryBufferControlIndex = ADC12_a_memory_0;
param0.inputSourceSelect = ADC12_a_input_A0;
Param0.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC;
Param0.NiverRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
Param0.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;
ADC12_A_configureMemory (ADC12_a_base,&param0);

//现在为WFP 7.5 和WFP 7.7 提供

ADC12_a_configureMemoryParam13参数={0};
param13.memoryBufferControlIndex = ADC12_a_memory_A13;
param13.inputSourceSelect = ADC12_a_input_A13;
param13.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC;
param13.niveRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
param13.endOfSequence = ADC12_A_ENDOFSEQUENCER;
ADC12_a_configureMemory (ADC12_a_base,&param13);

...

ADC12_a_clearInterrupt (ADC12_a_base,ADC12IFG15);
ADC12_a_enableInterrupt (ADC12_a_base,ADC12IFG15);

这是我的init代码的内核。 之后,我定义了ISR例程,并根据 ADC12IFG15标志定义捕获。  

但是,代码不起作用。

任何建议都将受到衷心的欢迎。

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

    你好,Jesus-Maria,

    首先,我建议阅读MSP430x5xx和MSP430x6xx系列用户指南的AD12_A部分,以便更好地了解MSP430F5359中的ADC12模块的工作原理。

    我假设在为P6.x配置内存缓冲区时,您相应地更改了ADC12_a_memory_x和AD12_a_input_AX参数。 例如,WFP 6.5 将使用ADC12_A_MEMORY_5和AD12_A_Input_A5参数。 这是否正确?

    接下来,我看到您正在使用ADC12_a_memory_13来配置WFP 7.5 内存。 为什么? 我认为将内存缓冲区按顺序排列更有意义。 您不需要将A13输入与内存缓冲区13匹配。 我会将ADC12_A_MEMORY_8和ADC12_A_MEMORY_9分别用于WFP 7.5 和WFP 7.7。 这种方式内存缓冲区0.. 9个是WFP 6.0。 7通过WFP 7.5 和WFP 7.7 ,无间隙。

    您是否在为WFP 7.5 和WFP 7.7 使用ADC12_A_ENDOFSEQUENCER参数? 您只能在顺序为WFP 7.7 的最后一个输入通道上使用此接口。 对于WFP 7.5 ,您应该使用ADC12_A_NOTENDOFSEQUENCER参数。

    最后,您设置的中断不正确。 首先,您应该使用与序列中最后一个内存缓冲区相关的中断,而不是最后一个ADC通道。 例如,如果您将WFP ADC(A15) 7.7 读数放入ADC12_A_MEMORY_9缓冲区,则应触发与内存缓冲区9相关的ADC12IFG9中断。 您还应该 使用ADC12IExx而不是ADC12IFGxx符号启用中断。

    下面是您在上面发布的带有建议更改的代码:

    //
    
    
    
    
    不支持的6.0 (A0)--> MEM0 ADC12_A_configureParam0参数={0}; param0.memoryBufferControlIndex = ADC12_a_memory_0; param0.inputSourceSelect = ADC12_a_input_A0;param0.positiveRefVoltageSourceSelect = ADC12_A_VREFG_SS_VARF0
    Param0.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_a_base,&param0);
    
    // 6.1 (A1)--> MEDPOMADC12_A_BuffureParam
    MemoryParam
    
    param1.inputSourceSelect
    
    ={0};1.内存配置控制器;//参数ACD_param_Vf12_S = ADC12_R =参数Af12;选择参数
    param1.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_a_base,&param1);
    
    // WFP 6.2 (A2)--> MEM2
    ADC12_A_MemoryParamMemoryParam2 ={0};Param2.memoryconfigerControlIndex
    = ADC12_VAR_VAREFA12_RESEFA= ADC12_VAR_VARE12_VAREFA12_VARE12_VAREFA_VAREFA= ADC12_VAR_VAREFA12_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FASTA方
    param2.inputSourceSelect
    
    
    Param2.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_A_BASE,&Param2);
    
    // WFP 6.3 ADM3(A3)--> MEM3
    ADC12_A_MemoryParam PARAM3 ={0};PARAM3.memoryBufferControlA3_RES_RAM3_RAFM3_VAR_VAR_FA12
    ;
    param3.inputSourceSelect RAFA_FA_FA12 = ADFA_FA_FA12
    
    
    PARAM3.endOfSequence = ADC12_A_NOMENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_a_base,&PARAM3);
    
    // WFP 6.4 (A4)--> MEM4
    ADC12_A_MemoryParam PARAPOS ={0};PARAM4._BASE Buffy,&PARAM4= FA12_VAR_VAR_VAREFA12_VAR_FAST_FA12_FAST_FAST_FAST_FAST_FAST_FAST_FA12_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FA12_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FARAM4_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FA
    
    param4.inputSourceSelect
    
    
    PARAM4.endOfSequence = ADC12_A_NOMENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_A_BASE,&PARAM4);
    
    // WFP 6.5 (A5)--> MEM5
    ADC12_A_A5 MemoryParam PARAM5 ={0};PARAM5.A_BASE FAST_FAST_FAST_FAST_RECA12
    
    param5.inputSourceSelect
    
    = FAST_FA12_FAST_FA12_FAST_FAST_FAST_FA12_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FA12_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FAST_FA12_FAST_FAST_FAST_FAST_RE
    PARAM5.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_a_base,&PARAM5);
    
    // WFP 6.6 (A6)--> MEM6
    ADC12_A_MemoryParam param6 ={0};param6.memoryBuffer,&param_f12
    = ADCAF12
    ;param6.inputSourceSelect
    
    
    config6.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_a_base,&param6);
    
    // WFP 6.7 (A7)--> MEM7
    ADC12_a_SourceMemoryParamControl7 ={0};
    NE7.memoryageerIndex = paramCAF12_VAR_VARF12;
    param7.inputSourceSelect
    
    
    
    
    
    
    
    
    
    POS 7.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;ADC12_a_configureMemory (ADC12_a_base,&param7);// WFP ADC13)--> 7.5 MEM8 ADC12_a_SourceMemoryParamControl8 ={0};NE8.memoryageerIndex = paramCA12;param_V12 = ADCA_VAR_VAR12;param8.inputSourceSelect
    
    config8.endOfSequence = ADC12_A_NOTENDOFSEQUENCER;
    ADC12_A_configureMemory (ADC12_a_base,&param8);
    
    // WFP 7.7 (A15)--> MEM9
    ADC12_A_MemoryParam9 ={0};param9.memoryBuffer&param8;//参数Af_
    
    param9.inputSourceSelect
    
    选择=内存=参数Af12;参数Af12
    param9.endOfSequence = ADC12_a_ENDOFSEQUENCER;
    ADC12_a_configureMemory (ADC12_a_base,&param9);
    
    ADC12_a_clearInterrupt (ADC12_a_base,ADC12IFG9);
    ADC12_a_enableInterrupt (ADC12_a_base, ADC12IE9); 

    此致,  
    Caleb Overbay

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

    [报价用户="Caleb Overbay"]

    我假设在为P6.x配置内存缓冲区时,您相应地更改了ADC12_a_memory_x和AD12_a_input_AX参数。 例如,WFP 6.5 将使用ADC12_A_MEMORY_5和AD12_A_Input_A5参数。 这是否正确?

    [/引述]

    正确。

    [报价用户="Caleb Overbay"]

    接下来,我看到您正在使用ADC12_a_memory_13来配置WFP 7.5 内存。 为什么? 我认为将内存缓冲区按顺序排列更有意义。 您不需要将A13输入与内存缓冲区13匹配。 我会将ADC12_A_MEMORY_8和ADC12_A_MEMORY_9分别用于WFP 7.5 和WFP 7.7。 这种方式内存缓冲区0.. 9个是WFP 6.0。 7通过WFP 7.5 和WFP 7.7 ,无间隙。

    [/引述]

    这是我最初的假设,但在检查了文件之后,我仍然有疑问。 现已解决。

    [报价用户="Caleb Overbay"]

    您是否在为WFP 7.5 和WFP 7.7 使用ADC12_A_ENDOFSEQUENCER参数? 您只能在顺序为WFP 7.7 的最后一个输入通道上使用此接口。 对于WFP 7.5 ,您应该使用ADC12_A_NOTENDOFSEQUENCER参数。

    [/引述]

    事实上,这就是问题所在。 检查您的代码和我的代码后,我意识到我在第7位完成了该序列。

    [报价用户="Caleb Overbay"]

    ...您还应该 使用ADC12IExx而不是ADC12IFGxx符号启用中断。

    [/引述]

    感谢您的概念。 我也检查了一下。