一、中断概述
中断(Interrupt) 是处理器在执行程序过程中,响应内部或外部紧急事件的机制。当发生需要处理器立即处理的事件时,处理器会暂时中断当前正在执行的程序,转去执行处理该事件的特殊程序(中断服务程序),执行完毕后再返回原程序继续执行。
二、中断类型与分类
硬件中断:由外设触发(如GPIO、UART、定时器等),分为共享中断和独占中断。
软件中断:通过编程触发(如IPI核间中断)。
异常:处理器异常(如缺页、未定义指令)。
IMX6ULL使用GIC-400中断控制器,支持以下优先级:
- SPI(Shared Peripheral Interrupt):外设共享中断,如GPIO、DMA。
- PPI(Private Peripheral Interrupt):核私有中断,如定时器。
- SGI(Software Generated Interrupt):软件生成中断,用于多核通信。
三、中断的处理流程
1) 中断源发出中断请求
2) 检查CPU是否允许中断及该中断源是否被屏蔽
3) 比较中断优先级
4) 保护现场
5) 执行中断处理函数(回调函数)
6) 恢复现场
7) 返回原程序继续执行。
四、EPIT定时器概述
EPIT(Enhanced Periodic Interrupt Timer)是MX6ULL处理器中的一种高精度定时器模块,主要用于周期性中断生成或计时操作。其特点包括32位计数器、可编程预分频器以及多种工作模式。
五、EPIT定时器主要特性
- 32位递减计数器:支持从设定值递减至0,触发中断或重新加载。
- 时钟源选择:可选用IPG时钟或低频时钟(如32kHz)。
- 预分频器:支持1~4096分频,适应不同精度需求。
- 工作模式:
- 自由运行模式:计数器递减至0后自动重载。
- 设置-清除模式:需手动重新使能以触发下一次计数。
六、EPIT寄存器配置关键步骤
时钟使能与基础配置
// 使能EPIT时钟
CCM->CCGR1 |= CCM_CCGR1_EPIT1(3); // 假设使用EPIT1
// 配置EPIT控制寄存器(EPIT_CR)
EPIT1->CR = EPIT_CR_ENMOD | // 使能时加载初始值
EPIT_CR_CLKSRC(1) | // 选择IPG时钟
EPIT_CR_PRESCALAR(24); // 分频系数25(24+1)
设置计数器初始值与比较值
EPIT1->LR = 1000000; // 初始计数值
EPIT1->CMPR = 0; // 比较值设为0(触发中断)
中断配置与使能
// 使能EPIT中断
EPIT1->CR |= EPIT_CR_OCIEN;
// 在NVIC中注册中断
NVIC_EnableIRQ(EPIT1_IRQn);
中断服务例程示例
void EPIT1_IRQHandler(void) {
if (EPIT1->SR & EPIT_SR_OCIF) { // 检查中断标志
EPIT1->SR |= EPIT_SR_OCIF; // 清除标志
// 用户自定义处理逻辑
}
}
计算定时周期
定时周期公式: [ T = \\frac{(PRESCALAR + 1) \\times (LOAD_VALUE + 1)}{CLK_FREQ} ]
假设:
- IPG时钟频率为66MHz
- 预分频值设为24(实际分频25)
- 加载值为1,000,000
计算示例: [ T = \\frac{25 \\times 1,000,001}{66,000,000} \\approx 0.3788 \\text{秒} ]
网硕互联帮助中心


评论前必须登录!
注册