本帖最后由 zhanan 于 2023-7-1 15:24 编辑
又有新发现
在编码器模式下,OV 对应 CNT==ARR, UD 对应 CNT==FFFF,当 ARR 也等于FFFF时, 两个中断就凑一起了!
ARR 可变,所以 OV 点可变,而 UD 点是固定不变的,两个匹配值而已。
这样,UD 和 OV 只用一个即可,DIR 用于判断是上溢还是下溢。
GTIM->CR0 = 0x018001; //编码器
GTIM->ICR = 0x00; // 中断写0清0
GTIM->IER = 0x04; // 只开UD中断
NVIC->ISER[0] = 0x010000; //GTIM中断
void GTIM_IRQHandler(void) // GTIM编码器上溢下溢中断处理
{
mzdcs = GTIM->CNT;
mzdcs|= GTIM->ISR<<16;
if((GTIM->ISR & 0x0404)==0x0004) {mgw++; GTIM->CNT++;}// 上溢
if((GTIM->ISR & 0x0404)==0x0404) {mgw--; GTIM->CNT--;}// 下溢
GTIM->ICR = 0x00; //写0清0
}
CNT跳过一个数,岂不是少计了一个数?
如果是触发式的,UD和OV就是真正的下溢和上溢了,为什么不呢?
|