/* cpu:MK20DX128VLH5 */
#include "MK20D5.h"
void PWMInit(void);
void GPIOInit(void);
int main(void)
{
//時鐘初始化在“systm_MK20D5.c”中配置爲8M
GPIOInit();
PWMInit();
while(1)
{
}
}
void GPIOInit(void)
{
SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK; //開端口時鐘門控
//PC.3、PD.4配置爲普通IO口
PORTC->PCR[3] &= ~PORT_PCR_MUX_MASK;
PORTC->PCR[3] |= PORT_PCR_MUX(1);
PORTD->PCR[4] &= ~PORT_PCR_MUX_MASK;
PORTD->PCR[4] |= PORT_PCR_MUX(1);
PTC->PDDR |= 1 << 3; //PC.3輸出
PTD->PDDR |= 1 << 4; //PD.4輸出
PTC->PSOR |= 1 << 3; //PC.3 = 1,初始化爲高
PTD->PSOR |= 1 << 4; //PD.4 = 1,初始化爲高
}
/* FTM0_CH7配置爲邊界對齊PWM,對應管教PA.2,週期2ms,佔空比1/4 */
void PWMInit(void)
{
SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK;
PORTA->PCR[2] &= ~PORT_PCR_MUX_MASK;
PORTA->PCR[2] |= PORT_PCR_MUX(3); //管腳功能FTM0_CH2
SIM->SCGC6 |= SIM_SCGC6_FTM0_MASK; //開FTM0門控
/* disable FTM, we must set CLKS(0) before config FTM! */
FTM0->SC = 0;
FTM0->MODE |= FTM_MODE_WPDIS_MASK; //清除寫保護
FTM0->CNT = 0;
FTM0->CNTIN = 0;
FTM0->MOD = 2000 - 1; //PWM週期,對應定時器時鐘設置爲1M,則PWM週期設置爲2ms
//The EPWM period is determined by (MOD - CNTIN + 0x0001) and
//the pulse width(duty cycle) is determined by (CnV - CNTIN).
/* set LOCK bit to load MOD value */
FTM0->PWMLOAD = 0xFFFFFFFF; //有沒有這句話貌似沒影響
FTM0->SC &= ~FTM_SC_CLKS_MASK;
FTM0->SC |= FTM_SC_CLKS(1); //時鐘源選擇sytemclock
FTM0->SC &= ~FTM_SC_PS_MASK;
FTM0->SC |= FTM_SC_PS(3); //8分頻,主頻爲8M,這樣定時器時鐘爲1M
//配置爲邊界對齊模式:QUADEN = 0, DECAPEN = 0, COMBINE = 0, CPWNS = 0, MSnB =1 ,ELSB=1/ELSA=1
FTM0->CONTROLS[7].CnSC &= ~FTM_CnSC_MSA_MASK;
FTM0->CONTROLS[7].CnSC |= FTM_CnSC_MSB_MASK;
FTM0->CONTROLS[7].CnSC &= ~FTM_CnSC_ELSA_MASK;
FTM0->CONTROLS[7].CnSC |= FTM_CnSC_ELSB_MASK;
FTM0->OUTINIT |= FTM_OUTINIT_CH7OI_MASK; //通道輸出初始化爲高
FTM0->OUTMASK &= ~FTM_OUTMASK_CH7OM_MASK; //Channel output is not masked. It continues to operate normally.
FTM0->CONTROLS[7].CnV = 500; //脈寬設置,硬件仿真顯示此句不能直接放在語句“FTM0->MOD = 2000 - 1;”之後,不然沒有輸出
//中斷設置
FTM0->SC |= FTM_SC_TOIE_MASK; //使能溢出中斷
NVIC_EnableIRQ(FTM0_IRQn);
}
/* 中斷響應 */
void FTM0_IRQHandler(void)
{
FTM0->SC &= ~FTM_SC_TOF_MASK; //清中斷TOF位,寫0清除,寫1沒有影響
PTC->PTOR |= 1 << 3; //翻轉PC.3
PTD->PTOR |= 1 << 4; //翻轉PD.4
}
PWM例程__MK20DX128VLH5_K20系列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.