Thread 中讨论的其他器件:TMS570LS3134
工具与软件:
您好!
我正在使用 TMS570LS3134作为硬件。
我使用 Compare0作为间隔为1ms 的计数器。
我要将比较1用于看门狗 NMI。 (DwwdInit (generate_NMI、preloadValue、size_100_percent);)
为此、我首先尝试将比较器0用作1ms、比较器1用作5ms 计数器。
比较0每1ms 发生一次、但比较1不发生。
换句话说、我的 taskComp0函数每1ms 重复一次、但在任何情况下都无法到达我的 taskComp1函数。
我想我在这个标题上有一个类似的问题、但我看不到解决方案。
我的代码如下。
如果您能帮助我、我将非常高兴。
//在 tms_rti.c 文件中
空 RtiInit (空)
{
RTIGCTL。 全部= 0U;
RTI->GCTRL = RTIGCTL。 全部;
RTIDBCTRL。 全部= 0U;
RTI->TBCTRL = RTIBCTRL。 全部;
RTICAPCRTL。 全部= 0U;
RTI->CAPCTRL = RTICAPCRTL。 全部;
RTICOMPCTRL.Bits.COMPSEL3 = 1u;
RTICOMPCTRL.Bits.COMPSEL2 = 1u;
RTICOMPCTRL.Bits.COMPSEL1 = 0u;
RTICOMPCTRL.Bits.COMPSEL0 = 0u;
RTI->COMPCTRL = RTICOMPCTRL。 全部;
RTIUC0.all = 0U;
rti->cnt[0].ucx = RTIUC0.all;
RTIFRC0.all = 0U;
RTI->CNT[0].FRCx = RTIFRC0.all;
RTICPUC0.all = 7U;
rti->CNT[0].CPUCx = RTICPUC0.all;
RTIUC1.all = 0U;
rti->cnt[1].ucx = RTIUC1.all;
RTIFRC1.all = 0U;
RTI->CNT[1].FRCx = RTIFRC1.all;
RTICPUC1.all = 7u;
RTI->CNT[1].CPUCx = RTICPUC1.all;
RTICOMP0.Bits.COMP0 = 10000U;
RTI->CMP[0].COMPx = RTICOMP0.ALL;
RTIUDCP0.Bits.UDCP0 = 10000U;
RTI->CMP[0].UDCPx = RTIUDCP0.all;
RTICOMP1.Bits.COMP1 = 50000U;
RTI->CMP[1].COMPx = RTICOMP1.ALL;
RTIUDCP1.Bits.UDCP1 = 50000U;
RTI->CMP[1].UDCPx = RTIUDCP1.all;
RTICOMP2.Bits.COMP2 = 80000U;
RTI->CMP[2].COMPx = RTICOMP2.ALL;
RTIUDCP2.Bits.UDCP2 = 80000U;
RTI->CMP[2].UDCPx = RTIUDCP2.all;
RTICOMP3.Bits.COMP3 = 100000U;
RTI->CMP[3].COMPx = RTICOMP3.ALL;
RTIUDCP3.Bits.UDCP3 = 100000U;
RTI->CMP[3].UDCPx = RTIUDCP3.all;
RTIINTFLAG。 ALL = 0x0007000FU;
RTI->INTFLAG = RTIINTFLAG。 全部;
RTICLEARINTENA。 ALL = 0x00070F0FU;
RTI->CLEARINTENA=RTICLEARINTENA。 全部;
}
#pragma CODE_STATE (rtiCompare0Interrupt、32)
#pragma interrupt (rtiCompare0Interrupt、IRQ)
void rtiCompare0中断(void)
{
RTI->INTFLAG = 1U;
rtiNotification (RTI_NOTIFICATE_COMP0);
}
#pragma CODE_STATE (rtiCompare1中断、32)
#pragma interrupt (rtiCompare1中断、IRQ)
void rtiCompare1中断(void)
{
RTI->INTFLAG = 2U;// TODO 1U;?
rtiNotification (RTI_NOTIFICATE_COMP1);
}
//在 tms_vim.c 文件中
静态 const t_isrFuncptr s_vim_init[96U]=
{
phantomInterrupt (&P)、
esmHighInterrupt、/*通道0 */
phantomInterrupt、/*通道1 */
\rtiCompare0Interrupt、/*通道2 */
"RtiCompare1Interrupt (&R)"、/* Channel 3 */
phantomInterrupt、/*通道4 */
phantomInterrupt (&P)、/* Channel 5 */
.
.
.
}
//在 tms_rti_Init.c 文件中
RtiEnableNotification (RTI_NOTIFICATE_COMP0);
RtiEnableNotification (RTI_NOTIFICATE_COMP1);
_enable_irq();
RtiStartCounter (RTI_COMPARE0);
RtiStartCounter (RTI_COMPARE1);
//在 main.c 文件中
void rtiNotification (通知比较通知)
{
条件(通知=RTI_NOTIFICATION_COMP0)
{
taskComp0 ();
}
条件(通知=RTI_NOTIFICATION_COMP1)
{
taskComp1();
}
}