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

本文围绕嵌入式开发展开,介绍了bootloader的目的,包括关闭相关功能、配置时钟和SDRAM等,还提及代码搬移;阐述了makefile中的链接脚本概念、要素和基本语法;讲解了通信模式基本模型及分类,如UART;介绍了中断流程和I2C协议特点、结构等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值