打印
[汽车MCU – KEA]

KEZ128的FTM0,FTM1输出不了PWM问题

[复制链接]
3707|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
VB2015|  楼主 | 2015-9-25 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教,KEA128有FTM0,FTM1吗,我的代码让FTM2输出EPWM脉冲波了,但FTM0,FTM1死活没东西出来,也不能响应相应的中断,还有只要对手册里FTM0,FTM1相关的寄存操作了,FTM2都会挂掉也不能输出PWM,复位恢复。求教大神指点~

相关帖子

沙发
VB2015|  楼主 | 2015-9-25 09:13 | 只看该作者
有点怀疑我这个片子没有FTM0,FTM1

使用特权

评论回复
板凳
西门扫雪| | 2015-9-25 09:54 | 只看该作者
查看一下芯片资料,里面有没有FTM0和FTM1

使用特权

评论回复
地板
皈依| | 2015-9-25 10:38 | 只看该作者
看数据手册啊。。。靠猜怎么行

使用特权

评论回复
5
VB2015|  楼主 | 2015-9-25 10:57 | 只看该作者

看过了,确实有的

本帖最后由 VB2015 于 2015-9-25 10:59 编辑
皈依 发表于 2015-9-25 10:38
看数据手册啊。。。靠猜怎么行

C:\Users\Optimum\Pictures\temp\kea128ftm.png

使用特权

评论回复
6
VB2015|  楼主 | 2015-9-25 11:00 | 只看该作者
西门扫雪 发表于 2015-9-25 09:54
查看一下芯片资料,里面有没有FTM0和FTM1

手册看了,确实有呢

使用特权

评论回复
7
侣行天下| | 2015-9-25 11:07 | 只看该作者
里面有这两个功能吧

使用特权

评论回复
8
VB2015|  楼主 | 2015-9-25 11:15 | 只看该作者
侣行天下 发表于 2015-9-25 11:07
里面有这两个功能吧

This device contains up to three FTM modules of one 6-channel FTM with full functions
and two 2-channel FTM with basic TPM functions. Each FTM module can use
independent external clock input. The table below summarizes the configuration of FTM
modules.



Table 3-34. FTM modules features

Feature             FTM0/FTM1    FTM2
Number of channels      2          6
Initial counting value    no        yes
Periodic TOF           no        yes
Input capture mode       yes        yes
Channel input filter      no        channels 0, 1, 2 and 3
Output compare mode       yes       yes
Edge-Aligned PWM (EPWM)    yes       yes


使用特权

评论回复
9
VB2015|  楼主 | 2015-9-25 11:22 | 只看该作者
void ConfigHeatController(uint16_t pta0_pulseWidth,uint16_t pta1_pulseWidth)
{
       
        uint8_t u8ChanelNum;
        FTM_Type* pFTM;
        InitUartCommand(HeatControllerRecvOneChar);
        g_flag = 0;
        pFTM = FTM2;
        while(1)
                {
                WaitEventSet();
                //重映射管脚
                switch(g_flag)
                        {
                        //ftm2
                        case '1':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH0ToPTC0();
                                u8ChanelNum = 0;
                                break;
                        case '2':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH0ToPTF0();
                                u8ChanelNum = 0;
                                break;
                        case '3':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH0ToPTH0();
                                u8ChanelNum = 0;
                                break;
                        case '4':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH1ToPTC1();
                                u8ChanelNum = 1;
                                break;
                        case '5':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH1ToPTF1();
                                u8ChanelNum = 1;
                                break;
                        case '6':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH1ToPTH1();
                                u8ChanelNum = 1;
                                break;
                        case '7':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH2ToPTC2();
                                u8ChanelNum = 2;
                                break;
                        case '8':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH2ToPTD0();
                                u8ChanelNum = 2;
                                break;
                        case '9':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH2ToPTG4();
                                u8ChanelNum = 2;
                                break;
                        case 'a':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH3ToPTC3();
                                u8ChanelNum = 3;
                                break;
                        case 'b':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH3ToPTD1();
                                u8ChanelNum = 3;
                                break;
                        case 'c':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH3ToPTG5();
                                u8ChanelNum = 3;
                                break;
                        case 'd':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH4ToPTB4();
                                u8ChanelNum = 4;
                                break;
                        case 'e':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH4ToPTG6();
                                u8ChanelNum = 4;
                                break;
                        case 'f':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH5ToPTB5();
                                u8ChanelNum = 5;
                                break;
                        case 'g':
                                pFTM = FTM2;
                                irqn = FTM2_IRQn;
                                SIM_RemapFTM2CH5ToPTG7();
                                u8ChanelNum = 5;
                                break;
                        //ftm0
                        case 'h':
                                pFTM = FTM0;
                                irqn = FTM0_IRQn;
                                SIM_RemapFTM0CH0ToPTA0();
                                u8ChanelNum = 0;
                                break;
                        case 'i':
                                pFTM = FTM0;
                                irqn = FTM0_IRQn;
                                SIM_RemapFTM0CH0ToPTB2();
                                u8ChanelNum = 0;
                                break;
                        case 'j':
                                pFTM = FTM0;
                                irqn = FTM0_IRQn;
                                SIM_RemapFTM0CH0ToPTB2();
                                u8ChanelNum = 0;
                                break;
                        case 'k':
                                pFTM = FTM0;
                                irqn = FTM0_IRQn;
                                SIM_RemapFTM0CH1ToPTA1();
                                u8ChanelNum = 1;
                                break;
                        case 'l':
                                pFTM = FTM0;
                                irqn = FTM0_IRQn;
                                SIM_RemapFTM0CH1ToPTB3();
                                u8ChanelNum = 1;
                                break;
                        //ftm1
                        case 'm':
                                pFTM = FTM1;
                                irqn = FTM1_IRQn;
                                SIM_RemapFTM1CH0ToPTC4();
                                u8ChanelNum = 0;
                                break;
                        case 'n':
                                pFTM = FTM1;
                                irqn = FTM1_IRQn;
                                SIM_RemapFTM1CH0ToPTH2();
                                u8ChanelNum = 0;
                                break;
                        case 'o':
                                pFTM = FTM1;
                                irqn = FTM1_IRQn;
                                SIM_RemapFTM1CH1ToPTC5();
                                u8ChanelNum = 1;
                                break;
                        case 'p':
                                pFTM = FTM1;
                                irqn = FTM1_IRQn;
                                SIM_RemapFTM1CH1ToPTE7();
                                u8ChanelNum = 1;
                                break;
                        default:
                                break;
                        }
                ResetEvent();
            /* FTM2 is set as edge aligned pwm mode, high true pulse */
            FTM_PWMInit(pFTM, FTM_PWMMODE_EDGEALLIGNED, FTM_PWM_HIGHTRUEPULSE);
            /* FTMEN enable */
            FTM_SetFTMEnhanced(pFTM);
            /* update MOD value FTM09999表示周期为 9999-0+1个系统时钟周期,即10000*(1/40)us=250us*/
            FTM_SetModValue(pFTM, MOD_MAX);
                //设置脉宽、初始状态为高
                pFTM->CONTROLS[u8ChanelNum].CnSC = FTM_CnSC_MSB_MASK | FTM_CnSC_ELSB_MASK;  
            //FTM_NO->CONTROLS[1].CnSC = FTM_CnSC_MSB_MASK | FTM_CnSC_ELSB_MASK;  
                pFTM->CONTROLS[u8ChanelNum].CnV  = pta0_pulseWidth;
                //FTM_NO->CONTROLS[1].CnV  = pta1_pulseWidth;
            /* set clock source, start counter */
            FTM_ClockSet(pFTM, FTM_CLOCK_SYSTEMCLOCK, FTM_CLOCK_PS_DIV1);
                }
   
}

使用特权

评论回复
10
VB2015|  楼主 | 2015-9-25 11:25 | 只看该作者
通过串口向TRK-KEA128开发板发送单个字符改变g_flag的值,让这个函数执行case '1'-case 'p'的代码段,'1'-'g'都是对的,'h'开始就不能输出了

使用特权

评论回复
11
FSL_TICS_ZJJ| | 2015-9-25 13:46 | 只看该作者
VB2015 发表于 2015-9-25 11:25
通过串口向TRK-KEA128开发板发送单个字符改变g_flag的值,让这个函数执行case '1'-case 'p'的代码段,'1'-' ...

楼主,你debug下,在选择为FTM0的时候,检查下寄存器,看看FTM0的寄存器是否设置对了。
KEA128是支持FTM0,FTM1的,只不过功能相对FTM2弱点,具体区别第3章写了,你也贴出了部分。
FTM0,FTM1肯定是可以工作的,应该还是配置问题,所以,你查看下你的寄存器debug的时候是否设置对了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
VB2015 + 1 很给力!
12
皈依| | 2015-9-25 13:47 | 只看该作者

那好奇怪啊。。没用过 坐等用过的小伙伴解决问题

使用特权

评论回复
13
FSL_TICS_ZJJ| | 2015-9-25 13:59 | 只看该作者
另外,关于你FTM0,1配置影响FTM2的问题,我认为还是你的驱动有问题,你看看你的代码,在配置FTM0,1的时候,在程序中,是否对FTM2有模块关闭的动作?

使用特权

评论回复
14
追逐浪花| | 2015-9-25 15:20 | 只看该作者
楼主,您的问题解决了吗

使用特权

评论回复
15
forthlab| | 2015-9-25 15:46 | 只看该作者
为何不用PE自动生成代码?
那么简单
点几下鼠标的事情

使用特权

评论回复
16
VB2015|  楼主 | 2015-9-25 17:52 | 只看该作者
NND,我的大意,手册里明确FTM0,FTM1只能访问
FTM_SC, FTM_CNT,
FTM_MOD,
FTM_C0SC, FTM_C0V,
FTM_C1SC, and
FTM_C1V,
FTM_EXTTRIG
而我直抄FTM2的DEMO代码里,动了FTMx_MODE[FTMEN]位,动了不该动的地方,后果就是这样。
后面没用飞思卡尔的库,自己配置寄存器一条条下来,发现就在动这个FTMx_MODE[FTMEN]位的时候程序总是发生中断,后来注释之,波形就出来了。
总结:干这岗位还是需要非常的耐心与严谨的态度。多谢各位,特别多谢FSL_TICS_ZJJ

使用特权

评论回复
17
VB2015|  楼主 | 2015-9-25 17:54 | 只看该作者
forthlab 发表于 2015-9-25 15:46
为何不用PE自动生成代码?
那么简单
点几下鼠标的事情

嗯嗯,用KDS搞得,初入freescale,多谢指点了~

使用特权

评论回复
18
VB2015|  楼主 | 2015-9-25 18:04 | 只看该作者
怎么结贴呀,找不着地方哇

使用特权

评论回复
19
风的样子| | 2015-9-25 21:38 | 只看该作者
楼主解决怎么弄了吗

使用特权

评论回复
20
lovecat2015| | 2015-9-26 07:27 | 只看该作者
这俩功能有啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

21

帖子

0

粉丝