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.

[参考译文] MSP430G2955:引脚振荡器一个计数振荡数量的计时器 A0不工作

Guru**** 2562120 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/601196/msp430g2955-pin-oscillator-an-timer-a0-counting-the-number-oscillations-not-working

器件型号:MSP430G2955

大家好、

我正在尝试简化我的代码、以便我可以逐步构建它、我已经编写了下面的代码、以便它可以对引脚振荡器的振荡数量进行计数、但查看寄存器、计时器计数器不显示任何内容

#include

/*
 * main.c
 *

//配置计时器

int j;
int main (void){
   WDTCTL = WDTPW | WDTHOLD;   //停止看门狗计时器
   BCSCTL1 = CALBC1_16MHz;                    //将 DCO 设置为16MHz
   DCOCTL = CALDCO_16MHz;                    //CPU 从 DCO 源以 MCLK 运行

   //配置 P2.3按钮 E 的引脚示波器
   P2DIR &=~ BIT3;                   //P2.3
   P2SEL &=~ BIT3;
   P2SEL2 |= BIT3;

   //配置 Timer0_A3
   TA0CTL =tassel_0|ID_3|MC_2|TACLR;              // TACLK (PinOsc 时钟源)=tassel_0、ID_0=输入分频器:0、MC_2=连续上升
   TA0CCTL0 =CM_1|CCIS_2|CAP;                     //CM_=敏感边沿、CCIS_2=GND、CAP=捕捉模式
   J=TA0CCR0;
   P2SEL2 &=~BIT3;

   返回0;


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

    您好!

    简单看一下您的代码后、看起来不像 Timer0启用了中断。 此外、我看不到 Timer0的 ISR。 我找到了另一个可能对您有用的资源、包括更适用的代码示例(如下所示)。

    《使用 MSP430Tm微控制器进行10cm 电容接近检测 》应用手册

    BoosterPack 解决方案的配套资料和代码示例

    正如我在您的其他一个线程中提到的、我建议查看 CapTIvate 设计中心 GUI。 它是一款快速开发工具、可简化和加快电容式触控设计。 您可以拖放传感器、实时配置和调整传感器以及自动生成软件。

    此致、

    James

    MSP 客户应用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    James 先生、您好!
    感谢您的帮助、是的、我正在查看它并尝试使用、但它似乎对我有点困惑、这就是为什么我尝试从零开始、以便我非常了解它的工作原理、但我将再次尝试
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    James 先生、您好!
    再次感谢您发送给我的文件、我已经查看了项目配套资料和 BoosterPack 解决方案的代码示例、正好位于 main_10cm_prox_BoosterPack.c 中、我发现您使用 timerA0作为栅极计时器、使用 timerA1作为计数器、 在我的情况下、我尝试执行同样的操作、但将 WDT+用作栅极计时器、将 timerA0用作计数器、我无法从代码中了解某些情况、以及为什么我的代码也不捕获任何数据:
    TA0CCTL0 ^= CCIS0; //创建 CCR0的软件捕获只要我已配置 TA0CCTL0来捕获计数、我就不了解此行的实用程序。
    -如果我不包括这02行,一个在开头,另一个在中断中,则永远不会达到我的 ISR
    _BIS_SR (LPM0_Bits + GIE);
    _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);
    -为什么它们将中断用于 timerA1、因为它只进行计数?
    -最后一点、尽管我认为、TA0CCR0已经像在代码示例中那样正确配置了它、这意味着我没有检测到任何东西。

    下面是我尝试编译时的代码:
    #include

    /*
    * main.c
    *
    int j;
    void main (void)

    WDTCTL = WDTPW + WDTHOLD;//停止 WDT 以防止复位
    BCSCTL1 = CALBC1_16MHz; //将 DCO 设置为1MHz
    DCOCTL = CALDCO_16MHz;

    P2DIR |= BIT2; //P2.2输出
    while (1){
    //********* PIN_LOCATOR********* //
    //配置 P2.3按钮 E 的引脚振荡器
    P2DIR &=~ BIT3; //P2.3.
    P2SEL &=~ BIT3;
    P2SEL2 |= BIT3;


    //******** Timer0_A3作为计数器 //
    //配置 Timer0_A3
    TA0CTL =tassel_0|ID_3|MC_2|TACLR; // TACLK (PinOsc 时钟源)=tassel_0、ID_0=输入分频器:0、MC_2=继续
    TA0CCTL0 =CM_3|CCIS_2|CAP; //CM_=敏感边沿、CCIS_2=GND、CAP=捕捉模式

    //******** 看门狗间隔作为选通时间******** //
    WDTCTL = WDT_MDLY_32;//WDT 由 fSMCLK 计时
    TA0CTL |= TACLR; //清除 Timer0_A3 TAR
    IE1|= WDTIE; //启用 WDTIE 位
    BIS_SR (LPM0_Bits + GIE);//Enter LPM0和中断被启用
    TA0CCTL0 ^= CCIS0; //创建 CCR0打喷嚏的软件捕获

    //WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
    J=TA0CCR0;

    P2SEL2 &=~BIT3;





    #pragma vector = WDT_vector //间隔计时器矢量位置
    _interrupt void 间隔定时器(void)


    P2OUT ^= BIT2;//切换 P1.0
    TA0CCTL0 ^= CCIS0; //创建 CCR0的软件捕获
    _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//从 LPM0中获取