1. bootloader概述
boot 的目的:
- 关闭看门狗,中断,MMU,cache
- 配置系统工作时钟
- 配置SDRAM的控制器(行地址数、列地址数、块数、周期性的充电)
- 让sp指向可读可写的设备区间中,满足递减的规则SDRAM
—用哪些模式,就要初始化哪些模式下的SP
—每个模式值不能覆盖其他模式 - 代码搬移:①搬移速度问题 ②只把存储器的一部分代码执行出来,把存储在其他位置的代码搬移到内存,对应存储器的控制器的初始化。
makefile中的链接脚本
-
概念: 告诉链接器如何工作的一个文本文件。
-
要素:
1)哪一个.o放到代码段的起始位置
2)所有的.放到哪个基地址
3)代码段、数据段等等是不连续 -
基本语法
SECTIONS .text 代码段 .rodata 只读数据段 .data 数据段
例:
SECTIONS
{
. = 0x20008000;
. = ALIGN(4);
.test :
{
start.o
*(.text)
}
. = ALIGN(4);
.rodata :
{
*(.rodata)
}
.data :
{
*(.data)
}
.bss :
{
*(.bss )
}
通信模式基本模型
- 通信模式的对象:底层芯片与芯片之间数据传输的一个模型
- 分类:
全双工-半双工-单工;
串行-并行
同步-异步
UART:异步串行全双工总线。
中断流程
中断控制器:中断源管理,把多个中断源通过选择或者优先级比较,给CPU核心触发对应信号的一个工作。
中断向量表:中断源,优先级
S5PV210下利用中断实现按键代码
key.h
#ifndef KEY_H
#define KEY_H
void key_init(void);
void key1_handler(void);
#endif
key.c
#include “cpu_io.h”
#include “gpio.h”
#include “key.h”
void key_init(void)
{
struct s5pv210_gph_bank *gph2_base = (struct s5pv210_gph_bank)
unsigned int var;
/*外部引脚进行功能选择,EINT*/
var = readl(&gph2_base->con);
var |=(0xf<<0);
writel(var,$gph2_base->con);
/*配置EINT功能*/
EXT_INT_2_CON &= ~(0x7<<0);
EXT_INT_2_CON |= (0x2<<0);
EXT_INT_2_MASK &= ~(0x1<<0);
/*配置主中断控制器*/
VIC0INTENABLE |= (0x1<<16);
}
I2C
IIC协议特点
通用IIC结构
IIC 总线是半双工串行同步总线。
IIC协议不是软件定义的协议,而是硬件规范。
为避免传输过程中状态与开始结束状态一致,数据传递时,SCL 为低电压时,SDA才能发生跳变,SCL为高电压时,SDA必须保持。
IIC芯片的地址