PWM

 

 

클럭생성 및 클럭설정, 시스템이 동작하기 위한 System Clock/Bus Clock/Flash Clock을 생성하는 부분이다.

void SOSC_init_8Mhz(void){
   SCG->SOSCDIV = SCG_SOSCDIV_SOSCDIV1(1)|SCG_SOSCDIV_SOSCDIV2(1);

   SCG->SOSCCFG = SCG_SOSCCFG_RANGE(2)|SCG_SOSCCFG_EREFS_MASK;

   while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK);
   SCG->SOSCCSR = SCG_SOSCCSR_SOSCEN_MASK;

   while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK));
}

void SPLL_init_160Mhz(void){
   while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK);
   SCG->SPLLCSR &= ~SCG_SPLLCSR_SPLLEN_MASK;

   SCG->SPLLDIV |= SCG_SPLLDIV_SPLLDIV1(2)|SCG_SPLLDIV_SPLLDIV2(3);
   SCG->SPLLCFG = SCG_SPLLCFG_MULT(24);

   while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK);
   SCG->SPLLCSR |= SCG_SPLLCSR_SPLLEN_MASK;

   while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK));
}

void NormalRUNMode_80Mhz(void){
   SCG->SIRCDIV = SCG_SIRCDIV_SIRCDIV1(1)|SCG_SIRCDIV_SIRCDIV2(1);

   SCG->RCCR = SCG_RCCR_SCS(6)
         |SCG_RCCR_DIVCORE(0b01)
         |SCG_RCCR_DIVBUS(0b01)
         |SCG_RCCR_DIVSLOW(0b10);

   while(((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT) != 6){}
}

 

 

 

FTM의 PWM을 사용하기 위한 설정을 한다. 

void FTM0_CH1_PWM(void){
	PCC->PCCn[PCC_FTM0_INDEX] &= ~PCC_PCCn_CGC_MASK;
	PCC->PCCn[PCC_FTM0_INDEX] |= PCC_PCCn_PCS(0b010)
							| PCC_PCCn_CGC_MASK;

	FTM0->SC = FTM_SC_PWMEN1_MASK
			|FTM_SC_PS(1);

	FTM0->MOD = 16000 - 1;

	FTM0->CNTIN = FTM_CNTIN_INIT(0);

	FTM0->CONTROLS[1].CnSC |= FTM_CnSC_MSB_MASK;
	FTM0->CONTROLS[1].CnSC |= FTM_CnSC_ELSA_MASK;

	FTM0->CONTROLS[1].CnV = 2048;
	FTM0->SC |= FTM_SC_CLKS(3);
}

 

 

 

실행결과

 

'NXP&S32DesignStudio' 카테고리의 다른 글

전자시계 만들기  (0) 2021.01.17
ADC  (0) 2021.01.17
Timer Interrupt  (0) 2021.01.17
GPIO & Switch  (0) 2021.01.17