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.

[参考译文] RF430FRL152H:使用定时器 A 来实现周期性中断

Guru**** 2540720 points


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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/781928/rf430frl152h-using-timer-a-for-periodic-interrupts

器件型号:RF430FRL152H

大家好、

对于我正在实现的应用、我需要一个计时器来定期触发中断。 我阅读了定时器 A 可用的文档、并且在之前的 MSP430项目中使用了定时器 A。

出于某种原因、我在这里无法使用中断。  我从德州仪器提供的 NFC_only 示例代码开始编写代码、我所做的唯一修改就是初始化计时器

和中断管理。 在当前代码(我也在其他论坛上找到、因此我相信它可以正常工作)中、只要点亮计时器、LED 就会闪烁。 目前、这种情况从未发生过。

如前所述、我唯一修改的与 NFC_only 示例相关的内容是您可以在下面找到的主要内容  

void main()
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗

// ROM RF13M 模块设置**正确的 RF 堆栈操作需要以下三行
DS = 1; //需要在此处初始化 ROM 变量
ASM ("调用#0x5CDA "); //调用 ROM 函数(初始化函数指针)
ASM ("调用#0x5CAC "); //调用 ROM 函数(检查器件配置)


initISO15693 (clear_block_locks);
DeviceInit();

TA0CCTL0 = CCIE;/* TA0CCTL0寄存器:如果您计划使用定时器、则需要设置的第一个寄存器是 CCTL0。 它是一个16位寄存器、该寄存器的设置会影响我们使用该寄存器的方式。 出于我们的目的、我们只需告诉它使用*/启用中断
TA0CTL = TAIE | TASSEL_2 | MC_1 | ID_3;/* TASSEL_2:使用 SMCLK MC_1:向上计数 ID_3:除以8*/
TA0CCR0 = 10000;//计数到10000
P1SEL0 = 0x00;
P1SEL1 = 0x00;
//将引脚1.4设置为输出
P1DIR = 0x10;
P1OUT = 0x00;
while (1)
{
//将端口设置为 GPIO 模式
/* P1SEL0 = 0x00;
P1SEL1 = 0x00;
//将引脚1.4设置为输出
P1DIR = 0x10;
//将输出切换为高电平
P1OUT =~P1OUT;

_delay_cycles (4000000);
//将输出切换为低电平
P1OUT =~P1OUT;
_delay_cycles (4000000);*/

//在此处输入应用程序代码...
//_bis_SR_register (LPM3_bits + GIE);
}
} 

中断例程、我刚刚从示例代码中取消注释、并向其添加了闪烁指令

#pragma vector = TIMER0_A0_VECTOR
__INTERRUPT void TimerA0_ISR (void)
{

P1OUT =~P1OUT;//:0x10;
} 

我是否需要修改其他内容(例如在链接器.cmd 文件中?)。 我确信 LED 已正确配置为闪烁,因为您在 while (1)循环中看到的注释代码会使 LED 正常闪烁... 感谢您的帮助!

Lorenzo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、如果有人遇到同样的问题、我会自行回复。 在上面发布的代码中、不应注释第38行_bis_SR_register (LPM3_bits + GIE)。 我将针对单独的问题打开一个新的线程。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Lorenzo、

    定时器的初始化正常、但 ISR 需要清除 TAIFG 标志。
    TA0CTL &=~TAIFG;

    线路
    P1OUT =~P1OUT;
    将影响端口中的所有位。 更好的使用:
    P1OUT ^= BIT4;

    通过该更改、您的代码会使 LED 闪烁。

    此致、
    Helfried
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,这也是:)。 我已经在代码中更正了它、但忘记了将"旧"版本粘贴到这里。 感谢您注意到这一点。