【问题标题】:What is the logic behind the radiotimer_start() C function?radiotimer_start() C 函数背后的逻辑是什么?
【发布时间】:2013-08-19 19:49:18
【问题描述】:

radiotimer.c 中的第 50 - 69 行表示一个名为“radiotimer_start()”的函数。

如果我理解正确的话,这个函数是为MSP430 x26x 硬件编写的。

在抽象层面上,这个函数启动了一个(我相信)定期执行的计时器(传入的参数)。但我根本无法理解这是如何工作的。

我想知道社区中的一位专家能否向我解释一下这个函数的每一行发生了什么。

例如在第 61 行:

TACCTL2  =  CAP+SCS+CCIS1+CM_1;

为什么要添加这么多值,什么是“捕获模式”?

说实话,这整个功能对我来说毫无意义。

如果社区中的一位专家至少能阐明如何弄清楚这些代码行中的任何一行在做什么,并可能将其与计时器的启动方式联系起来,我将不胜感激。

【问题讨论】:

    标签: c embedded msp430


    【解决方案1】:

    该寄存器只是在其中设置了一堆位。在这种情况下,+ 本质上是 OR。该语句可以改写为:

    TACCTL2  =  CAP | SCS | CCIS1 | CM_1;
    

    每个#define(CAP、SCS、CCIS1 和 CM_1)的信息应该在您正在使用的库中。他们设置的位显示在您链接的文档的第 372 页上。

    CM_1 例如表示在上升沿捕获。

    【讨论】:

    • 谢谢,这开始变得更有意义了。所以基本上你说你只是或你有兴趣捕获的标志,比如CM_1。 TACCTL2 是什么?
    • 比较/捕获控制寄存器。 mikroe.com/chapters/view/6 这会给你一个基本的想法。基本上所有的控制寄存器都控制一个或多个东西。开关设置占用寄存器的所有 16 位是没有意义的,因此它们只为每个设置定义某些位。
    • user1068636:=的左边是一个控制寄存器。它是微控制器电子设备中的一个地方,写入不同的值会产生不同的效果。在这种情况下,寄存器的不同具有不同的效果。例如。将寄存器TACCTL2 的位CAP 设置为1,以将定时器A 比较/捕获外设设置为捕获模式(与比较模式相反)。 = 的右侧表示将哪些位设置为 1,= 符号将它们应用于 TACCTL2
    • 我不喜欢使用+ 而不是| 的做法。这不是逻辑加法,因为使用+= 代替|= 对设置位不起作用,我只能将| 视为优越。此外,如果您碰巧有两个实际上是相同位的位定义,那么您就有麻烦了。
    猜你喜欢
    • 2022-08-14
    • 2020-09-08
    • 2020-09-10
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2021-11-03
    相关资源
    最近更新 更多