/*!
* COPYRIGHT NOTICE
* Copyright (c) 2013,山外科技
* All rights reserved.
* 技术讨论:山外初学论坛 http://www.vcan123.com
*
* 除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
* 修改内容时必须保留山外科技的版权声明。
*
* @file MK60_ftm.c
* @brief FTM定时器函数库
* @author 山外科技
* @version v5.1
* @date 2014-04-25
*/
/*
* 包含头文件
*/
#include "common.h"
#include "MK60_FTM.h"
/*
* 定义数组
*/
FTM_MemMapPtr FTMN[3] = {FTM0_BASE_PTR, FTM1_BASE_PTR, FTM2_BASE_PTR}; //定义三个指针数组保存 FTMn_e 的地址
/*!
* @brief 初始化FTM 的端口
* @param FTMn_e 模块号(FTM0、 FTM1、 FTM2)
* @param FTM_CHn_e 通道号(CH0~CH7)
* @since v5.0
*/
static void FTM_port_mux(FTMn_e ftmn, FTM_CHn_e ch)
{
/******************* 开启时钟 和 复用IO口*******************/
switch(ftmn)
{
case FTM0:
SIM_SCGC6 |= SIM_SCGC6_FTM0_MASK; //使能FTM0时钟
switch(ch)
{
case FTM_CH0:
if(FTM0_CH0 == PTC1)
{
port_init(FTM0_CH0, ALT4);
}
else if(FTM0_CH0 == PTA3)
{
port_init(FTM0_CH0, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH1:
if(FTM0_CH1 == PTC2)
{
port_init(FTM0_CH1, ALT4);
}
else if(FTM0_CH1 == PTA4)
{
port_init(FTM0_CH1, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH2:
if(FTM0_CH2 == PTC3)
{
port_init(FTM0_CH2, ALT4);
}
else if(FTM0_CH2 == PTA5)
{
port_init(FTM0_CH2, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH3:
if(FTM0_CH3 == PTC4)
{
port_init(FTM0_CH3, ALT4);
}
else if(FTM0_CH3 == PTA6)
{
port_init(FTM0_CH3, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH4:
if(FTM0_CH4 == PTD4)
{
port_init(FTM0_CH4, ALT4);
}
else if(FTM0_CH4 == PTA7)
{
port_init(FTM0_CH4, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH5:
if(FTM0_CH5 == PTD5)
{
port_init(FTM0_CH5, ALT4);
}
else if(FTM0_CH5 == PTA0)
{
port_init(FTM0_CH5, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH6:
if(FTM0_CH6 == PTD6)
{
port_init(FTM0_CH6, ALT4);
}
else if(FTM0_CH6 == PTA1)
{
port_init(FTM0_CH6, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH7:
if(FTM0_CH7 == PTD7)
{
port_init(FTM0_CH7, ALT4);
}
else if(FTM0_CH7 == PTA2)
{
port_init(FTM0_CH7, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
default:
return;
}
break;
case FTM1:
SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK; //使能FTM1时钟
switch(ch)
{
case FTM_CH0:
if((FTM1_CH0 == PTA8) || (FTM1_CH0 == PTA12) || (FTM1_CH0 == PTB0) )
{
port_init(FTM1_CH0, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH1:
if((FTM1_CH1 == PTA9) || (FTM1_CH1 == PTA13) || (FTM1_CH1 == PTB1) )
{
port_init(FTM1_CH1, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
default:
return;
}
break;
case FTM2:
SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK; //使能FTM2时钟
switch(ch)
{
case FTM_CH0:
if((FTM2_CH0 == PTA10) || (FTM2_CH0 == PTB18) )
{
port_init(FTM2_CH0, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
case FTM_CH1:
if((FTM2_CH1 == PTA11) || (FTM2_CH1 == PTB19))
{
port_init(FTM2_CH1, ALT3);
}
else
{
ASSERT(0); //设置管脚有误?
}
break;
default:
return;
}
break;
default:
break;
}
}
/*!
* @brief 初始化FTM 的PWM 功能
* @param FTMn_e 模块号(FTM0、 FTM1、 FTM2)
* @param FTM_CHn_e 通道号(CH0~CH7)
* @param freq 频率(单位为Hz)
* @param duty 占空比分子,占空比 = duty / FTMn_PRECISON
* @since v5.0
* @note 同一个FTM,PWM频率是必须一样的,但占空比可不一样。共3个FTM,即可以输出3个不同频率PWM
* Sample usage: FTM_PWM_init(FTM0, FTM_CH6,200, 10); //初始化 FTM0_CH6 为 频率 200Hz 的PWM,占空比为 10/FTM0_PRECISON
*/
void FTM_PWM_init(FTMn_e ftmn, FTM_CHn_e ch, uint32 freq, uint32 duty)
{
uint32 clk_hz ;
uint16 mod;
uint8 ps;
uint16 cv;
ASSERT( (ftmn == FTM0) || ( (ftmn == FTM1 || ftmn == FTM2 ) && (ch <= FTM_CH1)) ); //检查传递进来的通道是否正确
/******************* 开启时钟 和 复用IO口*******************/
FTM_port_mux(ftmn,ch);
/* 计算频率设置 */
// 若 CPWMS = 1 ,即双边捕捉脉冲,则 PMW频率 = bus频率 /2 /(2^预分频因子)/模数
// 若 CPWMS = 0 ,即单边捕捉脉冲,则 PMW频率 = bus频率 /(2^预分频因子)/模数
// EPWM的周期 :MOD - CNTIN + 0x0001 (CNTIN 设为0)
// 脉冲宽度:CnV - CNTIN
// 模数 MOD < 0x10000
// 预分频因子 PS < 0x07
// 预分频因子 PS 越小时,模数 mod 就越大,计数就越精准,PWM输出更为准确
// MOD = clk_hz/(freq*(1 << PS)) < 0x10000 ==> clk_hz/(freq*0x10000) < (1<< PS) ==> (clk_hz/(freq*0x10000) >> PS) < 1
// 即 (((clk_hz/0x10000 )/ freq ) >> PS ) < 1
// 以 CPWMS = 0 ,即单边捕捉脉冲为例
clk_hz = (bus_clk_khz * 1000) ; // bus频率
mod = (clk_hz >> 16 ) / freq ; // 临时用 mod 缓存一下
ps = 0;
while((mod >> ps) >= 1) // 等 (mod >> ps) < 1 才退出 while 循环 ,即求 PS 的最小值
{
ps++;
}
ASSERT(ps <= 0x07); // 断言, PS 最大为 0x07 ,超过此值,则 PWM频率设置过低,或 Bus 频率过高
mod = (clk_hz >> ps) / freq; // 求 MOD 的值
switch(ftmn) // 初值 CNTIN 设为0 ,脉冲宽度:CnV - CNTIN ,即 CnV 就是 脉冲宽度了。
{
// EPWM的周期 : MOD - CNTIN + 0x0001 == MOD - 0 + 1
// 则 CnV = (MOD - 0
没有合适的资源?快使用搜索试试~ 我知道了~
PIT_延时.rar_PIT 延时_PIT延时
共95个文件
h:50个
c:23个
icf:13个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 24 浏览量
2022-09-23
19:02:58
上传
评论
收藏 1.84MB RAR 举报
温馨提示
PIT延时
资源推荐
资源详情
资源评论
收起资源包目录
PIT_延时.rar (95个子文件)
PIT_延时
Prj
IAR
vcan_Kinetis.eww 166B
vcan_Kinetis.ewd 102KB
config files
128KB_Pflash_128KB_Dflash.icf 2KB
128KB_Pflash.icf 2KB
vcan_ROM_K60N512.icf 4KB
vcan_RAM_K60X512.icf 4KB
64KB_Ram.icf 2KB
256KB_Pflash_256KB_Dflash.icf 2KB
vcan_ROM_K60X512.icf 4KB
512KB_Pflash.icf 2KB
vcan_RAM_K60N512.icf 4KB
32KB_Ram.icf 2KB
64KB_Pflash_64KB_Dflash.icf 2KB
128KB_Ram.icf 2KB
256KB_Pflash.icf 2KB
vcan_Kinetis.ewp 102KB
App
main.c 870B
MK60_conf.c 11KB
MK60_it.c 467B
Inc
include.h 689B
PORT_cfg.h 5KB
MK60_conf.h 4KB
MK60_it.h 918B
Lib
CMSIS
iar_cortexM4lf_math.a 1.33MB
Inc
core_cm0.h 32KB
core_cm3.h 97KB
arm_common_tables.h 5KB
core_cm4.h 107KB
arm_math.h 237KB
core_cmFunc.h 17KB
core_cmInstr.h 20KB
core_cm4_simd.h 22KB
iar_cortexM4l_math.a 1.34MB
vcan_Kinetis.eww 174B
山外智能车论坛.url 112B
Board
inc
VCAN_LED.H 966B
VCAN_key.h 2KB
VCAN_MMA7455.h 3KB
VCAN_NRF24L0.h 2KB
src
VCAN_LED.C 2KB
VCAN_MMA7455.c 2KB
VCAN_NRF24L0.c 19KB
VCAN_key.c 7KB
Chip
inc
MK60_lptmr.h 2KB
MK60_spi.h 1KB
MK60_wdog.h 927B
vectors.h 19KB
MK60_i2c.h 1KB
MK60_flash.h 2KB
misc.h 1KB
common.h 25KB
MK60_gpio_cfg.h 35KB
kinetis
MK70F15.h 1.12MB
MK70F12.h 1.12MB
MK10DZ10.h 760KB
MK53DZ10.h 915KB
MK50DZ10.h 754KB
MK51DZ10.h 837KB
MK61F15.h 1.12MB
MK60F12.h 1.09MB
MK52DZ10.h 829KB
MK30DZ10.h 843KB
MK60DZ10.h 868KB
MK20DZ10.h 791KB
MK61F12.h 1.12MB
MK60F15.h 1.09MB
MK40DZ10.h 874KB
MK60_PIT.h 3KB
MK60_port.h 5KB
MK60_uart.h 2KB
MK60_gpio.h 5KB
MK60_mcg.h 2KB
IAR
iar.h 304B
system_MK60DZ10.h 899B
MK60_FTM.h 3KB
MK60_DWT.h 554B
MK60_SysTick.h 1KB
src
MK60_spi.c 16KB
MK60_mcg.c 11KB
misc.c 2KB
MK60_lptmr.c 18KB
vectors.c 5KB
MK60_ftm.c 21KB
MK60_flash.c 11KB
MK60_gpio.c 5KB
MK60_i2c.c 9KB
MK60_SysTick.c 3KB
IAR
system_MK60DZ10.c 5KB
startup_MK60DZ10.s 883B
MK60_uart.c 19KB
MK60_DWT.c 1KB
MK60_port.c 3KB
MK60_PIT.c 6KB
MK60_wdog.c 3KB
删除临时文件.bat 232B
共 95 条
- 1
资源评论
小波思基
- 粉丝: 70
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python实现的股票量化交易策略源代码+视频讲解+案例代码,含RSI策略、BOP指标策略、KDJ策略、MACD指标策略等
- EDA编码.zip
- 文本分类任务训练神经网络来学习词汇表中每个词的词向量
- MyBatis进阶技巧:探索动态SQL的无限可能.md
- HM2300C-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- HM2300B-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 员工解除劳动合同申请表.pdf
- 物模块模型代码,前往设计物模块所属
- mybatis动态sql(使用<where>标签来处理多个查询条件)
- Java面试手册,助力大家面试过五关斩六将,面试成功
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功