嵌入式ARM实验
arm嵌入式实验报告

arm嵌入式实验报告ARM嵌入式实验报告近年来,随着科技的不断进步,嵌入式系统在各个领域得到了广泛应用。
作为其中一种重要的嵌入式处理器架构,ARM架构以其高效能和低功耗的特点,成为了众多嵌入式系统的首选。
本实验报告将介绍我在ARM嵌入式实验中的学习和体会。
1. 实验背景和目的嵌入式系统是指将计算机技术应用于各种电子设备中,以完成特定任务的系统。
ARM架构作为一种低功耗、高性能的处理器架构,广泛应用于智能手机、平板电脑、物联网设备等领域。
本次实验的目的是通过学习ARM架构的基本原理和应用,了解嵌入式系统的设计和开发过程。
2. 实验内容本次实验主要包括以下几个方面的内容:2.1 ARM架构的基本原理首先,我们学习了ARM架构的基本原理,包括指令集、寄存器、内存管理等方面的知识。
ARM指令集具有丰富的指令种类和灵活的寻址方式,可以满足不同应用的需求。
同时,ARM处理器具有多个寄存器,用于存储和操作数据,提高了程序的执行效率。
此外,内存管理是嵌入式系统设计中非常重要的一环,ARM架构通过虚拟内存管理机制,实现了对内存的高效管理。
2.2 ARM开发工具的使用为了进行ARM嵌入式系统的开发,我们需要使用相应的开发工具。
本次实验中,我们学习了如何使用Keil MDK开发工具,进行ARM程序的编译、调试和下载。
Keil MDK提供了一套完整的开发环境,包括编译器、调试器和仿真器等,方便了我们进行ARM程序的开发和调试。
2.3 ARM嵌入式系统的设计和开发在掌握了ARM架构和开发工具的基本知识后,我们开始进行ARM嵌入式系统的设计和开发。
本次实验中,我们以一个简单的温度监测系统为例,设计了相应的硬件电路和软件程序。
硬件电路包括传感器、模拟转换电路和显示器等,用于采集和显示温度数据。
软件程序则负责控制硬件电路的运行,并将采集到的温度数据进行处理和显示。
3. 实验结果和分析通过实验,我们成功地设计和开发了一个基于ARM架构的温度监测系统。
嵌入式ARM汇编指令实验

**学院实验报告系别:计算机科学与技术专业:计算机科学与技术(网络工程方向)班级:**** 姓名(学号):************课程名称:嵌入式软件开发实验项目:实验一ARM汇编指令实验实验类型:验证型指导老师:*****实验地点:硬件实验室实验时间:2016 年5 月4 日一、实验目的(1)通过实验掌握使用idm/stm、b、b1等质量完成较为复杂的存储区访问和程序分支。
(2)学习使用条件码,加强对CPSR的认识。
二、实验设备(1)硬件:PC(2)软件:μVision3 IDE for ARM 集成开发环境。
三、实验内容(1)熟悉开发环境的使用并完成一块存储区的复制。
(2)完成分支程序的设计,要求判断参数,根据不同参数,调用不同的子程序。
四、实验操作步骤(1)建立文件夹命名为Asm2_1,建立一个新的工程命名为AsmTest2_1(2)编辑输入源代码,保存文件为asm_code1.s(3)在Project workspace工作区中右击target1 Source Group 1,在弹出菜单中选择“Add file to Group‘Source Group 1’”,在随后弹出的文件选择对话框中,选择刚才建立的源文件asm_code1.s(4)把光盘\Code\Chapter4\Asm2_1目录中的DebugINRam.ini文件复制到\Keil\ARM\Examples\EduKit2410\Asm2_1目录下。
选择菜单项Project Option for target…,将弹出工程设置对话框。
在这个工程里只需把Linker选项页的配置对话框中的R/W Base改为0x30000000即可。
(5)选择菜单项Project Build target 或快捷键F7,生成目标代码。
(6)选择菜单项Debug Start/Stop Debug Session 或快捷键Ctrl+F5,即可进入调试模式。
嵌入式ARM数据处理指令实验

实验五ARM数据处理指令实验实验目的:1、掌握基本的数据处理指令的使用方法,并能完成简单的数据处理操作;2、巩固和提高在ADS中创建工程及编写、编译和运行汇编语言程序的方法;3、学会使用桶型移位器和条件码标志。
实验环境:1、硬件:PC机。
2、软件ADS1.2。
实验内容:1、基本的数据处理指令的运用和更新状态寄存器标志位的方法;2、利用逻辑指令完成位处理的操作;3、利用调试器中各种窗口观察完成各指令操作后寄存器、存储器、标签地址、机器指令等的变化情况。
实验过程:本实验使用运算指令完成基本的算术运算以及逻辑运算,并能使用S扩展更新标志位;在AXD中调试该程序,使用ARMulator模拟目标机。
注意:本实验中所涉及的2个源代码只能分别在各自工程中调试使用,不可将两个源代码加入同一个工程中。
1、新建工程。
打开Code Warrior,选择File->New(project)选项,使用ARM Executable Image模版新建一个工程。
2、设置编译和链接选项。
由于我们使用的是模拟机,设置汇编语言编译器的模拟处理器架构为Xscale;在ARM Linker 中,选择output选项卡并选择Linktype为Simple类型,确认RO Base为0x8000如下图所示。
ARM汇编程序源文件后缀名为S大小写均可。
确保添加入当前工程复选框选上。
注意:红色部分。
4、编辑源程序代码。
算术运算指令源程序:参考程序LAB1.s :AREA LAB1,CODE,READONLYENTRYSTARTMOV R0,#0x3FMOV R1,#0x2CMOV R2,#0x10MOV R3,#0x5ADD R4,R0,R1 ;计算R4=R0+R1SUBS R5,R0,R1 ;计算R5=R0-R1并更新标志位SUBS R6,R1,R0 ;计算R6=R1-R0并更新标志位MOV R2,R2,LSL#3ADD R7,R7,R2 ;计算R7=R2+8R3STOP B STOPEND逻辑运算指令源程序:参考程序LAB2.S:;程序功能将0x3FC0 0x3DD0AREA LAB2,CODEENTRYSTARTMOV R1, #0x3FC0MOV R2, #0xFF0MOV R3, #0xDDBIC R1, R1,R2;清除0x3FC0中的对应位,使其成为0x3DD0,清除相应位运算使用BIC指令MOV R3,R3,LSL#4;通过移位,将0xDD与要替换的位域对齐ADD R1,R1,R3 ;结果放入R1STOP B STOPEND5、编译汇编源代码文件。
ARM嵌入式实验报告

A R M 嵌入式实验报告专业班级:学号:姓名:指导教师:目录一.实验步骤 (3)二.实验内容1.高八位的传送 (7)2.64位的加法 (9)3.计算10! (11)4.地址搬移 (14)三.心得体会 (18)一.实验操作步骤1.新建工程:运行Embest IDE 集成开发环境,选择菜单项File →New Workspace ,系统弹出一个对话框,键入文件名“xx”,点击OK 按钮。
将创建一个新工程,并同时创建一个与工程名相同的工作区。
此时在工作区窗口将打开该工作区和工程.。
2.建立源文件:点击菜单项File → New,系统弹出一个新的文本编辑窗,输入源文件代码。
编辑完后,保存文件“xx.s”后缀3.添加源文件:选择菜单项Project →Add To Project →Files ,在工程目录下选择刚才建立的源文件xx.s后缀文件,4.基本配置:选择菜单项Project →Settings,弹出工程设置对话框。
在工程设置对话框中。
(1)择Processor和Remote 设置对话框,进行配置:(2)选择Build---Rebuild All,编译成功。
(3)选择Project →Settings →Debug设置对话框,进行配置:5.选择菜单项Debug →Remote Connect 进行连接软件仿真器,执行Debug →Download 命令下载程序,并打开窗口View---- Debug Window---Menory,打开窗口View---- Debug Window---Registar将存储器地址改为0x00001000,按F10进行单步跟踪,观察寄存器的数据变化并分析。
二.实验内容1.编写程序将R2的高8位传送到R3的低8位,不考虑R3的其他位。
1)程序代码:.global _start_start:ldr R2,=0x18120588ldr R3,=0x13781470mov R2,R2,ROR #24and R2,R2,#0x000000ffand R3,R3,#0xffffff00orr R3,R3,R2stop:b stop.end2)程序源码下载到0x00001000,并被成功执行3)实验分析分别将18120588和13781470存入R2和R3中将R2中的高8位“18”移到R2的低8位,原来的数“18120588”变为“12058818”屏蔽掉R2中的高24位,使其不影响R3中高24位的数值屏蔽掉R3中的低8位,能将R2的低8位移到R3的低8位将R2中的高8位”18”移到R3的低8位而不影响R3中的其他的24位2、实现64位的加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中。
arm嵌入式实验报告完整版

arm嵌入式实验报告完整版篇一:ARM嵌入式系统实验报告1郑州航空工业管理学院嵌入式系统实验报告第赵成,张克新院姓专学系:名:业:号:电子通信工程系周振宇物联网工程 121309140电子通信工程系XX年3月制实验一 ARM体系结构与编程方法一、实验目的了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。
二、实验内容1.ADS1.2 IDE的安装、环境配置及工程项目的建立;2.ARM汇编语言程序设计(参考附录A):(1)两个寄存器值相加;(2)LDR、STR指令操作;(3)使用多寄存器传送指令进行数据复制;(4)使用查表法实现程序跳转;(5)使用BX指令切换处理器状态;(6)微处理器工作模式切换;三、预备知识了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。
四、实验设备 1. 硬件环境配置计算机:Intel(R) Pentium(R) 及以上;内存:1GB及以上;实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置操作系统:Microsoft Windows XP Professional Service Pack 2;集成开发环境:ARM Developer Suite (ADS)1.2。
五、实验分析1.安装的ADS1.2 IDE中包括两个软件组件。
在ADS1.2中建立 ARM Executable Image(ARM可执行映像)类型的工程,工程目标配置为 Debug;接着,还需要对工程进行目标设置、语言设置及链接器设置;最后,配置仿真环境为ARMUL仿真方式。
2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。
ARM嵌入式实验报告

实验一 ARM汇编指令使用实验——基本数学/逻辑运算一、实验目的1. 初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。
2. 通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。
二、实验设备1. 硬件:PC机。
2. 软件:ADS 1.2 / Embest IDE 200X集成开发环境。
三、实验内容1.熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。
具体实验程序如下:/* armasm1a.s */.EQU X, 45 /*定义变量X,并赋值为45*/.EQU Y, 64 /*定义变量Y,并赋值为64*/.EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/.GLOBAL _START.TEXT_START: /*程序代码开始标志*/MOV SP, #STACK_TOPMOV R0, #X /*X的值放入R0*/STR R0, [SP] /*R0的值保存到堆栈*/MOV R0, #Y /*Y的值放入R0*/LDR R1, [SP] /*取堆栈中的数到R1*/ADD R0, R0, R1STR R0, [SP]STOP: B STOP /*程序结束,进入死循环*/.END2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。
具体实验程序如下:/* armasm1b.s */.EQU X, 45 /*定义变量X,并赋值为45*/.EQU Y, 64 /*定义变量Y,并赋值为64*/.EQU Z, 87 /*定义变量Z,并赋值为87*/.EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/.GLOBAL _START.TEXT_START: /*程序代码开始标志*/MOV R0, #X /*X的值放入R0*/MOV R0, R0, LSL #8 /*R0的值乘以2的8次方 */MOV R1, #Y /*Y的值放入R1*/ADD R2, R0, R1, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/MOV SP, #0X1000STR R2, [SP]MOV R0, #Z /*Z的值放入R0*/AND R0, R0, #0XFF /*取R0的低八位*/MOV R1, #Y /*Y的值放入R1*/ADD R2, R0, R1, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/ LDR R0, [SP] /*Y的值放入R1*/MOV R1, #0X01ORR R0, R0, R1MOV R1, R2 /*Y的值放入R1*/ADD R2, R0, R1, LSR #1 /*R1的值除以2加上R0的值放入R2*/STOP: B STOP /*程序结束,进入死循环*/.END四、实验操作步骤1.新建工程。
嵌入式系统ARM实验报告

南京邮电大学通信与信息工程学院实验报告实验名称:实验一基于ADS开发环境的设计实验二嵌入式Linux交叉开发环境的建立实验三嵌入式Linux环境下的程序设计课程名称嵌入式系统B班级学号B********姓名马俊民开课时间2015/2016学年第1学期实验一基于ADS开发环境的程序设计一、实验目的1、学习ADS开发环境的使用;2、学习和掌握ADS环境下的汇编语言及C语言程序设计;3、学习和掌握汇编语言及C语言的混合编程方法。
二、实验内容1、编写和调试汇编语言程序;2、编写和调试C语言程序;3、编写和调试汇编语言及C语言的混合程序;4、编写程序测试多寄存器传送指令的用法。
三、实验原理ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。
现在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。
ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机)的开发。
ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。
1.ADS软件的组成ADS由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)、实用程序、支持软件等组成。
2.GUI开发环境ADS GUI开发环境包含CodeWarrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。
使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。
汇编语言具有一些相同的基本特征:1.一条指令一行。
2.使用标号(label)给内存单元提供名称,从第一列开始书写。
3.指令必须从第二列或能区分标号的地方开始书写。
4.注释必须跟在指定的注释字符后面,一直书写到行尾。
在ARM汇编程序中,每个段必须以AREA作为段的开始,以碰到下一个AREA 作为该段的结束,段名必须唯一。
北航ARM9嵌入式实验实验报告

实验一ARM基础知识和开发环境一、实验目的◆掌握ARM的串行口工作原理◆学习编程实现ARM的UART通讯◆掌握S3C2410寄存器配置方法二、实验内容◆熟悉打开已有工程的步骤,掌握仿真调试的方法。
◆建立一个新工程,熟练掌握编译器和链接器的设置方法。
◆从串口输入字符串,将0~9数字在超级终端上连续显示,“Enter”键换行。
◆将第三步得到的字符转换成BCD码,限制在0~1023,用于控制直流电机。
三、预备知识◆了解EW ARM集成开发环境的基本功能◆学习串口通讯的基本知识◆熟悉S3C2410串口有关的寄存器四、实验设备及工具◆硬件:ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG仿真器、串口线。
◆软件:PC机操作系统WinXP、EWARM集成开发环境、仿真器驱动程序、超级终端通讯程序。
五、实验原理及说明1)异步串行通信异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
图1-1 串行通信字符格式图1-1给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位(即双方同步信号),然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
@设置时钟 .extern clockinit bl clockinit @设置存储控制器 .extern meminit bl meminit @拷贝代码到 SDRAM 中 .extern copy ldr r0,=0x0 ldr r1,=0x30008000 ldr r2,=_bss_end bl copy @重新设置 sp 指针 ldr sp,=0x34000000 @调用 led_loop 函数 .extern led_loop ldr pc,=led_loop b. .end
Start.s 改为 .text .global _start _start: b reset b. b. b. b. b. b. b. reset: @设置 sp 指针 ldr sp,=(0x40000000+4096) @关闭看门狗 .extern disable_watchdog bl disable_watchdog
Makefile led.bin:init.o led.o led.lds arm-linux-ld -O2 -Tled.lds init.o led.o -o led.elf arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -d led.elf > led.dis init.o:init.c arm-linux-gcc -c init.c -o init.o led.o:led.s arm-linux-gcc -c led.s -o led.o clean: rm -fr led.bin led.elf *.o *~ led.dis
修改 led.s 文件名为 start.s $ cd $ mv led.s $ mv led.lds 2440_clock/ start.s clock.lds
文件名改了,链接脚本和 makefile 文件要改相应的内容: clock.lds 链接脚本修改如下: OUTPUT_FORMAT(elf32-littlearm) OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x40000000; .text :{ start.o(.text) *(.text) } .data :{ *(.data) } .bss :{ *(.bss) } }
(4)编译,得到 led.bin 烧写到开发板中,查看 LED 灯
2 查看 datasheet Watch dog Clock Memory controler
实验 2 调用 C 函数 汇编调用 C 函数 led.s .text .global _start _start: b reset b. b. b. b. b. b. b. reset: @设置 sp 指针 ldr sp,=(0x40000000+4096) @关闭看门狗 .extern disable_watchdog bl disable_watchdog @调用 ed_loop 函数 .extern led_loop bl led_loop b. .end
Led.lds OUTPUT_FORMAT(elf32-littlearm) OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x40000000; .text :{ led.o(.text) *(.text) } .data :{ *(.data) } .bss :{ *(.bss) } }
arm-linux-ld -Tled.lds delay.o led.o -o led.elf arm-linux-objcopy -O binary led.elf led.bin delay.o:delay.s arm-linux-gcc -c delay.s -o delay.o led.o:led.s arm-linux-gcc -c led.s -o led.o
实验 4 UART 串口实验
实验原理: 1 串行通信的传输式 串行通信时微电脑之间一种常见的近距离通信手段,因使用方便,编程简单 而广泛使用,几乎所有的微控制器,PC 都提供串行通信接口。
开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0” 作为起始位, 然后出现在通信在线的时字符的二进制编码数据。 每个字符的数据位长可以约定为:5 位、6 位、7 位或8 位,一般采用A SC II 编码,后面是奇偶校验位,根据约定,用奇偶校验位将所传的字符中为“1”的 位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。 最后时表示停止位的“1”信号,这个停止位可以约定连续1 位、1.5 位或2 位 的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一 段随机的时间后,下一个字符开始传送。 2 传输速率 每一个数据位的宽度定于发送波特率的倒数。微机异步串行通信中,常用的 波特率为110、150、300、600、1200、2400、4800、9600、57600、115200 等。 3 电气特性 要完成基本的通信功能,实际上只需要R X D 、TX D 和G N D 即可,但由于R S -232-C 标准所定义的高、低电平信号于S3C 2440A 系统的LV TTL 电路定义的 高、低电平信号完全不同,LV TTL 的标准逻辑“1”对应2-3. 3V ,标准逻辑“0”
UART: 115200 IIC: 100k , 400k IIS:几十 k Timer: ADC: 2.5MHZ
UPLLCON 倍频
UCLK (USB BUS )
时钟产生框图
1.内核时钟倍频 MPLL = FCLK
B 总线时钟倍频
3.FCLK 分频 HCLK 和 PCLK
在实验 2 的基础上进行修改; 拷贝 2440_led 目录到 2440_clock $ cp 2440_led 2440_clock -a
Makefile 修改如下: clock.bin:init.o start.o clock.lds arm-linux-ld -O2 -Tclock.lds init.o start.o -o clock.elf arm-linux-objcopy -O binary clock.elf clock.bin arm-linux-objdump -d clock.elf > clock.dis init.o:init.c arm-linux-gcc -c init.c -o init.o start.o:start.s arm-linux-gcc -c start.s -o start.o clean: rm -fr clock.bin clock.elf *.o *~ clock.dis
在 init.c 文件中添加一个时钟初始化函数 #define rLOCKTIME (*(volatile unsigned *)0x4c000000) #define rMPLLCON (*(volatile unsigned *)0x4c000004) #define rCLKDIVN (*(volatile unsigned *)0x4c000014) void clockinit(void) { rLOCKTIME=0xFFFFFF; rCLKDIVN=(0x2<<1)|(1); //FCLK:HCKL:PCLK=1:4:8 rMPLLCON=(0x7f<<12)|(0x2<<4)|0x1; //FCLK 405M return; }
for(i=0;i<d;i++); return ; } void led_loop(void) { GPBCON=GPBCON&~(0xff<<10)|(0x55<<10); while(1) { delay(3000); GPBDAT&=~(0xf<<5); delay(3000); GPBDAT|=(0xf<<5); } }
在 start.s 中调用这个函数 @设置时钟 .extern clockinit bl clockinit 烧写察看效果
实验 3 SDRAM 实验 实验原理:
2440 物理内存布局图 ;
添加存储控制器的初始化函数 在 init.c 文件中添加一个函数如下: void meminit(void) { volatile unsigned long *p=(volatile unsigned long*)0x48000000; p[0]= 0x22111110; p[1]= 0x00000700; p[2]= 0x00000700; p[3]= 0x00000700; p[4]= 0x00000700; p[5]= 0x00000700; p[6]= 0x00000700; p[7]= 0x00018005; p[8]= 0x00018005; p[9]= 0x008e0459; p[10]= 0x000000B2; p[11]= 0x00000030; p[12]= 0x00000030; return; } BANK6-7 设置好之后,可以使用 SDRAM ( 0x30000000 0x34000000),可以 将代码从 flash 拷贝到内存中; 在 init.c 中添加一个代码拷贝函数; /* 将 psource 指向的数据拷贝到 pdest 中,拷贝的大小是 plimit-pdest */ void copy(unsigned char *psource, unsigned char *pdest, unsigned char *plimit) { while(pdest<plimit) { *pdest++ = *psource++; } }
实验 3 时钟设置 实验原理:
HCLK 高速总线时钟 (AHB bus) 12MHZ 晶振 MPLLCON 倍频 FCLK 内核时钟 (ARM920T) 405MHZ CLKDIVN 分频 中断控制器 存储器控制器 LCD 控制器 Nand flash DMA 控制器