假设SWAG使用的10-2齿,下降沿有效,在SWAG同步后,齿轮转到奇点齿周期结束时,即下降沿到来,APCNT的period count异常变成0,同时会进一步造成下一齿轮周期的SCNT和ACNT的data字段未递增,保持为0。按照手册中伪代码描述,只有3种情况会对period count赋值,如图所示,只有下溢时才可能将其置0,然而在此时我们检查了EXC2寄存器中的没有标志置位。
我们使用的代码如下,LR=128,HR=64,HET1在pin1上产生波形,同时在软件检测到奇点齿后再启用SWAG,硬件上将pin1与pin2相连。
A1 PWCNT { next=A2,hr_lr=LOW,cond_addr=A2,en_pin_action=ON,pin=1,action=PULSEHI,reg=NONE,data=0,hr_data=16};
A2 DJZ { next=B1,cond_addr=A3,reg=NONE,data=0};
A3 MOV32 {remote=A1,z_cond=OFF,init=OFF,type=IMTOREG&REM,reg=NONE,data=5,hr_data=16};
A4 CNT { reg=A,max=7,data=0};
A5 ECMP { en_pin_action=OFF,cond_addr=A7,pin=0,reg=A,data=6};
A6 MOV32 {next=B1,remote=A2,z_cond=OFF,init=OFF,type=IMTOREG&REM,reg=NONE,data=15};
A7 MOV32 {next=B1,remote=A2,z_cond=OFF,init=OFF,type=IMTOREG&REM,reg=NONE,data=47};
B1 PCNT { hr_lr=LOW,type=FALL2FALL,pin=2,control=ON,prv=OFF,data=0};
B2 CNT { reg=B,max=30,data=5};
B3 BR { brk=OFF,next=B4,cond_addr=L1,event=Z};
B4 ECMP { next=A1,en_pin_action=OFF,cond_addr=B5,pin=0,reg=B,data=20};
B5 MOV32 { next=A1,remote=B2,z_cond=OFF,init=OFF,type=IMTOREG&REM,reg=A,data=5};
L1 APCNT { reqnum=4,request=NOREQ,irq=OFF,type=FALL2FALL,prv=OFF,period=0};
L2 SCNT { step=8,gapstart=57,data=0};
L3 ACNT { next=L4,edge=FALLING,irq=ON,gapend=79,data=8};
L4 ECMP { next=A1,en_pin_action=OFF,cond_addr=L5,pin=1,reg=B,data=0x4e};
L5 CNT { next=A1,brk=ON,reg=NONE,max=7,data=0};
调试时,在奇点齿周期结束的下降沿到来时,APCNT的period count异常变成0的截图如下,断点设置在APCNT指令处。
我们已查看论坛中的下列两个问题,发现SWAG的这个问题长期存在且并未解决