哈喽各位小伙伴!上一篇带着大家从零创建了简易工程模板,项目框架已经搭建完毕啦。为了让大家对整体的工程有个大致了解,今天对整个工程模板做一个大致的讲解。
(一)src文件夹文件结构及主要内容
系统文件结构如下:
- 复位与启动配置:flashrchw.c
- 系统时钟与模式初始化:mode_entry.c
- 中断系统初始化:MPC57xx_Interrupt_Init.c、Vector.c
- 中断服务与向量分发:intc_SW_handlers.S、intc_SW_mode_isr_vectors_MPC5744P.c
- 外设与应用代码:main.c、peripherals/文件夹下的外设驱动
片上外设文件结构:
就是添加片上外设驱动的.c和.h文件,目前还没开始写,就只有一个adc.c(这个后续也会重新写)
文件如下图:
(二)主函数
先进行初始化,调用了下面这几个函数。
xcptn_xmpl():是中断初始化代码的入口,会配置 IVPR/IVOR、开启中断控制器,是中断系统初始化的总入口。在后续文章中将单独写一个章节对中断进行讲解
peri_clock_gating();开启外设时钟门控,让 ADC 等外设获得时钟信号
system160mhz();系统时钟配置:通过 PLL 配置系统时钟为 160MHz,配置分频器和工作模式。时钟配置详见下一章节。
关于外设时钟门控的配置,并不复杂,就相当于,每多添加一个片上外设的时候,就得给这个外设开一扇门,门打开才能接收到系统传输过来的时钟信号,但是系统的时钟信号是如何传输过来的,需要另行配置。例如:
我现在要使用ADC1外设,那么我应该将MC_ME_PCTL126寄存器与RUN_PC[1]配置到一起,查看手册MC_ME_PCTL126寄存器
将MC_ME_PCTL126的RUN_CFG位配置位001,就选择了RUN_PC[1]的配置
代码如下:
void peri_clock_gating (void) { MC_ME.RUN_PC[0].R = 0x00000000; /* gate off clock for all RUN modes */ MC_ME.RUN_PC[1].R = 0x000000FE; /* enable peri clock for all RUN modes*/ /* Note: RUN_PC0 is default cfg for PCTLs*/ MC_ME.PCTL126.R = 0X00000001; }当然,新添一个外设模块没这么省事,还需要在时钟配置里配置时钟(时钟选择、时钟频率等),这里只是讲一下时钟门的配置。
初始化完了就执行主循环里的代码了。
下一章节开始讲MPC5744P的时钟配置。