本帖最后由 ddllxxrr 于 2014-7-4 20:27 编辑
1) 这里OCR1A和OCR1x是否是同一个?
这个不一定,还有一个OCR1B
给你个图你就明白了,应该:
2) 如果是同一个 那什么时候改变top值,什么时候产生比较?
计数器计到计数序列的最大值时即达到TOP。TOP 值可以为固定值0x00FF、
0x01FF或 0x03FF,或是存储于寄存器 OCR1A或ICR1里的数值,具体有赖于工作
模式
当T/C 工作在12 种PWM 模式种的任意一种时, OCR1x 寄存器为双缓冲寄存器;而在
正常工作模式和匹配时清零模式(CTC) 双缓冲功能是禁止的。双缓冲可以实现OCR1x 寄
存器对TOP 或BOTTOM 的同步更新,防止产生不对称的PWM 波形,消除毛刺。
访问OCR1x 寄存器看起来很复杂,其实不然。使能双缓冲功能时,CPU 访问的是OCR1x
缓冲寄存器;禁止双缓冲功能时CPU 访问的则是OCR1x 本身。OCR1x( 缓冲或比较)
寄存器的内容只有写操作才能将其改变(T/C 不会自动将此寄存器更新为TCNT1 或ICR1
的内容),所以OCR1x 不用通过TEMP 读取。但是象其他16 位寄存器一样首先读取低
字节是一个好习惯。由于比较是连续进行的,因此在写OCR1x 时必须通过TEMP 寄存器
来实现。首先需要写入的是高字节OCR1xH。当CPU 将数据写入高字节的I/O 地址时,
TEMP 寄存器的内容即得到更新。接下来写低字节OCR1xL。在此同时,位于TEMP 寄存
器的高字节数据被拷贝到OCR1x 缓冲器,或是OCR1x 比较寄存器。
上边明确答了,在写入的时候,就开始记数。直到记值到TOP值。再在中断里写OCR1x ,就是TOP值。
s
|