嵌入式系统开发-麦子学院(12)——ARM Bootloader开发

1. bootloader概述

boot 的目的:

  • 关闭看门狗,中断,MMU,cache
  • 配置系统工作时钟
  • 配置SDRAM的控制器(行地址数、列地址数、块数、周期性的充电)
  • 让sp指向可读可写的设备区间中,满足递减的规则SDRAM
    —用哪些模式,就要初始化哪些模式下的SP
    —每个模式值不能覆盖其他模式
  • 代码搬移:①搬移速度问题 ②只把存储器的一部分代码执行出来,把存储在其他位置的代码搬移到内存,对应存储器的控制器的初始化。

makefile中的链接脚本

  1. 概念: 告诉链接器如何工作的一个文本文件。

  2. 要素:
    1)哪一个.o放到代码段的起始位置
    2)所有的.放到哪个基地址
    3)代码段、数据段等等是不连续

  3. 基本语法

    	SECTIONS
    	.text 代码段
    	.rodata 只读数据段
    	.data 数据段
    

例:

SECTIONS
{
		. = 0x20008000;
		. = ALIGN(4);
		.test :
		{
			start.o
			*(.text)
		}
		. = ALIGN(4);
		.rodata :
		{
			*(.rodata)
		}
		.data :
		{
			*(.data)
		}
		.bss :
		{
			*(.bss )
		}

通信模式基本模型

  1. 通信模式的对象:底层芯片与芯片之间数据传输的一个模型
  2. 分类:
    全双工-半双工-单工;
    串行-并行
    同步-异步

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芯片的地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值