您好,
我正在尝试使用六块配备 nrf23l01 收发器的 FRDM-K64F 板进行无线电联网。
我将一秒钟分成十个时隙,其目的是让时隙 1 中的传输在时隙 2 中重复,时隙 2 中的传输在时隙 3 中重复,依此类推进行转发。
所以我使用 PIT 以 100 毫秒的周期生成中断,我已经用示波器检查过了。
在三块电路板(C、F 和 F 版本)上,此功能运行正常,我看到空中数据重复出现。然而,使用这三块 rev F1 电路板时,我的发射程序会卡住,等待时间段 1 到来。我没有收到中断!
有人知道版本 F 和版本 F1 之间发生了什么变化会导致这种现象吗?
这是我的初始化程序:
SIM->SCGC6 |= SIM_SCGC6_PIT_MASK; // 开启 PIT 时钟 PIT - > MCR = 0x1; // 启用 PIT 定时器
PIT -> CHANNEL [0]. LDVAL = 5999999; // 设置重载值为 100 毫秒
PIT -> CHANNEL [0]. TCTRL = 0x03; // 开启 PIT 定时器 0,中断开启
主要内容:
NVIC_EnableIRQ(PIT0_IRQn); // 启用 PI 定时器,通道 0 中断
以及 ISR:
void PIT0_IRQHandler ( void )
{
/* 清除中断标志 */
PIT-> CHANNEL [0]. TFLG = PIT_TFLG_TIF_MASK;
NVIC_ClearPendingIRQ( PIT0_IRQn ); // 清除待处理的 PI 定时器,通道0 中断
//scope_trigger();
time_slot += 1;
如果(时间段 > 10)时间段 = 0;
__DSB(); // 添加以应对 ARM勘误表838869,影响 Cortex-M4
}
非常感谢您的帮助!
干杯
奈杰尔
啊哈!谢谢。是的,我的三个芯片上都装了那个面罩。我很惊讶,你们的AI引擎(到目前为止,我觉得它非常有用)竟然没有提出这个问题!是否有建议的解决方法?延迟或失败?是的, PIT->MCR = 0x1; 应该单独一行,
感谢您的帖子!
请检查勘误表 e7914 是否适用于您的 MCU: Kinetis_K_1N83J.pdf
我在 FRDM-K64F REV F1 上测试过,可以正常工作,我使用了 SDK 2.11.0 和 MCUXpresso IDE 25.06。
另外,我注意到您分享的代码中,在启用 SCGC6 的代码里,有一行“PIT->MCR = 0x1”作为注释,我想确认一下这是否是帖子中的笔误。
勘误表中提到的解决方法是在写入 PIT_MCR 寄存器之前先读取该寄存器。
我以SDK中的PIT示例为基础,在FRDM板REV F1上测试您正在进行的操作,并进行了如下修改:
carlos_o_0-1790096350978.pngcarlos_o_0-1790096350978.pngcarlos_o_0-1790096350978.png
运行正常,没有任何问题。