开发板硬件:
? 开发板的内存里面各个块都是什么作用?
? 做裸机开发的时候裸机程序应该烧写到哪个地方?为什么?以及是如何被引导运行的?
裸机开发是在Nand flash?!其他区域如nor flash行么?
Keil中,启动代码***.s中的main()跳转接口地址,决定了Read/write Memory Area和Read/Only Memory Area的地址?
(是板子本身固化有一个引导程序么?是的话是存放在内存什么地方的,如何可以查看到,以及实现的具体功能是什么?)
启动代码: ******.s
引导程序时bootloader的一部分
?裸机程序可以烧写到哪些内存RAM,Nand flash, Nor flash?
国嵌点亮LED例程(其实是个引导程序,LED灯的控制写入到了引导程序)
1、编译生成可执行文件
2、使用超级终端檫除Nand flash
3、使用usb下载可执行文件到内存区域0x30000000,gboot.bin为什么不是下载到Nand flash?(貌似是因为lds链接器脚本规定的原因,.bin由.lds .s make生成,可以将gboot.bin反汇编查看启动完整流程,以及代码存放地址空间)
(可以使用J-Link commander来把我们要烧到nand flash的bin文件加载到内存0x30000000处)
使用J-Link v8和u-boot烧写裸机程序到s3c2440的nand flash(这里假设nor flash已经烧进了u-boot)
如果没有烧进u-boot,也可以先通过J-Link commander把对目标板SDRAM的初始化init.bin文件加载进SRAM(s3c2440里面的steppingstone,如果是nor启动方式的话,这个steppingstone被映射到0x40000000上,如果从nand启动的话,被映射到0x0地址上.然后设置PC值并运行它,这样SDRAM就被初始化好了.然后把u-boot.bin加载到SDRAM的某个地址处,只要不跟其他需要用到的空间重叠就行,运行u-boot。
程序计数器PC的功能
用来存放下一条指令的地址的。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指今的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令!
- GPIO接口
- GPIO相关寄存器
- GPxCON
- GPxUP
- GPxDAT
- 软件访问硬件
- 访问单个引脚
- 以总线方式访问硬件(更常见)
- 地址对齐的16位操作
- 地址不对齐的16位操作
- 8位读操作由16位拆分得到
- 32位读操作由16位组合得到
- 16位写操作
- GPIO操作实例
- GPIO相关寄存器