Microchip
直播中

黄明光

8年用户 331经验值
私信 关注
[问答]

PIC18F定时器的预加载周期寄存器?

我试图在PIC18F中设置一个10mS“心跳”计时器。这个想法是计时器每10mS触发一个中断,ISR将增加一个中断安全变量,以便其他代码通过调用集中的、中断安全的函数来获得时间戳。这在多个平台上,包括最近的PIC24F。但是现在,在PIC18F上,我找不到一个可以预装的16位定时器(!)?!)定时器2和4具有Microchip所称的“周期寄存器”,但这个和计时器只有八位。当与预分频器和后分频器结合时,最大除数是64K,不足以将16MHzTcy划分为10mS周期。唯一具有足够分辨率的定时器是T1和T3。但是它们没有预加载/周期寄存器,这意味着ISR必须预加载它们。好的。。。但是,当计时器寄存器被写入时,预分频器被清除(!)?!)因此,你被保证失去同步,这将是一个累积问题,因为无论在预定标器中累积了多少计数,每次中断都会被丢弃。更糟的是,如果系统中有多个中断,那么数量将根据您在主代码或ISR中的位置而变化。如果定时器中断发生时您正忙于服务另一个中断事件,则预加载定时器之前的指令周期数目是不确定的。我发现创建实际的自预加载定时器的唯一方法是浪费ECCP模块并使用它的“特殊事件触发器”来指定o在计时器上进行比较,当达到计数时重置,并触发ECP中断的ISR。不清楚ECCP定时器重置是否也重置了定时器的预分频器,但是由于它发生在硬件中,周期损失将最小。在PIC18F中的八位定时器?或者,你真的必须浪费一个完整的ECP模块来完成这个非常基本的操作吗?谢谢!

回帖(4)

陈晨

2019-10-15 11:49:37
这是一个有20年历史的遗漏。硅的成本较高,时钟频率降低4~8MHz。这给了你100毫秒加上定时器2。他们可以放入32定时器,当然。但我认为市场营销并没有感觉到需求。看看PIC32,它有16位定时器,可以将其链接到32位。那是怎么回事?
举报

tijing忽忽

2019-10-15 12:21:10
我想这就是“这个线索的要点”:答案已经给出:你没有遗漏任何显而易见的东西,这是不能做的,硬件不是这样做的,抱怨在微芯片部分的设计选择将无济于事。是的,他们可以用这样的方式建造计时器,不,他们没有。
举报

李天竹

2019-10-15 12:54:02
对。那真是太糟糕了。希望在K40:)@ OP:你可以在不干扰预定标器的情况下向定时器的高字方向移动。读取数据表。外部时钟也可以工作。
举报

李天竹

2019-10-15 13:20:16
胜于无事:
举报

更多回帖

发帖
×
20
完善资料,
赚取积分