NXP MPC574X eTimer
文章目录结构
- 关于eTimer模块
- 1、概述
- 2、功能介绍
- 2.1、计数模式
- 2.1.1、Stop Mode
- 2.1.2、Count Mode
- 2.1.3、Edge Count Mode
- 2.1.4、Gated Count Mode
- 2.2、输入捕获
- 3、代码实现
- 3.1、输入捕获配置
- 3.1.1、eTimer模块的初始化
- 3.1.2、开启输入捕获
- 3.1.3、计算脉冲宽度
- 3.2 可变PWM输出配置
- 3.2.1、配置初始化
- 3.2.2、 中断函数
关于eTimer模块
1、概述
MPC574X的eTimer模块主要用于实现输出特定频率和占空比的脉冲,同时也可以配置捕获外部输入信号,测量外部信号的周期和电平宽度。
2、功能介绍
2.1、计数模式
- Stop Mode(计数停止模式)
- Count Mode(单边沿计数)
- Edge Count Mode(双边沿计数)
- Gated Count Mode(门计数)
- Quadrature Count Mode(正交计数)
- Signed Count Mode(符号计数)
- Triggered Count Mode
- OneShot Mode
- Cascade Count Mode
- Pulse Output Mode(脉冲输出模式)
- FixedFrequency PWM Mode(固定频率PWM模式)
- Variable Frequency PWM Mode(可变频率的PWM模式)
2.1.1、Stop Mode
工作该模式下,计数不会发生。
2.1.2、Count Mode
工作该模式下,计数器在输入信号的上升沿计数或者下降沿计数。计数的边沿形式可以通过配置PIPS实现。
2.1.3、Edge Count Mode
工作该模式下,计数器会在输入信号的上升和下降沿计数。
2.1.4、Gated Count Mode
工作该模式下,计数器会在
2.2、输入捕获
输入捕获模式可以用来测量脉冲的宽度(捕获连续两个输入边沿的计数值)和周期(捕获连续两个上升边沿或者下降边沿的计数值)。
3、代码实现
3.1、输入捕获配置
3.1.1、eTimer模块的初始化
void eTimer1_Init(void)
{ETIMER_1.ENBL.R = 0x0; // disable Timer1 channelsETIMER_1.CH[0].CTRL1.R = 0x3805; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rolloverETIMER_1.CH[0].COMP1.R = 0xFFFF;ETIMER_1.CH[0].CCCTRL.R = 0x0264; // compare on COMP1 when counting up, COMP2 when counting down// CAPT2 on falling edge, CAPT1 on rising edge, 2 entries// free-running modeETIMER_1.CH[0].CTRL3.R = 1;ETIMER_1.CH[5].CTRL1.R = 0xF005; // cascaded mode, count up, rollover, count repeatedlyETIMER_1.CH[5].COMP1.R = 0xFFFF;ETIMER_1.CH[5].CCCTRL.R = 0x0264; // compare on COMP1 when counting up, COMP2 when counting down// CAPT2 on falling edge, CAPT1 on rising edge, 2 entries// free-running modeETIMER_1.CH[5].CTRL3.R = 1;SIUL2.MSCR[PA5].B.IBE = 1; /* PA5: Enable pad for input - eTimer1 ch5 */SIUL2.IMCR[70].B.SSS = 1; /* eTimer0 ch1: connected to pad PA5 */ETIMER_1.ENBL.R = 0x0021; // Enable Timer1 channel 0 5
}
3.1.2、开启输入捕获
void eTimer1_StartInputCapture()
{ETIMER_1.CH[0].CCCTRL.B.ARM = 1; // starts the input capture processETIMER_1.CH[5].CCCTRL.B.ARM = 1;
}
3.1.3、计算脉冲宽度
void eTimer1_CalculatePulse()
{uint32_t counts, edge1,edge2,edge3,edge4 ;uint32_t capture_ch0[8],capture_ch1[8];float freq, period, duty,pulseH, pulseL;while(!(0x0080 & ETIMER_1.CH[5].STS.R)){} // wait for channel 1's capture2 flagwhile(!(0x0080 & ETIMER_1.CH[0].STS.R)){}capture_ch1[0] = ETIMER_1.CH[5].CAPT1.R;capture_ch1[1] = ETIMER_1.CH[5].CAPT2.R;capture_ch1[2] = ETIMER_1.CH[5].CAPT1.R;capture_ch1[3] = ETIMER_1.CH[5].CAPT2.R;capture_ch0[0] = ETIMER_1.CH[0].CAPT1.R;capture_ch0[1] = ETIMER_1.CH[0].CAPT2.R;capture_ch0[2] = ETIMER_1.CH[0].CAPT1.R;capture_ch0[3] = ETIMER_1.CH[0].CAPT2.R;capture_ch1[4] = ETIMER_1.CH[5].CAPT1.R;capture_ch1[5] = ETIMER_1.CH[5].CAPT2.R;capture_ch1[6] = ETIMER_1.CH[5].CAPT1.R;capture_ch1[7] = ETIMER_1.CH[5].CAPT2.R;capture_ch0[4] = ETIMER_1.CH[0].CAPT1.R;capture_ch0[5] = ETIMER_1.CH[0].CAPT2.R;capture_ch0[6] = ETIMER_1.CH[0].CAPT1.R;capture_ch0[7] = ETIMER_1.CH[0].CAPT2.R;edge1 = capture_ch1[0]*65536 + capture_ch0[0]; // save 1st rising edgeedge2 = capture_ch1[1]*65536 + capture_ch0[1]; // save 1st falling edgeedge3 = capture_ch1[2]*65536 + capture_ch0[2]; // save 2nd rising edgeedge4 = capture_ch1[3]*65536 + capture_ch0[3]; // save 2nd falling edge// calculate period, pulseH, pulseL, freq and dutyif(edge3>edge1){counts = edge3 - edge1;}else{counts = (0xFFFFFFFF - edge1 +1) + edge3;}freq = (float)100000000.0/counts;period = counts / (float)100000.0;if(edge2 > edge1){counts = edge2 - edge1;}else{counts = (0xFFFFFFFF - edge1 +1) + edge2;}pulseH = counts / (float)100000.0;pulseL = period-pulseH;duty = pulseH/period*100;ETIMER_1.CH[5].STS.R = 0x00C0; // clear eTimer0 channel 1's capture1/2 flagsETIMER_1.CH[0].STS.R = 0x00C0; // clear eTimer0 channel 0's capture1/2 flags
}
3.2 可变PWM输出配置
3.2.1、配置初始化
void eTimer1_OutputInit(void)
{ETIMER_1.ENBL.R = 0x0; // disable Timer1 channelsETIMER_1.CH[5].COMP1.R = 24999;ETIMER_1.CH[5].COMP2.R = 3999;ETIMER_1.CH[5].CMPLD1.R = 5999;ETIMER_1.CH[5].CMPLD2.R = 8999;ETIMER_1.CH[5].CCCTRL.B.CLC1 = 2;ETIMER_1.CH[5].CCCTRL.B.CLC2 = 5;ETIMER_1.CH[5].CTRL1.B.PRISRC = 0x18;ETIMER_1.CH[5].CTRL1.B.ONCE = 0;ETIMER_1.CH[5].CTRL1.B.DIR = 0;ETIMER_1.CH[5].CTRL1.B.LENGTH = 1;ETIMER_1.CH[5].CTRL1.B.CNTMODE = 1;ETIMER_1.CH[5].CTRL2.B.OEN = 1;ETIMER_1.CH[5].CTRL2.B.OUTMODE = 4;ETIMER_1.CH[5].CTRL3.B.DBGEN = 1;ETIMER_1.CH[5].STS.R = 0xffff;/** Interrupt an DMA Enable* */ETIMER_1.CH[5].INTDMA.B.TCF1IE = 1;ETIMER_1.CH[5].INTDMA.B.TCF2IE = 1;/** Pin Port assign* */SIUL2.MSCR[PA5].B.OBE = 1; /* PA5: Enable pad for output - eTimer1 ch5 */SIUL2.MSCR[PA5].B.SRC = 3; //Maximum slew rateSIUL2.MSCR[PA5].B.SSS = 2; /* eTimer0 ch5: connected to pad PA5 */cmp1_cnt = 1;cmp2_cnt = 1;ETIMER_1.ENBL.R = 0x0020; // Enable Timer1 channel 0 5INTC_0.PSR[627].R = 0x8009; //set priority and core for eTimer1 Channel5 interrupt
}
3.2.2、 中断函数
void eTimer1_Channel5_Isr(void)
{if(ETIMER_1.CH[5].STS.B.TCF == 1){cmp2_cnt++;if( cmp2_cnt % 2 )//comp1{if(cmp2_cnt < 6)// 1 3 5{ETIMER_1.CH[5].CMPLD1.R = cmp_value_array[(cmp2_cnt + 1) / 2 + 1][0];}else if(cmp2_cnt == 7){ETIMER_1.CH[5].CMPLD1.R = cmp_value_array[0][0];}}else{if(cmp2_cnt < 7)// 2 4 6{ETIMER_1.CH[5].CMPLD2.R = cmp_value_array[cmp2_cnt/2 + 1][1];}else if(cmp2_cnt == 8){ETIMER_1.CH[5].CMPLD2.R = cmp_value_array[0][1];ETIMER_1.CH[5].CTRL1.B.ONCE = 1;}else if(cmp2_cnt == 10){eTimer1Channel5OutputStop();}else{}}ETIMER_1.CH[5].STS.B.TCF = 1;}}
NXP MPC574X eTimer相关推荐
- NXP MPC574x LinFlexd配置和DMA配置
概述 Lin总线在汽车电子中使用非常广泛,下面简单介绍一下NXP MPC574X系列PowerPC的Lin总线配置.由于Lin总线的通信速率比较低,所以一般在实际开发中会使用DMA外设进行数据的搬运, ...
- NXP MPC574X CAN接收滤波配置
概述 CAN模块的滤波器设计,主要是配置相应的ID MASK.MPC系列的PowerPC处理器的CAN滤波功能还是挺强大的,可以根据实际需要配置成多种形式,下面只是对一些常见的滤波形式做简单介绍.本人 ...
- NXP MPC574X PLL配置和问题
概述 关于PLL的配置主要参考官方的Reference Manual,阅读第13章Clocking和第25章Dual PLL Digital Interface (PLLDIG).下面将实际操作遇到的 ...
- NXP智能驾驶软件系统
NXP智能驾驶软件系统 ADAS和高度自动驾驶 汽车解决方案 市场领先的ADAS解决方案 先进的驾驶员辅助系统(ADAS)提供了安全的.日益自动化的驾驶体验,这将重塑出行关系.自动驾驶技术将很快让乘客 ...
- 欧盟调查或拖累进程 高通收购NXP一波三折
高通看中了越来越热的车联网市场,包括无人驾驶新能源汽车等.业内人士称,"手机市场已经遇到天花板了,红利的优势已经不再,高通必须要寻找新的盈利点." 违反反垄断法,是悬在高通公司头上 ...
- basler相机参数简要中文说明_Basler嵌入式视觉解决方案- 现推出首款适用于NXP(恩智浦)i.MX 8应用处理器系列的产品...
借助两款全新的dart相机模块和相机附加工具包所提供的理想技术起点,为NXP i.MX 8应用处理器增加图像处理功能.阿伦斯堡,2019年8月6日– 相机制造商Basler正在扩展其嵌入式视觉解决方案 ...
- -i 可以编译添加多个_大咖说 | 基于 NXP i.MX8 eIQ 环境搭建和编译
一.前言 NXP 针对 Machine Learning ( ML ) 创建了 eIQ 工具,以方便开发者在 i.MX 系列设备上开发 ML 相关应用. 本篇将会分两个章节,一章节介绍 eIQ 软件, ...
- 【iMX6ULL核心板】一款高性能低功耗的IMX6ULL核心板 | 触觉智能NXP IMX6ULL核心板
i.MX6ULL 系列处理器简介 NXP的i.MX 6ULL系列芯片是一款基于ARM Cortex A7内核的低功耗高性能且低成本的应用处理器,下面是imx6ull处理器的内部功能框图: 主要特性如下 ...
- NXP I.MX6ULL 交叉编译工具链下载地址?
链接:https://pan.baidu.com/s/1a0ijRCqX2JbSbJfkrrduuQ 提取码:kut1 更多资料,可以来这里寻找:nxp imx6ull 核心板/开发板资料
- 使用Buildroot为Nxp i.mx6ul制作文件系统
随着神U s3c2440,6410的停产,NXP 针对中国市场推出低成本方案i.mx6ul,可用于商业级和工业级应用,10年超长供货周期,市场很有潜力. 官方只支持Yocto,但个人感觉Yocto太多 ...
最新文章
- mysql 小型机_小型机宕机问题 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...
- 设计模式-创建型-单件
- mysql5.7.17配置_mysql-5.7.17-winx64的安装配置
- 《现代操作系统》精读与思考笔记 第一章 引论
- 在ROS中使用Neato XV-11 激光雷达
- python爬取内容剔除nbsp_python 爬虫爬取内容时, \xa0 、 \u3000 的含义与处理方法...
- 39套漂亮的后台模板
- 【软考系统架构设计师】2013年下系统架构师案例分析历年真题
- android3.0新功能,PCWorld:Android 3.0最受期待的五大新功能
- js获取ie版本号与html设置ie文档模式的方法
- 前端项目使用阿里图标
- 2022年低压电工考试题模拟考试题库及模拟考试
- oracle 12c PDB 数据库 和mybatis 数据库连接池 的连接问题
- max7456 C语言,如何使用8位单片机对16位INT型数据进行操作
- ar vr内容制作_AR和VR品牌内容:探索与观众建立联系的新方式
- linux samba 服务端口号,Linux系统学习 二十、SAMBA服务—介绍、安装、端口
- 2021年中国多晶硅产量、进出口及重点企业营收情况:多晶硅产量为50.5万吨,产能约52万吨/年[图]
- vue echarts 地图立体 并设置tooltip属性背景图片
- 职业院校数字校园建设方案
- 使用PowerApps制作请假系统(一)--创建SharePoint列表以及PowerApps主题部分
热门文章
- 十进制进制法_进制转换方法(进制转换方法的口诀)
- HFSS印刷偶极子天线(3)
- Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
- QT_kvaser动态链接库配置
- SpringBoot整合调用微信模板方法实现微信公众号消息通知推送,Java实现微信公众号给关注用户推送自定义消息通知(手把手从0到1)
- wsimport生成wsdl代码
- 计算机验证菜单命令的各种特性,2017年CAD工程师认证单选题「附答案」
- 小鹤输入法及练习工具推荐
- 编程及C/C++初学者FAQ
- 分类学 · 狡兔为何偏要有三窟???