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/MSP430F133:时钟和ADC理解帮助

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/572494/ccs-msp430f133-clocks-and-adc-understanding-help

部件号:MSP430F133

工具/软件:Code Composer Studio

您好,

我一直在开发一个使用TimerA使用GPIO生成各种方波的应用程序。  我可以使用。  我还需要定期阅读ADC。  当我添加ADC代码时,方波代码将停止运行。  我一直在用用户指南来确定我做了什么错,但用户指南有些迟钝,我还没有发现我的问题...  计时器的设置如下:

void Init_Clock()
{//
停止看门狗计时器
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
CCTL1 = CCIE;// CCR1中断已启用
CCR1 = TICS_FOR_50ms;
CCTL2 = CCIE;// CCR2中断已启用
CCR2 = TICS_FOR_20ms;
TACTL = Tassel_CL2
,MC/模式+ 

ADC的设置如下所示。

void Init_adc()

{

ADC12CTL0 = SHT0_10 + ADC12ON;//设置采样时间,打开ADC12
ADC12CTL1 = SHP;//使用采样计时器,SMCLK
ADC12IE = 0x01;//启用中断
ADC12CTL0 || ENC;//
启用6.0 P6/选择
ADC选项0x01 

我通过  调用从时间A CCR2倒计时中断定期启动ADC采集

ADC12CTL0 || ADC12SC; //开始转换

timerA代码运行正常,直到我进行上述启动转换调用。  当我发出该呼叫时,重复的TimerA中断(我们在其中创建方波)将停止生成。

我确定我没有正确配置ADC的时钟,但这种秘密的酱似乎让我无法使用。  显然,我需要更好地理解时钟子系统。  

感谢您的建议。

- Dave

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

    ADC不能从 计时器“窃取”时钟:)您启用ADC中断,但不要提及ISR (中断服务例程),也不要显示它。 如果没有合适的ADC ISR,那么这就是您的问题。

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

    这是一个很好的想法,但我确实定义了ISR (如下所示)。  ADC ISR直接来自其中一个ADC样例程序。  在计时器中,ISR将正常工作大约15秒,直到我告诉ADC进行采样。  ADC启动后,计时器ISR停止。  ADC ISR从不点火,因为WFP 3.2 从未变高...


    // ADC12中断服务例程
    #if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
    #pragma vector=ADC12_vector
    __interrupt void ADC12_ISR (void)
    #Elif已定义(__GMNU__)
    void __attribute__((interrupt (ADC12_vector))) ADC12_ISR (void)
    #否则
    错误编译器不受支持!
    #endif

    P3OUT |=0x04;//提高WFP 3.2
    ADC12CTL0 &=~ENC;//已启用转换


    // IF (ADC12MEM0 < 0x7FF)
    // P3OUT &=~0x02;//清除WFP 3.1 LED熄灭
    //其他
    // P3OUT |= 0x02;//将WFP 3.1 LED设置为ON

    __BIC_SR_REGISTER_ON_EXIT (LPM0_Bits | GIE);//从0 (SR)清除CPUOFF位
    }

    // Timer_A3中断向量(TAIV)处理程序
    #if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
    #pragma vector=TIMERA1_vector
    __interrupt void Timer_A (void)
    #Elif已定义(__GMNU__)
    void __attribute__((interrupt (TIMERA1_vector))) Timer_A (void)
    #否则
    错误编译器不受支持!
    #endif

    交换机(TALV)

    案例2:// CCR1

    P3OUT ^= 0x01;//调试切换WFP 3.0
    CCR1 += TICs_of_50ms;//向CCR1添加偏移
    }
    中断;
    案例4:

    P3OUT ^= 0x02;//调试切换WFP 3.2
    P1OUT ^= 0x02;//切换WFP 1.1
    CCR2 += TICs_of_20ms;//向CCR1添加偏移
    IF (secondCountDown <= 0)

    secondCountDown = TICS_per秒;
    secondCount++;

    //调试-启动ADC
    IF (secondCount == 15)
    StartADCFlag = 1;
    }
    否则

    第二个国家--;
    // P3OUT &=~0x04;//较低的WFP 3.2
    }
    }
    中断;  
    案例10:

    // P3OUT ^= 0x04;//切换WFP 3.2
    }
    中断;//未使用溢出
    }
    __BIC_SR_REGISTER_ON_EXIT (LPM0_Bits | GIE);//清除LPM0

    }

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

    您的代码中有许多内容,但仍不清楚问题所在。 至少我看不到它。 也许您开始ADC转换的代码不好。 制作项目副本,将代码清理到计时器,ADC及其交互的基本部分,对其进行测试以确定问题是否仍然存在,然后向我们展示全部内容。 请注意,显示已注释的垃圾代码不是一个好主意,因为我们给人的印象是您并不在乎,因此您不能期望得到太多的回报。