嵌入式开发基础学习笔记(pwm spi)

SPI 与 PWM 驱动开发学习笔记

1. SPI (Serial Peripheral Interface)

SPI(串行外设接口)是一种高速、全双工、同步的串行通信总线。I.MX6U 自带的 SPI 外设被称为 ECSPI (Enhanced Configurable Serial Peripheral Interface)。

A. SPI 通信基础

  • 物理连接
    • SCLK (Serial Clock):时钟信号线,由主机产生。
    • MOSI (Master Out Slave In):主机发送,从机接收。
    • MISO (Master In Slave Out):主机接收,从机发送。
    • CS/SS (Chip Select):片选信号,低电平有效,用于选择从机。
  • 通信特性
    • 全双工:数据发送和接收同时进行。
    • MSB 先行:高位在前,低位在后。
    • 四种模式 :由 CPOL (时钟极性) 和 CPHA (时钟相位) 决定。
      • CPOL:空闲时 SCLK 的电平(0=低电平,1=高电平)。
      • CPHA:采样时刻(0=第一个跳变沿,1=第二个跳变沿)。

B. I.MX6U ECSPI 寄存器配置

I.MX6U 的 ECSPI 支持主/从模式,本次实验通常使用 主模式

寄存器 关键位域 说明
CONREG BURST_LENGTH 突发传输长度 (bit31:20),设置传输位数。
PRE_DIVIDER / POST_DIVIDER 两步分频设置,ECSPI 时钟源通常为 60MHz。
CHANNEL_MODE 通道模式,设置为主模式 (1) 或从模式 (0)。
EN SPI 使能位。
CONFIGREG SCLK_POL / SCLK_PHA 设置时钟极性和相位,对应 CPOL 和 CPHA。
STATREG TC / RF / TF 状态标志位:传输完成、接收 FIFO 空、发送 FIFO 满。
TXDATA/RXDATA - 发送和接收数据寄存器。写入 TXDATA 启动传输,读取 RXDATA 获取数据。

C. 驱动流程 (以 ADXL345 为例)

  1. IO 初始化:将引脚复用为 ECSPI 功能(如 MOSI, MISO, SCLK),片选引脚通常配置为 GPIO 输出。
  2. 时钟配置:使能 ECSPI 时钟 (CCM)。
  3. 寄存器配置
    • 复位控制器。
    • 设置为 主模式 ,配置 CPOLCPHA(ADXL345 通常为模式 3,即 CPOL=1, CPHA=1)。
    • 设置分频值(例如 60MHz 分频为 1MHz-5MHz 供传感器使用)。
    • 设置突发长度(通常为 8 或 16 位)。
  4. 数据收发
    • 拉低片选 (CS)。
    • TXDATA 写入数据,同时从 RXDATA 读取数据(全双工)。
    • 拉高片选 (CS)。

2. PWM (Pulse Width Modulation)

PWM(脉冲宽度调制)本质上是通过数字手段模拟模拟信号的一种技术,常用于控制电机速度、灯光亮度(背光)等。

A. 核心概念

  • 频率 (Frequency):1 秒内信号开关的次数。频率越高,人眼或设备越感觉不到闪烁。
  • 占空比 (Duty Cycle) :一个周期内,高电平时间与总周期时间的比例。
    • 0%:完全关闭。
    • 50%:一半时间开启。
    • 100%:完全开启。
  • 原理:通过调节占空比,改变负载上的平均电压,从而控制亮度或速度。

B. I.MX6U PWM 寄存器配置

I.MX6U 的 PWM 外设结构包含一个 16 位自增计数器和一个 4x16 的 FIFO 队列。

表格

寄存器 关键位域 说明
PWMCR CLKSRC 时钟源选择,通常选择 ipg_clk (66MHz)。
PRESCALER 分频值 (0-4095),用于降低计数频率。
REPEAT FIFO 重复计数设置,决定 FIFO 中每个数据使用多少次。
EN PWM 使能位。
PWMPR - 周期寄存器。决定 PWM 频率。公式: FPWM=FPCLK/(PWMPR+2)FPWM​=FPCLK​/(PWMPR+2) 。
PWMSR FE (FIFO Empty) 状态寄存器。FE 位为 1 表示 FIFO 空,通常用此位触发中断。
PWMSAR - 采样寄存器 。写入该寄存器的值即为比较值,决定了占空比。

C. 驱动流程 (以 LCD 背光调节为例)

  1. IO 初始化:将 GPIO 引脚(如 GPIO1_IO08)复用为 PWM1_OUT 功能。
  2. 时钟配置:使能 PWM 模块时钟。
  3. 寄存器配置
    • 设置频率 :通过 PWMPR 寄存器设置 PWM 频率(例如 1KHz,人眼不易察觉闪烁)。

    • 设置时钟与分频 :在 PWMCR 中选择时钟源(ipg_clk)和分频系数。

    • 设置 FIFO :配置 REPEAT

    • 设置占空比

      • 计算公式: CompareValue=Period×DutyRatioCompareValue=Period×DutyRatio 。
      • 将计算出的比较值写入 PWMSAR 寄存器。
    • 中断处理 (可选)

      • 当 FIFO 数据用完时会产生中断(FE 标志置位)。
      • 在中断服务函数中重新向 PWMSAR 写入新的占空比值,以实现动态调节。
    • D. 应用场景

    • LCD 背光控制:通过按键改变 PWM 占空比,实现屏幕亮度的明暗变化。

    • 电机调速:调节占空比控制电机转速

相关推荐
Piko6147 小时前
H3C IRF2 堆叠实战:打造高可靠核心交换网络
运维·网络·笔记
茯苓gao10 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
dexi.Chi 攻城狮13 小时前
SQL层次查询语法
经验分享·笔记·sql
HERR_QQ13 小时前
强化学习的数学原理 学习笔记
人工智能·笔记·学习·自动驾驶
MartinYeung514 小时前
[论文学习]DP-Fusion:面向大语言模型的令牌级差分隐私推理-深度解析
人工智能·学习·语言模型
zwenqiyu15 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
MartinYeung516 小时前
[论文学习]SecureGate:通过令牌级门控学习何时安全地揭示PII-深度解析
学习·安全
大鱼>17 小时前
超参数调优进阶:Optuna/Bayesian/Early Stopping
人工智能·学习·机器学习·聚类
liuyicenysabel17 小时前
多服务上线日记二:
服务器·笔记·学习
小弥儿18 小时前
GitHub今日热榜 | 2026-07-05:阿里巴巴浏览器Agent上榜
学习·开源·github