![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
S3C6410体系结构与编程 学习笔记
文章平均质量分 75
_CN_黄雷
这个作者很懒,什么都没留下…
展开
-
tiny6410裸机实验第0章--------------开发环境的搭建(交叉编译工具链制作)
【说明】 我们平常在linux上写C,编译工具大多用GCC,由于机器只认识机器码,所以虚拟机linux上的GCC 只能把C编译成相应CPU(一般是X86)的机器码,但是我们的开发板的CPU是 ARM, ARM的机器码和X86的完全不一样,在ARM眼里,X86的机器码就是一堆乱七八糟的01010101,所以我们就无法用虚拟机上自带的GCC编译出来的可执行文件在AR原创 2014-02-21 00:35:44 · 1211 阅读 · 0 评论 -
tiny6410裸机实验第5章--------------DDR(链接脚本)
【说明】 前面我们对链接的过程没有进行控制,我们在makefile中直接指定链接地址从0开始,这是因为6410如果是nand启动会把nand 前4页,每页2KB复制到片内内存中,片内内存地址从0开始,这里0指的是物理地址,所以我们的链接地址就会等于物理地址,程序就可以在片内内存正常运行,这一节我们学习一下利用所谓的链接脚本对链接进行控制,其实即使是默认的链接过程也是依赖原创 2014-02-25 13:15:47 · 1120 阅读 · 0 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(Red Hat 5虚拟机搭建)
【实验说明】 使用VMWARE 9.0作为实验平台,linux系统选用RED HAT 5,这2个网络都可下载到。【新建一个虚拟机(无操作系统)】 菜单栏--》文件--》新建虚拟机--》配置类型选择自定义--》硬件兼容性选择workstation 9.0--》选择“我以后再安装操作系统”--》操作系原创 2014-02-20 16:28:32 · 992 阅读 · 1 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(NFS服务器配置)
参考:http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html【说明】 NFS服务器可以通过网络使linux共享指定的目录,连接上NFS服务器的客户端可以像访问本地文件一样操作NFS服务器上的文件,我们在linux虚拟机上搭建NFS服务器有以下3个作用 1】使得WIN7下访问虚原创 2014-02-20 16:56:00 · 779 阅读 · 0 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(WIN7下挂载虚拟机NFS目录)
【说明】 上一节我们在虚拟机里配置了NFS服务,这节我们就使用WIN7自带的工具,在从本地访问linux下的文件。【启动WIN7下NFS功能】 win7下默认情况下 NFS 功能是被关闭的,我们需要手动打开,这个很简单。 1】 开始--》控制面板--》程序和功能--》左边的 打开关闭WINDOWS功能--》勾选上N原创 2014-02-20 17:20:19 · 970 阅读 · 0 评论 -
tiny6410裸机实验第5章--------------DDR(初始化原理)
【说明】 前面我们介绍了地址相关的一些概念以及地址无关码的概念,我们知道了,当程序超过了8KB的时候,我们得把程序复制到DDR中运行,但是,DDR要使用是要先初始化的。6410带有DRAM控制器,它在初始化之后可以让我们对DDR的访问变得十分方便。。。这里我们要初始化2个东西,也就是DRAM控制器,以及DDR本身。 【怎么初始化】原创 2014-03-05 15:36:58 · 1175 阅读 · 0 评论 -
tiny6410裸机实验第5章--------------DDR(代码)
【说明】 根据上一节介绍的原理,很容易写出DDR的初始化代码,这节附上代码,包括代码重定位,以及初始化DDR。 【初始化DDR】 common.h...包含了一些通用宏定义 #ifndef __COMMON_H#define __COMMON_H#define vi *(原创 2014-03-05 15:45:48 · 1113 阅读 · 0 评论 -
tiny6410裸机实验第6章--------------NAND(初始化代码及NAND操作)
【说明】 前面我们已经说明了初始化NAND控制器的原理,这一节就是源代码了,这个源代码不是用的友善的源代码,因为我的NAND FLASH 是8KB块的。友善给的源代码是2KB的。这个代码是一位网友提供的。初始化步骤就是按前面的原理来的。这节还会介绍读写NAND的操作 【初始化代码】 其中的nand_reset 在下面,它和初始原创 2014-03-05 21:29:58 · 968 阅读 · 0 评论 -
tiny6410裸机实验第6章--------------NAND(初始化原理)
【说明】 在地5章我们初始化了DDR并且进行了代码的重定位,但是注意!我们前面的重定位其实是假的,我们只过是把代码从片内内存复制到DDR中!因为我们的NAND 还没有初始化,而完整的程序在NAND FLASH中,所以我们当时没办法将完整程序复制到内存中,之所以进行了重定位是为了理解重定位的过程而已!这一章我们就来初始化NAND FLASH并且真正的实现从NAND FLA原创 2014-03-05 20:46:54 · 1148 阅读 · 0 评论 -
tiny6410裸机实验第7章--------------异常(代码)
【说明】 前一节我们介绍了异常的原理,并解释了一部分代码的意思,这一节贴出完整的代码,方便没有源码的童鞋,只贴出START.S 因为其他的和前面几章一样的。【源代码】 .globl _start_start: // 异常向量表 b reset原创 2014-03-06 20:39:28 · 1077 阅读 · 0 评论 -
tiny6410裸机实验第8章--------------中断(原理及代码)
【说明】 前面我们提到了,中断也是异常的一种,那为什么单独用一章介绍中断呢?因为中断相对于其他异常要复杂一些,而且我们只有理解了中断才能为以后理解操作系统做准备。中断的原理其实和所有异常都差不多的。中断异常就是IRQ异常 【中断来源】 当外部设备需要与CPU通讯的时候,就发出一个中断,到达中断控制器,由中断控制器裁决是否向CPU发原创 2014-03-06 22:22:25 · 1418 阅读 · 0 评论 -
tiny6410裸机实验第7章--------------异常(原理)
【说明】 如果我们的CPU执行到未定义的指令的时候会发生什么呢?又,如果出现了除以0的操作,又会发生什么呢?那就是“异常”,这一节就来介绍异常的相关知识。。下一章我们介绍中断,中断是异常的一种。【工作模式】 ARM有7种工作模式,当发生异常时会自动进入相关的模式运行,并跳转到异常向量入口处,工作模式如下原创 2014-03-06 11:38:18 · 931 阅读 · 0 评论 -
tiny6410裸机实验第11章--------------蜂鸣器(原理及代码)
【说明】 6410有一个蜂鸣器,可以发出很吵得声音,我们这一节就来操作它,但是我们是用最简单的方式操作,也就是响起或者不响,至于声音大小我们不讨论。 【原理】 其实蜂鸣器的操作和LED擦不多。。。就是控制GPIO就可以了没什么特殊的东西 下面的底板原理图原创 2014-03-12 12:07:41 · 2042 阅读 · 0 评论 -
tiny6410裸机实验第10章--------------PWM定时器(原理及代码)
【说明】 S3C6410带有5个32位定时器,其中定时器4是内部定时器,没有引出外部引脚的,这一节我们就来试试操作定时器中断。学了这个定时器操作之后,我们再利用它来写一个进程调度程序,实现最最简单的进程并发。 【原理】 S3C6410的5个定时器中,定时器0和1有PWM功能,其他没有 PWM具有两种操作,即原创 2014-03-12 10:47:11 · 1849 阅读 · 0 评论 -
tiny6410裸机实验第8章--------------中断(中断向量寄存器)
【说明】 前面我们的按键程序已经能工作了,但是有一个缺点,就是它在中断处理函数里是一个一个判断中断的(虽然用了循环),如果有一天我们程序中有好多好多中断,比如触摸屏中断,按键中断,UART中断等等。我们难道要一个一个判断是什么中断,然后处理吗?不用的,6410有一个很好的机制、 【原创 2014-03-07 09:53:40 · 1194 阅读 · 0 评论 -
tiny6410裸机实验第9章--------------LCD(原理及源代码)
【说明】 这一章我们来介绍一个很好玩的东西,那就是LCD,也就是我们开发板上的显示屏了,这个要理清一个概念,那就是LCD和触摸屏是完全没关系的两个设备,只不过他们一般都做在一起而已,我们这节只介绍LCD,没有触摸屏的内容。由于我用得是友善的TINY6410,而友善公司把触摸屏和LCD背光都做成了1线的,也就是一般的背光控制和触摸屏原理都不适用于这个6410。所以我们无视背原创 2014-03-08 14:23:13 · 2475 阅读 · 0 评论 -
tiny6410裸机实验第8章--------------中断(中断版UART)
【说明】 我们在第4章已经介绍了UART的原理,但是当时我们在发送数据的时候是用查询方式的,也就是如果FIFO满了,我们就一直循环等待,这显然太浪费时间了。这一节我们就用中断的方式操作UART,我们只介绍发送,接收其实和发送擦不多的。 【原理】 6410的UART有个中断模式,记得FIFO缓冲区吗? 1)我原创 2014-03-07 12:06:21 · 1255 阅读 · 0 评论 -
tiny6410裸机实验第4章--------------UART(源代码分析)
【说明】 前一小节,对于UART的基本设置已经介绍得很清楚了,这一节就是完全按前面讲的步骤要一步一步设置UART,并实现2个函数,用来往串口发送一个字符和接收一个字符,我们采用轮询方式发送,显然这种方式十分浪费CPU资源,后面章节我们将采用中断方式发送 【代码】 1】工程文件原创 2014-02-24 14:48:27 · 1056 阅读 · 0 评论 -
tiny6410裸机实验第5章--------------DDR(代码重定位)
【说明】 前面我们说过,NAND启动的时候,6410会把NAND中前4页每页2KB(而不是前8KB,这里很多人理解错)复制到片内内存中,从物理地址0开始运行,那我们就有个问题了,如果我们的程序超过8KB怎么办?显然超过8KB的部分不会复制进片内内存,那超过8KB的部分在哪运行呢?这就是这节的要介绍的,代码重定位。【DDR】 什原创 2014-02-25 13:45:25 · 977 阅读 · 0 评论 -
tiny6410裸机实验第5章--------------DDR(物理地址,链接地址,虚拟地址,地址无关码)
【说明】 在后面的学习中,我们将遇到链接地址概念以及一种称为链接脚本的文本文件,那么什么是链接地址呢,他和我们的物理地址又有什么关系呢。 其实链接的技术细节十分复杂,我的另一系列博文中有关于链接的学习笔记,大家可以看看,那是对《程序员的自我修养》这本书的笔记,也推荐大家看这本书。 【物理地址】 物理地址就是指原创 2014-02-25 00:11:49 · 1377 阅读 · 0 评论 -
tiny6410裸机实验第1章--------------ARM汇编和编程基础(Makefile 简介)
【说明】原创 2014-02-21 11:49:56 · 892 阅读 · 0 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(代码阅读和编写工具 source insight )
【说明】 Source Insight 是一款优秀的代码阅读及编写工具,我们用它来阅读linux内核及U-boot源代码,同时我们配合前面的NFS服务器用其进行主要代码的编写。大家可以从网络上很方便下载到这款软件,破解版也有的。【初次使用】 默认情况下,source insight不支持汇编文件,我们如果进行如下配置,才能将汇编原创 2014-02-20 23:08:40 · 1116 阅读 · 0 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(制作用来SD启动的SD卡)
【说明】 我的开发板是友善的tiny 6410 ,开发板有SD卡,nand flash 两种启动方式。当然啦,用SD卡启动的话你需要有一张SD卡,而且插到开发板上(废话),由于一开始我们的NAND FLASH (暂且看成PC上的硬盘吧)什么都没有,用NAND启动时,CPU会把nand flash 前4页,每次2KB 内容复制到一个叫片内内存的地方,然后从片内内原创 2014-02-21 01:16:26 · 1587 阅读 · 0 评论 -
tiny6410裸机实验第1章--------------ARM汇编和编程基础(ARM汇编简介)
【说明】 其实常用的ARM汇编指令并不多,而且在实际编程的时候,大部分是用C语言,只有最开头的一小段是用汇编语言,哪怕裸机也大部分用C写。。下面介绍几个简单的汇编指令,其实对于一般开发也就够了。本文参考《嵌入式linux开发完全手册》 【相对跳转 b, bl】 如果没有任何汇编经验,没关系,后面用到后就懂了,很好理解的。原创 2014-02-21 13:00:12 · 938 阅读 · 0 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(远程登录及串口终端 secure CRT)
【说明】 在后面的实验中,串口终端是必不可少的,因为开发板的输出信息要通过串口直接输出给PC,在PC上对开发板进行操作,这个过程就要靠我们这个secure CRT软件了,另外,我们的虚拟机也可以通过这个软件进行登录,这节就来试试用软件 通过 telnet 登陆虚拟机中的linux。 【secure CRT 安装】 网络上有破解版的原创 2014-02-20 23:47:01 · 990 阅读 · 0 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(配置 tftp服务器)
【说明】 前面的nfs 服务器是为了共享目录的及作为以后根文件系统的,而TFTP服务器则是为了实现文件的传输,在虚拟机linux上配置好TFTP服务器后,我们主要用它来下载内核。也就是说,我们的开发板以后只需要烧写一个U-BOOT,而内核我们通过TFTP下载到内存中启动,内核再通过NFS 直接通过网络将NFS服务器当做启动用得文件系统,这样不仅减少了对FLASH原创 2014-02-21 00:10:01 · 1005 阅读 · 0 评论 -
tiny6410裸机实验第0章--------------开发环境的搭建(USB转串口)
【说明】 前面我们提到,开发板的输出信息可以通过串口传输到PC机由PC机在secureCRT上显示,但是很可惜,现在的笔记本没有串口的接口,怎么办,没关系,我们虽然没有串口但是我们有万能的USB接口,我们只需要安装一下USB转串口驱动,就可以直接把USB口当串口使用,同时我相信卖开发板的买家一定会送一条一端是串口一端是USB口的线。。。没错,串口端插开发板,USB口端插原创 2014-02-21 01:48:39 · 1747 阅读 · 0 评论 -
tiny6410裸机实验第1章--------------ARM汇编和编程基础(ATPCS 简介)
【说明】 前面提到,我们大部分时候用C编程,但是,我们程序是开始一小段是用汇编写的,那么如何将汇编语言和C语言结合起来使用呢,也就是说,汇编执行到一半如何调用C语言的函数呢,如何传递参数呢,真其实要要按照一定的规则来,由于汇编的过程调用不像C语言后面直接扔参数就可以了,汇编只不过是普通的bl跳转,那么参数放哪? 返回值放哪? 这个规则就是ATPCS。原创 2014-02-21 21:56:52 · 902 阅读 · 0 评论 -
tiny6410裸机实验第1章--------------ARM汇编和编程基础(C与ARM汇编混合编程)
【说明】 在嵌入式开发中,大部分情况下我们使用C语言来编程,但是在程序的最前面一小段硬件相关的操作,以及有时候对速度要求高的地方我们仍然需要使用汇编进行编程。这就使得我们必须学会如何衔接好C和汇编,具体的有:C语言调用汇编语言的变量或者函数,汇编语言调用C语言的变量或者函数,以及在C语言中嵌入汇编语言。下面我们就分别进行介绍。 【汇编调用C语言函数】原创 2014-02-23 00:37:14 · 1148 阅读 · 0 评论 -
tiny6410裸机实验第2章--------------点亮LED灯(外设基地址和关闭看门狗)
【说明】 如果写的单片机的人一定对点亮LED灯非常熟悉,没错,在6410中点亮LED灯也非常简单,但是,在真正点灯之前,先介绍等会代码最前面的2段,一个是对外设基地址的设置,另外一个就是关闭看门狗。【外设基地址】 在程序的最前面,我们将遇到这样一段代码 这段代码的作用原创 2014-02-23 20:54:24 · 1485 阅读 · 0 评论 -
tiny6410裸机实验第3章--------------系统时钟(原理图分析)
【说明】 我们的ARM11最高可以跑500到600MHZ,但是其实并不是一启动开发板就这个速度的,相反,我们如果启动开发板后没有进行时钟设置,CPU是不会跑这么快的。这一节,我们就来简单分析6410的时钟体系,下一节写代码区设置时钟,使得CPU跑到500MHZ以上! 【原理图分析】 我们先来一张全局图,有个大概的了解,然后分块分原创 2014-02-23 23:47:13 · 1202 阅读 · 0 评论 -
tiny6410裸机实验第2章--------------点亮LED灯(原理和代码分析)
【说明】 首先我们要打开TINY6410的LED部分,弄清楚点灯的原理,查看到底是哪个引脚去控制LED的量和灭,再来写代码。 【原理】 1】LED原理图 显然,当引脚输出低电平时,由于VDD_IO的存在,LED将被点亮,反之熄灭原创 2014-02-23 21:51:27 · 2451 阅读 · 0 评论 -
tiny6410裸机实验第3章--------------系统时钟(代码分析)
【说明】 前面原理已经很清楚了,现在分析代码,放在2个博文中是方便大家同时打开2个博文,原理图和代码对应看【源代码】 工程文件如下,其中clock.S 用来初始化时钟,main.c 测试用的,依旧是LED灯,start.S 是程序最前面那一段 1】原创 2014-02-23 23:49:59 · 1185 阅读 · 0 评论 -
tiny6410裸机实验第2章--------------点亮LED灯(用C来写)
【说明】 前面我们说明了点亮LED灯的原理以及用汇编代码如何实现,其实我们可以用C来写,正如前面介绍C和汇编混合编程的时候讲的那样,从汇编调用C函数和从C调用汇编函数都是很容易的,这一节,我们就把主要的代码放在C语言中,硬件相关原理和前一节一样,就不再复述。直接看代码。 【代码】 //C 中的代码是这样的// 延时void原创 2014-02-23 22:12:46 · 1689 阅读 · 0 评论 -
tiny6410裸机实验第4章--------------UART(原理分析)
【说明】 UART(Universal Asynchronous Receiver/Transmitter)就是串口通讯,全称“异步接收发送器”,我们前面已经提到,我们利用secureCRT来显示开发板发送过来的串口数据,这一节我们就来看看,在开发板上到底是怎么控制串口的,也就是说,如果我们要自己写程序从开发板发送或者接收数据,要怎么做。 【协议】原创 2014-02-24 13:24:50 · 1150 阅读 · 0 评论 -
tiny6410裸机实验第4章--------------UART(printf, scanf)
【说明】 前面我们实现了串口版本的getc, putc 基于这个我们就可以将printf和scanf移植到我们的裸机上,其实printf 和 scanf 以及他们所依赖的一系列函数中,和硬件直接相关的也就只有putc , getc,也就是说,让printf 使用我们写的getc , putc 就可以实现串口版本的printf 和 scanf 了。 【移原创 2014-02-24 16:50:00 · 958 阅读 · 0 评论 -
tiny6410裸机实验第9章--------------LCD(显示字母)
【说明】 前一节我们初始化了LCD,使得我们可以在任何一个像素画点了。可是我们平时很少直接在屏幕上画画的吧,大多数情况下我们是在上边显示英文或者中文,那我们怎么显示英文呢,这就是这一节的重点。 【显示原理】 字母是怎么显示的呢,想象一个8*8的矩阵,每一个元素就是一个像素,那我们就可以用白色像素描出一个字母"A",用黑色作为其他像原创 2014-03-09 11:24:21 · 1421 阅读 · 0 评论