本帖最后由 FSL_FAE_REMI 于 2014-7-24 11:52 编辑
FTM模块(The FlexTimer module)的主要功能有输入捕捉、输出比较和产生PWM信号来驱动电机和进行能量管理。
本实验主要是通过FTM模块的计数器功能,分别对FTM2模块的0,1,2,3四个通道的FTM2_CnV寄存器设置不同的输出匹配的值,分别为15400(100ms) 、30800(200ms)、46200(300ms)、 61600(400ms)。当计数器上升计数到与对应的FTM2_CnV寄存器的设定值相等时,对应通道上产生一次中断。然后通过中断,对通道的引脚电平进行翻转,计数器重新计数。这样相当于产生了四个不同周期的PWM信号来控制KEA128开发板上的4个LED灯的点亮与熄灭。 芯片引脚与LED电路如下图所示。
设置FTM2_CnV寄存器的值代码如下: 在main.c文件中: FTM_Init(); /* Initialize the FTM module */ FTM_SetPeriod(0, 15400); /* Interrupt every 15400 counts, equal to every 100 ms */ FTM_SetPeriod(1, 30800); /* Interrupt every 30800 counts, equal to every 200 ms */ FTM_SetPeriod(2, 46200); /* Interrupt every 46200 counts, equal to every 300 ms */ FTM_SetPeriod(3, 61600); /* Interrupt every 61600 counts, equal to every 400 ms */ 在FTM.c文件中: void FTM_SetPeriod(UINT8 ch, UINT32 per) { period[ch] = per; FTM2_C0V = FTM_CnV_VAL(period[0]) ; FTM2_C1V = FTM_CnV_VAL(period[1]) ; FTM2_C2V = FTM_CnV_VAL(period[2]) ; FTM2_C3V = FTM_CnV_VAL(period[3]); } 其中:FTM_CnV_VAL为赋值函数,其设定可以在SKEAZ1284.h文件中查询含义。
引脚电平跳变的代码如下:
在main.c文件中: void FTM_Interrupt(UINT8 ch) { switch(ch) { case 0: LED0_TOGGLE; break; case 1: LED1_TOGGLE; break; case 2: LED2_TOGGLE; break; case 3: LED3_TOGGLE; break; } } 在GPIO.h文件中: #define OUTPUT_TOGGLE(port,register_num) XOUTPUT_TOGGLE(port,register_num) #define XOUTPUT_TOGGLE(port,register_num) GPIO##port##_PTOR|=1<<register_num
TRK-KEA128_LABTS2.zip
(343.24 KB)
|
感谢,正在学习