第07课 系统时钟和UART实验

第7课系统时钟,串口UART实验 对应课本第10章第11章

1. S3C2440系统时钟

异常

2. 串口操作方法

 

3. 源码分析

 

 PC机的CPU可以跑1G,2G内存可能只能跑133M

 

同样道理开发板CPU最高能跑400M   ------------àFCLK

SDRM:100M~133M------------àHCLK

UART与定时器 50M------------àPCLK

 

 

第07课 系统时钟和UART实验_第1张图片

 

2440 soc system on chip

因为一块chip上集成cpu, 存储管理器,uart, i2c等偏上外设。

第07课 系统时钟和UART实验_第2张图片原理图上2440外接12M晶振,

通过设置PLL(锁相环),把晶振12M变成400M

400M再通过某个寄存器分频100M,50M等等满足不同的频率。

 

第07课 系统时钟和UART实验_第3张图片

MPLL 的M指的是Main

PLL需要时间设定不是瞬间完成的,所以有锁定时间

第07课 系统时钟和UART实验_第4张图片

关看门狗后初始化时钟 clock_init

 

第07课 系统时钟和UART实验_第5张图片

MPLL是指主时钟

UPLL指的是USB时钟

第07课 系统时钟和UART实验_第6张图片

时钟初始化函数

第07课 系统时钟和UART实验_第7张图片

MPLLCON就是负责记载分频信息的寄存器。

第07课 系统时钟和UART实验_第8张图片

芯片手册上记载着分频的公式

 

PC上怎么用串口

  1. 确定用哪个串口
  2. 设置波特率,流控
  3. 打开
  4. 发/收

对应到开发板

  1. 初始化

把引脚设为UART模式

第07课 系统时钟和UART实验_第9张图片

什么是FIFO (First-In-First-Out )

如果使用FIFO,比如接收器使用FIFO,接收到得数据存储到Buffer得最低端,这样提取数据时就会先提取先接收到得数据。

第07课 系统时钟和UART实验_第10张图片

第07课 系统时钟和UART实验_第11张图片

FIFO寄存去控制buffer里有多少个数据时发生中断。

第07课 系统时钟和UART实验_第12张图片

本节程序的连接脚本

位置无关码

  1. 这个程序“应该”放在0x30000000 ()
  2. 程序烧到nand flash上(4k)内容,一上电的时候4k内存被复制到2440的片内内存里,程序运行的时候应该放在 SDRAM(0x30000000),但是由于硬件机制,一开始程序在片内内存的0地址,做以下工作: 初始化SRAM,关看门狗等等,把自己拷贝到 SDRAM里。
  3. 第07课 系统时钟和UART实验_第13张图片
  4. 第07课 系统时钟和UART实验_第14张图片

位置无关码

举个例子,以下是reset的反汇编

第07课 系统时钟和UART实验_第15张图片

bl disable_watch_dog的PC值是3000 0004

bl 就属于一种位置无关码,新的PC值等于现PC值+8(ARM架构决定)+偏移。由此计算出偏移是3000 000C 与 3000 0034的差0x28

翻阅 S3C2440A的使用手册可以看出机器码格式

对应的机器码是

eb00 000a,1110 101 1(1代表bl,0代表b),offset代表偏移量,

offset要左移两位才是真正的地址a左移两位编程0x28。

 

位置相关码

把程序改成位置相关的:

ldr pc, =disable_watch_dog

pc的地址等于disable_watch_dog的编译地址,但是这个地址SDRAM还没有初始化,随意程序会崩溃。

 

怎么写位置无关码:

  1. 跳转用b,bl指令
  2. C语言:不用全局变量,静态变量

把程序copy到SDRAM之后就没有限制了不需要用位置无关码

你可能感兴趣的:(JZ2440韦东山视频教学笔记)