打印
[其他产品]

有关于时钟的一些问题

[复制链接]
262|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stormwind123|  楼主 | 2025-4-10 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我正在使用一个Pic24板来实现我的应用。在我的项目中,我使用定时器中断来启用和禁用一个光学输出。然而,当我通过改变周期来启用或更改定时器时,更改需要几秒钟才能生效。我无法理解这个问题背后的原因。

使用特权

评论回复
沙发
xixi2017| | 2025-4-11 15:46 | 只看该作者
定时器周期寄存器的同步机制
问题:PIC24的定时器模块(如Timer1)在运行时,写入周期寄存器(PRx)可能不会立即生效,而是等待当前周期结束。例如,若当前周期还剩较长时间,新值需等待当前周期完成后才加载。

解决:在修改周期寄存器前,尝试以下步骤:

停止定时器:通过清除控制寄存器(T1CONbits.TON = 0)暂停定时器。

写入新周期值:更新PRx寄存器。

重置计数器:将定时器计数器(TMRx)清零,确保从新周期开始。

重启定时器:重新使能定时器(T1CONbits.TON = 1)。

使用特权

评论回复
板凳
xixi2017| | 2025-4-11 15:46 | 只看该作者
预分频器(Prescaler)配置过大
问题:若预分频值设置过高(如1:256),即使周期寄存器值较小,实际中断间隔也可能长达数秒。

解决:

检查定时器的预分频配置(如T1CONbits.TCKPS)。

重新计算预分频和周期值,确保实际中断间隔符合预期。

公式:中断间隔 = (PRx + 1) * (Prescaler) / F_osc

使用特权

评论回复
地板
xixi2017| | 2025-4-11 15:46 | 只看该作者
中断服务程序(ISR)中的延迟
问题:若在ISR中执行耗时操作(如复杂计算或阻塞代码),可能导致中断响应延迟,间接影响周期更新的及时性。

解决:

确保ISR尽可能简短,仅执行关键操作(如翻转引脚状态)。

将复杂逻辑移至主循环,通过标志位通信。

使用特权

评论回复
5
xixi2017| | 2025-4-11 15:47 | 只看该作者
寄存器写入未使用原子操作
问题:在修改定时器寄存器时,若未关闭中断或使用原子操作,可能因中断打断写入过程,导致寄存器值损坏。

解决:

在修改关键寄存器前禁用中断:
__builtin_disable_interrupts(); // 关闭中断
TMR1 = 0;       // 重置计数器
PR1 = new_value; // 更新周期值
__builtin_enable_interrupts();  // 重新启用中断


使用特权

评论回复
6
xixi2017| | 2025-4-11 15:47 | 只看该作者
定时器模式配置错误
问题:若定时器未配置为预期模式(如自由运行模式),可能导致周期更新异常。

解决:

确认定时器模式(如T1CONbits.TMODEL),设置为“周期性定时器”模式。

参考数据手册,确保其他控制位(如时钟源、同步设置)正确。

使用特权

评论回复
7
xixi2017| | 2025-4-11 15:47 | 只看该作者
代码逻辑错误
问题:修改周期的代码可能未正确触发,例如条件判断错误或变量未更新。

解决:

使用调试器或IO引脚输出调试信号,确认周期修改代码是否执行。

检查变量传递和计算过程,确保新周期值正确。

使用特权

评论回复
8
xixi2017| | 2025-4-11 15:47 | 只看该作者
最小化测试代码:仅保留定时器配置和周期修改逻辑,排除其他代码干扰。
// 定时器初始化
T1CON = 0x8000; // 使能定时器,预分频1:1
PR1 = 0xFFFF;   // 初始周期最大值
_T1IF = 0;      // 清除中断标志
_T1IE = 1;      // 使能定时器中断

// 主循环中修改周期
while(1) {
    if (需要修改周期) {
        __builtin_disable_interrupts();
        T1CONbits.TON = 0; // 停止定时器
        TMR1 = 0;          // 重置计数器
        PR1 = new_PR1;     // 写入新周期
        T1CONbits.TON = 1; // 重启定时器
        __builtin_enable_interrupts();
    }
}

使用特权

评论回复
9
wahahaheihei| | 2025-4-11 15:48 | 只看该作者
示波器/逻辑分析仪观测:直接测量光学输出引脚,观察修改周期后的实际响应时间,确认是否与预期一致。

使用特权

评论回复
10
勇敢的大白菜| | 2025-4-11 15:48 | 只看该作者
xixi2017 发表于 2025-4-11 15:46
定时器周期寄存器的同步机制
问题:PIC24的定时器模块(如Timer1)在运行时,写入周期寄存器(PRx)可能不 ...

定时器的精准度,完全依赖于时钟晶振的

使用特权

评论回复
11
逆鳞风暴| | 2025-4-11 22:22 | 只看该作者
可以尝试停止定时器,更新周期寄存器后,再重新启动定时器

使用特权

评论回复
12
不想起床喵星人| | 2025-4-12 09:31 | 只看该作者
是不是定时器的模式配置错误,没有设置为预期的模式

使用特权

评论回复
13
复古留声机| | 2025-4-12 11:23 | 只看该作者
是不是定时器的周期寄存器更新机制导致的

使用特权

评论回复
14
暖心小太阳| | 2025-4-12 13:23 | 只看该作者
是不是中断服务程序(ISR)里有耗时操作,影响了定时器周期更新的及时性

使用特权

评论回复
15
幻想收藏家| | 2025-4-12 18:51 | 只看该作者
检查一下定时器的预分频器设置

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

501

主题

2921

帖子

3

粉丝