IMX6ULL笔记

IMX6ULL GPIO使用:

  1. 使能时钟
  2. 设置复用功能
  3. 设置速度,方向,中断使能,中断触发方式、上下拉方式,驱动能力
  4. 设置默认电平

 

施密特触发器:

对于标准施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位翻转为低电准位,或是由低电准位翻转为高电准位时所对应的阈值电压是不同的。

 

arm-linux-gnueabihf-ld 用来将众多的.o 文件链接到一个指定的链接位置

IMX6ULL 内部RAM 128K (0X900000~0X91FFFF)

IMX6ULL 外部RAM  起始地址都为 0X80000000,

512MB 的终止地址为 0X9FFFFFFF

256MB 容 量的终止地址为 0X8FFFFFFF

为了和uboot的链接地址一致选择链接地址为0x8780000

 

IMX6ULL Image包含内容

  1. IVT 地址向量表,存储一些地址信息
  2. Boot data 启动数据,启动地址和大小
  3. DCD 设备配置数据,重点是DRAM配置
  4. 用户bin文件

 

IMX6U 也包含中断向量表和中断向量偏移

GIC

Cotect-A7 有8个异常中断

 

Cotect-A7 的外部中断都叫IRQ中断,发生中断时,通过判断寄存器的值来确定是哪个外设发生了中断。

软中断(Software Interrupt,SWI),由 SWI 指令引起的中断,Linux 的系统调用会用 SWI

指令来引起软中断,通过软中断来陷入到内核空间

 

①、SPI(Shared Peripheral Interrupt),共享中断,顾名思义,所有(Core) 共享的中断,这个是最 常见的,那些外部中断都属于 SPI 中断(注意!不是 SPI 总线那个中断) 。比如按键中断、串口 中断等等,这些中断所有的核( Core) 都可以处理,不限定特定 核( Core)

②、PPI(Private Peripheral Interrupt),私有中断,我们说了 GIC 是支持多核的,每个核肯定

有自己独有的中断。这些独有的中断肯定是要指定的核心处理,因此这些中断就叫做私有中断。

③、SGI(Software-generated Interrupt),软件中断,由软件触发引起的中断,通过向寄存器

GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。

 

每一个 CPU 最多支持 1020 个中断 ID

  1. ID0~ID15:这 16 ID 分配给 SGI
  2. ID16~ID31:这 16 ID 分配给 PPI 
  3. ID32~ID1019:这 988 ID 分配给 SPI,像 GPIO 中断、串口中断等这些外部中断 ,至于具体到某个 ID 对应哪个中断那就由半导体厂商根据实际情况去定义了。

 

I.MX6U 的总共 使用了 128 个中断 ID,加上前面属于 PPI SGI 32 IDI.MX6U 的中断源共有 128+32=160

 

GIC 分为分发器CPU接口端

分发器

  1. 总中断
  2. 每个中断的控制
  3. 每个中断的优先级
  4. 触发模式(边沿、电平触发)
  5. 设置分组0,1

CPU接口端

  1. 使能到cpu核心的中断信号
  2. 应答中断
  3. 通知中断处理完成
  4. 设置优先级掩码
  5. 定义抢占策略
  6. 多个中断到来时,选择高优先级给cpu核

 

Cortex-A7 内核来说中断 ID 只使用了 512 GICD_ISENABLER0 bit[15:0]对应

ID15~0 SGI 中断,GICD_ISENABLER0 bit[31:16]对应 ID31~16 PPI 中断。剩下的

GICD_ISENABLER1~GICD_ISENABLER15 就是控制 SPI 中断的。

 

 

寄存器 CPSR I=1 禁止 IRQ,当 I=0 使 能 IRQF=1 禁止 FIQF=0 使能 FIQ

 

I.MX6U 支持 32 个优先级

 

猜你喜欢

转载自blog.csdn.net/u010261063/article/details/109323020