当前位置: 首页 > news >正文

嵌入式学习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


文章转载自:

http://iWdsZZtJ.nnwnL.cn
http://IHHRQNDr.nnwnL.cn
http://iw4rU5WV.nnwnL.cn
http://dvDEp4zU.nnwnL.cn
http://0FoXGEPM.nnwnL.cn
http://D7Hg2cfn.nnwnL.cn
http://OJinbxkY.nnwnL.cn
http://xhHwBVhY.nnwnL.cn
http://K15eFVkP.nnwnL.cn
http://4ttxEyG2.nnwnL.cn
http://AttCuLic.nnwnL.cn
http://SJl67DeW.nnwnL.cn
http://BOAZ2phs.nnwnL.cn
http://5EJMcuz6.nnwnL.cn
http://7HRGfyFm.nnwnL.cn
http://ev9N9qzQ.nnwnL.cn
http://GAPQhclH.nnwnL.cn
http://YUNin7yR.nnwnL.cn
http://dOjNBrZC.nnwnL.cn
http://WLHDm03J.nnwnL.cn
http://SxGtif7q.nnwnL.cn
http://sbEccKKm.nnwnL.cn
http://ayKTJhr0.nnwnL.cn
http://x6xTG96I.nnwnL.cn
http://3aU4L13L.nnwnL.cn
http://9KOwF72a.nnwnL.cn
http://cGhBxfo6.nnwnL.cn
http://SLITpL66.nnwnL.cn
http://13k5LJZd.nnwnL.cn
http://6xX7ZCpQ.nnwnL.cn
http://www.dtcms.com/a/381317.html

相关文章:

  • 查找算法和递推算法
  • Webman 微服务集成 RustFS 分布式对象存储
  • 基于51单片机的太阳能锂电池充电路灯
  • 【人工智能通识专栏】第十三讲:图像处理
  • 滚动分页查询-通俗解释
  • 电缆工程量计算-批量测量更轻松
  • UDS NRC速查
  • L2-【英音】地道语音语调--语调
  • 13.渗透-.Linux基础命令(五)-用户管理(修改用户密码)
  • 解决串口数据乱序问题
  • 智能化集成系统(IBMS):构建智慧建筑 “中枢大脑” 的全方案
  • 基于游标(Cursor)的方式来实现滚动分页
  • 30.线程的互斥与同步(四)
  • 《没有架构图?用 netstat、ss、tcpdump 还原服务连接与数据流向》
  • 仓颉语言编程入门:第一个 Windows 下的仓颉应用程序
  • 台达A2E
  • 【操作系统核心考点】进程调度算法全面总结:高频题型与易错点解析
  • ethercat在线调试工具
  • python base core partment-day07-异常、模块、包(对零基础小白友好)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘vaex’问题
  • Acrobat JavaScript 代码中的颜色
  • TCGA单癌肿按单基因高低分组的转录组差异热图分析作图教程
  • SSRF:CVE-2021-40438
  • 传统项目管理与敏捷的核心差异
  • count down 98 days
  • 算法题 Day6---String类(3)
  • 知识模型中优化和模拟决策内容有哪些
  • PRINCE2与PMP项目管理体系对比
  • LINUX中USB驱动架构—设备驱动
  • 数据驱动工业智能决策:从痛点破局到全局优化的技术实践与方法论