示例#1
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);
}
示例#2
0
void Qd::setMode ()
{
	//===Setings pin===//
	//pha
	pha.settingPinPort(QdDef::PhaPort);
	pha.settingPin(QdDef::PhaPin, QdDef::PhaAlt);

	//phb
	phb.settingPinPort(QdDef::PhbPort);
	phb.settingPin(QdDef::PhbPin, QdDef::PhbAlt);

	//===Settings timer===//
	FTM_SC_REG(ftm_ptr[num_ftm]) = 0;
	setPeriod(FTM_MOD_MOD_MASK);
	setInitValue(0);
	FTM_MODE_REG (ftm_ptr[num_ftm]) |= FTM_MODE_WPDIS_MASK;
	FTM_MODE_REG (ftm_ptr[num_ftm]) |= FTM_MODE_FTMEN_MASK;

	FTM_CnSC_REG(ftm_ptr[num_ftm], 0) = 0;
	FTM_CnSC_REG(ftm_ptr[num_ftm], 1) = 0;
	FTM_QDCTRL_REG(ftm_ptr[num_ftm]) |= FTM_QDCTRL_QUADEN_MASK|FTM_QDCTRL_PHAFLTREN_MASK|FTM_QDCTRL_PHBFLTREN_MASK;
	FTM_FILTER_REG (ftm_ptr[num_ftm]) |= FTM_FILTER_CH0FVAL(2) | FTM_FILTER_CH1FVAL(2) ;
	start ();
}
示例#3
0
/**   
 *    @brief    编码器初始化函数
 *    
 *    @param    port     端口号,由宏定义声明
 *    
 *    @return   ER       错误码
 *      
 *    @note    系统时钟频率最好是大于输入信号频率,可同过分频系数DIVIDE对系统进行1~128分频(寄存器FTMx_SC的后三位)
*/
ER ftm_decoder_init(PORT port)
{
    switch (port)
    {
        case PTA8_9:                            
            SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK; /* 使能FTM时钟 */

            /* 选择引脚复用功能 */
            PORTA_PCR8 = PORT_PCR_MUX(6);
            PORTA_PCR9 = PORT_PCR_MUX(6);

            /* 配置成正交编码功能  */
            FTM_CNTIN_REG(FTM1_BASE_PTR) = 0x0000; /* 初始值 */
            FTM_MOD_REG(FTM1_BASE_PTR)   = 0xffff; /* 可根据需要设定 */

            FTM_FMS_REG(FTM1_BASE_PTR)   = 0x00;   /* write protect disable */
            FTM_MODE_REG(FTM1_BASE_PTR)  = 0x05;   /* 不使能write protect 功能,缺省值;FTMEN=1; */

            /* 0001,1000  CLKS=11:extern Clock;PS=000|DIVIDE:system clock divided by 1or2or4or8or16or32or64or128; */
            FTM_SC_REG(FTM1_BASE_PTR)     = 0x18 | FTM_DEC_DEV1; 
            /* 0000,1101 不是能过滤,QUADMODE=1:count and direction mode;QUADIR=1:increasing;QUADEN=1 */
            FTM_QDCTRL_REG(FTM1_BASE_PTR) = 0x0d; 
            break;
            
        case PTA10_11:
            SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK; /* 使能FTM时钟 */

            /* 选择引脚复用功能 */
            PORTA_PCR10 = PORT_PCR_MUX(6);
            PORTA_PCR11 = PORT_PCR_MUX(6);

            /* 配置成正交编码功能  */
            FTM_CNTIN_REG(FTM2_BASE_PTR) = 0x0000; /* 初始值 */
            FTM_MOD_REG(FTM2_BASE_PTR)   = 0xffff; /* 可根据需要设定 */

            FTM_FMS_REG(FTM2_BASE_PTR)   = 0x00;   /* write protect disable */
            FTM_MODE_REG(FTM2_BASE_PTR)  = 0x05;   /* 不使能write protect 功能,缺省值;FTMEN=1; */

            /* 0001,1000   CLKS=11:extern Clock;PS=000|DIVIDE:system clock divided by 1or2or4or8or16or32or64or128; */
            FTM_SC_REG(FTM2_BASE_PTR)     = 0x18 | FTM_DEC_DEV1;
            /* 0000,1101 不是能过滤,QUADMODE=1:count and direction mode;QUADIR=1:increasing;QUADEN=1 */
            FTM_QDCTRL_REG(FTM2_BASE_PTR) = 0x0d;
            break;
            
        case PTA12_13: 
            SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK; /* 使能FTM时钟 */

            /* 选择引脚复用功能 */
            PORTA_PCR12 = PORT_PCR_MUX(7);
            PORTA_PCR13 = PORT_PCR_MUX(7);

            /* 配置成正交编码功能  */
            FTM_CNTIN_REG(FTM1_BASE_PTR) = 0x0000; /* 初始值 */
            FTM_MOD_REG(FTM1_BASE_PTR)   = 0xffff; /* 可根据需要设定 */

            FTM_FMS_REG(FTM1_BASE_PTR)   = 0x00;   /* write protect disable */
            FTM_MODE_REG(FTM1_BASE_PTR)  = 0x05;   /* 不使能write protect 功能,缺省值;FTMEN=1; */

            /* 0001,1000   CLKS=11:extern Clock;PS=000|DIVIDE:system clock divided by 1or2or4or8or16or32or64or128; */
            FTM_SC_REG(FTM1_BASE_PTR)     = 0x18 | FTM_DEC_DEV1; 
            /* 0000,1101 不是能过滤,QUADMODE=1:count and direction mode;QUADIR=1:increasing;QUADEN=1 */
            FTM_QDCTRL_REG(FTM1_BASE_PTR) = 0x0d; 
            break;
            
        case PTB0_1:
            SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK; /* 使能FTM时钟 */

            /* 选择引脚复用功能 */
            PORTB_PCR0 = PORT_PCR_MUX(6);
            PORTB_PCR1 = PORT_PCR_MUX(6);

            /* 配置成正交编码功能  */
            FTM_CNTIN_REG(FTM1_BASE_PTR) = 0x0000; /* 初始值 */
            FTM_MOD_REG(FTM1_BASE_PTR)   = 0xffff; /* 可根据需要设定 */

            FTM_FMS_REG(FTM1_BASE_PTR)   = 0x00;   /* write protect disable */
            FTM_MODE_REG(FTM1_BASE_PTR)  = 0x05;   /* 不使能write protect 功能,缺省值;FTMEN=1; */

            /* 0001,1000   CLKS=11:extern Clock;PS=000|DIVIDE:system clock divided by 1or2or4or8or16or32or64or128; */
            FTM_SC_REG(FTM1_BASE_PTR)     = 0x18 | FTM_DEC_DEV1; 
            /* 0000,1101 不是能过滤,QUADMODE=1:count and direction mode;QUADIR=1:increasing;QUADEN=1 */
            FTM_QDCTRL_REG(FTM1_BASE_PTR) = 0x0d; 
            break;
            
        case PTB18_19:
            SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK; /* 使能FTM时钟 */

            /* 选择引脚复用功能 */
            PORTB_PCR18 = PORT_PCR_MUX(6);
            PORTB_PCR19 = PORT_PCR_MUX(6);

            /* 配置成正交编码功能  */
            FTM_CNTIN_REG(FTM2_BASE_PTR) = 0x0000; /* 初始值 */
            FTM_MOD_REG(FTM2_BASE_PTR) = 0xffff; /* 可根据需要设定 */

            FTM_FMS_REG(FTM2_BASE_PTR) = 0x00; /* write protect disable */
            FTM_MODE_REG(FTM2_BASE_PTR) = 0x05; /* 不使能write protect 功能,缺省值;FTMEN=1; */

            /* 0001,1000   CLKS=11:extern Clock;PS=000|DIVIDE:system clock divided by 1or2or4or8or16or32or64or128; */
            FTM_SC_REG(FTM2_BASE_PTR) = 0x18 | FTM_DEC_DEV1;
            /* 0000,1101 不是能过滤,QUADMODE=1:count and direction mode;QUADIR=1:increasing;QUADEN=1 */
            FTM_QDCTRL_REG(FTM2_BASE_PTR) = 0x0d;
            break;
            
        default:
            return E_OBJ;
    }
    
    return E_OK;
}