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

笔记整体梳理

1.整体框架

使能相关时钟;

这一部分现在是将所有外设时钟都打开了,不需要因为GPIO而去配置相关时钟的开闭。

但是默认配置下,开发板的工作频率为396MHz,但其实可以对其时钟进行配置,调整成我们想要的频率。不同外设的时钟源不同,NXP将这些时钟源分成了7组。

20211109163704

时钟控制模块(CCM)在设计中产生和控制各个模块的时钟,并管理低功率模式。此模块使用可用的时钟源来生成时钟根目录。

        时钟控制器模块控制以下功能:

使用可用的时钟源生成时钟根芯片的各个部分:
PLL1也称为ARM PLL
PLL2也称为系统PLL
PLL3也称为USB1 PLL
PLL4也称为音频PLL
PLL5也也称为视频PLL
PLL6也称为ENET PLL
PLL7也称为USB2 PLL(这个PLL只由USBUTM接口通过直接连接)。
使用可编程的位来控制时钟根的频率。
控制低功耗机构。
为LPCG提供门控时钟的控制信号。
提供了与SRC的握手,以实现重置性能。
提供了与GPC的握手,以支持电源门控操作。

 所有外设对于时钟的选择可以通过I.MX6U的时钟树图来了解。

20211109172530

设置寄存器IOMUXC_SW_MUX_CTL_PAD_XX_XX

设置IO的复用功能,使其复用为GPIO功能。


设置寄存器IOMUXC_SW_PAD_CTL_PAD_XX_XX,

设置IO的上下拉、速度等等。


第②步已经将IO复用为了GPIO功能,所以需要配置GPIO,设置输入/输出、是否使用中断、默认输出电平等。

Cortex-A7中断系统

中断系统是一个处理器重要的组成部分,中断系统极大的提高了CPU的执行效率。
Cortex-A7内核有8个异常中断,这8个异常中断的中断向量表如表:

 其中比较重要的就只有IRQ中断,整体的裸机开发也只有使用了这一个中断。

中断ID

中断源有很多,为了区分这些不同的中断源肯定要给他们分配一个唯一ID,这些ID就是中断ID。每一个CPU最多支持1020个中断ID,中断ID号为ID0~ID1019。这1020个ID包含了PPI、SPI和SGI,那么这三类中断是如何分配这1020个中断ID的呢?这1020个ID分配如下:

ID0~ID15:这16个ID分配给SGI。

ID16~ID31:这16个ID分配给PPI。

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

GIC逻辑分块

 GIC架构分为了两个逻辑块:Distributor和CPU Interface。

Distributor(分发器端):此逻辑块负责处理各个中断事件的分发问题,也就是中断事件应该发送到哪个CPU Interface上去。分发器收集所有的中断源,可以控制每个中断的优先级,它总是将优先级最高的中断事件发送到CPU接口端。分发器端要做的主要工作如下:

①、全局中断使能控制。

②、控制每一个中断的使能或者关闭。

③、设置每个中断的优先级。

④、设置每个中断的目标处理器列表。

⑤、设置每个外部中断的触发模式:电平触发或边沿触发。

⑥、设置每个中断属于组0还是组1。

CPU Interface(CPU接口端):CPU接口端听名字就知道是和CPU Core相连接的,每个CPU Core都可以在GIC中找到一个与之对应的CPU Interface。CPU接口端就是分发器和CPU Core之间的桥梁,CPU接口端主要工作如下:

①、使能或者关闭发送到CPU Core的中断请求信号。

②、应答中断。

③、通知中断处理完成。

④、设置优先级掩码,通过掩码来设置哪些中断不需要上报给CPU Core。

⑤、定义抢占策略。

⑥、当多个中断到来的时候,选择优先级最高的中断通知给CPU Core。
 

相关文章:

  • 【题解】同济线代习题一.6.3
  • MATLAB算法实战应用案例精讲-【智能优化算法】黑寡妇算法-BWO(附matlab代码)
  • 云原生之容器编排实践-minikube传递秘钥使用阿里云私有镜像仓库
  • 【React Scheduler源码第一篇】哪些API适合用于任务调度
  • 【笔记:模拟MOS集成电路】偏置电路(基本原理+结构分析)
  • 【第六章 final、abstract】
  • 【JavaEE初阶】文件操作 和 IO (上篇)
  • Spring教程-01-IOC控制反转
  • Spring Cloud Gateway过滤器配置
  • Tomcat服务
  • REDIS05_SpringBoot整合redis、RedisTemplate操作各个基本类型、工具类的抽取
  • Sentinel的安装与配置
  • 生命周期函数
  • Go语言学习笔记——正则表达式
  • 无线传感器网络数据压缩与融合及安全机制的matlab仿真
  • python3.6+scrapy+mysql 爬虫实战
  • Intervention/image 图片处理扩展包的安装和使用
  • Java|序列化异常StreamCorruptedException的解决方法
  • js
  • Linux CTF 逆向入门
  • Python学习之路16-使用API
  • React的组件模式
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue实战(四)登录/注册页的实现
  • 安装python包到指定虚拟环境
  • 老板让我十分钟上手nx-admin
  • 如何实现 font-size 的响应式
  • 一、python与pycharm的安装
  • 用jquery写贪吃蛇
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 如何在招聘中考核.NET架构师
  • #if和#ifdef区别
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net 应用中使用dot trace进行性能诊断
  • .net下的富文本编辑器FCKeditor的配置方法
  • .net中的Queue和Stack
  • @Autowired多个相同类型bean装配问题
  • [04]Web前端进阶—JS伪数组
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [ACTF2020 新生赛]Include
  • [Android Pro] AndroidX重构和映射
  • [BJDCTF2020]The mystery of ip
  • [bzoj1912]异象石(set)
  • [cb]UIGrid+UIStretch的自适应
  • [FTP]pureftp部署和优化
  • [HNOI2010]BUS 公交线路
  • [Java] IDEA Scala环境搭建
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍