Part Number:AWR6843AOPOther Parts Discussed in Thread:AWR6843
老师,您好!首先问题基于两个前提:
1.Free running counter 0/1是在当UC0/1 = RTICPUC0/1 时累加1,且当计数值到达0xffff_ffff边界值时,生成溢出中断。
2.另外,当Free running counter 0/1 = RTICOM0/1时产生compare int0/1/2/3中断。
我的问题是:
1,我的理解是溢出中断属于异常事件,那么为了避免溢出中断的发生,是不是在比较中断发生的时候,对Free running counter 0/1进行清零操作?但是我在SDK中没有找到相应的代码,而且.h文件中RTIFRC1_FRC0/1_BIT_END这类声明也没有被引用。
2,考虑到中断响应时间存在一些差异,如果是上述这种操作模式,如何保证定时器按照设定值精准输出?
3,如果不是通过比较中断来对Free running counter 0/1进行清零,那溢出中断就会周期性地生成,这是否正常?且这种情况下,如何生成包含不同时间戳信息的compare int0/1/2/3?因为此时Free running counter 0/1的计数周期是固定的。
Cherry Zhou:
您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!
,
Lyalin Carphany:
嗯,好的,静候佳音,谢谢
,
Cherry Zhou:
您好,
抱歉回复晚了。
1. 每次 UC 和 COMP Valuse 匹配时,free running counter将递增1。 当 FRC 达到0xFFFFFFFF 时,需要将其清零,来让下一个溢出中断发生。
2. 这里最好是将 RTI 中断优先级设置为相对于其他中断的最高优先级。 在 RTI ISR 中,首先清除中断。
3. 直到达到0xFFFFFFFF 的最大值,溢出中断将会生成。用户需要配置以下寄存器来启用 int0/1/2/3事件:
RTIUDCP0
RTICOMP1
RTIUDCP1
RTICOMP2
RTIUDCP2
RTICOMP3
RTIUDCP3
,
Lyalin Carphany:
首先谢谢您的回复!但是没有回答我的疑惑。我疑惑的是free running counter的计数边界值是多少?
按照您的解释,如果我没有理解错的话,free running counter一定会计数至0xffff_ffff?也就是溢出中断是一定会发生的。如果free running counter的计数范围固定为0x0000_0000 – 0xffff_ffff,假设RTICOMP0=0XF,RTICOMP1=0XFF,COMPSEL0=0,COMPSEL1=0,那么compare int0和compare int1的中断周期都是一样的,只是compare int0中断发生的早一点,compare int0和compare int1相邻两次中断的时间跨度是一样的。这样的话,下图的配置就根本无法实现。
,
Lyalin Carphany:
是不是可以这样理解,AWR6843内部其实是有4个free-running counter,而不是文档中提到的2个。free-running counter0的计数边界值为RTICOMP0,free-running counter1的计数边界值为RTICOMP1,free-running counter3的计数边界值为RTICOMP2,free-running counter3的计数边界值为RTICOMP3。这样就可以实现不同的compare int周期了。这样下图就可以实现了。
,
Cherry Zhou:
您好,
我们需要向工程师确认下,您也可以查看以下链接来确认问题进展:
e2e.ti.com/…/awr6843aop-awr6843isk-rti-free-running-counter
,
Cherry Zhou:
抱歉回复晚了。
根据以下屏幕截图,如果同时enable了“MSS_RTIA compare interrupt 0” 和 “MSS_RTIA compare interrupt 1”这两个中断,并且这两个中断同时发生,那么“MSS_RTIA compare interrupt 0”中断优先于“MSS_RTIA compare interrupt 1”(这基于最低中断通道编号) :