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/MSP430FR6989:计时器A进入ISR的延迟。 装配体。

Guru**** 2607145 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/653899/ccs-msp430fr6989-delay-with-timer-a-into-a-isr-assembly

部件号:MSP430FR6989
主题中讨论的其他部件:BOOST-IRMSP430WARE

工具/软件:Code Composer Studio

您好,

我有msp340fr6989,我想在ISR中执行延迟操作,因为组件中的BOOST-IR键盘的按键已回弹。  

我想在按任意键跳转至另一个ISR时延迟10毫秒,但我不知道如何存储TA2R值。  

我的计时器在连续模式下使用ACLK 32kHz。 下面是我的代码:

----------------------------------

kbISR
     按R12

     BIC.b #BIIT2,&P3IFG;清除标志和IE
     BIC.b #BIT7,&P4IFG
     BIC.b #BIT4,&P2IFG
     BIC.b #BIT5,&P2IFG
     BIC.b #BIIT2,&P3IE  
     BIC.b #BIT7,&P4IE
     BIC.b #BIT4,&P2IE
     BIC.b #BIT5,&P2IE


kbISR1

 MOV.w &TA2R,R12;将TA2R值存储在CCR1中
cmp.w &TA2R,R12
jnz kbISR1
MOV.w R12,&TA2CCR1
add.w #326,TA2CCR1 ;等待10毫秒
BIC.w #CCIFG,&TA2CCTL1
BIS.w #CCIE,&TA2CCTL1;跳至另一个ISR
Pop R12
印度

----------------------------------

谢谢,如果我的英语不好的话,很抱歉。

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

    您好,Francisco,

    有几种方法可以完成您正在尝试的操作。 如果我理解正确,则应发生以下事件序列:

    1. 按钮已按下
    2. 按钮推入ISR
    3. 将TA2设置为延迟10毫秒
    4. 10毫秒后调用特定函数

    这是否正确?

    看起来您已经知道了数字1和2,因此让我们来设置一个10毫秒间隔的计时器。 我建议您查看TI资源浏览器中通过MSP430Ware提供的一些计时器示例。 有汇编和C语言示例可供参考。 最有用的例子是 这个。 基本上,如果您为计时器提供32kHz时钟,您需要在CCR0中放置一个值327,相当于10ms。 然后启用CCR0中断。 然后,您的程序应如下所示:

    1. 按钮按下
    2. 输入按钮ISR
    3. 10毫秒间隔的设置计时器
    4. 退出按钮ISR,进入低功耗模式(LPM)
    5. 当计时器计数达到CCR0中的值时,将触发中断
    6. 进入计时器ISR
    7. 禁用计时器
    8. 执行代码
    9. 将定时器ISR退出到低功耗模式(LPM)

    这些只是构建块,如果您还有任何问题,请告诉我。

    此致,  
    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你有想法,但我的问题是,我必须多次按键盘上的任何按钮,所以我不知道按键时TA2R的值。 因此,对于10ms延迟,我必须输入TA2CCR1 = TA2R+327,因为我想每次按下按钮时都要执行10 ms的延迟。 在你回答的问题中,我认为除了这个问题之外,我都可以,因为我的计时器一直在运行。
    感谢你的答复,我希望你理解我的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Francisco,

    因此,您是否总是希望在按下任何按钮后等待10毫秒,同时保持计时器持续运行? 如果您按下一个按钮,10毫秒延迟开始,然后在10毫秒延迟结束之前按下另一个按钮,会发生什么情况? 您是否应该忽略第一个按钮并将延迟再次重置为10毫秒?

    为此,您只需在TA2R中添加327,就像您在上一篇文章中所描述的那样。 这应该能实现您想要实现的目标。

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

    您是否在这方面取得了任何进展,或者您是否还有任何未决问题? 如果您能够解决此问题,请为可能遇到类似问题的其他人发布您的解决方案。

    此致,
    Caleb Overbay