嵌入式学习day48-硬件-imx6ul-key、中断
1.硬件介绍
(1)两红一黄三个开关,中间是复位按钮,左边低功耗按钮,右边为允许用户独立控制的试验按键
(2)原理图分析:开关断开高电平,开关按下低电平
2.编写按键代码(轮训方式)
(1)查阅手册
参考文档: 1. IMX6ULL_MINI_V2.2(Mini底板原理图).pdf
2. IMX6ULL参考手册.pdf
(1)初始化
(1)复用功能配置
Chapter 32:IOMUX Controller (IOMUXC)
IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B: 低四位(0101)
IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);
SION(信号监控)1: 0 //0 DISABLED — Input Path is determined by functionality
MUX_MODE(复用功能)4: 0101//ALT5 — Select mux mode: ALT5 mux port: GPIO1_IO03 of instance: gpio1
(2)电气特性
Chapter 32:IOMUX Controller (IOMUXC)
IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B
IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0xF080);
HYS(压摆率)1: 0 //0 HYS_0_Hysteresis_Disabled; 输入 不开启
PUS(上拉或者下拉)2: 11 // PUS_3_22K_Ohm_Pull_Up — 22K Ohm Pull Up
PUE(拉与保持选择)1: 1 //选择拉
PKE(拉或保持使能)1: 1 //使能
ODE(漏极开漏)1: 0 //使能
SPEED(速度)2: 10 //SPEED_2_medium_100MHz_ — medium(100MHz)
DSE(驱动能力)3: 000 //DSE_0_output_driver_disabled_ — output driver disabled; 输出是才有用,所以关闭
SRE()0: 0 //SRE_0_Slow_Slew_Rate — Slow Slew Rate
(3)GPIO方向寄存器(GPIO1_18)
Chapter 28:General Purpose Input/Output (GPIO)
GPIOx_GDIR
GPIO1->GDIR &= ~(1 << 18);
0 INPUT — GPIO is configured as input.
1 OUTPUT — GPIO is configured as output.
(4)GPIO工作时钟(GPIO1_18)
Chapter 18:Clock Controller Module (CCM)
打开CCM Clock Gating Register
CCM_CCGR1: GPIO1组所有引脚共用该CG门;
(2)运行时开关检测
(1)GPIO数据寄存器(GPIO1_18)
Chapter 28:General Purpose Input/Output (GPIO)
GPIOx_DR:开关断开高电平,开关按下低电平
(3)提出问题:当主轮询承担大量的、复杂的、耗时的业务时轮训方式则会存在漏查问题;
利用delay函数模拟大量复杂业务,观察现象。
举例这种延迟出现在实时性要求较高的场景,例如:汽车刹车。
delay(0x7FFFFF);
3.中断方式:
(1)中断:CPU能打断当前正在进行的工作,去处理更为紧急的任务,并且在处理完中断任务后,能回到原先的地方继续工作
(2)中断流程
(1)中断源发出中断请求。
(2)CPU检查是否响应中断以及该终端是否被屏蔽。
(3)检查当前产生的中断的中断优先级。
(4)保护现场
(5)执行中断服务函数
(6)恢复现场
kernal:被打断的
外设: 发出中断
GPIO发出的中断:外部中断(EINT)
(3)中断控制器GIC
GIC(Generic Interrupt Controller):通用的中断控制器
(1)查阅手册
I.参考文档:《ARM Generic Interrupt Controller(ARM GIC控制器)V2.0.pdf》
(1)23.page
V2.0设计可以为8个内核提供中断控制服务,但我们使用的IMX6ULL只有一个内核,图中所示只有processor 0
每个内核能够相应1020个中断源,其中0~15是SGI,16~31是PPI,能够作为外设中断源的是SPI32~1019
(2)Distributor(分发器):
(1)SGI(Software-generated Interrupt),软件中断:
由软件触发引起的中断,通过向寄存器GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。
(2)PPI(Private Peripheral Interrupt),私有中断:
我们说了 GIC 是支持多核的,每个核肯定有自己独有的中断。这些独有的中断肯定是要指定的核心处理,因此这些中断就叫做私有中断;
(3) SPI(Shared Peripheral Interrupt),共享中断:
(注意!不是 SPI 总线那个中断),这类中断泛指所有的
(3)CPU interface x(CPU接口0-7):
II.参考文档:《IMX6ULL参考手册.pdf》
(1)3.2 Cortex A7 interrupts
Table 3-1. ARM Cortex A7 domain interrupt summary
中断编号:0 - 128
III.参考文档:《MCIMX6Y2.h》
IRQn_Type:0-159 外设中断;
(4)协处理器(coprocrssor):cp0-cp15
Cortex-A7技术参考手册:《Cortex-A7 Technical ReferenceManua.pdf》
位置:章节4 System Control
协处理器cp15:负责与存储类相关任务
(1)功能
• Overall system control and configuration. (所有系统控制与配置)
• Memory Management Unit (MMU) configuration and management.(MMU的配置与管理)
• Cache configuration and management. (Cache的配置与管理)
• Virtualization and security. (虚拟化和安全设置)
• System performance monitoring. (系统性能监视)
(2)寄存器组:c0-c15
• c0 registers on page 4-4.
• c1 registers on page 4-5.
• c2 registers on page 4-6.
• c3 registers on page 4-6.
• c4 registers on page 4-6.
• c5 registers on page 4-7.
• c6 registers on page 4-7.
• c7 registers on page 4-8.
• c8 registers on page 4-10.
• c9 registers on page 4-11.
• c10 registers on page 4-12.
• c11 registers on page 4-12.
• c12 registers on page 4-13.
• c13 registers on page 4-13.
• c14 registers on page 4-13.
• c15 registers on page 4-14.
(3)cp15寄存器读写
读 MRC<c> <coproc>, <opc1>, <Rt>, <CRn>, <CRm>{, <opc2>}
写 MCR<c> <coproc>, <opc1>, <Rt>, <CRn>, <CRm>{, <opc2>}
(4)中断相关寄存器组
c0 registers:
MIDR(Main ID Register):存储内核的一些基本信息
c1 registers:
SCTLR(System Control Register):
bit13:V
0 Normal exception vectors, base address 0x00000000. Software can remap this base address using
the VBAR.
1 High exception vectors, base address 0xFFFF0000. This base address is never remapped.
bit12:I
0 Instruction caches disabled, this is the reset value.
1 Instruction caches enabled.
demo:
mrc p15,0,r0,c1,c0,0
bic r0, r0, #(1 << 13)
orr r0, r0, #(1 << 12)
mcr p15,0,r0,c1,c0,0
c12 registers:
VBAR(Vector Base Address Register):
demo:
__get_VBAR(0x87800000);
c15 registers:
CBAR(Configuration Base Address Register):Holds the physical base address of the memory-mapped GIC registers.
demo:
mrc p15, 4, r0, c15, c0, 0