ARM嵌入式系统与应用实验报告.docx
《ARM嵌入式系统与应用实验报告.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统与应用实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
![ARM嵌入式系统与应用实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/9/9ed26161-1bf1-49a3-8b30-d7f5c7e0cd55/9ed26161-1bf1-49a3-8b30-d7f5c7e0cd551.gif)
ARM嵌入式系统与应用实验报告
信息科学与技术系
ARM嵌入式系统与应用实验报告
专业班级____电信0803班__________
学号____________
姓名______________
实验老师_____________
总成绩_________________________
2011—2012学年
(1)
实验一通用IO口试验
一、实验目的
熟悉ARM芯片I/O口编程配置方法;
掌握ARM芯片I/O口控制LED显示的方法。
二、实验设备
硬件:
嵌入式实验平台一套、仿真器一个、PC机一台。
软件:
Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。
三、实验内容
控制嵌入式实验箱上的LED轮流点亮。
四、实验原理
S3CRRB0X芯片上共有71个多功能I/O引脚,他们分别为7组I/O端口:
2个9位I/O端口(端口E和F)
2个8位I/O端口(端口D和G)
1个16位I/O端口(端口C)
1个10位I/O端口(端口A)
1个11位I/O端口(端口B)
每组端口都可以通过软件配置寄存器来满足不同系统合设计的需要。
在运行主程序之前,必须先对每一个用到的引脚的功能进行设置。
如果某些引脚的附庸功能没有使用,那么可以先将该引脚设置为I/O口。
S3C44B0X芯片与端口相关的寄存器
(1)端口控制寄存器(PCONA~G):
在S3C44B0X芯片中,大部分引脚是使用多路复用的,所以要确定每个引脚的功能。
PCONn(端口控制寄存器)能够定义引脚功能。
如果PG0~PG7作为掉电模式下的唤醒信号,那么这些端口必须配置成中断模式。
(2)端口数据寄存器(PDATA~G):
如果端口定义为输出口,那么输出数据可以写入PDATn中相应的位;如果端口定义为输入口,那么输入数据可以从PDATn相应的位中读入。
(3)端口上拉寄存器(PUPC~G):
通过配置端口上拉寄存器,可以使该组端口与上拉电阻连接或断开。
当寄存器中相应位配置为0时,该引脚接上拉寄存器;当寄存器中相应位配置为1时,该引脚不接上拉电阻。
(4)外部中断寄存器(EXTINT):
通过不同的信号方式可以使8个外部中断被请求。
EXTINT寄存器可以根据外部中断的需求,将中断触发信号配置为低电平触发,高电平触发,下降沿触发,上升沿触发和边沿触发几种方式。
五、实验操作步骤
1.启动,使用ARMExecuatableImage工程模板新建一个工程;
2.添加两个组INC和SRC;
3.将INC文件夹下所有文件添加到组INC中;
4.将SRC文件夹下所有文件添加到组SRC中;
5.建立源文件,编写实验程序,添加到工程中;
6.编译链接选项的设置同前面实验;
7.编译链接工程,点击Debug按钮,启动AXD进行调试;
8.连续点击stepin按钮,单步运行程序,主板上的三个LED灯循环点亮。
9.理解并掌握本实验原理及程序,完成练习题
六、实验参考程序
#include""
#include""
#include""
#include""
voidIsr_Init(void);
voidHaltUndef(void);
voidHaltSwi(void);
voidHaltPabort(void);
voidHaltDabort(void);
voidMain(void)
{
rSYSCFG=SYSCFG_8KB;
#if(PLLON1)
ChangePllValue(PLL_M,PLL_P,PLL_S);
#endif
Isr_Init();中断初始化
Port_Init();端口初始化
Uart_Init(0,115200);波特率为115200
Uart_Select(0);选择串口0
Delay(0);
}
voidHaltUndef(void)
{
Uart_Printf("Undefinedinstructionexception!
!
!
\n");
while
(1);
}
voidHaltSwi(void)
{
Uart_Printf("SWIexception!
!
!
\n");
while
(1);
}
voidHaltPabort(void)
{
Uart_Printf("Pabortexception!
!
!
\n");
while
(1);
}
voidHaltDabort(void)
{
Uart_Printf("Dabortexception!
!
!
\n");
while
(1);
}
七、思考题
1、在原程序的基础上改变led灯的闪烁方式。
将其中部分程序改为以下程序,使其变为每次两个灯一起亮
Uart_Printf("\nstart\n");
while
(1)
{Delay(5000);掌握ARM的串行口工作原理
2.学习编程实现ARM的UART通讯
3.掌握CPU利用串口通讯的方法
二、实验设备
硬件:
ARM嵌入式开发板、用于ARM7TDMI的JTAG仿真器、PC、串口线。
软件:
PC机操作系统win98、Win2000或WinXP、ARMSDT或
集成开发环境、仿真器驱动程序、超级终端通讯程序。
三、预备知识
1.用ARM集成开发环境,编写和调试程序的基本过程
2.ARM应用程序的框架结构
3.了解串行总线
四、实验内容
学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM
的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。
编程实现ARM和计算机实现串行通讯。
ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。
五、实验原理
串行通讯是微计算机之间种常见的近距离通讯手段,因使用方便、编程简单而广泛使用,几乎所有的微控制器、PC都提供串行通讯接口。
1.异步串行I/0
异步串行方式是将传输数据的每个字符位接位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同传输通道,因此串行I/0可以减少信号连线,最少用对线即可进行。
接收方对于同根线上连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/0方式,双方使用各自的时钟信号,而且允许时钟频率有定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
图串行通信字符格式
图给出异步串行通信中个字符的传送格式。
开始前,线路处于空闲状态,送出连续1”。
传送开始时首先发个0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的1”信号,这个停止位可以约定持续1位、位或2位的时间宽度。
至此个字符传送完毕,线路又进入空闲,持续为1”。
经过段随机的时间后,下个字符开始传送才又发出起始位每个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为2400,4800,9600,19200bps等。
接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:
1)奇偶错:
在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。
2)帧格式错:
个字符从起始位到停止位的总位数不对。
3)溢出错:
若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生
溢出错。
每种错误都会给出相应的出错信息,提示用户处理。
2.ARM自带的串行口寄存器
S3C4510B的UART单元提供两个独立的异步串行I/O口(AsynchronousSerialI/O,SIO),每个通讯口均可工作在中断模式或DMA模式,也即UART能产生内部中断请求或DMA请求在CPU和串行I/O口之间传送数据。
S3C4510B的UART单元特性包括:
1)波特率可编程
2)支持红外发送与接收
3)1~2个停止位
4)5、6、7或8个数据位
5)奇偶校验
每一个异步串行通讯口都具有独立的波特率发生器、发送器、接收器和控制单元波特率发生器可由片内系统时钟MCLK驱动,或由外部时钟UCLK(Pin64)驱动;发送器和接收器都有独立的数据缓冲寄存器和数据移位器。
待发送的数据首先传送到发送缓冲寄存器,然后拷贝到发送移位器并通过发送数数据引脚UATXDn发送出去。
接收数据首先从接收数据引脚UARXDn移入移位器,当接收到一个字节时就拷贝到接收缓冲寄存器。
SIO的控制单元通过软件控制工作模式的选择、状态和中断产生。
当使用UART的发送中断功能时,应在初始化UART之前先写一个字节数据到
UART的发送缓冲寄存器,这样,当发送缓冲寄存器空时就可以产生UART的发送中断。
图串行口功能模块
表为UART特殊功能寄存器描述
UART行控制寄存器(UARTLineControlRegisters,ULCON0、ULCON1):
下面简要介绍UART操作。
关于数据发送、数据接收、中断产生、波特率产生、回环模式和自动流控制的详细介绍,请参考数据手册及其他相关资料。
发送数据帧是可编程的。
1个数据帧包含1个起始位、5-8个数据位、1个可选的奇偶校验位和1~2个停止位。
停止位通过行控制寄存器ULCONn配置。
与发送帧类似,接收帧也是可编程的。
接收帧由1个起始位、5-8个数据位、
1个可选的奇偶校验位和1~2个行控制寄存器ULCONn中的停止位组成。
接收器还可以检测过速错误、奇偶校验错误、帧错误和传输中断。
每一个错误均可以设置一个错误标志。
à过速错误指已接收到的数据在读取之前被新接收的数据覆盖。
à奇偶校验错误指接收器检测到的校验和与设置的不相符。
à帧错误指没有接收到有效的停止位。
à传输中断指接收数据RxDn保持逻辑0超过1帧的传输时间。
在FIFO模式下,如果RxFIFO非空,而在3个字的传输内没有接收到数据,那么产生超时。
与UART有关的寄存器主要有以下几个:
(1)UART行控制寄存器ULCONn。
该寄存器的位6决定是否使用红外模式,位
5~位3决定校验方式,位2决定停止位长度,位1和位0决定每帧的数据位数。
(2)UART控制寄存器UCONn。
该寄存器决定UART的各种模式。
UARTFIFO
控制寄存器UFCONn和UARTMODEM控制寄存器,分别用来决定UARTFIFO和
MODEM的模式。
其中UFCONn的第0位决定是否启用FIFO,UMCONn的第0位是请
求发送位。
另外,读/写状态寄存器UTRSTAT以及错误状态寄存器UERSTAT,可以反映芯片目前的读/写状态以及错误类型。
FIFO状态寄存器UFSTAT和MODEM状态寄存器UMCONn,通过前者可以读出目前FIFO是否已满足其中的字节数;通过后者可以读出目前MODEM的CTS状态。
(3)发送寄存器UnRegisteredUTXH和接收寄存器URXH。
这2个寄存器存放发送和接收的数据,当然只有1个字节8位数据。
需要注意的是,在发生溢出错误时,接收的数据必须被读出来;否则会引发下次溢出错误。
(4)波特率分频寄存器UBRDIV
UART的波特率发生器的输入时钟可以为系统时钟,也可以从外部引入时钟信号。
若选用系统时钟为波特率发生器的输入时钟,当系统时钟为50MHz时,则最大的波特率时钟输出为MCLK2/16(=),其中MCLK2为系统时钟MCLK除以2。
UCLK引脚为UART0、UART1的外部时钟输入引脚。
UART波特率发生器的输入
时钟MCLK2或UCLK,由寄存器UCCON[6]选择。
图、图为UART波特率发生器的结构图和典型的波特率。
六.实验步骤
1.新建工程文件。
2.定义与UART有关的各个寄存器地址和些特殊的位命令。
3.编写串口驱动函数:
4.在主函数中实现将从串口0接收到的数据发送到串口0
实验参考程序:
():
#include""
#include""
#include""
#include""
voidIsr_Init(void);
voidHaltUndef(void);
voidHaltSwi(void);
voidHaltPabort(void);
voidHaltDabort(void);
voidMain(void)
{U8aa;定义一个变量
rSYSCFG=SYSCFG_8KB;
#if(PLLON==1)
ChangePllValue(PLL_M,PLL_P,PLL_S);
#endif
Isr_Init();中断初始化
Port_Init();端口初始化
Uart_Init(0,115200);设置串口波特率115200
Uart_Select(0);选择串口0
Delay(0);IRQenable,FIQdisable
rINTCON=0x5;
}
voidHaltUndef(void)
{Uart_Printf("Undefinedinstructionexception!
!
!
\n");
while
(1);
}
voidHaltSwi(void)
{Uart_Printf("SWIexception!
!
!
\n");
while
(1);
}
voidHaltPabort(void)
{Uart_Printf("Pabortexception!
!
!
\n");
while
(1);
}
voidHaltDabort(void)
{Uart_Printf("Dabortexception!
!
!
\n");
while
(1);
}
七、思考题
1、串行通讯最少需要几根线,分别如何连接?
答:
最少2根线,一个接收一个发送,电脑端9针接口,2接收(RXD),3发送端(TXD),最好再加一个5接地端(GND)
2、ARM的串行口有几个,相应的寄存器是什么?
答:
3个;线性控制寄存器ULCONn,控制寄存器UCONn,FIFO控制寄存器UFCONn,控制寄存器UMCONn,状态寄存器UTRSTAT,错误状态寄存器UERSTAT,
FIFO状态寄存器UFSTAT,发送寄存器UTXH和接收寄存器URXH,波特率因子寄存器UBRDIV。
实验三查询和中断方式键盘试验
一、实验目的
通过实验了解ARM的查询和中断的方式及原理。
通过实验掌握ARM的编程方法。
二、实验设备
硬件:
嵌入式实验平台套、仿真器个、PC机台。
软件:
Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。
三、实验内容
掌握ARM中断工作原理,了解S3C44B0X的中断寄存器,掌握常用的中断的编程方法。
编写中断处理程序实现:
1.使用按钮K2触发EINT5,LED2亮
2.使用按钮K3触发EINT6,LED3亮
3.使用按钮K4触发EINT7,LED4亮
四、实验原理
S3C44B0X的中断控制器可以接受来自30个中断源的中断请求。
这些中断源来自DMA,UART,SIO等芯片内部外围或外部引脚。
在这些中断源中,有4个外部中断(EINT4/5/6/7)是逻辑“或“的关系。
中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,选择其中一个中断,通过FIQ或IRQ向ARM7TMDI内核发出中断请求。
实际最初的ARM7TMDI内核只有FIQ(快速中断请求)和IRQ(通用中断请求)2种中断,其他中断都是各个芯片厂家在设计芯片的时候定义的。
对这些中断根据其优先级高低来进行处理。
例如,如果定义所有的中断为IRQ中断(通过中断模式设置),并且同时有10个中断发出请求,那么可以通过读中断优先级寄存器来确定哪一个中断将被优先执行。
一般的中断模式在进入所需的服务程序之前,需要很长的中断反应时间。
为了解决这个问题,S3C440X提供了一种新的中断模式。
叫做中断向量模式。
它具有CISC结构为控制器的特征,能够降低中断反应时间。
也就是说,S3C44B0X的中断控制器硬件本身直接提供了对向量中断服务的支持。
当众多中断源请求中断时,硬件优先级逻辑会判断哪一个中断将被执行;同时,硬件逻辑自动执行0x18(或0x1c)地址到各个中断源向量地址的跳转指令;然后再由中断源向量进入相应的中断处理程序。
与原来软件实现的方法相比,这种方法可以显著的减少中断反应时间。
1.中断控制器的操作
1)程序状态寄存器的F位到1位
如果CPSR程序状态寄存器的F位被置位1,那么CPU将不接受来自中断控制器的FIQ;
如果CPSR程序状态控制器的I位被置为1,那么CPUJ将不接受来自中断控制器的IRQ。
因此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄存器的F位和I位清0,并且中断屏蔽寄存器的INTMSK中相应的位也要清0。
2)中断模式(INTMOD)
ARM7TMDI提供了2种中断模式,FIQ和IRQ模式。
所有中断源在中断请求时都要确定使用了哪一种中断模式。
3)中断挂起寄存器(INTPND)
用于指示对应的中断是否被激活。
如果挂起位被置位1,那么无论标志I和标志F是否被清0,都会执行相应的中断服务程序。
中断挂起寄存器为只读寄存器,所以在中断服务程序中必须加入I_ISPC和F_ISPC写1的操作来清除挂起条件。
4)中断屏蔽寄存器(INTMSK)
当INTMSK寄存器的屏蔽位为1时,对应的中断被禁止;当INTMSK寄存器的屏蔽位为0时,对应的中断正常执。
如果一个中断的屏蔽位为1,那么在该中断发出请求的时候挂起位还是会被置位1。
如果中断屏蔽寄存器的GLOBAL位被设置为1,那么中断挂起位在中断请求时还会被设置,但所有的中断请求都不会被受理
2.中断源
在30个中断源中,有26个中断源单独提供中断控制器,4个外部中断(ENT4/5/6/7)是逻辑“或“的关系,他们共享同一个中断控制器。
另外2个UART错误中断(UERROR0/1)也是共同一个中断控制器
4.中断控制专用寄存器
1)中断控制寄存器(见表5-1和5-2)
表5-1中断控制寄存器
2)中断挂起寄存器
中断挂起寄存器INTPND共有26位,每位对应个中断源,当中断请求产生时,相应的位被置为1。
该寄存器为只读寄存器,所以在中断服务程序中必须加入I-ISPC和F-ISPC写1的操作来清除挂起条件。
如果有几个中断源同时发出中断请求,那么不管他们否被屏蔽,他们相应的挂起位都会被置1。
只优先级寄存器会根据其优先级的设置来响应当前优先级最高的中断。
3)中断模式寄存器
中断模式寄存器INTMOD共有26位,每位对应一个中断源。
当中断源的模式位设置为1,对应的中断会由ARM7TDMI的内核以FIQ模式处理。
相反地,当模式位设置为0时,中断会以IRQ模式处理。
4)中断屏蔽寄存器
在中断屏蔽寄存器INTMSK中,除了全屏蔽位globalmask外,其余的26位都分别对应一个中断源。
当屏蔽位为1时,对应的中断源被屏蔽;当屏蔽位为0时,该中断可以正常使用。
如果全屏蔽位globalmask被设置为1,则所有的中断都不执行。
5)RQ向量模式相关寄存器
S3C44B0X中的优先级产生模块包含5个单元,1个主单元和4个从单元。
每优先级产生单元管理6个中断源。
主优先级产生单元管理4个从单元和2个中断源。
每个从单元有优先级中断源(sGn)和2个固定优先级中断源(kn).这4个中断源的优先级由I_PSLV寄存器决定的。
另外2个固定优先级中断源在6个中断源的优先级最低。
6)IRQ/FIQ中断源挂起清0寄存器
通过对IRQ/FIQ中断挂起清0寄存器I_ISPC/F_ISPC相应的位写1来清除中断挂起INTPND。
五、实验参考程序
#include""
#include""
#include""
#include""
voidIsr_Init(void);
voidHaltUndef(void);
voidHaltSwi(void);
voidHaltPabort(void);
voidHaltDabort(void);
voidMain(void)
{
U8which_key;定义变量
rSYSCFG=SYSCFG_8KB;
#if(PLLON==1)
ChangePllValue(PLL_M,PLL_P,PLL_S);
#endif
Isr_Init();中断初始化
Port_Init();端口初始化
Uart_Init(0,115200);设置波特率为115200
Uart_Select(0);选择串口0
rPCONG=0x00ff;
}
voidHaltUndef(void)
{
Uart_Printf("Undefinedinstructionexception!
!
!
\n");
while
(1);
}
voidHaltSwi(void)
{
Uart_Printf("SWIexception!
!
!
\n");
while
(1);
}
voidHaltPabort(void)
{
Uart_Printf("Pabortexception!
!
!
\n");
while
(1);
}
voidHaltDabort(void)
{
Uart_Printf("Dabortexception!
!
!
\n");
while
(1);
}
实验四看门狗
一、实验目的
通过实验熟悉S3C44B0X系列ARM7控制器的看门狗的基本工作原理及应用
二、实验设备
硬件:
嵌入式实验平台一套、仿真器一个、PC机一台
软件:
WINDOWS