笔记整体梳理

1.整体框架

使能相关时钟;

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

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

笔记整体梳理_第1张图片

时钟控制模块(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的时钟树图来了解。

笔记整体梳理_第2张图片

设置寄存器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个异常中断的中断向量表如表:

笔记整体梳理_第3张图片

 其中比较重要的就只有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。
 

你可能感兴趣的:(学习)