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.

[参考译文] MSP430FR6877:ADC 中断不起作用

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/944016/msp430fr6877-adc-interrupt-is-no-working

器件型号:MSP430FR6877
主题中讨论的其他器件:MSP430WARE

您好!

我在 A8上使用 ADC 输入、工作正常(我正在为此配置 mem0)。

但我在 A12上有另一个 ADC 输入、当我尝试使用与工作的 ADC 相同的配置(使用 MEM1)时、中断没有出现。

有人可以帮助吗?

代码如下所示:

1- P9.4/A12初始化

GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P9、GPIO_PIN4、GPIO_ternary_MODULE_Function); 

2- ADC 初始化

/*
* ADC12B 模块的基地址
*使用内部 ADC12B 位作为采样/保持信号来开始转换
*使用 MODOSC 5MHZ 数字振荡器作为时钟源
*使用默认的时钟分频器/预分频器1
*不使用内部通道
*
ADC12_B_initParam initParam ={0};
initParam.sampleHoldSignalSourceSelect = ADC12_B_SAMPLEHOLDSOURCE_SC;
initParam.clockSourceSelect = ADC12_B_CLOCKSOURCE_ADC12OSC;
initParam.clockSourceDivider = ADC12_B_CLOCKDIVIDER_1;
initParam.clockSourcePredivider = ADC12_B_CLOCKPREDIVIDER__1;
initParam.internalChannelMap = ADC12_B_NOINTCH;

ADC12_B_init (ADC12_B_B_base、&initParam);

//启用 ADC12B 模块
ADC12_B_ENABLE (ADC12_B_B_BASE);

/*
* ADC12B 模块的基地址
*对于内存缓冲区0-7采样/保持、持续64个时钟周期
*对于内存缓冲区8-15采样/保持、持续4个时钟周期(默认)
*禁用多路采样
*
ADC12_B_setupSamplingTimer (ADC12_B_BASE、
ADC12_B_CYCLEHOLD_16_CYCLES、
ADC12_B_CYCLEHOLD_4_CYCLES、
ADC12_B_MULTIPLESAMPLESDISABLE); 

3- A12/MEM1初始化

//为 A12上的阀门电流感测配置存储器缓冲器(端口引脚9.4)
ADC12_B_configureMemoryParam configureMemoryParam2 ={0};
configureMemoryParam2.memoryBufferControlIndex = ADC12_B_MEMORY_1;
configureMemoryParam2.inputSourceSelect = ADC12_B_INPUT_A12;
configureMemoryParam2.refVoltageSourceSelect = ADC12_B_VREFPS_AVCC_VREFNEG_VSS;
configureMemoryParam2.endOfSequence = ADC12_B_NOTENDOSEQUENCE;
configureMemoryParam2.windowComparatorSelect = ADC12_B_Window_Comparator_disable;
configureMemoryParam2.differialModeSelect = ADC12_B_different_mode_disable;

ADC12_B_configureMemory (ADC12_B_base、&configureMemoryParam2);


ADC12_B_clearInterrupt (ADC12_B_BASE、
0、
ADC12_B_IFG1
);

//启用存储器缓冲器1中断
ADC12_B_enableInterrupt (ADC12_B_base、
ADC12_B_IE1、
0、
0); 

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

    ADC ISR

    // ADC 中断服务例程
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
    #pragma vector=ADC12_vector
    __interrupt void ADC_ISR (void)
    #Elif defined (__GNU__)
    void __attribute__((interrupt (ADC12_vector))#if Compiler_ISR
    
    (void))#else not supported!
    #endif
    {
    switch (__evo_in_range (ADC12IV、ADC12IV_ADC12IFG0))
    {
    ADC12IV_NONE 案例:
    中断;
    ADC12IV_ADC12OVIFG 案例:
    中断;
    ADC12IV_ADC12TOVIFG 案例:
    中断;
    ADC12IV_ADC12HIIFG 案例:
    中断;
    ADC12IV_ADC12LOIFG 案例:
    中断;
    ADC12IV_ADC12INIFG 案例:
    中断;
    ADC12IV_ADC12IFG0案例:
    adcResult = ADC12_B_getResults (ADC12_B_B_B_BASE、ADC12_B_MEMORY_0); //读取 ADC 存储器
    ADC12_B_clearInterrupt (ADC12_B_BASE、0、ADC12_B_IFG0);
    中断;
    ADC12IV_ADC12IFG1案例:
    adcResultValve = ADC12_B_getResults (ADC12_B_B_B_BASE、ADC12_B_MEMORY_1); //读取 ADC 存储器
    ADC12_B_clearInterrupt (ADC12_B_BASE、0、ADC12_B_IFG1);
    中断;
    默认值:
    中断;
    }
    } 

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

    如何调用 ADC12_B_startConversion? 这将告诉我们什么是 CONSEQ 和 CSTARTADD。

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

    哦! 我没提到这个。

    ADC12_B_startConversion (ADC12_B_B_BASE、
    ADC12_B_MEMORY_1、
    ADC12_B_SINGLECHANNEL); 

    调用 CSTARTADD 后、它为2。

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

    您希望最后得到 CSTARTADD=1。 (这可能意味着 ADC12CTL3=1。)

    我想他们希望您使用" ADC12_B_START_ADC12MEM1"、而不是"ADC12_B_MEMORY_1"、根据(第575行)可以得出:

    TI\msp430ware_3_80_06_03\driverlib\driverlib\MSP430FR5xx_6xx\adc12_b.h