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.

[参考译文] TDA4VM:如何将MCU_Timer1级联到MCU域中的MCU_TIMER0?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1099194/tda4vm-how-to-cascaded-mcu_timer1-to-mcu_timer0-in-mcu-domain

部件号:TDA4VM

您好,专家

我在MCU1_0中使用了AUTOSAR,我需要一个计时器具有比较功能,作为生成任务计划的计时器。 所以我想选择MCU Timer0和MCU Timer1 级联为64位计时器。计时器0可以生成任务计划的比较中断和溢出中断以 增加Timer1。

但初始化计时器时,Timer1无法成功初始化。 下面是我的代码中的配置:

Step1, I 启用MCU_Timer1到MCU_TIMER0的级联

Fullscreen
1
2
/* enables cascading of MCU_TIMER1 to MCU_TIMER0 */
HW_WR_REG32_RAW((CSL_MCU_CTRL_MMR0_CFG0_BASE + CSL_MCU_CTRL_MMR_CFG0_MCU_TIMER1_CTRL), 0x100U);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

步骤2, I配置计时器0和计时器1。 Timer0初始化成功,但调用 TIMERDisable (baseAddr)时Timer1初始化失败,如下图所示。 寄存器MCU_Timer1_TWP.W_Pend_TCLR = 0x01,这意味着写入TCLR寄存器待处理。 Timer1无法成功运行。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sint32 Osshell_Timer_Init(uint32 baseAddr)
{
sint32 cslRet = CSL_EFAIL;
/* Reset timer configuration */
cslRet = TIMERResetConfigure(baseAddr,TIMER_SFT_RESET_ENABLE);
/* Reset the timer */
if (cslRet == CSL_PASS)
{
cslRet = TIMERReset(baseAddr);
}
/* when debugger breaked, timer will stop when select TIMER_FROZEN */
if (cslRet == CSL_PASS)
{
cslRet = TIMEREmuModeConfigure(baseAddr, TIMER_FROZEN);
}
/* Keep channel disabled till config complete */
if (cslRet == CSL_PASS)
{
cslRet = TIMERDisable(baseAddr);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

步骤3,然后我尝试在 步骤1中提交级联设置,然后计时器1可以成功初始化,如下图所示。

 

我试图在 PDK中找到一个级联计时器的例子,但是找不到任何例子。 能否给我一个关于  MCU域中的级联计时器的例子, 特别是初始化部分。

我使用SDK版本: ti-processor-sdk-RTos-j721e-EVM-EVM-08_00_00_12

谢谢