TPM是不需要外部触发也可以工作的,你可以使用Processor Expert生成相应的代码,只要时钟有效并且在TPM_SC[CMOD] bits配置为0b01, 并且TPM_CONF [CSOT]bit 配置为0,计数器可以开始计数。
祝顺利。
下面为Processor Expert工具生成的代码,仅供参考:
/*
** ===================================================================
** Method : TPM0_Init (component Init_TPM)
** Description :
** This method initializes registers of the TPM module
** according to the Peripheral Initialization settings.
** Call this method in user code to initialize the module. By
** default, the method is called by PE automatically; see "Call
** Init method" property of the component for more details.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void TPM0_Init(void)
{
/* SIM_SCGC6: TPM0=1 */
SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK;
/* TPM0_SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,DMA=0,TOF=0,TOIE=0,CPWMS=0,CMOD=0,PS=0 */
TPM0_SC = (TPM_SC_CMOD(0x00) | TPM_SC_PS(0x00)); /* Stop the counter and clear the interrupt flag */
/* TPM0_C0SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=1,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */
TPM0_C0SC = TPM_CnSC_CHF_MASK;
/* TPM0_C1SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=1,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */
TPM0_C1SC = TPM_CnSC_CHF_MASK;
/* TPM0_C2SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=1,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */
TPM0_C2SC = TPM_CnSC_CHF_MASK;
/* TPM0_C3SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=1,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */
TPM0_C3SC = TPM_CnSC_CHF_MASK;
/* TPM0_C4SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=1,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */
TPM0_C4SC = TPM_CnSC_CHF_MASK;
/* TPM0_C5SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=1,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */
TPM0_C5SC = TPM_CnSC_CHF_MASK;
/* TPM0_SC: TOF=0,CPWMS=0 */
TPM0_SC &= (uint32_t)~(uint32_t)((TPM_SC_TOF_MASK | TPM_SC_CPWMS_MASK));
/* TPM0_CONF: CROT=0,CSOO=0,CSOT=0,GTBEEN=0,DBGMODE=0 */
TPM0_CONF &= (uint32_t)~(uint32_t)(
TPM_CONF_CROT_MASK |
TPM_CONF_CSOO_MASK |
TPM_CONF_CSOT_MASK |
TPM_CONF_GTBEEN_MASK |
TPM_CONF_DBGMODE(0x03)
);
/* TPM0_C0SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=1,MSB=0,MSA=1,ELSB=0,ELSA=1,??=0,DMA=1 */
TPM0_C0SC = TPM_CnSC_CHIE_MASK |
TPM_CnSC_MSA_MASK |
TPM_CnSC_ELSA_MASK |
TPM_CnSC_DMA_MASK;
/* TPM0_C1SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0 */
TPM0_C1SC &= (uint32_t)~(uint32_t)(
TPM_CnSC_CHF_MASK |
TPM_CnSC_MSB_MASK |
TPM_CnSC_MSA_MASK |
TPM_CnSC_ELSB_MASK |
TPM_CnSC_ELSA_MASK |
0xFFFFFF02U
);
/* TPM0_C2SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0 */
TPM0_C2SC &= (uint32_t)~(uint32_t)(
TPM_CnSC_CHF_MASK |
TPM_CnSC_MSB_MASK |
TPM_CnSC_MSA_MASK |
TPM_CnSC_ELSB_MASK |
TPM_CnSC_ELSA_MASK |
0xFFFFFF02U
);
/* TPM0_C3SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0 */
TPM0_C3SC &= (uint32_t)~(uint32_t)(
TPM_CnSC_CHF_MASK |
TPM_CnSC_MSB_MASK |
TPM_CnSC_MSA_MASK |
TPM_CnSC_ELSB_MASK |
TPM_CnSC_ELSA_MASK |
0xFFFFFF02U
);
/* TPM0_C4SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0 */
TPM0_C4SC &= (uint32_t)~(uint32_t)(
TPM_CnSC_CHF_MASK |
TPM_CnSC_MSB_MASK |
TPM_CnSC_MSA_MASK |
TPM_CnSC_ELSB_MASK |
TPM_CnSC_ELSA_MASK |
0xFFFFFF02U
);
/* TPM0_C5SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0 */
TPM0_C5SC &= (uint32_t)~(uint32_t)(
TPM_CnSC_CHF_MASK |
TPM_CnSC_MSB_MASK |
TPM_CnSC_MSA_MASK |
TPM_CnSC_ELSB_MASK |
TPM_CnSC_ELSA_MASK |
0xFFFFFF02U
);
/* TPM0_C0V: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,VAL=0xBB80 */
TPM0_C0V = TPM_CnV_VAL(0xBB80);
/* TPM0_MOD: MOD=0xFFFF */
TPM0_MOD |= TPM_MOD_MOD(0xFFFF);
/* TPM0_CNT: COUNT=0 */
TPM0_CNT &= (uint32_t)~(uint32_t)(TPM_CNT_COUNT(0xFFFF));
/* TPM0_SC: DMA=1,TOF=0,TOIE=1,CPWMS=0,CMOD=1,PS=7 */
TPM0_SC = (uint32_t)((TPM0_SC & (uint32_t)~(uint32_t)(
TPM_SC_TOF_MASK |
TPM_SC_CPWMS_MASK |
TPM_SC_CMOD(0x02)
)) | (uint32_t)(
TPM_SC_DMA_MASK |
TPM_SC_TOIE_MASK |
TPM_SC_CMOD(0x01) |
TPM_SC_PS(0x07)
));
} |