有一光耦编码盘会输出如图所示的方波,现在想在上升沿(A点)到来时,能触发捕获中断,从而获取低电平时间TL,并标记此时发生了电平跳变,在下降沿(B点)到来时,也能触发捕获中断,从而获取高电平时间TH,并标记此时发生了电平跳变。好像TMS320F28335的同一个捕获端口只能使用一个捕获事件来触发捕获中断,对于这种有两个捕获事件的,请问用什么办法能解决这个问题?只要能解决正确获取高低电平时间TH和TL,并标记发生的电平跳变,请问还可以有其他策略吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
有一光耦编码盘会输出如图所示的方波,现在想在上升沿(A点)到来时,能触发捕获中断,从而获取低电平时间TL,并标记此时发生了电平跳变,在下降沿(B点)到来时,也能触发捕获中断,从而获取高电平时间TH,并标记此时发生了电平跳变。好像TMS320F28335的同一个捕获端口只能使用一个捕获事件来触发捕获中断,对于这种有两个捕获事件的,请问用什么办法能解决这个问题?只要能解决正确获取高低电平时间TH和TL,并标记发生的电平跳变,请问还可以有其他策略吗?
有一光耦编码盘会输出如图所示的方波,现在想在上升沿(A点)到来时,能触发捕获中断,从而获取低电平时间TL,并标记此时发生了电平跳变,在下降沿(B点)到来时,也能触发捕获中断,从而获取高电平时间TH,并标记此时发生了电平跳变。好像TMS320F28335的同一个捕获端口只能使用一个捕获事件来触发捕获中断,对于这种有两个捕获事件的,请问用什么办法能解决这个问题?只要能解决正确获取高低电平时间TH和TL,并标记发生的电平跳变,请问还可以有其他策略吗?
Eric:
你倒是可以利用这个中断寄存器able 9. ECAP Interrupt Enable Register (ECEINT) Field Description
这个寄存器可以使能多个事件都产生中断。有一点要注意的是,中断里尽量少代码,这样避免处理不过来。
好的,谢谢,我还有两个个疑问请教下。下面是我的CAP3初始化程序。
对ECap3Regs.ECEINT.bit.CEVTx(X=1,2,3,4)进行操作时,只有单独写ECap3Regs.ECEINT.bit.CEVT4=1时,才会在每个捕获事件到来时都会进入捕获中断,如果写ECap3Regs.ECEINT.bit.CEVT4=1;ECap3Regs.ECEINT.bit.CEVT3=1;ECap3Regs.ECEINT.bit.CEVT2=1;ECap3Regs.ECEINT.bit.CEVT1=1,则只有捕获事件1到来时才会进入捕获中断,按照数据手册应该是每个捕获事件都要单独使能才行啊,所以没有想明白。
第二个疑惑是:当输入的脉冲宽度(高电平或低电平)小于600个系统时钟脉冲时,事件1(CAP1)捕获的值会不正确,但是其他事件捕获值都是正确的,如果是大约大于600个系统时钟脉冲时,则所有时间捕获值都完全正确,请问这是什么原因?谢谢!