同时具有独立的两个通道将 Frame Buffer 的数据传输到显示屏。
2014年2月26日
学习编写中断处理程序。本次例子主要使用按键实现外部中断,执行中断服务子程序。系统启动后,按 12345678任意键,相应的八段数码管就会点亮。当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。处理器能够准确无误地响应中断,是因为 ARM 体系结构里有一个中断向量表,该中断向量表将系统能够响应的 7 种异常中断类型的“入口地址”登记在一块连续的字节空间内,每种异常中断的“入口地址”占据 4 个字节,这里“入口地址”实质是一些跳转指令或者是让 PC指针赋值的指令,通常使用 B 或 ldr 指令。简单地说,异常中断发生首先会跳转到中断向量表,此时跳转的位置会由系统根据中断类型来判断,由于中断向量表实质也是跳转指令所组成的指令序列,所以系统会再进行一次跳转,这次跳转便跳到中断处理程序(中断服务例程)的入口。系统复位后,IRQ 和 FIQ 中断都是被禁止的,所以即使建立了中断向量表,当有中断请求也是不会响应的,因此在系统复位后,必须通过程序控制来打开 IRQ 和 FIQ 中断。
2014年2月27日
本次例子是一个驱动触摸屏控制器芯片 UCB1400BE 的程序,将来自触摸屏输出端的电压值转换为数字量,并将点击的位置通过串口打印出来。触摸屏是一套透明的绝对定位系统,从技术原理来区别触摸屏,可分为四个基本种类:电阻技术触摸屏、电容技术触摸屏、红外线技术触摸屏、表面声波技术触摸屏。本实验使用的触摸屏属于电阻式触摸屏。电阻触摸屏的屏体部分由多层复合薄膜构成,按结构和实现原理来划分可以分为四线、五线、七线和八线式,由于本实验所使用的设备为四线电阻摸屏,故以下内容仅适合 4线电阻触摸屏。电阻触摸屏通常由五层薄膜叠合在一起,最外面两层分别为基层和塑料层,主要是为保护屏体而设计,触摸屏的工作主要是靠在中间两层互相绝缘的导电层来完成。基层是一层玻璃或有机玻璃,塑料层则是一层外表面硬化处理、光滑防刮的塑料,塑
6
料层必须具备一定的弹性,当受到外来挤压时可以出现一定程度的凹陷。而在基层的上面紧贴两层互相绝缘透明导电层(ITO,氧化铟),这两层导电层是通过中间的透明隔离点隔开。当外力施加在塑料层上时,会造成外表面的凹陷,导致两层导电层接触,当触摸屏控制器测得输入端(四线触摸屏的其中一条输出线)的有电压输入时,便知道触摸屏被点击。
2014年2月28日
本次例子是 PXA270 的串口传输程序,并以两种方式实现:程序查询状态寄存器和中断处理。本章例子根据 PXA270 开发板的串口硬件连接,不加入 Moden 传输协议,紧紧利用 UART引脚 TXD 和 RXD 进行数据接收和发送。实验目标是通过配置 FFUART(串口 1),将字符显示在 PC 机上超级终端上,并且将键盘输入内容回显在超级终端上。实现步骤:配置 GPIO 寄存器,实现 CPU 引脚 34,39 接收发送功能。配置寄存器 POWER Manager Sleep Status (PSSR)。配置全功能 UART 的寄存器。编写接收字符和输出字符函数。编写 FFUART 的中断服务例程。PXA270 处理器有四个 UART,分别是:全功能 UART(FFUART),蓝牙 UART(BTUART),标 准 UART ( STUART ) ,硬件 UART ( HWUART ) 。UART 即 universal asynchronous receiver/transmitter 的简写。每个 UART 能将从 RXD 端接收的串行数据转变为并行的数据,并且能够将来自处理器的并行数据转化串行数据,然后通过 TXD 端发送出去。根据UART 是否在 FIFO 模式下执行,发送和接收的数据会有选择的锁存在发送/接收 FIFO。
7
2014年3月1日
本实验重点讲述 ARM 的存储器管理单元 MMU 管理机制,运行该程序后会在串口上打印出“Run in virtual memory mode!”一行字符串,该试验代码启动了 MMU 后,在虚拟地址空间中完成了对串口的初始化,并且打印了以上字符串,串口波特率是 38400。在 ARM 系统中,存储器管理单元 MMU 主要完成以下工作:虚拟存储空间到物理存储空间的映射。在 ARM 中采用了页式虚拟存储管理。它把虚拟地址空间分成一个个固定大小的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页。页的大小分为粗粒度和细粒度两种。MMU 就是从虚拟地址到物理地址的转换。存储器访问权限的控制。设置虚拟存储空间的缓冲的特性。在 ARM 存储系统中,使用 MMU 实现虚拟地址到实际物理地址的映射。页表(Translate Table)是实现上述这些功能的重要手段,它是一个位于内存中的表。表的每一行对应于虚拟存储空间的一个页,该行包含了该虚拟内存页(称为虚页)对应的物理内存页(称为实页)的地址、该页的方位权限和该页的缓冲特性等虚拟存储空间到物理存储空间的映射是以内存为单位进行的。即虚拟存储空间中一块连续的存储空间被映射成物理存储空间中同样大小的一块连续存储空间。在页表中(TLB 中也是一样的),每一个地址变换条目实际上记录了一个虚拟存储空间的存储块的基地址与物理存储空间相应的一个存储块的基地址的对应关系。根据存储块大小,可以有多种地址变换。
2014年3月2日
经过一周的ARM实验后,这周开始了Linux实验,今天开始做Linux常用工具的实验。
首先了解minicom的使用,掌握利用minicom进行传输文件方法,在Linux终端中敲入:“minicom -s”然后按回车键,按照实验指导书的要求规范进行配置。这些都做好之后,开始网络文件系统nfs的配置,网络文件系统nfs可以将PC机上的一部分文件系统作为目标机的资源,这样可以弥补目标机存储空间的
8
不足。在使用网络文件时,应对网络文件配置进行一定的设置。
通过本次的上机实践,对Linux常用工具有了初步了解,熟练掌握了minicom使用。
2014年3月3日
今天继续进行Linux实验,今天做的是Makefile实验,Makefile一般包括包含:显示规则,隐晦规则,变量定义,文件指示和注释等五个内容。
Makefile中定义的变量,与C/C++中的宏一样,代表一个文本字串,在Makefile被执行时候变量会自动地展开在所使用的地方,Makefile中的变量可以使用在“目标”,“依赖目标”,“命令”或Makefile的其他部分中。
一般来说,最简单的就是直接在命令行下输入make命令,GNUmake找寻默认的Makefile的规则是在当前目录下依次找三个文件——“GNUmakefile”,“makefile”和“Makefile”。其按顺序找这三个文件,一旦找到,就开始读取这个文件并执行,也可以给make命令指定一个特殊名字的Makefile。
2014年3月4日
今天做了BootLoader实验,PC机中的引导加载程序由BOIS和位于硬盘MBR中的BootLoader独到系统的RAM中,然后将控制权交给OSBootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上独到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
嵌入式系统中,通常并没有像BIOS那样的固件程序,隐藏整个系统的加载启动任务完全由BootLoader来完成,BootLoader的主要作用是初始化硬件设备,建立内存空间的映射图,完成内核的加载,为内核设置启动参数。
嵌入式系统中的bootloader的实现完全依赖于CPU的体系结构,因此大多数BootLoader都分为第一阶段和第二阶段两大部分,依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在阶段1中,而且通常都用汇编语言来实现,以打到短小而精悍的目的。
9
2014年3月5日
今天进行了Linux内核编译实验,一般主机平台的Linux(如红旗Linux)源代码在根目录下的/user/src/linux目录下,内核源代码的文件按树形结构进行组织的,在源代码树最上层的可以看到如下一些目录:arch,include,init,mm,Kernel等。
内核编译过程:1,make mrproper:删除所有以前在够核过程所产生的所有文件,2,make menuconfig:内核配置,3,make dep:寻找依存关系。4,make zlmage:产生压缩的核心映象文件,内核编译完毕之后,生成zimage内核映象文件保存在源代码的arch/arm/boot/目录下。
通过本次上机,让我对内核编译有了初步了解,内核是Linux的核心,是一个相当重要的知识,并不是通过几次上机能学会的,所以要经过不断探索学习才能有所进步。
2014年3月6日
今天上机进行了嵌入式文件系统的创建实验,本次实验主要是了解嵌入式操作系统中文件系统的类型和作用以及JFFS2文件系统的优点及其在嵌入式系统中的作用。
本次实验实验内容:1,根据系统提供的busybox源代码,编译busybox,写出具体编译过程。2,利用配置文件系统实例,配置一个适合开发板的文件系统,写出需要配置文件的功能。3,利用mkfs。Jffs制作文件系统映象,并将文件系统映象下载到开发板,写出系统启动后的结果。
通过本次上机实验,了解了嵌入式文件系统的构建,掌握了嵌入式Linux文件系统的挂在过程。从中学会了很多。
2014年3月7日
学习编写中断处理程序。本次例子主要使用按键实现外部中断,执行中断服
10