Beispiel #1
0
/*********************************************************** 
函数名称:TURNPWM_init
函数功能:
入口参数:
出口参数:无 
备 注: 
***********************************************************/
void  TURNPWM_init(void)
{
      
     // FTM_PWM_init(FTM1, CH0 , 180,30);                           //舵机占空比设置初始化   MOD =17361 ;舵机1
      FTM_PWM_init(FTM1, CH1 , 180,30);                           //舵机占空比设置初始化   MOD =17361 ;舵机2
      FTM_CnV_REG(FTMx[FTM1], CH1) = MIDSTRING ; 
}
Beispiel #2
0
/**
 *    @brief 输出所选通道的PWM波形
 *
 *    @param  module      所选模块(可取 MODULE0,MODULE1,MODULE2)
 *    @param  channel     所选通道(当module==MODULE1,可取0~7,module为其余值,可取0~1)
 *    @param  duty_count  占空比相关计数次数
 *
 *    @return  错误类型
 *
 *    @note   
 */
ER ftm_pwm_output(ID module, ID channel, uint32_t duty_count)
{
	FTM_MemMapPtr ftmptr = get_ftmptr(module);
	
	if((module<0) || (module>2))
		return E_MOD;
	else if((module==0) && ((channel<0) || (channel>7)))
		return E_CHN;
	else if((module!=0)&&((channel!=0)&&(channel!=1))) 
		return E_CHN;
	
	FTM_CnV_REG(ftmptr,channel) = duty_count;
	
	return E_OK;
}
Beispiel #3
0
void FTM_init  (FTM_MemMapPtr base)
{
	// Habilito el pin PTC1 como salida del canal 0
	PORTC_PCR1 = (PORT_PCR_ISF_MASK |
	              PORT_PCR_MUX(0x04));
	PORTB_PCR18 = (PORT_PCR_ISF_MASK |
		              PORT_PCR_MUX(0x03));
	
	// Habilito la llave general de las interrupciones
	//NVICISER1 |= NVIC_ISER_SETENA(0x0400);
	
	// Habilito el clock gating
	SIM_SCGC6 |= SIM_SCGC6_FTM0_MASK;
	SIM_SCGC6 |= SIM_SCGC6_FTM2_MASK;
	
	// Deshabilito la proteccion de escritura
	FTM_MODE_REG(base) 		= FTM_MODE_WPDIS_MASK;
	
	// Apago los flag de interrupciones
	FTM_STATUS_REG(base) 	= (FTM0_STATUS &
				       0x00);
	
	// Deshabilito los clocks y borro la configuracion
	FTM_SC_REG(base) 		= 0x00;
	
	// Configuro el canal 0 como nada
	FTM_CnSC_REG(base,0) 		= 0x00;
	
	// Configuro la salida inicial en alto (los LEDs son activo-bajo)
	FTM_MODE_REG(base) 		= FTM_MODE_INIT_MASK;
	
	// Configuro el PWM a duty 25% y reinicio el contador
	FTM_CnV_REG(base,0) 		= 0x0000;
	FTM_MOD_REG(base) 	    = 0x0000;
	FTM_CNTIN_REG(base) 		= 0x0000;
	FTM_CNT_REG(base) 		= 0x0000;
	
	FTM_PWMLOAD_REG(base) 	= (FTM_PWMLOAD_LDOK_MASK | 
					   FTM_PWMLOAD_CH0SEL_MASK);
	
	// Habilito las interrupciones y los clocks, y configuro el prescaler
	FTM_SC_REG(base) 		= (FTM_SC_TOIE_MASK |
			   		   FTM_SC_CLKS(0x01) |
			           FTM_SC_PS(0x0F));
	// Habilito los contadores del modulo
	FTM_CONF_REG(base) 		= FTM_CONF_BDMMODE(0x03);
}
Beispiel #4
0
/**
 *    @brief pwm2模块相关寄存器配置
 *
 *    @param   channel  pwm2所选的通道  
 */
static void pwm_mod2_set(ID channel)
{
	/*使能ftm0模块时钟*/
	SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;
	
	/*选择时钟源,分频系数,以及计数器计数方式*/
	FTM_SC_REG(FTM2_BASE_PTR) = FTM_SC_CLKS(FTM2_PWM_CLK) | FTM_SC_PS(FTM2_PWM_PRESCALE) | ((FTM2_PWM_MODE & 0x10)<<1); 
	
	/*设置计数器计数初值*/
	FTM_CNTIN_REG(FTM2_BASE_PTR) = CNTIN_VALUE;
	
	/*初始化计数器*/
	FTM_CNT_REG(FTM2_BASE_PTR) = FTM2_INIT_VALUE;
	
	/*设置计数器最大模值*/
	FTM_MOD_REG(FTM2_BASE_PTR) = FTM2_PWM_CYCLE;
	
	/*设置FTM模块的工作方式*/
	FTM_CnSC_REG(FTM2_BASE_PTR,channel) = ((FTM2_PWM_MODE & 0x0f)<<2);
	
	/*设置初始化占空比*/
	FTM_CnV_REG(FTM2_BASE_PTR,channel) = PWM_INIT_VALUE;
}
Beispiel #5
0
void FTM_setDuty(FTM_MemMapPtr base, unsigned int duty){
	FTM_CnV_REG(base,0) = duty;
}