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.

[参考译文] LAUNCHXL-TMS57004:CCS/LAUNCHXL-TMS57004:TMS570的两个 RTI 计时器

Guru**** 2513195 points
Other Parts Discussed in Thread: TMS570LS3134

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1434228/launchxl-tms57004-ccs-launchxl-tms57004-two-rti-timer-for-tms570

器件型号:LAUNCHXL-TMS57004
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();
}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 

    对于延迟响应、我们深表歉意。

    您可以一次参考以下附加的工程吗:

    e2e.ti.com/.../4237.SCI_5F00_AND_5F00_LED_5F00_Blink_5F00_TEST_5F00_LS3137.zip

    我在这里启用了比较0中断和比较1中断、并获取这两个中断。 因此、请参考此项目配置和代码、并根据这些配置和代码进行修改。

    ——
    谢谢、此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jagadish:
    感谢您的回答、非常抱歉花时间参与。 实际上我在写问题的第二天意识到了我的错误,但我没有机会在这里写答案。

    //在 tms_vim.c 文件中
    VIM->REQMASKSET0 =(u32)((u32) 1U << 0U)
    |(u32)((u32) 1U << 1U)
    |(u32)((u32) 1U << 2U)
    |(u32)((u32) 0U << 3U)
    .
    .
    .
    |(u32)((u32) 0U << 31U);

    尽管我在 tms_vim.c 文件中为 compare1定义了一个中断、但我忘记了在 vim->REQMASKSET0中启用此中断。

    我的问题解决了,当我更正了上述代码如下.

    //在 tms_vim.c 文件中
    VIM->REQMASKSET0 =(u32)((u32) 1U << 0U)
    |(u32)((u32) 1U << 1U)
    |(u32)((u32) 1U << 2U)
    |(u32)((u32) 1U << 3U)
    .
    .
    .
    |(u32)((u32) 0U << 31U);

    感谢您投入宝贵的时间给予大力支持。