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/MSP430FR6972:msp430fr6972

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/965712/ccs-msp430fr6972-msp430fr6972

器件型号:MSP430FR6972

工具/软件:Code Composer Studio

您好!

我使用的是 MSP430FR6972。

我正在传输一个数据(我们说:'A')。

我希望每2小时传输一次数据。

为此:我可以使用 RTC 中断吗?

(我想在 MSP430FR6972中仅使用内置 RTC)

我通过 RTC 知道这一点。 日期、时间是可能的。

是否可以在特定间隔后使用 RTC 来持续传输数据。

请告诉我。。 如何做到这一点。

(在程序中,给定的 C 代码,数据正在传输...仅每1秒一次...我需要较长的持续时间)

请告诉我。

此致、

Srijit

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

    到目前为止、您有哪些产品? 示例 msp430fr6x7x_rtc_02.c 给出了总体设置:

    https://dev.ti.com/tirex/explore/node?node=AMqRzK8tUCmNb7bzAweYxg__IOGqZri__LATEST

    这种情况下 RTCTEV=0、每分钟、每分钟、每分钟触发一次 RTCTEVIFG。 [参考用户指南(SLAU367P)表29-7]。 您可以使用 RTCTEV=1来在这个小时内每小时触发一次(并且计数为2)。  

    要从现在开始每2小时触发一次(而不是在此时)、请不要使用 RTCEVIFG、而是 RTCAIFG (警报)。

    1) 1)要开始、在 RTCHOUR 的当前内容中添加2 (小时)、设置 AE 位(0x80)并将其存储在 RTCAHOUR 中。[参考 UG 表29-30]。 然后获取 RTCMIN 的内容、设置 AE 位、并将其存储在 RTCAMIN 中。 然后启用 RTCAIE。

    2) 2)每次中断(RTCIV_RTCAIFG)时、向 RTCAHOUR (模24)添加2 (小时)、设置 AE 位并将其放回 RTCAHOUR。

    系统复位通常不会清除 RTC 寄存器、因此您应该填写大部分内容。 UG 第29.2.3节给出了一些注意事项

    [编辑:也添加了设置 RTCAMIN ]

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

    您好!

    非常感谢您的回复。

    我现在制作一个节目只需5分钟。

    可以检查一下。

    RTC 中断:
    
    #pragma vector=RTC_vector
    __interrupt void RTC_ISR (void)
    {
    switch (__evo_in_range (RTCIV、RTCIV_RT1PSIFG))
    {
    案例 RTCIV_NONE: 中断; //无中断
    案例 RTCIV_RTCOFIFG:中断; // RTCOFIFG
    案例 RTCIV_RTCRDYIFG: // RTCRDYIFG
    // putchar ('R');
    // LPM3_EXIT;
    中断;
    案例 RTCIV_RTCTEVIFG: // RTCEVIFG
    // __no_operation(); //每分钟中断一次
    
    // putchar ('R');
    // LPM3_EXIT;
    中断;
    案例 RTCIV_RTCAIFG:
    putchar ('R');
    LPM3_EXIT;
    中断; // RTCAIFG
    
    案例 RTCIV_RT0PSIFG:中断; // RT0PSIFG
    案例 RTCIV_RT1PSIFG:中断; // RT1PSIFG
    默认值:break;
    }
    }
    
    
    主程序:
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
    
    
    PJSEL0 = BIT4 | BIT5; //对于 LFXT
    // PJSEL0 |= BIT6 | BIT7; //对于 LFXT
    
    //================================ 中断触控按键=========================================
    
    // P1IES = BIT1; // P1.2高/低边沿
    // P1IFG = 0; //清除所有 P1中断标志
    // P1IE = BIT1; // P1.2中断被启用
    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    
    
    PM5CTL0 &=~LOCKLPM5;
    
    // XT1设置
    CSCTL0_H = CSKEY >> 8; //解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0; //将 DCO 设置为1MHz
    CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; //将所有分频器设置为1
    CSCTL4 &=~LFXTOFF; //启用 LFXT1
    操作
    {
    CSCTL5 &=~LFXTOFFG; //清除 XT1故障标志
    SFRIFG1 &=~OFIFG;
    } while (SFRIFG1&OFIFG); //测试振荡器故障标志
    CSCTL0_H = 0; //锁定 CS 寄存器
    
    //========================================================
    GPIO_init();
    lcd_init();
    UART_INIT();
    lcd_display_buf ();
    
    //======================================== INTERRUPT==================
    P1IES |= 0x02; // P1.1
    P1IFG &=~0x02; // P1.1
    P1IE |= 0x02; //P1.1
    
    //================================ timer=================================
    TA0CCTL0 |= CCIE;
    TA0CCR0 = 32768;
    TA0CTL |= tassel_1 | MC_1;
    
    //=================== rtc=========================================
    
    RTCCTL0_H = RTCKEY _H; //解锁 RTC
    // RTCCTL0_L = RTCOFIE | RTCAIE | RTCRDYIE | RTCTEVIE; //启用 RTC 读取就绪中断
    //启用 RTC 时间事件中断
    RTCCTL0_L = RTCAIE;
    
    // RTCCTL1 = RTCBCD | RTCHOLD | RTCMODE;// RTC 使能、BCD 模式、RTC 保持
    RTCCTL1 = RTCBCD | RTCHOLD | RTCMODE | RTCTEV_0; ////现在尝试几分钟(5分钟)
    
    RTCYEAR = 0x2010; //年= 0x2010
    RTCMON = 0x4; //月= 0x04 =四月
    RTCDAY = 0x05; //天= 0x05 =第5个
    RTCDOW = 0x01; //周中某天= 0x01 =星期一
    RTCHOUR = 0x10; //小时= 0x10
    RTCMIN = 0x32; //分钟= 0x32
    RTCSEC = 0x45; //秒= 0x45
    
    RTCAHOUR = 0x12; //0b10000010
    RTCAMIN = 0x15; //0b10000101
    
    RTCCTL1 &=~(RTCHOLD); //启动 RTC
    
    putchar ('5');
    
    
    while (1)
    {
    _bis_SR_register (LPM3_bits | GIE);
    
    }
    //返回0;
    }
    
    注:我还在使用 UART、端口中断、计时器、LCD。(这些都正常工作) 

    我正在尝试 几分钟,但它不起作用。(在'RTCIV_RTCTEVIFG'中:只工作1分钟)

    此致、

    Srijit

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

    >                    RTCAMIN =  0x15;                      //0b10000101

    这不会设置 AE 位。 它也是(在 BCD 中)(15+60-32)=43分钟到 RTCMIN、而不是5分钟。 尝试如下操作:

    >                    RTCAMIN =  0x37 | MINAE; // 5 minutes from xx:32:00, Alarm set

     

     

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

    您好!

    >RTCAMIN = 0x15;

    这不会设置 AE 位。 它也是(在 BCD 中)(15+60-32)=43分钟到 RTCMIN、而不是5分钟。  :

      您能解释一下吗?

    >>“RTCAMIN = 0x37 | MINAE;” :请说明这个!!

    正在等待您的回复。

    此致、

    Srijit

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

    >>"RTCAMIN = 0x37 | MINAE;" :

                 MINAE 在编译中显示错误。

    结果为 :“MINFAE”未定义。  

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

    尝试添加:

    >#define MINAE 0x80  //启用报警

    [编辑:很显然、我选择了错误的头文件。 请尝试:

    > RTCAMIN = 0x37 | RTCAE;

    这两种方式都可以正常工作。]

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

    您好!

    1)

    ">RTCAMIN = 0x37 | RTCAE;"  

    我已更改 RTCAMIN 值。

    2)在 ISR 部分中:

         案例 RTCIV_RTCAIFG:

         putchar ('R');

        LPM3_EXIT;
        中断;

    此时数据不传输。

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

    当我运行这个时、我观察到 RTCADAY 和 RTCADOW 已设置 AE (0x80)位、所以警报永远不匹配。 这就是我之前提到的关于填写所有字段的内容。 [参考 UG 第29.2.3节]我添加了以下内容后运行正常:

    >RTCADAY = RTCDAY;
    >RTCADOW = RTCDOW;