文章目录结构

  • 关于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相关推荐

  1. NXP MPC574x LinFlexd配置和DMA配置

    概述 Lin总线在汽车电子中使用非常广泛,下面简单介绍一下NXP MPC574X系列PowerPC的Lin总线配置.由于Lin总线的通信速率比较低,所以一般在实际开发中会使用DMA外设进行数据的搬运, ...

  2. NXP MPC574X CAN接收滤波配置

    概述 CAN模块的滤波器设计,主要是配置相应的ID MASK.MPC系列的PowerPC处理器的CAN滤波功能还是挺强大的,可以根据实际需要配置成多种形式,下面只是对一些常见的滤波形式做简单介绍.本人 ...

  3. NXP MPC574X PLL配置和问题

    概述 关于PLL的配置主要参考官方的Reference Manual,阅读第13章Clocking和第25章Dual PLL Digital Interface (PLLDIG).下面将实际操作遇到的 ...

  4. NXP智能驾驶软件系统

    NXP智能驾驶软件系统 ADAS和高度自动驾驶 汽车解决方案 市场领先的ADAS解决方案 先进的驾驶员辅助系统(ADAS)提供了安全的.日益自动化的驾驶体验,这将重塑出行关系.自动驾驶技术将很快让乘客 ...

  5. 欧盟调查或拖累进程 高通收购NXP一波三折

    高通看中了越来越热的车联网市场,包括无人驾驶新能源汽车等.业内人士称,"手机市场已经遇到天花板了,红利的优势已经不再,高通必须要寻找新的盈利点." 违反反垄断法,是悬在高通公司头上 ...

  6. basler相机参数简要中文说明_Basler嵌入式视觉解决方案- 现推出首款适用于NXP(恩智浦)i.MX 8应用处理器系列的产品...

    借助两款全新的dart相机模块和相机附加工具包所提供的理想技术起点,为NXP i.MX 8应用处理器增加图像处理功能.阿伦斯堡,2019年8月6日– 相机制造商Basler正在扩展其嵌入式视觉解决方案 ...

  7. -i 可以编译添加多个_大咖说 | 基于 NXP i.MX8 eIQ 环境搭建和编译

    一.前言 NXP 针对 Machine Learning ( ML ) 创建了 eIQ 工具,以方便开发者在 i.MX 系列设备上开发 ML 相关应用. 本篇将会分两个章节,一章节介绍 eIQ 软件, ...

  8. 【iMX6ULL核心板】一款高性能低功耗的IMX6ULL核心板 | 触觉智能NXP IMX6ULL核心板

    i.MX6ULL 系列处理器简介 NXP的i.MX 6ULL系列芯片是一款基于ARM Cortex A7内核的低功耗高性能且低成本的应用处理器,下面是imx6ull处理器的内部功能框图: 主要特性如下 ...

  9. NXP I.MX6ULL 交叉编译工具链下载地址?

    链接:https://pan.baidu.com/s/1a0ijRCqX2JbSbJfkrrduuQ 提取码:kut1 更多资料,可以来这里寻找:nxp imx6ull 核心板/开发板资料

  10. 使用Buildroot为Nxp i.mx6ul制作文件系统

    随着神U s3c2440,6410的停产,NXP 针对中国市场推出低成本方案i.mx6ul,可用于商业级和工业级应用,10年超长供货周期,市场很有潜力. 官方只支持Yocto,但个人感觉Yocto太多 ...

最新文章

  1. mysql 小型机_小型机宕机问题 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...
  2. 设计模式-创建型-单件
  3. mysql5.7.17配置_mysql-5.7.17-winx64的安装配置
  4. 《现代操作系统》精读与思考笔记 第一章 引论
  5. 在ROS中使用Neato XV-11 激光雷达
  6. python爬取内容剔除nbsp_python 爬虫爬取内容时, \xa0 、 \u3000 的含义与处理方法...
  7. 39套漂亮的后台模板
  8. 【软考系统架构设计师】2013年下系统架构师案例分析历年真题
  9. android3.0新功能,PCWorld:Android 3.0最受期待的五大新功能
  10. js获取ie版本号与html设置ie文档模式的方法
  11. 前端项目使用阿里图标
  12. 2022年低压电工考试题模拟考试题库及模拟考试
  13. oracle 12c PDB 数据库 和mybatis 数据库连接池 的连接问题
  14. max7456 C语言,如何使用8位单片机对16位INT型数据进行操作
  15. ar vr内容制作_AR和VR品牌内容:探索与观众建立联系的新方式
  16. linux samba 服务端口号,Linux系统学习 二十、SAMBA服务—介绍、安装、端口
  17. 2021年中国多晶硅产量、进出口及重点企业营收情况:多晶硅产量为50.5万吨,产能约52万吨/年[图]
  18. vue echarts 地图立体 并设置tooltip属性背景图片
  19. 职业院校数字校园建设方案
  20. 使用PowerApps制作请假系统(一)--创建SharePoint列表以及PowerApps主题部分

热门文章

  1. 十进制进制法_进制转换方法(进制转换方法的口诀)
  2. HFSS印刷偶极子天线(3)
  3. Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
  4. QT_kvaser动态链接库配置
  5. SpringBoot整合调用微信模板方法实现微信公众号消息通知推送,Java实现微信公众号给关注用户推送自定义消息通知(手把手从0到1)
  6. wsimport生成wsdl代码
  7. 计算机验证菜单命令的各种特性,2017年CAD工程师认证单选题「附答案」
  8. 小鹤输入法及练习工具推荐
  9. 编程及C/C++初学者FAQ
  10. 分类学 · 狡兔为何偏要有三窟???