LED灯实验

文章详细阐述了CPU通过内存访问指令和控制器寄存器来间接控制硬件的原理,以S5P6818芯片为例,介绍了地址映射和异常处理机制。同时,讲解了启动代码如何设置内存、栈和模式,并展示了通过GPIO控制LED灯的步骤,包括电路分析、寄存器配置和交叉编译工具链的使用。

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

cpu控制硬件原理

        我们学习的所有指令,六大指令里边,只有内存访问指令能访问cpu之外的内容。那cpu如何控制硬件?*****load/store指令--》操作4G内存

任何一个芯片都有一个地址映射表。告诉你地址空间是如何映射的,便于我们找到对应的硬件地址。

 

我们的SOC型号是S5P6818,对应的芯片用户手册为:(推荐:急速PDF阅读器)

S5P6818X用户手册V0.00

其中一章是:Memory map或Memory Controller 中的一张表中可以看地址隐射关系。

硬件控制原理:*****

CPU不能直接控制硬件,硬件是由其对应的控制器(寄存器)来控制的

每个控制器(寄存器)都会映射到CPU寻址范围内的一段空间

CPU通过对控制器(寄存器)的读和写实现对硬件间接的控制

cpu间接控制硬件。 on off on off off off

硬件板子介绍:

提供的工程模板里有一个map.lds,是指导程序如何排布。运行裸机程序首先需要看这个文件。


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
     
	. = 0x48c00000; //起始地址,异常向量表的起始地址
	. = ALIGN(4);   
	.text      :  //代码
	{
     
		./Start/start.o(.text) 
                       //运行的第一段代码是start.s编译生成的.o
		*(.text)
	}
	. = ALIGN(4);
    .rodata : //只读  
	{ *(.rodata) }
    . = ALIGN(4);
    .data :   //.data
	{ *(.data) }
    . = ALIGN(4);
	__bss_start = .; 
    .bss ://.bss
     { *(.bss) }
	__bss_end__ = .;
}

start启动代码

start.S文件:
.text        @ .:伪操作
	.arm

	.global	_start
_start:   @第一段代码
	@ 第一条指令,内存地址0x43c00000
	@ 异常向量表
	b reset       @直接通过跳转指令跳转到reset
	b .
	b .
	b .
	b .
	b .
	b irq	@ IRQ异常对应的位置
	b .

 /* The actual reset code */
reset:
	/* 将异常向量表的基地址重定向到0x43c00000,即这段代码执行后遇到IRQ后PC的值会变成0x43c000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值