TPM级联问题

cancel
Showing results for 
Search instead for 
Did you mean: 

TPM级联问题

363 Views
yaohong
Contributor II

我在使用KV1X系列MCU,想使用两个TPM级联生成一个32位定时器,TPM0自然计数到65535产生TOF标志,TPM1使用Counter trigger功能,我在配置了TPM1的CONF寄存器的CSOT位为1后,发现TPM1并没有受TPM0的溢出标志控制,这是为何?我使用TPM0溢出后会产生一个中断,在中断中清除溢出标志,下面是两个TPM的初始化配置:

const tpm_config_t TPM_0_config = {
.prescale = kTPM_Prescale_Divide_1,
.useGlobalTimeBase = false,
.triggerSelect = kTPM_Trigger_Select_0,
.enableDoze = false,
.enableDebugMode = false,
.enableReloadOnTrigger = false,
.enableStopOnOverflow = false,
.enableStartOnTrigger = false,
};

void TPM_0_init(void) {
TPM_Init(TPM_0_PERIPHERAL, &TPM_0_config);
TPM_SetTimerPeriod(TPM_0_PERIPHERAL, 65535);
TPM_EnableInterrupts(TPM_0_PERIPHERAL, kTPM_TimeOverflowInterruptEnable);
/* Interrupt vector TPM0_IRQn priority settings in the NVIC */
NVIC_SetPriority(TPM_0_IRQN, TPM_0_IRQ_PRIORITY);
/* Enable interrupt TPM0_IRQn request in the NVIC */
EnableIRQ(TPM_0_IRQN);
TPM_StartTimer(TPM_0_PERIPHERAL, kTPM_SystemClock);

}

const tpm_config_t TPM_1_config = {
.prescale = kTPM_Prescale_Divide_1,
.useGlobalTimeBase = true,
.triggerSelect = kTPM_Trigger_Select_8,
.enableDoze = false,
.enableDebugMode = false,
.enableReloadOnTrigger = false,
.enableStopOnOverflow = false,
.enableStartOnTrigger = true,
};

void TPM_1_init(void) {
TPM_Init(TPM_1_PERIPHERAL, &TPM_1_config);
TPM_SetTimerPeriod(TPM_1_PERIPHERAL, 65535);
TPM_StartTimer(TPM_1_PERIPHERAL, kTPM_SystemClock);
}

0 Kudos
4 Replies

187 Views
yaohong
Contributor II

我使用的MCU是KL16,代码使用的是mcuXpresso config V4 自动生成的代码,文档中的描述如下:

TPM.bmp

这个功能是否只有在外部时钟给定时才能使用,内部模块时钟给定时不能使用?

0 Kudos

187 Views
Robin_Shen
NXP TechSupport
NXP TechSupport

硬件上不支持2个16bit的timer级联成1个32bit的timer.

可以考虑在TPM0的溢出中断里翻转IO口,并将此翻转的IO口接到TPM1的TPM_CLKIN0\1引脚作为外部输入时钟。

0 Kudos

187 Views
yaohong
Contributor II

目前我使用了TPM0溢出中断,还是计数到65535后溢出,在中断中设置了一个全局变量自加。使用此全局变量作为高16位,TPM0->CNT作为低16位,以此来组合成一个32位定时器。但是当我在主循环中访问这个32位定时器时,发现再也进不去主循环了,而如果主循环中不访问这个32位定时器,就能正常在主循环中运行。不知道发生了什么导致这种情况出现

0 Kudos

187 Views
Robin_Shen
NXP TechSupport
NXP TechSupport

Hi 虹 姚,

请问你使用的具体是哪款KV1x的MCU,并没有在参考手册里找到Counter trigger功能。
TPM1的CONF寄存器里也没有CSOT位。

FTMx_CONF.png

另外这些代码好像并不是最新的MCUXPresso SDK的例程,能否告知使用的是哪里下载的代码。

 

Best Regards,

Robin

 

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos