MPC5604B/C eMIOS 高级定时器全解

一、前言

eMIOS = 一套超级强大的 16bit 通用定时器硬件阵列,支持几乎所有定时 / 计数 / PWM / 捕获场景。

二、eMIOS 基本信息

  • MPC5604B/C 有 2 组 eMIOS:eMIOS_0 + eMIOS_1
  • 总计 56 个独立通道(16bit 计数器)
  • 全部通道可独立配置
  • 支持死区、互补、中心对齐、边沿对齐
  • 可触发 ADC(CTU 联动)
  • 支持输入捕获、输出比较、PWM、单脉冲、计数器等模式。

三、eMIOS 最核心 4 大工作模式

1. GPIO 模式

通用 IO,直接高低电平。

2. 输入捕获 IC(Input Capture)

测:

  • 上升沿 / 下降沿
  • 脉冲频率
  • 高 / 低电平时间
  • 占空比车轮转速、霍尔、按键、频率采集必备。

3. 输出比较 OC(Output Compare)

计数器等于比较值 → 翻转 / 置 0 / 置 1 / 中断。用于:

  • 定时输出
  • 方波生成
  • 定时任务

4. PWM 模式(最强!)

支持:

  • 边沿对齐 PWM
  • 中心对齐 PWM
  • 互补输出
  • 死区插入
  • 16bit 精度

四、eMIOS 通道结构(每个通道都一样)

每个通道包含:

  1. 16bit 计数器
  2. 周期寄存器(周期)
  3. 占空比寄存器(比较值)
  4. 输入滤波
  5. 输出控制
  6. 中断 / 触发逻辑

五、时钟来源

eMIOS 时钟来自 系统时钟 SYSCLK 通常 = 64MHz 所以分辨率 = 15.2ns精度非常高。

六、最常用通道引脚

eMIOS 通道几乎都映射在 PA/PB/PC/PD 等引脚:

  • PA0 ~ PA11
  • PB10 ~ PB15
  • PD 12 ~ PD 15等......任何 PWM 都可以从这些引脚输出。

七、典型应用场景

1. 车灯呼吸灯

中心对齐 PWM + 渐变占空比。

2. 风扇 / 水泵调速

边沿对齐 PWM。

3. 电机控制

互补 PWM + 死区。

4. 转速 / 频率测量

输入捕获测脉冲。

5. 定时触发 ADC

eMIOS → CTU → ADC 自动采样。

6. 定时中断

八、关键寄存器(驱动必用)

  • MIOSCR:全局控制
  • CHCTL:通道模式控制
  • CADR:比较值(占空比)
  • CCR:周期寄存器
  • CDR:捕获值
  • MISSR:状态标志
  • MISIER:中断使能

九、总结

  • eMIOS 是 16bit 高精度通用定时器阵列。
  • 共 56 个通道,独立配置。
  • 支持 IC/OC/PWM/GPIO 四大模式。
  • PWM 支持边沿对齐 + 中心对齐 + 互补 + 死区。
  • 输入捕获可测频率、占空比、边沿时间。
  • 时钟 = SYSCLK(通常 64MHz)。
  • 可硬件触发 ADC(CTU)。
  • 所有引脚与 GPIO 复用,用 SIUL_PCR 配置。
  • 使用前必须开 MC_ME.PCTL 时钟。
  • 车身电子最常用外设,没有之一。
相关推荐
Darkwanderor6 小时前
Linux进程优先级操作
linux·运维·c语言·c++
智者知已应修善业6 小时前
【P12159蓝桥杯数组翻转】2025-4-24
c语言·c++·经验分享·笔记·算法·蓝桥杯
SuperByteMaster6 小时前
keil link misc controls
c语言
ALex_zry1 天前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
Zw-awa1 天前
01-写了include之后到底发生了什么
c语言
CodeStats1 天前
【编程语言】深度梳理C/C++、Java、Python、Go、Rust的区别
java·linux·c语言·c++·python·rust·go
文祐1 天前
C语言用双向链表实现单调递减(递增)队列
c语言·开发语言·链表
gugucoding1 天前
28. 【C语言】通用数据操作:`void *` 与类型无关编程
c语言·开发语言
凉、介1 天前
ARMv8 架构下的刷 Cache 操作
c语言·笔记·学习·架构·嵌入式·arm
灯厂码农2 天前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法