|
本帖最后由 FSL_TICS_ZJJ 于 2014-5-7 10:40 编辑
我在同学的程序上实验时转一下就有好几百的脉冲,我的编码器是360线的
我试了很多,修改了很多参数还是不行,求救啊
- /*!
- * COPYRIGHT NOTICE
- * Copyright (c) 2013,野火科技
- * All rights reserved.
- * 技术讨论:野火初学论坛 http://www.chuxue123.com
- *
- * 除注明出处外,以下所有内容版权均属野火科技所有,未经允许,不得用于商业用途,
- * 修改内容时必须保留野火科技的版权声明。
- *
- * @file main.c
- * @brief 野火K60 平台主程序
- * @author 野火科技
- * @version v5.0
- * @date 2013-08-28
- */
- #include "common.h"
- #include "include.h"
- void PIT0_IRQHandler(void);
- void FTM_QUAD_Init(void)
- {
- /*开启端口时钟*/
- // SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
- /*选择管脚复用功能*/
- // port_init(FTM1_QDPHA, ALT6);
- /// port_init(FTM1_QDPHB, ALT6);
- // PORTA_PCR10 = PORT_PCR_MUX(6);
- //PORTA_PCR11 = PORT_PCR_MUX(6);
- /*使能FTM1、FTM2时钟*/
- // SIM_SCGC6|=SIM_SCGC6_FTM1_MASK;
- //SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;
- // FTM1_MOD = FTM_MOD_MOD_MASK; //可根据需要设置
- // FTM2_MOD = 14000;
- // FTM1_CNTIN = 0;
- // FTM2_CNTIN = 0;
- // FTM1_MODE |= FTM_MODE_WPDIS_MASK; //禁止写保护
- // FTM2_MODE |= FTM_MODE_WPDIS_MASK; //禁止写保护
- // FTM1_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,关闭TPM兼容模式,开启FTM所有功能
- //
- // FTM2_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,关闭TPM兼容模式,开启FTM所有功能
- // FTM1_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式
- // FTM1_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解码模式
- //FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式
- //FTM2_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解码模式
- //FTM1_SC |= FTM_SC_CLKS(1)|FTM_SC_PS(3); //选择外部时钟
- // FTM1_CONF |=FTM_SC_CLKS(1)|FTM_SC_PS(3); //可根据需要选择
- // FTM2_SC |= FTM_SC_CLKS(3);
- // FTM2_CONF |=FTM_CONF_BDMMODE(3);
- //FTM_MemMapPtr FTMN[3] = {FTM0_BASE_PTR, FTM1_BASE_PTR, FTM2_BASE_PTR}; //定义三个指针数组保存 FTMn_e 的地址
- SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
- SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK; //使能FTM1时钟
- port_init(FTM1_QDPHA, ALT6);
- port_init(FTM1_QDPHB, ALT6);
- FTM_MODE_REG(FTM1_BASE_PTR) |= (0
- | FTM_MODE_WPDIS_MASK //写保护禁止
- //| FTM_MODE_FTMEN_MASK //使能 FTM
- );
- FTM_QDCTRL_REG(FTM1_BASE_PTR) |= (0
- | FTM_QDCTRL_QUADMODE_MASK
- );
- FTM_CNTIN_REG(FTM1_BASE_PTR) = 0;
- FTM_MOD_REG(FTM1_BASE_PTR) = FTM_MOD_MOD_MASK;
- FTM_QDCTRL_REG(FTM1_BASE_PTR) |= (0
- | FTM_QDCTRL_QUADEN_MASK
- );
- FTM_MODE_REG(FTM1_BASE_PTR) |= FTM_QDCTRL_QUADEN_MASK;
- FTM_CNT_REG(FTM1_BASE_PTR) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会加载 CNTIN 的值)
- }
- /*!
- * @brief main函数
- * @since v5.0
- * @note FTM 正交解码 测试
- */
- void main(void)
- {
- FTM_QUAD_Init(); //FTM1 正交解码初始化
- pit_init_ms(PIT0, 100); //初始化PIT0,定时时间为: 1000ms
- set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler); //设置PIT0的中断复位函数为 PIT0_IRQHandler
- enable_irq (PIT0_IRQn); //使能PIT0中断
- while(1);
- }
- /*!
- * @brief PIT0中断服务函数
- * @since v5.0
- * PTA8----A PTA9----B
- */
- void PIT0_IRQHandler(void)
- {
- int32 val1;
- val1 = FTM_QUAD_get(FTM1); //获取FTM 正交解码 的脉冲数(负数表示反方向)
- FTM_QUAD_clean(FTM1);
- printf("\n正转:%d",val1);
- PIT_Flag_Clear(PIT0); //清中断标志位
- }
复制代码
|
|