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.

[参考译文] MSP430FR6879:TimerA0 CCIFG 中断

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt

器件型号:MSP430FR6879

您好!

目前、计时器 A 用于通过捕捉中断来测量时间。
无论输入信号的波动如何、都可以执行中断。 因此、我们正在调查原因。

[运行条件]
在捕获模式下使用计时器 A0、将 P1.6与 TA0.1引脚配合使用、
中断通过反相输入信号(双边沿)来执行。
定时器 A0间歇性工作、并在开始时写入以下设置。
-TA0CCTL1 = 0xC910
-TA0CTL = 0x0120

停止操作在捕获检测中断内或在指定时间过后执行、并执行以下操作。
-TA0CTL = 0x0000
--TA0CCTL1 &=0xFFFE (CCIFG 清零)

此时、在定时器 A0开始后可立即触发中断、并可执行中断处理。 (不是每次、很少做)

【问题重要】
(1)由于访问外设、是否有任何触发 CCIFG 的操作、例如计时器 A 中的设置错误?

(2)配置所提供捕捉的定时器的示例代码是否?

谢谢、

科基

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

    您好、Koki、

    (1)捕获可由软件启动。 可在 《用户指南》第651页找到。

    (2) Resource Explorer 中有一个示例代码: MSP430FR69xx_ta0_capture.c它可能会对您有所帮助。

    此致、

    越豪

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

    你(们)好  

    [引用 userid="495321" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3794476 #3794476"](1)捕获可通过软件启动。 可在 用户指南的第651页找到。[/quot]

    是的、感谢您提供参考信息。

    我读了那段话,但我不知道它是否与我的问题有关。

    当前的问题是、定时器 A0启动后可能会立即发生意外中断。

    由于访问外设、是否有任何会触发 CCIFG 的操作、例如计时器 A 中的设置错误?

    谢谢、

    科基

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

    a)捕获触发器(CCIFG)的发生与定时器是否正在运行(MC>0)无关。 在一个"长"空闲时间后清除 CCIFG 通常是谨慎的、这是因为一个事件过去可能发生了几次(或至少几毫秒)。

    b)在 CAP=1时、如果捕捉输入(CM+CCIS)被改变、一个捕捉可独立于引脚上的活动而发生。 这是 UG (SLAU367P)第25.2.4.1节中"注释"的本质。  这在"软件启动的捕获"中被有意使用[第25.2.4.1.1]节。

    c) SCS 将仅在下一个 sel 节拍(本例中为 ACLK)后触发捕捉事件、这意味着它可能会记住该事件 一段时间。

    实际上、我建议您在停止计时器时写入 TA0CCTL1=0、以确保计时器不会在以后告知(过期)历史记录。

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

    大家好、Bruce

    感谢您提供的有用信息。 以下是对 a)到 c)的补充和问题。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3796019 #3796019"]a)捕获触发器(CCIFG)的发生与计时器是否正在运行(MC>0)无关。 在"长时间"空闲时间后清除 CCIFG 通常是谨慎的、因为事件可能在过去发生过紧急事件(或至少毫秒)。[/引用]

    我认为 CCIFG 是定时器开始运行后设置的标志。 这是否意味着即使在计时器启动之前也可以设置它? 请详细说明上述内容以及如何处理。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3796019 #3796019"]b)如果在 CAP=1时更改了捕获输入(CM+CCIS)、则捕获可以独立于引脚上的活动进行。 这是 UG (SLAU367P)第25.2.4.1节中"注释"的本质。  这在"软件启动的捕获"中被有意使用[第25.2.4.1.1]。[/引用]

    初始化时、TA0按以下顺序设置。

    - TA0CCTL1 = 0xC910

    - TA0CTL = 0x0120

    根据这个顺序、"捕捉输入选择"和"捕捉使能"同时被执行(TA0CCTL1寄存器设置)。 上述设置顺序是否仍适用于用户指南中的"注:更改捕获输入"? 如果适用、请告诉我如何处理。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3796019 #3796019"]

    c) SCS 将仅在下一个 sel 节拍(本例中为 ACLK)后触发捕捉事件、这意味着它可能会记住该事件 一段时间。

    实际上、我建议您在停止计时器时写入 TA0CCTL1=0、以确保计时器不会在以后告知(过期)历史记录。

    [/报价]

    实际上、当定时器停止时、将执行以下操作。

    - TA0CTL = 0x0000

    - TA0CCTL1 = 0xFFFE (CCIFG 清零)

     

    谢谢、

    科基

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

    a) CCIFG 表示一个事件;哪个事件取决于 CAP 设置。 如果 sel 时钟未激活(CAL=1)、虽然 SCS 将进行干预、但行为大致等同于引脚中断。 我认为 UG 没有明确说明这一点(也许是因为疏忽)。

    b)我不确定 UG 是否明确显示。 观察到的行为是、当 CAP=0->1同时进行源转换时、不会生成 CCIFG。 人们期望此时的捕获输入("引脚")状态会另存为初始条件、因为我不知道何时会发生。

    C)是的、您提到您始终保持上限。 我建议您在不感兴趣的时候清除故障(a-c)。 我已经看到 SCS 挂起一个引脚事件的时间相当长(慢速/间歇性 TACLK)。

    [通过 UG 为每个人节省行程:

    - TA0CCTL1 = 0xC910

    - TA0CTL = 0x0120

    是的

    - TA0CCTL1 = CM_3 | CCIS_0 | SCS | CAP | CCIE |(0*CCIFG);//双边沿、CCI1A、同步、CAP、 使能

    - TA0CTL = tassel_1 | ID_0 | MC_2 |(0*TACLR)|(0*TAIFG);// ACLK/1、连续、未清零

    ]

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

    大家好、Bruce

    感谢您提供详细信息。 总之、在启用 TA0的情况下更改输入信号可能会导致意外事件。 此外、如果您选择输入信号并同时启用计时器、您可能不会遇到任何意外事件。

    基于以上内容、我想问您一个问题。 我的当前操作是选择输入信号并同时启用计时器。 但是、在极少数情况下、无论输入引脚如何、都可以在计时器 A0启动后立即执行中断处理。 如果您知道原因、请告诉我。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3797432 #3797432">我建议您在不感兴趣的情况下清除故障(a-c)时、可以避免出现故障。 我已经看到 SCS 挂起一个引脚事件的时间相当长(慢速/间歇性 TACLK)。[/引述]

    实际上、我并不真正理解上述句子。

    谢谢、

    科基

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

    我怀疑正在发生的情况:您停止捕获、但在捕获引脚上继续进行引脚转换。 您的"停止"操作设置 MC=0 (停止计数)和 ssel=0 (TACLK、这可能不是勾选)、但保留 CAP=1和 SCS=1。 由于 CAP=1、下一个引脚转换由定时器记录、但是由于 SCS=1、这将不会出现(CCIFG)、因为 TACLK 不会勾选。 当您(可能很晚)设置 ssel=1 (ACLK)时、该时钟节拍、然后失效引脚转换显示为 CCIFG。

    如果您要将 SCS=0、引脚转换将被立即显示(CCIFG)。 我怀疑这仍然不是你想要的,但更明显的是,情况是怎样的。

    在我看来、您对您"停止"/"开始"捕获之间的任何引脚转换都不感兴趣。 如果是、您应该在该时间内设置 CAP=0、这样定时器(捕捉单元)就不会观看。 具体地说,取代:

    > TA0CCTL1 &= 0xFFFE // CCIFG=0

    使用

    > TA0CCTL1 = 0;  // CAP=0、SCS =0、CCIE=0、CCIFG=0

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

    大家好、Bruce

    在操作开始时设置 TA0CCTL1后、它只向 CCIFG 标志写入0、而不切换捕捉输入(CCIS)。

    是否正确地认识到、即使在操作其他位时、也需要在 CM = 0 / CAP = 0的情况下访问 TAxCCTLn?

    谢谢、

    科基

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

    1) 1)您提到您开始使用以下工具进行捕获:

    - TA0CCTL1 = 0xC910

    它将取消设置为0。 由于在此之前、CAP=0、通过设置 CAP=1同时改变 CCIS/CM 将不会生成一个 CCIFG (而是计时器将记录初始条件)。

    2)如果 CAP=1 (已经)、然后您更改 CCIS+CM、它可以生成一个 CCIFG。 在某些情况下清除 scs=1->0也可能。

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

    大家好、Bruce

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3801244 #3801244(1999)将取消设置为0。 由于在此之前、CAP=0、同时通过设置 CAP=1来改变 CCIS/CM 将不会生成一个 CCIFG (而是计时器将记录初始条件)。[/引用]

    我还认为不会生成 CCIFG、因为同时设置了 CCIS/CM 和 CAP = 1。

    -TA0CCTL1 = 0xC910

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3801244 #3801244(1999) 2)如果 cap = 1 (已),然后更改 CCIS+CM,则可以生成 CCIFG。 在某些情况下,清除 scs=1->0也可能。

    当 CAP = 1时、寄存器改变的操作描述如下。

    -TA0CCTL1 &= 0xFFFE // CCIFG = 0

    寄存器更改只清除 CCIFG、无 CCIS、CM 或 SCS 更改。 因此、我不理解为什么在计时器 A0启动后、无论输入信号的波动如何、CCIFG 都会被置位。

    如果您需要其他信息来解决此问题、请告诉我。

    谢谢、

    科基

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

    我需要的其他信息是故障情况之前输入信号(P1.6)的示波器轨迹、其中标记显示(a)何时执行"停止"、(b)何时执行后续"启动"。

    我预计我们将在两个标记之间的信号中看到一个或多个转换(边沿)。 如果是、这将产生您描述的症状。

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

    大家好、Bruce

    当我们使用建议的内容验证操作时、我们能够确认没有收到意外中断。 非常感谢。 您能否详细说明停止时是否需要设置 TAxCCTLn = 0? 我回顾了过去的交流,但我无法完全理解这种现象的原因。

    谢谢、

    科基

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

    我想我在上面解释了"我怀疑正在发生什么"的整个序列。 这是答复#3中的意见(A)+(c)的结果。

    严格地说、当您"停止"时、您可能只需清除 CAP+SCS、但我从未尝试过这种方法、可能会有我忘记的东西。

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

    大家好、Bruce

    正如您所回答的、在捕获停止后输入信号被反转、因此我认为它与发生的情况相匹配。

    即使输入信号被反相、也可能会发生或不会发生意外中断。 这是否与您的回答相符?  (在许多情况下、当我确认时不会发生中断。)

    谢谢、

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

    在实验的范围内、我希望每次在"停止"模式下发生转换时都会发生、因为这是用户指南中描述的功能(可能不明显)的结果。

    一种可能的幻象:由于您在激活时使用 ACLK、在重新启动后、在第一个节拍发生的"惊喜"CCIFG 可能高达约31 μ s。

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

    大家好、Bruce

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3807434 #3807434"]用户指南中描述的功能的结果。

    您正在讨论的 UG 的描述是否为以下注释? 我认为这份说明包含了"可能造成"的细微差别,并不总是出现这种情况。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3807434 #3807434"]重新启动后的31微秒。

    WhenfACLK 是32768Hz,是根据1/fACLK 计算得出的31us  吗?

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3807434 #3807434"]一种可能的幻象:由于您在使用 ACLK 时处于活动状态、因此在重新启动后、第一个节拍发生的"惊喜"CCIFG 可能会高达约31uec。

    重新启动后需要31 μ s、因此可能在 CCIFG 设置被反映之前再次开始捕获操作、对吧?

    谢谢、

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

    是的、31 μ s 参考频率为1/32kHz。 如果在下一个 ACLK 周期前发生另一个转换、实验的结果会不明确。

    a)[UG 章25.2.1.1]"定时器时钟可来自 ACLK、SMCLK、或外部来自 TAxCLK 或 INCLK "。 这是所有4个可能的 sel 值。  计时器始终有一个时钟。

    b)[UG Sec 25.2.4.1]"当 CAP = 1时选择捕获模式。[...]  捕获发生在输入信号的选定边沿上。" 只要 CAP=1、捕捉功能就被激活。 没有提到计时器正在运行(MC >0)。 是的、我想他们可以明确提到计时器不需要运行。 但是、您可以通过设置 SCS=0来轻松演示此函数。

    c)[UG Sec 25.2.4.1]"设置 SCS 位将使捕获与一个定时器时钟同步。" [强调已添加。]

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

    大家好、Bruce

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026444/msp430fr6879-timera0-ccifg-interrupt/3807434 #3807434"]一种可能的幻象:由于您在使用 ACLK 时处于活动状态、因此在重新启动后、第一个节拍发生的"惊喜"CCIFG 可能会高达约31uec。

    是否可以将其解释为丢失中断请求的行为?

    我们已经确认、即使在重新启动后未发生捕获信号转换、CCIFG 也可能不会被置位。

    谢谢、

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

    我不知道在 CAP=1时会导致触发事件丢失的机制、我无法复制您的实验。 我听从你的意见。

    我想你现在已经知道了我对这种现象的了解,可以判断是采取我建议的补救办法,还是提出不同的办法。