【DAY34】基于 IMX6ULL 的嵌入式系统底层开发:中断、时钟与定时器配置

一、中断

CPU打断当前正在运行的程序,保存现场去处理紧急事件,处理结束后,回到保存的现场继续向下执行

中断流程

中断源发出中断请求。

CPU检查是否响应中断以及该中断是否被屏蔽。

检查当前产生的中断的中断优先级。

保护现场

执行中断服务函数

恢复现场

中断源:

1.配置中断触发方式:GPIOx_ICR2

GPIO1->ICR2 |= (3 << 4);

2.解除中断屏蔽:GPIOx_IMR

GPIO1->IMR |= (1 << 18);

3.判断中断状态

if((GPIO1->ISR &(1 << 18)) != 0 )

{

led_on();

GPIO1_ISR |= (1 << 18);

}

中断标记寄存器,写1清零(高电平,充电清零)

GIC

中断控制器GIC

GIC(Generic Interrupt Controller):通用的中断控制器

1.GIC初始化

GIC_Init();

2.设置GIC中断优先级

GIC_SetPriority(GIO_Combined_)

3.设置GIC中断使能

调用库中的函数

GIC_EnableIRQ

4.获取GIC寄存器组的基地址

mrc p15, 4, r0, c15, c0, 0

5.获取中断通知寄存器的值

C_IAR: base + ffset 0x200C

add r0, r0, 0x2000

ldr r1, [r0, 0x0C]

6.清除中断结束寄存器的标志

C_EOIR:bass + offset 0x2010

str r1, [r0, #0x10]

协处理器(coprocrssor\cp)

二、PLL、Prescaler、PFD

24MHz:1秒内有24*1000*1000个周期方波

1.PLL:锁相环电路(phare locked loop)

只能升频

倍频因子最小为1

2.Prescaler:预分频器

只能降频

3.PFD:相位分数分频器(Phase Fractional Divices)

可以升频、降频


配置

ARM PLL配置流程

  • 切换临时时钟源
  • 将PLL1短路,进入旁路模式
  • 让ARM暂时工作在24MHz
  • 设置PLL参数
    • ·据公式配置倍频因子
  • 退出旁路然后锁定
  • 切换到PLL 输出

IMX6ULL中有7个PLL、8个PFD

三、EPIT、GPT

EPIT(Enhanced Periodic Interrupt Timer)增强型周期中断定时器

GPT(General Purpose Timer):通用目的定时器
输入捕获和比较输出

特性 EPIT(增强型周期中断定时器) GPT(通用目的定时器)
计数方向 向下计数 向上计数
时钟源 IPG、IPG_32K、IPG_HIGHfreq(3 选) IPG、IPG_32K、IPG_HIGHfreq、外部时钟(4 选)
分频器 12 位(1~4096 分频) 12 位(1~4096 分频)
工作模式 Set-and-forget(自动重载)、Free-running Restart(重启)、Free-running(自由运行)
中断类型 比较中断、计数到 0 中断 溢出中断、2 路输入捕获、3 路输出比较
典型应用 精准周期中断、定时任务调度 延时函数、信号脉宽 / 频率测量、PWM 输出
相关推荐
DA02212 小时前
系统移植-STM32MP1_U-Boot移植
单片机·bsp·系统移植
不怕犯错,就怕不做3 小时前
Linux中的IS_ENABLED 函数实战使用demo
linux·驱动开发·嵌入式硬件
ytttr8733 小时前
MAX31856热电偶采集芯片参考代码(STM32实现)
stm32·单片机·嵌入式硬件
jghhh013 小时前
九齐单片机2路PWM控制输出实现指南
单片机·嵌入式硬件
电气_空空4 小时前
基于 LabVIEW 串口通信的研究
单片机·嵌入式硬件·毕业设计·labview
电气_空空4 小时前
基于 LabVIEW 的 PID 控制系统设计与实现
嵌入式硬件·毕业设计·labview
weixin_456808384 小时前
【沁恒蓝牙开发】关闭独立看门狗
c语言·单片机·嵌入式硬件
weixin_456808384 小时前
【沁恒蓝牙开发】拓展广播 Code PHY-从机
c语言·嵌入式硬件
LCG元4 小时前
STM32实战:基于DHT11的智能温湿度监测与OLED显示
stm32·单片机·嵌入式硬件