i.MX6ULL 外设初始化
一、UART1 串口通信
UART(Universal Asynchronous Receiver/Transmitter)是最常用的异步串行通信接口之一,在嵌入式调试和外设通信中应用广泛。
功能说明
数据收发:通过 TXD(发送)、RXD(接收)完成数据通信。
波特率配置:通过 UBIR/UBMR/UFCR
控制。
状态检测:通过状态寄存器 USR2
判断发送是否完成。
初始化流程
配置 引脚复用(IOMUXC,将 GPIO 配置为 UART 功能)。
设置 引脚电气特性(如上拉、驱动能力)。
关闭 UART,清零控制寄存器。
配置收发功能,使能 TX 和 RX。
设置波特率分频参数。
使能 UART。
关键代码
void init_uart1(void)
{// 1. 引脚复用与配置IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0);IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0);IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0);IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0);// 2. 初始化控制寄存器UART1->UCR1 = 0;UART1->UCR2 = 0;UART1->UCR2 |= (1 << 14) | (1 << 5) | (1 << 2) | (1 << 1);UART1->UCR3 |= (1 << 2);// 3. 设置 FIFO 分频和波特率UART1->UFCR = (5 << 7);UART1->UBIR = 999;UART1->UBMR = 43402;// 4. 启动 UARTUART1->UCR1 |= (1 << 0);
}
发送函数
void putc(unsigned char ch)
{// 等待发送 FIFO 空while((UART1->USR2 & (1 << 3)) == 0);UART1->UTXD = ch;
}
二、EPIT1 定时器(带中断)
EPIT(Enhanced Periodic Interrupt Timer)是增强型周期定时器,常用于周期性任务,例如 LED 闪烁、系统心跳信号等。
功能说明
周期定时:通过 LR
(装载寄存器)设定定时周期。
中断机制:溢出或比较匹配时触发中断。
应用场景:任务调度、周期采样、硬件定时。
初始化流程
清零控制寄存器
CR
。配置时钟源、分频器、工作模式。
装载计数初值
LR
。设置比较寄存器
CMPR
。注册中断处理函数,并使能 GIC 中断控制器。
启动 EPIT 定时器。
关键代码
void epit1_interrupt_handler(void)
{if((EPIT1->SR & (1 << 0)) != 0) // 检查比较事件{led_non(); // 翻转 LEDEPIT1->SR = (1 << 0); // 清除中断标志}
}void init_epit1(void)
{EPIT1->CR = 0;EPIT1->CR |= (1 << 24) | (1 << 17) | (65 << 4) | (1 << 3) | (1 << 2) | (1 << 1);EPIT1->LR = 1000000; // 定时周期EPIT1->CMPR = 0;EPIT1->CNR = 0;// 注册中断system_interrupt_register(EPIT1_IRQn, epit1_interrupt_handler);GIC_EnableIRQ(EPIT1_IRQn);// 启动 EPITEPIT1->CR |= (1 << 0);
}
三、GPT1 通用定时器
GPT(General Purpose Timer)是通用定时器,可用于计时、延时、PWM 输出等场景。相比 EPIT,GPT 更灵活但也稍复杂。
功能说明
计数模式:递增计数,支持 32 位宽度。
时钟选择:可以选择不同的时钟源(如 ipg_clk)。
预分频器:通过 PR
设置。
应用场景:定时测量、延时函数、软件定时器。
初始化流程
关闭 GPT1,清零控制寄存器。
复位 GPT1,并等待复位完成。
配置工作模式(时钟源、重载方式)。
设置预分频器。
启动 GPT1。
关键代码
void init_gpt1(void)
{GPT1->CR = 0; // 关闭 GPT1GPT1->CR |= (1 << 15); // 复位while((GPT1->CR & (1 << 15)) != 0);GPT1->CR |= (1 << 9) | (1 << 6); // ENMOD=1, 时钟源=ipg_clkGPT1->PR = 65; // 预分频器GPT1->CR |= (1 << 0); // 启动 GPT1
}
四、综合对比
外设 | 特点 | 应用场景 |
---|---|---|
UART1 | 串口通信,波特率可调,收发数据 | 调试输出、模块通信 |
EPIT1 | 支持中断的周期定时器 | LED 闪烁、心跳、任务调度 |
GPT1 | 通用计数定时器,功能灵活 | 计时、延时、PWM |