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

嵌入式 - ARM6

一、按键

1. 初始化

key.c

手册C32 - IOMUXC

1. 复用功能配置

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. 电器特性配置

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. 引脚方向

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.

2. 开关检测

Chapter 28:General Purpose Input/Output (GPIO)
GPIOx_DR:开关断开高电平,开关按下低电平

二、中断

1. GIC介绍

1. 概念

通用目的的中断控制器(Generic Inierrupt Controller)

硬件 -> GIC -> 处理器

中断源 -> 中断控制器GIC -> 中断处理器 内核kernal

手册:裸机 - 中断 - GIC

VFIQ:V:虚拟的

2. GIC内核

GIC手册 - GIC Partitioning

中断源:0-15         SGI        软件中断

              16-31        PPI        私有的外设中断

              32-1019    SPI        可设置的外设中断

2. 中断配置

1. 外设终端

头文件core_ca7.h中

IRQn_Typr:0- 159 外设终端中

C_CTLR

C_IAR                中断通知寄存器

C_EOIR             中断结束寄存器

2.协处理器

cp0 - cp15       主要使用cp10.11.15 coprocessor

手册A7架构参考手册 - 4.System Control

1. c0 - MIDR

2. c1 - SCTLR4

mrc p15,0,r0,c1,c0,0
bic r0, r0, #(1 << 13)
orr r0, r0, #(1 << 12)
mcr p15,0,r0,c1,c0,0

3. c12 - VBAR

配置成0后可以修改该寄存器重新映射到其他地址

头文件MCIMX6Y2.h中

GPIO1_Combined_16_31_IRQn        =99

__get_VBAR(0x87800000);

4. c15 - CBAR

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

3. 获取GIC基地址

1. MRC / MCR       
MRC<c> <coproc>, <opc1>, <Rt>, <CRn>, <CRm>{, <opc2>}
mrc p15, 4, r0, c15, c0, 0                参数对应cp15内容

异常向量表基地址映射 iche打开

mrc p15, 0, r0, c1, c0, 0                参数对应cp1内容,修改异常向量表映射方式
bic r0, r0, #(1 << 13)                       bit13位为V清零,VBAR配置中断向量基地址
orr r0, r0, #(1 << 12)                       bit12位为I 置一,iche使能位打开
mcr p15, 0, r0, c1, c0, 0

2. 步骤

中断源 -> 中断控制器GIC -> 中断处理器 内核kernal

手册C28(外设) - GPIOx - ICR1 / ICR2 / IMR

1. 中断源

1. 中断触发方式       

        GPIO->ICR2 |= (3 << 4)

2. 中断屏蔽解除

        GPIO->IMR |= (1 << 18)

3. 中断状态寄存器

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

2. GIC

1.GIC初始化
GIC_Init();

2.中断使能
GIC_EnablelRQ(GPI01_Combined_16_31_IRQn);

3.GIC基地址获取
mrc p15, 4, r1, c15, c0, 0

4.获取中断号
// C_IAR:Base+0x200C
add r1,r1,#0×2000
[dr r0, [r1, #0x0C]

5.中断标志清理
// C_EOIR:Base+0x2010
str r0, [r1, #0x10]3. 

3. 内核处理器

1.异常向量表基地址和开启ICache
mrc p15, 0, r0, c1, c0, 0
bic r0, r0,#(1 <<13)
orr r0, r0, #(1 <<12)
mcr p15, 0, r0, c1, c0,0
_set_VBAR(0x87800000);

2.中断向量
sub lr, lr,#4
stmfd sp!, {r0-r12, lr)

mrc p15, 4, r1, c15, c0, 0
add r1, r1, #0x2000
ldr r0,[r1, #0x0C]

stmfd sp!, {r0, r1}
cps #0x1F//中断嵌套

stmfd sp!,{lr}
bl system_interrupt_hander
ldmfd sp!, {lr}

cps #0x12
ldmfd sp!, {r0, r1}

str r0,[r1, #0x10]
ldmfd sp!, {r0-r12, pc}^

3.中断总服务函数
void system_interrupt_hander(unsigned int irq)
{
if (irq == GPI01_Combined_16_31_IRQn)
{
if ((GPI01->ISR &= (1 <<18)) != 0)
{
led_flicker();
GPI01->ISR = (1 <<18);
}
}
}


文章转载自:

http://3YslJVVN.rgrys.cn
http://rqbyDqOh.rgrys.cn
http://PVuXkOGf.rgrys.cn
http://wlnzfEWM.rgrys.cn
http://l9h5wRAd.rgrys.cn
http://1xUwyR7L.rgrys.cn
http://K4Ugsc1f.rgrys.cn
http://IgBG3DLU.rgrys.cn
http://Uu316fqY.rgrys.cn
http://GURvKeBG.rgrys.cn
http://82OnYk6n.rgrys.cn
http://jPItSaM0.rgrys.cn
http://XJpIJJRg.rgrys.cn
http://q1wResti.rgrys.cn
http://u1qt0Lea.rgrys.cn
http://i4PIilyp.rgrys.cn
http://BaxdQfWf.rgrys.cn
http://3HDitf5J.rgrys.cn
http://i6mE1CgC.rgrys.cn
http://DZ1Hmfof.rgrys.cn
http://KCTbc9L0.rgrys.cn
http://t8qU2EpD.rgrys.cn
http://9GCPm01D.rgrys.cn
http://vTfN7bvG.rgrys.cn
http://KF9oqme2.rgrys.cn
http://VycTvn7h.rgrys.cn
http://wLbZpHFI.rgrys.cn
http://rgAle4ih.rgrys.cn
http://9yFXmJ6O.rgrys.cn
http://ZjoKfBw1.rgrys.cn
http://www.dtcms.com/a/381034.html

相关文章:

  • uniapp | 快速上手ThorUI组件
  • 容器使用绑定挂载
  • 智能排班系统哪个好?从L1到L4,AI排班软件选型指南
  • CentOS7.9 离线升级内核
  • 杨辉三角**
  • Android「Global / Secure / System」三大命名空间全局设置项总结
  • 【嵌入式】【科普】运动控制岗位相关职责
  • 期货盘后空开是认购期权行权?
  • 【一天一个Web3概念】Web3.0赛道分析:新一轮技术浪潮下的机遇与挑战
  • HMI界面设计:9个工业触摸屏原型案例合集与核心要点解析
  • 【一天一个Web3概念】从 Web1.0 到 Web3.0:互联网的三次演进与未来趋势
  • EMG肌电信号可视化系统【附源码】
  • 解读HRV与认知负荷
  • 打工人日报#20250912
  • 有度新版本:待办全新升级、企业互联、自带数据库...协作体验更佳!
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(29):文法運用第9回3+(考え方11)
  • 【Vue2 ✨】Vue2 入门之旅 · 进阶篇(八):Vuex 内部机制
  • 【LeetCode】33. 搜索旋转排序数组
  • 【代码随想录day 25】 力扣 46. 全排列
  • Java JUC并发集合详解:线程安全容器完全指南
  • 流畅的Python(二) 丰富的序列
  • DPO vs PPO,偏好优化的两条技术路径
  • clickhouse的UInt64类型(countIf() 函数返回)
  • 算法之线性基
  • GlobalBuildingAtlas 建筑物白模数据下载
  • 用pywin32连接autocad 写一个利用遗传算法从选择的闭合图形内进行最优利用率的排版 ai草稿
  • 性能测试工具JvisualVM/jconsole使用
  • 面试题:Redis要点总结(性能和使用)
  • 无卡发薪系统:灵活用工全链条协同的核心枢纽( “数据互通、流程联动” 为核心,将人力招聘、劳务结算、电子合同签约、保险投保深度整合,构建灵活用工管理闭环。)
  • 万物皆可PID:深入理解控制算法在OpenBMC风扇调速中的应用