目录
第1章 实验要求................................................. 3 第2章 预备知识................................................. 5
一、 ADS1.2安装 ........................................ 5 二、 ADS1.2 下使用 Wiggler电缆调试 ..................... 6 三、 配置 ads1.2软件 ................................... 7 四、 H-JTAG 驱动程序的使用.............................. 9
第3章 S3C2410A实验 ........................................... 10
实验一 ADS1.2开发环境创建与简要介绍 ....................... 10
一、 实验目的.......................................... 10 二、 实验内容.......................................... 10 三、 实验设备.......................................... 10 四、 实验步骤.......................................... 10 五、 实验步骤.......................................... 19 实验二 ARM的I/O接口实验 .................................. 21
一、 实验目的.......................................... 21 二、 实验内容.......................................... 21 三、 实验设备.......................................... 21 四、 实验原理.......................................... 21 五、 实验步骤.......................................... 23 六、 参考程序.......................................... 23 实验三 键盘接口和七段数码管的控制实验...................... 28
一、 实验目的.......................................... 28 二、 实验内容.......................................... 28 三、 实验设备.......................................... 28 四、 实验原理.......................................... 28 五、 实验步骤.......................................... 33 实验四 ARM的UART实验 ..................................... 34
一、 实验目的.......................................... 34 二、 实验内容.......................................... 34 三、 实验设备.......................................... 34 四、 UART的工作原理 ................................... 34 五、 实验步骤.......................................... 39 实验五 ARM的A/D接口实验 .................................. 41
一、 实验目的.......................................... 41 二、 实验内容.......................................... 41 三、 实验设备.......................................... 41 四、 实验原理.......................................... 41 五、 三星2410的A/D的工作介绍......................... 42 六、 实验步骤.......................................... 45 实验六 LCD的显示实验 ...................................... 45
一、 实验目的.......................................... 45
2 S3C2410实验指导书 二、 实验内容.......................................... 45
三、 实验设备.......................................... 46 四、 实验原理.......................................... 46
第1章 实验要求 3
第1章实验要求
ARM实验室是电子信息科学与技术的专业实验室。旨在培养学生对嵌入式系统设计和开发的能力,使学生加深对嵌入式系统设计思想的理解,掌握ARM实验平台进行程序设计、开发的技巧和方法,进而增强学生的实践能力和动手能力,提高其创新意识。
实验室还为大学生电子设计大赛,电子类学生的毕业设计、课程设计以及科研训练提供实验环境。利用嵌入式实验开发系统。
实验要求
在实验过程中,要求学生做到:
(1)预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现的情况提前作出思考和分析。
(2)仔细观察上机编程时出现的各种现象,记录主要情况,作出必要说明和分析。
(3)认真书写实验报告。实验报告包括实验目的和要求,实验情况及其分析,写出程序设计说明,给出源程序框图和清单。
(4)遵守机房纪律,服从辅导教师指挥,爱护实验设备。 (5)实验课程不迟到,如有事不能出席,所缺实验一般不补。
实验的验收将分为两个部分。第一部分是上机操作,包括检查程序运行和即时提问。第二部分是提交书面的实验报告。
第2章预备知识
一、ADS1.2安装
1. 打开安装光盘的 ads1.2文件夹,双击 SETUP.EXE,进行安装,按默认设置,也可适当更改安装路径。
2. 安装完成后,出现一个添加 licence的界面,
6 S3C2410实验指导书
3. 选中 ADS1.2目录下的 crack 文件夹中的 licence.dat文件,点下一步,直至结束。至此,完成软件的安装。
二、ADS1.2 下使用 Wiggler电缆调试
1. 安装 Rdi.dll
将文件夹下的 Rdi.dll 、 dev.ini 、dev文件夹一同拷贝到 xx:\\Program Files\\ARM\\ADSv1_2\\Bin目录下(推荐目录) ;
2.安装并口驱动
1)运行GiveIOInstaller.exe
第2章 预备知识 7 2)选择Install Service
三、配置 ads1.2软件
打开 AXD,选择菜单”options”中的”configuer target„”,如下图:
点击”ADD”,再弹出的列表框中找到开始拷贝的 RDI.dll,如下图:
8 S3C2410实验指导书
打开后再点击 Configure 进行配置,点击”OK”,如果此时连接了 Wiggler 电缆和实验箱,即可进入正确的调试模式,如下图:
第2章 预备知识 9
四、H-JTAG 驱动程序的使用
1. 安装操作说明
首先,将 H-JTAGv2.0.exe 应用程序双击,安装。
2. 安装到你的 C 盘或 D 盘的 program files 下,安装成功后,在桌面上会出现图 1 左下方的图标 H-JTAG。连上 wiggler电缆,双击图标 H-JTAG,弹出图 1 的右面的对话框。
3. 若检测,连接成功,最小化 H-JTAG。到开始/程序/ARM Developer Suite 1.2 目录下打开 ADS1.2 的调试器 AXD。将弹出图 8。点击,深色处,之后点击 OK。 (注意,这步前,应该正确安装 H-JTAG V2.0.exe 程序)
第3章S3C2410A实验
实验一 ADS1.2开发环境创建与简要介绍
一、实验目的
1.熟悉ADS1.2开发环境,正确使用仿真调试电缆进行编译、下载、调试。
2.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程。 3.了解ARM C语言的基本框架,学会使用ARM的C语言编程
二、实验内容
1.学习ADS1.2开发环境
2.用汇编语言编写一个简单的应用程序 3.用C语言编写一个简单的应用程序
三、实验设备
1.EL-ARM-830+教学实验箱, PC机,仿真调试电缆。 2.ADS1.2集成开发环境,仿真调试电缆驱动程序
四、实验步骤
1.ADS1.2下建立工程
运行ADS1.2集成开发环境(CodeWarrior for ARM Developer Suite),点击File|New,在New对话框中,选择Project栏,其有7项,ARM Executable Image是ARM的通用模板。选中它即可生成ARM的执行文件。同时,如图2-1-1
第3章 S3C2410A实验 11 图2-1-1
还要在,Project name栏中输入项目的名称,以及在Location中输入其存放的位置。按确定保存项目。
2)在新建的工程中,选择Debug版本,如图2-1-2,使用Edit|Debug Settings菜单对Debug版本进行参数设置。
图2-1-2
3)在如图2-1-3中,点击Debug Setting 按钮,弹出2-1-4图,选中Target Setting
图2-1-3
12 S3C2410实验指导书
图2-1-4
项,在Post-linker栏中选中ARM fromELF项。按OK确定。这是为生成可执行的代码的初始开关。
4)在如图2-1-5中,点击ARM Assembler ,在Architecture or Processer
图2-1-5
栏中选ARM920T。这是要编译的CPU核。
第3章 S3C2410A实验 13 5)在如图2-1-6中,点击ARM C Compliler ,在Architecture or Processer栏中选ARM920T。这是要编译的CPU核。
图2-1-6
6)在如图2-1-7中,点击ARM linker ,在outpur栏中设定程序的代码段地址,以及数据使用的地址。图中的RO Base栏中填写程序代码存放的起始地址,RW Base栏中填写程序数据存放的起始地址。该地址是属于SDRAM的地址。
图2-1-7
14 S3C2410实验指导书 图2-1-8
在options栏中,如图2-1-8,Image entry point要填写程序代码的入口地址,其他保持不变,如果是在SDRAM中运行,则可在0x30000000—0x33ffffff中选值,这是M SDRAM的地址,但是这里用的是起始地址,所以必须把你的程序空间给留出来,并且还要留出足够的程序使用的数据空间,而且还必须是4字节对齐的地址(ARM状态)。通常入口点Image entry point 为0x30000000,ro_base也为0x30000000。
在Layout栏中,如图2-1-9,在Place at beginning of image框内,需要填写项目的入口程序的目标文件名,如,整个工程项目的入口程序是2410init.s,那么应在Object/Symbol处填写其目标文件名2410init.o,在Section处填写程序入口的起始段标号。它的作用是通知编译器,整个项目的开始运行,是从该段开始的。
第3章 S3C2410A实验 15 图2-1-9
在如图2-1-10中,即在Debug Setting对话框中点击左栏的ARM fromELF项,在Output file name栏中设置输出文件名*.bin,前缀名可以自己取,在Output format 栏中选择Plain binary,这是设置要下载到flash中的二进制文件。图2-1-10中使用的是test.bin.
图2-1-10
16 S3C2410实验指导书 7)到此,在ADS1.2中的基本设置已经完成,可以将该新建的空的项目文件作为模板保存起来。首先,要将该项目工程文件改一个合适的名字,如S3C2410 ARM.mcp等,然后,在ADS1.2软件安装的目录下的Stationary 目录下新建一个合适的模板目录名,如,S3C2410 ARM Executable Image,再将刚刚设置完的S3c2410 ARM.mcp项目文件存放到该目录下即可。这样,就能在图2-1-10中看到该模板。
8)新建项目工程后,就可以执行菜单Project|Add Files把和工程所有相关的文件加入,ADS1.2不能自动进行文件分类,用户必须通过Project|Create Group来创建文件夹,然后把加入的文件选中,移入文件夹。或者鼠标放在文件填加区,右键点击,即出!如图2-1-11
图2-1-11
先选Add Files,加入文件,再选Create Group,创建文件夹,然后把文件移入文件夹内。读者可根据自己习惯,更改Edit|Preference窗口内关于文本编辑的颜色、字体大小,形状,变量、函数的颜色等等设置。如图2-1-12。
图2-1-12
2. ADS1.2下仿真、调试
第3章 S3C2410A实验 17 在ADS1.2下进行仿真调试,首先需要一根仿真调试电缆。其驱动程序的安装和使用在光盘中的\\实验软件\\ARM9_RDI中,里面有相关的文档。在连上调试电缆后,给实验箱上电,
打开调试软件AXD Debugger。点击File|load image 加载文件ADS.axf(\\实验程序\\HARDWARE\\ADS\\实验三\\ADS\\ADS_data目录下)。打开超级终端,设置其参数为:波特率为115200,数据位数8,奇偶校验无,停止位无1,数据流控无。点击全速运行,出现图2-1-13的界面:
图2-1-13
在最后介绍调试按钮,
上图,左起第一个是全速运行,第二个是停止运行,第三个跳入函数内部,第四个单步执行,第五个跳出函数。
到此,开发环境就全部介绍完了,这是 ARM的开发基础。
1.ARM使用C语言编程是大势所趋
在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不易移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在ARM编程中具有重要地位。
2. ARM C语言程序的基本规则
在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。
C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。
18 S3C2410实验指导书 在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。
ATPCS,就是ARM、Thumb的过程调用标准(ARM/Thumb Procedure Call Standard),它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。
在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满足下面3个条件:
● 在子程序编写时,必须遵守相应的ATPCS规则; ● 堆栈的使用要遵守相应的ATPCS规则; ● 在汇编编译器中使用-atpcs选项。
基本的ATPCS规定,请详见提供的相关PDF文档。
汇编程序调用C程序
汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。 在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。 在调用C程序时,要正确设置入口参数,然后使用BL调用。
3.C程序调用汇编程序
汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。 在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。
在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。
在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里面定义了所有关于2410的硬件寄存器的宏,对宏的读写,就能操作2410的硬件。
具体的编程规则同标准C语言。 4.简单的小例子
下面是一个简单的小例子 IMPORT Main
第3章 S3C2410A实验 19 AREA a ,CODE, READONLY; ENTRY
LDR R0, =0x01d00000 LDR R1, =0x245
STR R1 , [R0] ;把0x245放到地址0X01D00000 BL Main ;跳转到Main()函数处的C/C++程序 END ;标识汇编程序结束 以上是一个简单的程序,先寄存器初始化,然后跳转到Main()函数标识的C/C++代码处,执行主要任务,此处的 Main是声明的C语言中的Main()函数。
五、实验步骤
1.本实验仅使用实验教学系统的CPU板,串口。在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。
3.检查连接是否可靠,可靠后,接入电源线,系统上电。
4.打开ADS1.2开发环境,从里面打开C.mcp项目文件,进行编译。 5.编译通过后,进入ADS1.2调试界面,加载C_Data\\Debug中的映象文件程序映像C.axf。
6.打开/实验软件/tools/目录下的串口调试助手工具,配置为波特率为115200,校验位无,数据位为8,停止位为1。不要选十六进制显示。之后,在ADS调试环境下全速运行映象文件,应出现图2-3-1 界面。本程序连续发送55。
图2-3-1
20 S3C2410实验指导书 下边分析一下主程序的源码。
在C程序前的部分为系统的初始化,这在后边BOOTLOADER的章节里,
要详细介绍。
#include \"..\\inc\\config.h\" //嵌入包括硬件的头文件 unsigned char data; //定义全局变量
void Main(void) {
Target_Init(); //目标板初始化,定义串口的硬件初始化在
//target.c中定义
Delay(10); //延时
data = 0x55; //给全局变量赋值 while(1) {
Uart_Printf(\"%x \串口0输出
Delay(10); } }
把data = 0x55;语句中的0x55,换成其他8位数,重新编译,下载,看看串口工具上输出是什么内容。
第3章 S3C2410A实验 21
实验二 ARM的I/O接口实验
一、实验目的
1.了解ARM7的通用I/O接口
2.掌握I/0功能的复用并熟练的配置,利用PROTUES进行仿真 3.了解S3C2410的通用I/O接口
4.掌握I/0功能的复用并熟练的配置,进行编程实验
二、实验内容
1.利用ADS1.2编译,在Proteus点亮LED灯LED1、LED2,并轮流闪烁!
2.在实验箱的CPU板上点亮LED灯LED1、LED2,并轮流闪烁!
三、实验设备
1.EL-ARM-830+教学实验箱,仿真调试电缆。 2.ADS1.2集成开发环境,仿真调试驱动程序。 3.Proteus软件。
四、实验原理
S3C2410 CPU 共有117个多功能复用输入输出口,分为8组端口: 4个16位的I/O端口 (PORT C、PORT D、PORT E、PORT G) 2个11位的I/O端口 (PORT B 和PORT H) 1个8位的I/O端口(PORT F) 1个23位的I/O端口(PORT A)
这些通用的GPI/O接口,是可配置的, PORTA除功能口外,它们仅用作输出使用,剩下的PORTB、PORTC、PORTD、PORTE、PORTF、PORTG均可作为输入输出口使用。
配置这些端口,是通过一些寄存器来实现的,这些寄存器均有各自的地址,位长32位。往该地址中写入相应的数据,即可实现功能及数据配置。
现用G口举例说明。对于G口如表2-1、表2-2、表2-3,
表2-1 Reset Value Register Address R/W Description GPGCON 0x56000060 R/W Configure the pins of port G 0x0 GPGDAT 0x560000 R/W The data register for port G Undefined GPGUP 0x56000068 R/W Pull-up disable register for 0xF800 port G Reserved 0x5600006C – Reserved
22 S3C2410实验指导书 表2-2 Port G Selectable Pin Functions GPG15 Input/output EINT23 nYPON GPG14 Input/output EINT22 YMON GPG13 Input/output EINT21 nXPON GPG12 Input/output EINT20 XMON GPG11 Input/output EINT19 TCLK1 GPG10 Input/output EINT18 – GPG9 Input/output EINT17 – GPG8 Input/output EINT16 – GPG7 Input/output EINT15 SPICLK1 GPG6 Input/output EINT14 SPIMOSI1 GPG5 Input/output EINT13 SPIMISO1 GPG4 Input/output EINT12 LCD_PWREN GPG3 Input/output EINT11 nSS1 GPG2 Input/output EINT10 nSS0 GPG1 Input/output EINT9 – GPG0 Input/output EINT8 – 表2-3 GPGDAT Bit Description GPG[15:0] [15:0] When the port is configured as input port, data from external sources can be read to the corresponding pin. When the port is configured as output port, data written in this register can be sent to the corresponding pin. When the port is configured as functional pin, undefined value will be read. 表2-4 GPGUP Bit Description GPG[15:0] [15:0] 0: The pull-up function attached to to the corresponding port pin is enabled. 1: The pull-up function is disabled. (GPG[15:11] are \"pull-up disabled\" state at the initial condition.) 也就是说,在地址0x56000060中,给32位的每一位赋值,那么,在CPU的管脚上就定义了管脚的功能值。当G口某管脚配置成输出端口,则在GPDAT对应的地址中的对应位上,写入1,则该管脚输出为高电平,写入0,则该管脚输出为低电平。若配置为功能管脚,则该管脚变成具体的功能脚。其他端口配置请参见PDF文挡。
在程序中对GPI/O各寄存器的读写实现,是通过给宏赋值实现的。这些宏在2410addr.h中定义;具体如:。
#define rGPGCON (*(volatile unsigned *)0x56000060)//G control
第3章 S3C2410A实验 23 #define rGPGDAT (*(volatile unsigned *)0x560000)// G data #define rGPGUP (*(volatile unsigned *)0x56000068) //Pull-up control G
因此,配置端口G,在程序中也就是用如下语句即可: rGPGCON = rGPGCON & 0xFFFF0FFF | 0x00050000; //配置第8、第9位为输出管脚 rGPGDAT = rGPGDAT & 0xFCFF|0x0100;
//配置第8位输出为高电平,第9位输出低电平。 rGPGDAT = rGPGDAT & 0xFCFF|0x0200;
//配置第8位输出为低电平,第9位输出高电平。
其他的各功能寄存器在2410addr.h中也都有相应的定义,参照该做法,即可把GPI/O管脚配置成输入输出端口,也可把管脚配置成所需的功能管脚。
五、实验步骤
1. 本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2. 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。
3. 检查连接是否可靠,可靠后,接入电源线,系统上电。
4. 打开ADS1.2开发环境,从里面打开IO.mcp项目文件,进行编译。 5. 编译通过后,进入ADS1.2调试界面,加载实验程序IO_Data\\Debug中的映象文件程序映像IO.axf。
6. 在ADS调试环境下全速运行映象文件。观察CPU板左下角的LED1、LED2灯轮流的的闪烁!这是对GPGIO口操作的结果。具体实现见程序。
六、参考程序
void Main(void){ int i;
Target_Init();
rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000; while(1){
for(i=0;i<2000000;i++); //延时
rGPGDAT = rGPGDAT & 0xfcff | 0x0200; for(i=0;i<2000000;i++); //延时
rGPGDAT = rGPGDAT & 0xfcff | 0x100; } }
实验三 ARM的中断实验
一、实验目的
1.掌握ARM9的中断原理,能够对S3C2410的中断资源及其相关中断寄存器的进行合理配置
2.掌握对S3C2410的中断的编程的方法
二、实验内容
1.学习响应外部中断请求的配置方法,并通过响应定时器中断,执行中断服务子程序使CPU板上的LED指示灯LED1、LED2闪烁。
三、实验设备
1.EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆。 2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序
四、ARM的中断原理
在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据转移等工作时,常使用此类中断。FIQ的优先级高于IRQ。同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内部中断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址处,若是IRQ中断,则PC指针跳到0x18处,若是FIQ中断,则跳到0x1C处。异常向量地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断服务子程序中。当完成中断服务子程序后,PC指针会返回到被打断的程序的下一条地址处,继续执行程序。这就是ARM中断操作的基本原理。
但是,通常由于生产ARM处理器的各厂家都集成了很多中断请求源,比如,串口中断、AD中断、外部中断、定时器中断、DMA中断等等,所以,很多中断可能同时请求中断,因此,为区分它们,更准确的完成任务,这些中断都有相应的优先级别,以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断优先级,和访问中断标志位的状态来识别到底哪一个中断发生了。
五、三星的2410 ARM处理器的中断的使用
首先,ARM920T CPU 的PSR寄存器中的F位为1,则CPU不会响应中断控制器的FIQ中断,同样,ARM920T CPU 的PSR寄存器中的I位为1,则CPU也不会响应中断控制器的IRQ中断,为使CPU响应中断,须在启动代码中将其设为0,以及使INTMSK寄存器中的相应位置0。
S3C2410共有56个中断源,有26个中断控制器,外部中断EXTIN8~23共用一个中断控制器,外部中断EXTIN4~7共用一个中断控制器,9个UART中断分成3组,共用3个中断控制器,ADC和触摸屏共用一个中断控制器。见表2-6-2
第3章 S3C2410A实验 25 中断的优先级是由主组号和从ID号的级别控制的。 中断优先级产生模块如下图所示:
图2-6-1
从上图可以看出,中断优先级产生模块共有7个判优器,每个判优器是否使能由寄存器PRIORITY[6:0]决定,每个判优器下面有4~6个中断源,这些中断源对应着REQ0~REQ5这6个优先级,这些优先级由寄存器PRIORITY[20:7]的相应位决定。
要正确使用S3C2410的中断控制器,必须设置如下的寄存器,如下表2-6-1所示:
表2-6-1 SRCPND 0x4a000000 R/W 中断源挂起寄存器,当中断产生后,相应位置位 INTMOD 0x4a000004 R/W 中断模式寄存器,设定IRQ或FIQ模式 INTMSK 0x4a000008 R/W 中断屏蔽寄存器,如果相应位置位则该中断被屏蔽 PRIORITY 0x4a00000c R/W 中断优先级控制寄存器,设置中断优先级 INTPND 0x4a000010 R/W 中断挂起寄存器,相应位对应正在执行的中断服务 INTOFFSET 0x4a000014 R 中断源请求偏移寄存器
26 S3C2410实验指导书 SUBSRCPND 0x4a000018 R/W 子中断源挂起寄存器 INTSUBMSK 0x4a00001c R/W 子中断屏蔽寄存器 中断挂起寄存器主要是提供哪个中断有请求的标志寄存器,相应位置1,则说明有该中断请求产生。若相应位为0,则无该中断请求产生。
中断模式寄存器主要是配置该中断是IRQ型中断,还是FIQ型中断。
中断屏蔽寄存器的主要功能是屏蔽相应中断的请求,即使中断挂起寄存器的相应位已经置1,若中断屏蔽寄存器相应位置1,则中断控制器屏蔽该中断请求,也无法让CPU响应该中断。
INTPND为向量IRQ中断服务挂起状态寄存器,当向量IRQ中断发生时,该寄存器内只有一位被设置,即只有当前要服务的中断标志位置位。通过读它的值,就能判断出哪个中断发生了。在INTPND中相应位写入数据,就能清除掉中断挂起寄存器中的中断请求标志位,以使CPU不再响应中断,其实,CPU响应中断是看中断挂起寄存器中的请求标志位有没有置位,若置位,又屏蔽位打开,ARM920T的PSR的F或I为也打开,那么,CPU就响应中断,否则,有一个条件不成立,则CPU无法响应中断。
表2-6-2
六、中断编程实例
第3章 S3C2410A实验 27 在ADS1.2的开发环境下,打开Interrupt.mcp项目,在Application/SRC/Main.c中可以看到,主程序中,在进行目标板初始化后,程序进入死循环,等待中断!在Startup2410/src/target.C文件中包括对要使用的中断控制器的初始化程序,CPU响应了该中断后的中断服务子程序。
该项目的程序流程是,按下程序启动后,初始化定时器1,设定定时器的中断时间,然后,等待定时器中断,当定时器中断到来时,就会进入定时器中断服务子程序,而中断服务子程序会把LED1和LED2灯熄灭或点亮,从现象中看到LED1和LED2 灯忽闪一次,则说明定时器发生了一次中断。最后,关闭中断请求,等待下一次的中断的到来。为使CPU响应中断,在中断服务子程序执行之前,必须打开ARM920T的CPSR中的I位,以及相应的中断屏蔽寄存器中的位。
打开相应的中断屏蔽寄存器中的位,是在target.C中的void Timer1INT_Init(void)函数中,在做了这些准备后,就可以等待中断的到来了。
void Timer1INT_Init(void) { //定时器接口使能 if ((rINTPND & BIT_TIMER1)) { rSRCPND |= BIT_TIMER1; }
pISR_TIMER1 = (int)Timer1_ISR;
rINTMSK &= ~(BIT_TIMER1); //开中断; }
TIMER1INT_Init()函数已在Target_Init()中调用。 详见Interrupt.mcp源代码注释。
七、实验步骤
1. 本实验仅使用实验教学系统的核心CPU板。在进行本实验时,LCD电源开关,音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2. 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。
3. 检查连接是否可靠,可靠后,接入电源线,系统上电。
4. 打开ADS1.2开发环境,从里面打开Interrupt.mcp项目文件,进行编译。
5. 编译通过后,进入ADS1.2调试界面,加载Interrupt_Data\\Debug中的映象文件程序映像Interrupt.axf。
6. 在ADS调试环境下全速运行映象文件。观察LED1和LED2的变化!LED1和LED2灯会由于定时中断的1秒钟发生一次,而一秒钟闪烁一次!也可以改变闪烁的频率,即改变Startup2410\arget.c文件内的void Timer1_init(void)函数里的rTCNTB1 = 48828;的赋值,数字量越小,闪烁频率越快。编译全速运行,观看结果,看闪烁频率是否发生了改变!这是对GPIO口操作的结果。具体实现见程序。
实验四 键盘接口和七段数码管的控制实验
一、实验目的
1. 学习4X4键盘的与CPU的接口原理
2. 掌握键盘芯片HD7279的使用,及8位数码管的显示方法;
二、实验内容
通过4X4按键完成在数码管上的各种显示功能,以及LCD上显示。
三、实验设备
1. EL-ARM-830+教学实验箱,PC机,仿真调试电缆。
2. PC操作系统WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四、实验原理
键盘和7段数码管的控制实验,是通过键盘的控制芯片HD7279A来完成的。它的+信号线及控制线连接到S3C2410上,驱动线直接连到8位共阴的7段数码管上。由于其芯片的接口电压是5V的,而S3C2410的接口电压是3.3V,所以,HD7279A的信号、控制线经过CPLD把电压转换到3.3V,然后送入CPU中。
HD7279是一片具有串行接口的可同时驱动8位共阴式数码管或的LED的智能显示驱动芯片。该芯片同时还可连接多达键的键盘矩阵,单片即可完成显示键盘接口的全部功能。内部含有译码器可直接接受BCD码或16进制码并同时具有两种译码方式。此外还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等,具有片选信号可方便地实现多于8位的显示或多于键的键盘接口。
HD7279在与S3C2410接口中,它使用了4根接口线。片选信号#CS(低电平有效),时钟信号CLK,数据收发信号DATA,中断信号#KEY(低电平送出),EL-ARM-830+实验箱与其的接口中,使用了三个通用I/O接口,和一个外部中断,实现了与HD7279A的连接,S3C2410的外部中断接HD7279的中断#KEY,三个I/O口分别与HD7279A的其他控制、数据信号线相连。HD7279的其它管脚分别接4X4按键和8位数码管。
当程序运行时,按下按键,平时为高电平的HD7279A的#KEY就会产生一个低电平,送给S3C2410的外部中断5请求脚,在CPU中断请求位打开的状态下,CPU会立即响应外部中断5的请求,PC指针就跳入中断异常向量地址处,进而跳入中断服务子程序中,由于外部中断4/5/6/7使用同一个中断控制器,所以,还必须判断一个状态寄存器,判断是否是外部中断5的中断请求,当判
第3章 S3C2410A实验 29 断出是外部中断5的中断请求,则程序继续执行,CPU这时,通过发送#CS片选信号选中HD7279A,再发送时钟CLK信号和通过DATA线发送控制指令信号给HD7279A,HD7279A得到CPU发送的命令后,识别出该命令,然后,扫描按键,把得到键值回送给CPU,同时,在8位数码管上显示相关的指令内容,CPU在得到按键后,有时,程序还会给此键值一定的意义,然后再通过识别此按键的意义,进而进行相应的程序处理。要进一步开发显示功能,请参见关于HD7279芯片及相应的编程资料HD7279A.PDF的文档,其中有详细、完备的编程资料。
在ADS调试环境下全速运行映象文件。按下任意键值,观察数码管的显示。说明:
“0”键表示数码管测试,8个数码管闪烁, “1”键表示数码管右移8位, “2”键表示数码管循环右移, “4”键表示数码管复位, “9”键表示数码管左移8位, “A”键表示数码管循环左移。
其他按键在最右两个数码管上显示键值。根据HD7279A.PDF文档可以进一步开发具体的相应的程序。
详细具体的应用,请参见Key_Led.mcp项目文件。请详细阅读代码注释。 #include \"..\\INC\\config.h\"
void Main() {
char p;
Target_Init(); //目标初始化 while(1) {
switch(key_number)
{
case 0:
send_byte(cmd_test); break;
//测试键
case 1:
for(p=0;p<8;p++) //右移8位 {
30 S3C2410实验指导书
send_byte(0xA0); send_byte(0xC8+7); send_byte(p);
long_delay(); Delay(7000); }
break;
for(p=0;p<8;p++) //循环右移
send_byte(0xA0); send_byte(0xC8+7); send_byte(p);
case 2:
{
long_delay(); Delay(7000); } for(;;) {
if (key_number!=2) {
break; }
Delay(7000); send_byte(0xA2); }
break;
case 3:
write7279(decode1+5,key_number/16*8);
break;
write7279(decode1+4,key_number & 0x0f);
case 4:
send_byte(cmd_reset); //复位键
break; case 5:
第3章 S3C2410A实验 31
write7279(decode1+5,key_number/16*8); break; case 6:
write7279(decode1+5,key_number/16*8);
break;
write7279(decode1+4,key_number & 0x0f);
write7279(decode1+4,key_number & 0x0f);
case 7:
write7279(decode1+5,key_number/16*8);
break;
write7279(decode1+4,key_number & 0x0f);
case 8:
write7279(decode1+5,key_number/16*8);
break;
write7279(decode1+4,key_number & 0x0f);
case 9:
for(p=0;p<8;p++) //左移
send_byte(0xA1); send_byte(0xC8); send_byte(p);
{
long_delay();
Delay(7000); } break;
case 10:
for(p=0;p<8;p++) //循环左移
send_byte(0xA1); send_byte(0xC8); send_byte(p);
{
long_delay(); Delay(7000);
32 S3C2410实验指导书 } for(;;) {
if (key_number!=10) { }
Delay(7000); send_byte(0xA3); }
break;
case 11:
write7279(decode1+5,key_number/16*8);
break;
write7279(decode1+5,key_number/16*8); break;
write7279(decode1+5,key_number/16*8); break;
break;
write7279(decode1+4,key_number & 0x0f);
case 12:
write7279(decode1+4,key_number & 0x0f);
case 13:
write7279(decode1+4,key_number & 0x0f);
case 14:
write7279(decode1+5,key_number/16*8);
break;
write7279(decode1+4,key_number & 0x0f);
case 15:
write7279(decode1+5,key_number/16*8);
break;
write7279(decode1+4,key_number & 0x0f);
default:
break;
}
第3章 S3C2410A实验 33 }
}
key_number = 0xff; Delay(50);
五、实验步骤
1. 本实验使用实验教学系统的CPU板,键盘、8位数码管。在进行本实验时、AD通道选择开关、LCD电源开关、音频的左右声道开关、触摸屏中断选择开关等均应处在关闭状态。
2. 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。
3. 检查连接是否可靠,可靠后,接入电源线,系统上电。
4. 打开ADS1.2开发环境,从里面打开Key_Led.mcp项目文件,进行编译。
5. 编译通过后,进入ADS1.2调试界面,加载实验程序Key_Led_Data\\Debug中的映象文件程序映像Key_Led.axf。
6. 在ADS调试环境下全速运行映象文件。按下任意键值,观察数码管的显示。说明: “0”键表示数码管测试,8个数码管闪烁,“4”键表示数码管复位,“1” 键表示数码管右移8位,“2” 键表示数码管循环右移,“9” 键表示数码管左移8位,“A” 键表示数码管循环左移。其他按键在最右两个数码管上显示键值。根据HD7279A.PDF文档可以进一步开发具体的相应的程序。
实验五 ARM的UART实验
一、实验目的
1. 了解并熟悉UART的概念及其工作原理; 2. 掌握ARM相应的寄存器配置; 3. 能够用C编写出相应的串口程序;
二、实验内容
1. 在实验箱的CPU板上运行程序,在超级终端上回显发送的数据!
三、实验设备
1. EL-ARM-830+教学实验箱, PC机,仿真调试电缆,串口电缆。 2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四、UART的工作原理
通用的串行I/O 接口有许多种,最常见的一种标准是美国电子工业协会推荐的一种标准,即RS—232C。这种标准在PC系列中大量采用9针接插件。在ARM的处理器中,也采用了这种标准。具体的硬件机械、电气特性请参阅有关RS232串口通信的书籍。
S3C2410的UART(Universal Asynchronous Receiver and Transmitter,通用异步收发器)单元提供3个的异步串行I/O口,都可以运行于中断模式或DMA模式。也就是说,UART可以产生中断请求或DMA请求,以便在CPU和UART之间传递数据。它最高可支持115200bps的传输速率。S3C2410中每个UART通道包含两个用于接收和发送数据的16位FIFO队列。
S3C2410的每个UART都有波特率发生器、数据发送器、数据接收器,及控制单元。内部数据通过并行数据总线到达发送单元后,进入FIFO队列,或不进入FIFO队列,通过发送移相器TXDn引脚发送出去,送出的数据通过一个电压转换芯片将3.3V的TTL/COMS电平转换成EIA(Electronic industries Association)电平,送进PC的串口。
数据接收的过程刚好相反,外部串口信号需要先把EIA电平经电压转换芯片把电平转换3.3V的TTL/COMS电平,然后由RXDn管脚进入接收移相器,经过转换后放到并行数据总线上,由CPU进行处理或直接送到存储器中(DMA方式下)。
第3章 S3C2410A实验 35 在正确使用S3C2410的串口进行收发实验前,首先,要配置相关的寄存器组。见表2-8-1。表2-8-1为串口0和串口1的线性控制寄存器的配置说明,推荐使用值:0x03;
infra-Red Mode:红外、正常模式选择:
[6] 0 正常模式, 1 红外模式
UART LINE CONTROL REGISTER
There are three UART line control registers including ULCON0, ULCON1, and ULCON2 in the UART block. Register Address ULCON0 ULCON1 ULCON2 0x50000000 0x50004000 0x50008000 R/W R/W R/W R/W Description UART channel 0 line control register UART channel 1 line control register UART channel 2 line control register ULCONn ULCON0 ULCON1 ULCON2 Bit Description R/W R/W R/W UART channel 0 line control register UART channel 1 line control register UART channel 2 line control register
表2-8-1
Parity Mode:奇偶校验模式选择:
[5:3] 0XX 无奇偶校验
100 奇校验 101 偶校验
36 S3C2410实验指导书
110 强制校验/校验1 111 强制校验/校验0
Number of stop bit:停止位选择:
[2] 0 1个停止位, 1 2个停止位
Word length: 字长
[1:0] 00 5位, 01 6位,10 7位, 11 8位
表2-8-2为串口0和串口1的控制寄存器的配置说明,推荐使用值:0X245;
Clock Selection 选择使用的时钟
[10] 0: 使用PCLK, 1:使用UCLK引脚引入的时钟 Tx interrupt type 发送中断请求类型
[9] 0 =边沿, 1 =电平 Rx interrupt type 接收中断请求类型
[8] 0 =边沿, 1 =电平
Rx time out enable 允许/不允许Rx超时中断
[7] 0 =禁止 1 =使能
Rx error status interrupt enable 允许/不允许UART错误中断
[6] 0 =不允许 1 =允许
第3章 S3C2410A实验 37 表2-8-2
Loop-back Mode: 该位为1使UART进入loop back 模式
[5]
0 = 正常模式, 1 = Loop-back 模式
Send Break Signal: 该位为1使UART发送一个暂停条件,该位在发送一个暂停信号后自动清除
[4]
0 = 正常发送, 1 = 发送断点信号
38 S3C2410实验指导书 Transmit Mode: 这两位确定哪个模式可以写TX数据到UART发送保持寄存器
[3:2] 00 = 禁止
01 = 中断请求或查询模式
10 = BDMA0 请求 (仅为 UART0) 11 = BDMA1 请求 (仅为 UART1) Receive Mode: 读数据
00 = 禁止
01 = 中断请求或查询模式
10 = BDMA0 请求 (仅为 UART0) 11 = BDMA1 请求 (仅为 UART1)
表2-8-3为串口0和串口1的FIFO控制寄存器的配置说明,推荐使用值:0X00;
这两位确定哪个模式可以从UART接收缓冲寄存器
表2-8-3
Tx FIFO Trigger Level: 这两位确定发送FIFO的触发条件
[7:6] 00 =空, 01 =4字节, 10 =8字节, 11 =12字节 Rx FIFO TriggerLevel 这两位确定接收FIFO的触发条件
[5:4] 00 =空, 01 =4字节, 10 =8字节, 11 =12字节 Reserved [3]
保留
1= Tx FIFO 复位
Tx FIFO Reset TX FIFO复位位,该位在FIFO复位后自动清除
[2] 0 =正常,
Rx FIFO Reset Rx FIFO复位位,该位在FIFO复位后自动清除
第3章 S3C2410A实验 39 [1] 0 = 正常, 1= Rx FIFO 复位 FIFO Enable FIFO模式选择
[0] 0 = 禁止FIFO 1 = FIFO 模式
表2-8-3为串口0和串口1的模式控制寄存器的配置说明,推荐使用值:0X00;
AFC(Auto Flow Control AFC是否允许
[4] 0 = 禁止 1 = 使能 Request to Send: 如果AFC允许,该位忽略
[0] 0 = 高电平(禁止 nRTS) 1 = 低电平(激活 nRTS)
表2-8-4
这是需要用程序配置的有关串口的寄存器,其他的是一些状态寄存器,如UART TX/RX状态寄存器, UART 错误状态寄存器, UART FIFO状态寄存器, UART MODEM状态寄存器, UART 接收缓冲寄存器和FIFO寄存器。
当然,关于UART 波特率设置,则有专门的分频寄存器进行设置。计算公式具体如下:
UBRDIVn = (int)(PCLK / (bps x 16) ) –1 或者 UBRDIVn = (int)(UCLK / (bps x 16) ) –1
PCLK是外围总线频率,UCLK是UCLK引脚引入的时钟频率。例如在PCLK=50.7MHz下,当波特率取115200时,
UBRDIVn = int(50700000 / 115200 / 16) – 1 = 26 根据具体的程序要求,正确配置各寄存器。
详细具体设置应用,请参见HARDWARE\\ADS\\实验八目录下的UART.mcp项目文件。请详细阅读代码注释。
五、实验步骤
1. 本实验使用实验教学系统的CPU板,串口。在进行本实验时,LCD电
40 S3C2410实验指导书 源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2. 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。使用串口线连接PC机串口1和实验箱CPU板的串口,使用直连线连接底板串口2和PC机上的串口2之间的电缆。
3. 检查连接是否可靠,可靠后,接入电源线,系统上电。
4. 打开ADS1.2开发环境,从里面打开\\实验程序\\HARDWARE\\ADS\\实验八\mcp项目文件,进行编译。
5. 编译通过后,进入ADS1.2调试界面,加载实验程序\\HARDWARE\\ADS\\实验八\\UART_Data\\Debug中的映象文件程序映像UART.axf。
6. 打开超级终端0,超级终端1,进行设置(115200,8位数据,1位停止位,无奇偶校验);
7. 在ADS调试环境下,全速运行映象文件。激活超级终端0,敲键盘,观察超级终端0,超级终端1的内容显示!所敲键盘的字符应该在两个超级终端上显示出来。实验的原理就是把键盘敲击的字符通过PC机的串口发送给实验箱上的ARM的CPU板的串口0,ARM的CPU板上的串口得到字符后,通过ARM把它送给CPU板上的串口0输出给PC,以及通过底板上的串口1,送给PC机。这样,就完成了串口间的收发数据。
实验六 ARM的A/D接口实验
一、实验目的
1. 学习A/D 接口原理
2. 掌握S3C2410的AD相关寄存器的配置及编程应用方法;
二、实验内容
1. 在实验箱的CPU板上运行程序,在超级终端及LCD上显示采集到的数据值!
三、实验设备
1. EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。
2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四、实验原理
A/D 转换器是模拟信号和CPU 之间联系的接口,它是将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进行分析、处理、存储、控制和显示。在工业控制和数据采集及许多其他领域中,A/D 转换是不可缺少的。
按照转换速度、精度、功能以及接口等因素,常用的A/D转换器有以下两种:
a. 双积分型的A/D转换器
双积分型也称为二重积分式,其实质是测量和比较两个积分的时间,一个是对模拟信号电压的积分时间T,此时间常是固定的,另一个是以充电后的电压为初值,对参考电源Vn的反向积分,积分电容被放电至零,所需的时间Ti。模拟输入电压Vi与参考电压Vref之比,等于上述两个时间之比。由于Vref、T时间固定,而放电时间Ti可以测出,因而可以计算出模拟输入电压的大小。
b. 逐次逼近型的A/D转换器
逐次逼近型也称为逐位比较式,它的应用比积分型更为广泛,通常主要有逐次逼近寄存器SAR、D/A转换器、比较器以及时序和逻辑控制等部分组成。通过逐次把设定的SAR寄存器中的数字量经D/A转换后得到电压Vc与待转换模拟电压V0进行比较。比较时,先丛SAR的最高位开始,逐次确定各位的数码应为‘1’还是‘0’,而得到最终的转换值。其工作原理为:转换前,先将SAR寄存
42 S3C2410实验指导书 器各位清零,转换开始时,控制逻辑电路先设定SAR寄存器的最高位为‘1’,其余各位为‘0’,此值经D/A转换器转换成电压Vc,然后将Vc与输入模拟电压Vx 进行比较。如果Vx 大于等于Vc,说明输入的模拟电压高于比较的电压,SAR最高位的‘1’应保留;如果Vx小于Vc,说明SAR的最高位应清除。然后在SAR的次高位置‘1’,依上述方法进行D/A转换和比较。如此反复上述过程,直至确定出SAR寄存器的最低位为止,此过程结束后,状态线改变状态,表明已完成一次转换。最后,逐次逼近寄存器SAR中的数值就是输入模拟电压的对应数字量。位数越多,越能准确逼近模拟量,但转换所需的时间也越长。
五、三星2410的A/D的工作介绍
S3C2410的A/D 转换器包含一个8路模拟输入混合器,可以将模拟输入信号转换成10位数字编码。在AD转换时钟为2.5MHz时,其最大转换率为500KSPS。AD转换操作支持片上采样保持功能和掉电模式。
特征如下:
最大转换速率:500KSPS 组。
见表2-9-1。表2-18为A/D转换寄存器的配置说明。
输入电压范围:0-3.3V
在正确使用S3C2410的AD进行采集实验前,首先,要配置相关的寄存器
第3章 S3C2410A实验 43 表2-9-1
ECFLG
[15]
A/D转换状态标志(只读) 0 = A/D 转换中
1 = A/D 转换结束
PRSCEN A/D转换预比例因子(预定值)使能 [14] 0 = 禁止 1 = 使能 PRSCVL [13:6] 预比例因子设置
SEL_MUX 模拟输入通道选择
[5:3] 000 = AIN0 001 = AIN1 010 = AIN2 011 = AIN3
100 = AIN4 101 = AIN5 110 = AIN6 111 = AIN7
STDBM 模式选择
[2] 0 = 普通模式 1 = 待命模式
READ_ START A/D转换通过读来启动
[1] 0 = 通过读操作关闭 1 = 通过读操作启动
ENABLE_START A/D转换通过允许来启动(如果READ_START位无效) [0] 0 = 关闭 1 = A/D 转换开始,之后该位自动
清除
表2-9-2为A/D 转换器转换模式的配置说明,
表2-9-2
在普通AD转换时,AUTO_PST和XY_PST都设置成0即可,其他各位与触摸屏有关,可以忽略,不需设置。
44 S3C2410实验指导书 表2-9-3为A/D 转换器数据寄存器的说明。 表2-9-3
在这个数据寄存器是只读,可以读取A/D转换的数字量。9~0位是转换后的数字量。
根据具体的程序要求,正确配置各寄存器。
现举例如下:(仔细分析转换过程)
int Get_AD(unsigned char ch) { int i;
int val=0;
if(ch>7) return 0; //通道不能大于7
for(i=0;i<16;i++) { //为转换准确,转换16次 rADCCON |= 0x1; //启动 A/D 转换 rADCCON = rADCCON & 0xffc7 | (ch<<3);
while (rADCCON & 0x1); //避免第一个标志出错 while (!(rADCCON & 0x8000)); //避免第二个标志出错 val += (rADCDAT0 & 0x03ff); Delay(10);
}
return (val>>4); //为转换准确,除以16取均值 }
void AD_Init(void){
rADCDLY = (0x100); // ADC Start or Interval Delay rADCTSC = 0; //设置成为ADC模式
rADCCON=(1<<14)|(49<<6)|(ch<<3)|(0<<2)|(0<<1)|(0);//设置ADC控制寄存器
}
注:rADCCON,这种宏形式,在Startup2410/INC/2410addr.h中已定义!
第3章 S3C2410A实验 45 详细具体的应用,请参见HARDWARE\\ADS\\实验九目录下的AD.mcp项目文件。请详细阅读代码注释。
六、实验步骤
1.本实验使用实验教学系统的CPU板,串口、AD通道选择开关、LCD单元。在进行本实验时,音频的左右声道开关、触摸屏中断选择开关等均应处在关闭状态。
2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。使用串口线连接PC机串口1和实验箱CPU板的串口,使用直连线连接底板串口2和PC机上的串口2之间的电缆。
3.检查连接是否可靠,可靠后,接入电源线,系统上电。拨码开关SW5为选中的A/D转换的通道,值得注意的是本实验系统八个通道可以同时采集一个信号源。实验时要选中采集的通道号,即对应的SW5开关拨到ON状态。例如SW3的1拨到ON状态,说明用AD转换器的通道1采集,如果,8个通道全部选择为ON,则表示用8个通道采集。本实验程序使用通道1采集数据,所以,SW5的1应该拨到ON状态。要给ADIN一个输入信号,可以是底板上的SQUARE信号和SINE信号,也可是外部信号,但是必须注意,接外部电压信号时,要共地,以及信号的电压范围为0—2.5V,切记!!!
4.打开ADS1.2开发环境,从里面打开\\实验程序\\HARDWARE\\ADS\\实验九\\AD.mcp项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载AD_Data\\Debug中的映象文件程序映像AD.axf。
6.在ADS调试环境下,全速运行映象文件。打开LCD电源开关, 检查SW3上选择的是通道几。确认后,观察LCD上1通道当前采集的情况。由于液晶的显示速度比波型慢许多,所以要暂停程序才会看到比较清楚的波形。由于信号源输出后,电压经过缩放和偏置处理。使得的ARM CPU板所采集到的电压值的变化范围不足0—2.5V,故而采集到的数字值,不能满程。但这些不会影响实验原理的显示。
实验七 LCD的显示实验
一、实验目的
1. 学习LCD与ARM的LCD的控制器的接口原理; 2. 掌握内置LCD控制器驱动编写方法; 3. 学习调用简单的GUI绘图。
二、实验内容
46 S3C2410实验指导书 1. 在320X240的彩色LCD上显示点、线、圆,设置颜色、改变颜色、显示英文、显示汉字,填充区域等基本绘制功能。
三、实验设备
1. EL-ARM-830+-S3C2410教学实验箱,PentiumII以上的PC机,仿真调试电缆。
2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四、实验原理
通常我们常用的LCD显示模块,有两种,一是带有驱动电路的LCD显示模块,一是不带驱动电路的LCD显示屏。大部分ARM处理器中都集成了LCD的控制器,所以,针对ARM芯片,一般不使用带驱动电路的LCD显示模块。
S3C2410 中具有内置的LCD 控制器,它能将显示缓存(在SDRAM存储器中)中的LCD图像数据传输到外部的LCD驱动电路上的逻辑功能。它支持单色、4级、16级灰度LCD显示,以及8位彩色、12位彩色LCD显示。在显示灰度时,它采用时间抖动算法(time-based dithering algorithm)和帧率控制 (Frame Rate Control)方法,在显示彩色时,它采用RGB的格式,即RED、GREEN、BLUE,三色混合调色。通过软件编程,可以实现332的RGB调色的格式。对于不同尺寸的LCD显示器,它们会有不同的垂直和水平象素点、不同的数据宽度、不同的接口时间及刷新率,通过对LCD 控制器中的相应寄存器写入不同的值,来配置不同的LCD 显示板。
S3C2410中内置的LCD 控制器提供了下列外部接口信号(CPU引脚): VFRAME: LCD 控制器和LCD 驱动器之间的帧同步信号。它通知LCD屏开始显示新的一帧,LCD 控制器在一个完整帧的显示后发出VFRAME 信号。
VLINE: LCD 控制器和LCD 驱动器间的同步脉冲信号,LCD 驱动器通过它来将水平移位寄存器中的内容显示到LCD 屏上。LCD 控制器在一整行数据全部传输到LCD 驱动器后发出VLINE 信号。
VCLK: LCD 控制器和LCD 驱动器之间的象素时钟信号,LCD 控制器在VCLK的上升沿发送数据,LCD 驱动器在VCLK 的下降沿采样数据。
VM: LCD 驱动器所使用的交流信号。LCD 驱动器使用VM 信号改变用于打开或关闭象素的行和列电压的极性。VM 信号在每一帧触发,也可通过编程在一定数量的VLINE 信号后触发。
LCD_PWREN:LCD面板电源使能控制信号 VD[23:0]: LCD 象素数据输出端口。
第3章 S3C2410A实验 47
LCD 控制器包含REGBANK, LCDCDMA, VIDPRCS, TIMEGEN和LPC3600。REGBANK 具有17 个可编程寄存器,用于配置LCD 控制器。LCDCDMA为专用的DMA,它可以自动地将显示数据从帧内存中传送到LCD 驱动器中。通过专用DMA,可以实现在不需要CPU 介入的情况下显示数据。VIDPRCS 从LCDCDMA 接收数据,将相应格式(比如4/8 位单扫描和4 位双扫描显示模式)的数据通过VD[23:0]发送到LCD的驱动器上。TIMEGEN 包含可编程的逻辑,以支持常见的LCD 驱动器所需要的不同接口时间和速率的要求。TIMEGEN 部分产生VFRAME,VLINE, VCLK, VM 等信号。
图2-12-1
如图2-12-1所示,该图揭示了LCD彩色图像数据在LCD的显示缓存中的存放结构,以及彩色图像数据在LCD液晶屏上是如何显示的规则。
320x240像素的8位数据的256彩色LCD屏,显示一屏所需的显示缓存为320x240x8bit,即76800字节,在显示缓存中每个字节,如图2-12-1 最右面的图所示,都对应着屏上的一个象素点,因此,8位256彩色显示的显示缓存与LCD屏上的象素点是字节对应的。每个字节中又有RGB格式的区分,既有332的RGB,又有233的RGB格式,这因硬件而定。在彩色图像显示时,首先要给显示缓存区一个首地址,这个地址要在4字节对齐的边界上,而且,需要在SDRAM的4MB字节空间之内。它是通过配置相应的寄存器来实现的。之后,接下来的76800字节,就为显示缓存区,这里的数据会直接显示到LCD屏上去。屏上图像的变化是由于该显示缓存区内数据的变化而产生的。
在了解了8位彩色LCD显示原理之后,通过正确配置S3C2410的LCD控制器相应的寄存器,就能正确启动LCD的显示。请仔细阅读各寄存器的配置项。
表2-12-1为LCD的控制寄存器1的的配置说明。
48 S3C2410实验指导书
表2-12-1
LINECNT:(只读) 这些位反映行计数值
[27:18] CLKVAL:
确定VCLK的频率.
[17:8] STN:VCLK = HCLK / (CLKVAL x 2) ( CLKVAL≥2 ) TFT:VCLK = HCLK / [(CLKVAL + 1) x 2] ( CLKVAL≥0 ) MMODE:
[7]
确定VM的改变速度.
0 = 每一帧, 1 = 由 MVAL 定义 选择显示模式
00 = 4位双扫描显示模式(STN)
PNRMODE:
[6:5]
01 = 4位单扫描显示模式(STN) 10 = 8位单扫描显示模式(STN) 11 = TFT显示器
BPPMODE:选择BPP(Bits Per Pixel)模式 [4:1] 0011:STN8位彩色模式
第3章 S3C2410A实验 49 0100:STN12位彩色模式
ENVID: [0] 1 = 允许
表2-12-2 为LCD的控制寄存器2的的配置说明。
LCD视频输出和逻辑的允许与否 0 = 不允许,LCD FIFO 清除
表2-12-2
VBPD: [31:24] 在STNLCD上面应该置0
LINEVAL: [23:14]
确定LCD屏的垂直尺寸
VFPD: [13: 6] 在STNLCD上面应该置0 VSPW: [5: 0] 在STNLCD上面应该置0 表2-12-3 为LCD的控制寄存器3的的配置说明。
表2-12-3
WDLY: 确定VLINE和VCLK之间的延时
[25:19] 00 = 16HCLK, 01 = 32 HCLK,
50 S3C2410实验指导书 10 = 48 HCLK, 11 = HCLK
HOZVAL: [18:8] 确定LCD屏的水平尺寸,HOZVAL值的确定必须满足一行总的字节数是4的倍数。如120点的LCD 的水平尺寸X=120不支持,因为一行包含15个字节,而X=128可以被支持(16个字节),额外的8点将被LCD驱动器放弃.
LINEBLANK:[31:21] 确定行扫描的空闲时间. LINEBLANK的单位是HCLK X 8.
如: LINEBLANK 为10, 则在VCLK中插入10个系统时钟
表2-12-4 为LCD的控制寄存器4的的配置说明。
表2-12-4
MVAL [15:8] 如果MMODE=1,这两位定义VM信号以什么速度变化
VM Rate = VLINE Rate / ( 2 * MVAL)
WLH:[7:0]
确定VLINE高电平的宽度
[7:2] 保留 [1:0]
00 = 16HCLK, 01 = 32 HCLK,
10 = 48 HCLK, 11 = HCLK
表2-12-5 为LCD的控制寄存器5的的配置说明。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务