[PIC®/AVR® MCU]

PIC18F26K83 Timer0时钟源选HFINTOSC 不能产生中断?

[复制链接]
738|13
手机看帖
扫描二维码
随时随地手机跟帖
wellsking|  楼主 | 2022-8-11 17:02 | 显示全部楼层 |阅读模式
本帖最后由 wellsking 于 2022-8-11 17:03 编辑

使用MCC 生成代码
用Timer0产生1ms的中断
试了以下两种配置。
1\选择MFINTOSC (500KHz)
    T0CON1 = 0xA0;
    TMR0H = 0xFE;
    TMR0L = 0x0C;  // (65536 - 65036) * 1/(500KHz) = 1ms

可以正常产生中断。

2\选择HFINTOSC (64MHz)
    T0CON1 = 0x60;
    TMR0H = 0x05;
    TMR0L = 0x00;  // (65536 - 1250) * 1/(64MHz) = 1.004ms

不可以产生中断。


为什么用HFINTOSC 做为时钟不能产生中断?
Timer0时钟有什么限制吗?

使用特权

评论回复
ynwa| | 2022-8-11 17:47 | 显示全部楼层
T0的时钟源是在T0CON1里设置。但是HFINTOSC你使能了没有?

使用特权

评论回复
wellsking|  楼主 | 2022-8-11 18:31 | 显示全部楼层
本帖最后由 wellsking 于 2022-8-11 18:35 编辑

非常感谢 ynwa的回复。
我用HFINTOSC 64MHz做为系统时钟。
还要在哪里使能HFINTOSC吗?
void OSCILLATOR_Initialize(void)
{
    // NOSC HFINTOSC; NDIV 1;
    OSCCON1 = 0x60;
    // CSWHOLD may proceed; SOSCPWR Low power;
    OSCCON3 = 0x00;
    // MFOEN disabled; LFOEN disabled; ADOEN disabled; SOSCEN disabled; EXTOEN disabled; HFOEN disabled;
    OSCEN = 0x00;
    // HFFRQ 64_MHz;
    OSCFRQ = 0x08;
    // TUN 0;
    OSCTUNE = 0x00;
}


使用特权

评论回复
wellsking|  楼主 | 2022-8-11 18:33 | 显示全部楼层
本帖最后由 wellsking 于 2022-8-11 18:34 编辑

void OSCILLATOR_Initialize(void)
{
    // NOSC HFINTOSC; NDIV 1;
    OSCCON1 = 0x60;
    // CSWHOLD may proceed; SOSCPWR Low power;
    OSCCON3 = 0x00;
    // MFOEN disabled; LFOEN disabled; ADOEN disabled; SOSCEN disabled; EXTOEN disabled; HFOEN disabled;
    OSCEN = 0x00;
    // HFFRQ 64_MHz;
    OSCFRQ = 0x08;
    // TUN 0;
    OSCTUNE = 0x00;
}

使用特权

评论回复
ynwa| | 2022-8-12 10:50 | 显示全部楼层
你用HFINTOSC做系统时钟和T0时钟,那么你确定程序在跑,以及T0在计数吗?还有TMR0IF标志位的状态
按你的描述和发出来的代码,不应该T0不产生中断。哪里犯了低级错误没有发现?

使用特权

评论回复
lcczg| | 2022-8-12 10:59 | 显示全部楼层
你好,原因是TIMER0的模式。请更改为异步模式。T0CON1 = 0x70;
数据手册里T0CON1 BIT4 的描述-> ASYNC: TMR0 Input Asynchronization Enable bit
1 = The input to the TMR0 counter is not synchronized to system clocks
0 = The input to the TMR0 counter is synchronized to F OSC /4
在同步模式下,根据采样定理,TMR0的输入要低频(低于F OSC /4)才行。 否则F OSC /4没法和一个高于它的频率同步。

使用特权

评论回复
wellsking|  楼主 | 2022-8-12 14:37 | 显示全部楼层
谢谢ynwa、lcczg的回复。问题已经解决
方法1:ASYNC 设置为1
方法2:T0CON1.CKPS  = 3 // 1/8分频  (输入小于FOSC/4 )

使用特权

评论回复
tpgf| | 2022-9-7 09:35 | 显示全部楼层
任何时钟源都能产生中断的

使用特权

评论回复
nawu| | 2022-9-7 09:47 | 显示全部楼层
首先要确认一下定时器是不是在正常工作

使用特权

评论回复
aoyi| | 2022-9-7 09:55 | 显示全部楼层
是需要采用异步模式是吧

使用特权

评论回复
zljiu| | 2022-9-7 10:01 | 显示全部楼层
异步模式和同步模式的区别是什么呢

使用特权

评论回复
lcczg| | 2022-9-7 10:57 | 显示全部楼层
zljiu 发表于 2022-9-7 10:01
异步模式和同步模式的区别是什么呢

主要是影响休眠模式下的唤醒,
20.5 Operation During Sleep
When operating synchronously, Timer0 will halt. When
operating asynchronously, Timer0 will continue to
increment and wake the device from Sleep (if Timer0
interrupts are enabled) provided that the input clock
source is active.

使用特权

评论回复
gwsan| | 2022-9-7 11:46 | 显示全部楼层
那么同步模式可以用于什么呢

使用特权

评论回复
tfqi| | 2022-9-7 11:54 | 显示全部楼层
采样定理是多少倍的信号频率来着?

使用特权

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

本版积分规则