![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tiny4412开发板学习记录
文章平均质量分 90
晴天_QQ
嵌入式软件开发工程师
展开
-
tiny4412开发板GPIO试验
GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平、或者通过它们读入引脚的状态——是高电平还是低电平。三星Exynos4412,它有304个 GPIO,分为GPA0、GPA1、GPB、GPC0、GPC1等共37组。可以通过设置寄存器来确定某个引脚用于输入、输出还是其它特殊功能。比如可以设置GPC0、GPC1作...原创 2018-11-18 18:14:31 · 1654 阅读 · 0 评论 -
ARM架构异常中断处理流程
在ARM体系中通常有以下3种方式控制程序的执行流程:在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器(PC)的值加4个字节;每执行一条Thumb指令,程序计数器寄存器(PC)的值加两个字节。整个过程是顺序执行。 通过跳转指令,程序可以跳转到特定的地址标志处执行,或者跳转到特定的子程序处执行。其中,B指令用于执行跳转操作;BL指令在执行跳转动作的同时,保存子程序的返回地址;BX指令...原创 2018-12-05 21:02:51 · 10050 阅读 · 0 评论 -
ARM指令adr和ldr的区别
很多人在写简单的裸机代码或分析uboot时,常常遇到adr和ldr指令。却分不清这2者的区别,现在谈谈adr与ldr指令。先写启动代码start.S。.text.globl _start_start: ldr r0, test adr r0, test ldr r0, =test noptest: nopMakefile文件内容如下:a...原创 2018-12-01 15:30:01 · 1871 阅读 · 0 评论 -
tiny4412裸机程序之位置无关码
在上篇文章中,将代码的.text、.data、.rodata段重定位到了0x02026400位置处去执行点亮LED的操作。但是,在链接脚本里指定的链接地址是0x02026400,那么为什么在重定位之前的代码能够在0x02023400地址处可以开始执行?就是因为前面使用的是位置无关码。写介绍介个概念:链接地址:链接脚本里指定的,理论上程序运行时所处的地址。在编译时,编译器会根据链接地址来翻译位置...原创 2018-12-01 14:53:03 · 238 阅读 · 0 评论 -
tiny4412裸机程序——代码重定位
在前面介绍exynos4412芯片启动过程时,我们知道:一上电,exynos4412首先执行固化在iROM中的代码,iROM首先设置程序运行环境(比如关看门狗、关中断、关MMU、设置栈、设置栈、启动PLL等),然后根据OM引脚确定启动设备(NAND Flash/SD卡/其他),把BL1从里面读出存入iRAM的0x02021400地址处,然后开始启动BL1;BL1从SD卡适当的位置读入14K字节的数...原创 2018-12-01 13:14:24 · 269 阅读 · 0 评论 -
ARM处理器工作模式介绍
从今天开始学习ARM异常中断处理相关的知识点;首先学习ARM的工作模式。ARM处理器共有7种运行模式,如下表所示。ARM处理器的7种运行模式 处理器模式 描述 用户模式(User) 正常程序执行模式 快速中断模式(FIQ) 用于高速数据传输和通道处理 外部中断模式(IRQ) 用于通常的中断处理 特权模式(Supervisor) 供操作系统使用...原创 2018-12-02 20:27:59 · 1116 阅读 · 0 评论 -
tiny4412开发板的串口介绍与操作
UART原理说明:通用异步收发器简称UART,即"Universal Asynchronous Receiver Transmitter",它用来传输串行数据:发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线上的信号,将串行收集放在缓冲区中,CPU即可读取UART获得这些数据。UART之间以全双工方式传输数据,最精简的连线...原创 2018-11-26 20:20:35 · 2016 阅读 · 2 评论 -
tiny4412开发板icache操作程序
首先,来介绍关于cache的概念。cache的作用:基于程序访问的局限性,在主存和CPU通用寄存器之间设置了一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用,这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓存存储器(Cache)。启用Cache后,CPU读取数据时,如果Ca...原创 2018-11-25 15:59:50 · 271 阅读 · 0 评论 -
tiny4412开发板时钟操作示例
在上一节总我们介绍了《Exynos4412芯片的时钟管理单元》,有了上一节的基础知识我们就可以写程序操作CPU的时钟了。通过操作led来感受时钟速率的变化。本文总共有三个示例,第一个是写一个LED循环点亮的程序;第二个是将iROM中设置的时钟禁止掉,观察LED变化速率;第三个就是设置CPU的时钟速率为1.4GHz,观察LED的变化速率。第一个程序很简单,有两个文件start.S和main.c。...原创 2018-11-24 22:10:50 · 776 阅读 · 0 评论 -
常用ARM汇编指令及ATPCS规则
在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时的初始化,进出中断时的环境保存、恢复,对性能要求非常苛刻的函数等。只在必要情况下使用汇编指令,只涉及几条汇编指令。1.相对跳转指令:b、bl这两条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。这两条指令的可跳转范围是当前指令的前后32M:-32M~+32M。它们是位置无...原创 2018-11-18 10:59:45 · 3373 阅读 · 1 评论 -
常用的汇编指令介绍
注意:此文档会根据学习过程中遇到的ARM汇编指令,持续更新。LDR汇编指令:LDR指令的格式为:LDR{条件} 目的寄存器,<存储器地址>LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序...原创 2018-11-17 20:36:26 · 668 阅读 · 0 评论 -
汇编代码、机器码和存储器的关系以及数据的表示
即使使用C/C++或者其他高级语言编程,最后也会被编译工具转换为汇编代码,并最终作为机器码存储在内存、硬盘或者其他存储器上。在调试程序时,经常需要阅读它的汇编代码,以下面的汇编代码为例:2023404: e5901000 ldr r1, [r0]2023408: e3c110ff bic r1, r1, #255 ;...原创 2018-11-17 19:59:48 · 2577 阅读 · 0 评论 -
Exynos4412芯片的时钟管理单元
本章介绍Exynos4412芯片的时钟管理单元(CMU)。CMU控制锁相环(PLL)并为Exynos4412芯片中的各个IP、总线和模块产生时钟。它们还与电源管理单元(PMU)通信,以便在进入某个低功耗模式之前停止时钟,以通过时钟切换来降低功耗。1.Exynos4412芯片的时钟体系介绍对于PC机来说,CPU、内存、主板、声卡、显卡等等,这些功能部件由不同的芯片组成,在实体上是相互独立的。...原创 2018-11-24 09:10:55 · 1337 阅读 · 0 评论 -
交叉编译工具的使用说明
写在前面的话,由于已经学习了JZ2440V3开发板的裸机程序。想检验下学习成果,所以从今天开始把以前学的知识点在tiny4412开发板上面做个检验。裸机部分学习到把uboot移植完成就结束;然后,学习内核的驱动和其他子系统框架。言归正传,现在开始学习交叉编译工具链的使用。源文件需要经过编译才能生成可执行文件。在Windows下进行开发时,只需要点几个按钮即可编译,集成开发环境(比如 Visua...原创 2018-11-17 11:11:06 · 11134 阅读 · 2 评论 -
Exynos4412的启动过程
做实验时我们是把bin文件烧入SD卡。是谁把这些指令从SD卡读出来执行?是固化在芯片内部ROM上的代码──它被称为iROM,iROM是厂家事先烧写在芯片上的,无源码。iROM把启动设备上特定位置处的程序读入片内内存(iRAM),并执行它。这个程序被称为BL1(Bootloader 1),BL1是三星公司提供的,无源码。BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个程...原创 2018-11-18 21:03:46 · 1023 阅读 · 0 评论 -
ARM处理器的未定义指令异常处理过程分析
在前面的两篇文章中已经介绍了ARM处理器的工作模式和ARM异常中断处理流程。这篇文章我们通过代码来详细介绍ARM处理器未定义指令的异常中断处理;当发生未定义指令异常中断时,CPU进入未定义指令模式。可以通过读取CPSR寄存器的值来判定是否真的进入了未定义指令模式。开发板:tiny4412;工具链版本:gcc version 4.5.1 (ctng-1.8.1-FA)主要设置以下几个文件...原创 2018-12-10 20:57:18 · 4209 阅读 · 0 评论