请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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