




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验目的了解S3C2440处理器UART异步串口编程结构及串行通信原理。熟悉S3C2440异步串口UART内相关寄存器的作用。掌握UART单字符方式下的数据串行通信程序实现方法。以单字符收发方式在S3C2440与PC机之间通过异步串口UART互传数据,发送采用查询方式,接收采用中断方式。实验过程描述实验过程描述 本程序实现本程序实现S3C2440裸机系统与裸机系统与PC机之间的串行通信。机之间的串行通信。 PC机端可以运行机端可以运行Windows下的串口通信工具程序下的串口通信工具程序“HyperTerminal”或者或者Linux系统下的串口通信工具程序系统下的串口通信工具程序“Minic
2、om”。 本程序开机运行后首先会向本程序开机运行后首先会向PC机发送一些预存的提示信息,提示机发送一些预存的提示信息,提示PC机在串口通信工具环境下键入字符,之后转入循环等待接收机在串口通信工具环境下键入字符,之后转入循环等待接收PC机发机发送来的字符。送来的字符。 PC机每键入一个字符就会被发送到机每键入一个字符就会被发送到S3C2440目标板串口,若键入回车目标板串口,若键入回车键表示一次传输结束。键表示一次传输结束。 S3C2440目标板串口在逐个接收目标板串口在逐个接收PC机发来的字符过程中一方面将字符机发来的字符过程中一方面将字符存入接收数据缓存区,另一方面又将该字符发送回存入接收数
3、据缓存区,另一方面又将该字符发送回PC机显示,直到机显示,直到收到回车符为止。收到回车符为止。 最后将暂存在接收数据缓存区内收到的全部字符一次全部发送到最后将暂存在接收数据缓存区内收到的全部字符一次全部发送到PC机显示。机显示。 本例只考虑开放本例只考虑开放UART0接收中断接收中断(用子中断源屏蔽寄存器屏蔽其它中用子中断源屏蔽寄存器屏蔽其它中断断)。实验电路原理实验电路原理u 嵌入式系统异步串行通信广泛采用通过嵌入式系统异步串行通信广泛采用通过9针针/孔孔D型连接头型连接头连接的三线串行通信方式,包括一对连接的三线串行通信方式,包括一对收收/发交叉连接发交叉连接的信的信号线和号线和一根共用的
4、地线一根共用的地线。u 这种无联络信号线连接方式需要编程员这种无联络信号线连接方式需要编程员注意避免出现数注意避免出现数据覆盖据覆盖现象。现象。UART UART 异步串行通信工作方式回顾异步串行通信工作方式回顾 由前面内容可知异步串行通信有以下工作方式:由前面内容可知异步串行通信有以下工作方式:本实验采用了单字符数据收发方式。本实验采用了单字符数据收发方式。 单字符收发方式每个通信帧只包含一个字符数据。单字符收发方式每个通信帧只包含一个字符数据。 可以采用多次数据帧收发实现多字符数据传输可以采用多次数据帧收发实现多字符数据传输(N(N个字符个字符N N个数据帧个数据帧) ) 单字符收发方式可
5、以选择查询或中断工作方式。单字符收发方式可以选择查询或中断工作方式。 本实验参考程序本实验参考程序发送采用查询方式,接收采用中断方式发送采用查询方式,接收采用中断方式 二进制数据二进制数据直接收直接收/ /发发基于基于MODEMMODEM数据收数据收/ /发发单字符数据收单字符数据收/ /发发FIFOFIFO多字符数据收多字符数据收/ /发发单字符数据收单字符数据收/ /发发FIFOFIFO多字符数据收多字符数据收/ /发发查询方式查询方式中断方式中断方式自动流控方式自动流控方式非自动流控方式非自动流控方式查询方式查询方式中断方式中断方式DMADMA方式方式中断方式中断方式DMADMA方式方式
6、中断方式中断方式异步串异步串行通信行通信数据收数据收发方式发方式UARTUART单字符数据串行通信方式相关编程结构单字符数据串行通信方式相关编程结构UARTUART单字符数据串行通信方式下的相关编程结构:单字符数据串行通信方式下的相关编程结构: 线控寄存器线控寄存器ULCONULCONTX/RXTX/RX状态寄存器状态寄存器UTRSTATUTRSTAT 波特率分频器波特率分频器UBRDIVUBRDIV 接收移位寄存器接收移位寄存器 控制寄存器控制寄存器UCONUCON发送移位寄存器发送移位寄存器波特率波特率时钟发时钟发生器生器TXDnTXDnRXDRXDnPCLKPCLKFCLK/nFCLK/
7、nUEXTCKLUEXTCKL接外设总线接外设总线 错误错误状态寄存器状态寄存器UERSTATUERSTAT中断请求信号中断请求信号INTRQINTRQ常规串行输入常规串行输入常规串行输出常规串行输出接收缓冲寄存器接收缓冲寄存器URXHURXH 发送缓冲寄存器发送缓冲寄存器UTXHUTXH异异步步串串口口内内部部总总线线UARTUART单字符数据串行通信方式下的相关编程寄存器单字符数据串行通信方式下的相关编程寄存器以下是以以下是以UART0UART0为例的单字符数据通信方式相关编程寄存器特点:为例的单字符数据通信方式相关编程寄存器特点: 初始化需要编程设置的寄存器:初始化需要编程设置的寄存器:
8、 线控寄存器线控寄存器ULCONULCON,控制寄存器控制寄存器UCONUCON,波特率分频寄存器波特率分频寄存器UBRDIVUBRDIV 数据收发过程中需要读取的状态寄存器数据收发过程中需要读取的状态寄存器: TX/RXTX/RX状态寄存器状态寄存器UTRSTATUTRSTAT,( (接收接收) )错误状态寄存器错误状态寄存器UERSTATUERSTAT 收发数据寄存器收发数据寄存器: 接收缓冲寄存器接收缓冲寄存器URXHURXH,发送缓冲寄存器发送缓冲寄存器UTXHUTXH 寄存器寄存器偏移地址偏移地址读写属性读写属性功能描述功能描述复位值复位值ULCON0ULCON00 x0 x5005
9、000000000000读读/ /写写UART0UART0的线控寄存器的线控寄存器0 x000 x00UCON0UCON00 x500000040 x50000004读读/ /写写UART0UART0控制寄存器控制寄存器0 x000 x00UTRSTAT0UTRSTAT00 x0 x5005000001000010只读只读UART0 TX/RXUART0 TX/RX状态寄存器状态寄存器0 x60 x6UERSTAT0UERSTAT00 x0 x5005000001400014只读只读UART0 UART0 错误状态寄存器错误状态寄存器0 x60 x6UTXH0UTXH00 x50000020(
10、L)0 x50000020(L)0 x50000023(B)0 x50000023(B)字节写字节写UART0UART0发送缓冲寄存器发送缓冲寄存器不定不定URXH0URXH00 x500000240 x50000024(L L)0 x500000270 x50000027(B B)字节读字节读UART0UART0接收缓冲寄存器接收缓冲寄存器不定不定UBRDIV0UBRDIV00 x0 x5005000002800028读读/ /写写UART0UART0波特率分频寄存器波特率分频寄存器不定不定UARTUART异步串口通信相关程序功能模块异步串口通信相关程序功能模块 主程序流程框图主程序流程框图
11、 查询方式发送子程序查询方式发送子程序 中断方式接收子程序中断方式接收子程序 开始开始裸机板基本功能单元初始化裸机板基本功能单元初始化设置设置UART0UART0中断相关寄存器及指针中断相关寄存器及指针设置设置UART0UART0相关功能单元寄存器相关功能单元寄存器开启开启UART0UART0接收中断接收中断 UART0 UART0接收中断?接收中断? 检索并进入中断处理程序检索并进入中断处理程序YN 返回用户模式返回用户模式 查询发送状态位查询发送状态位 读取字符数据读取字符数据 向向UTXH0写字符数据写字符数据 恢复现场恢复现场 返回调用点返回调用点 保存现场信息保存现场信息YN状态位状
12、态位=1? 中断源判别程序中断源判别程序进入接收中断处理程序进入接收中断处理程序保存现场信息保存现场信息 读读URXH0URXH0内字符数据内字符数据恢复现场恢复现场中断返回中断返回清清0 0各中断悬挂寄存器各中断悬挂寄存器 调用发送子程序发送字符调用发送子程序发送字符参考程序总体组成结构参考程序总体组成结构1 1、数据符号化定义、数据符号化定义(1)端口地址及数据符号化定义:)端口地址及数据符号化定义:(2)存储器数据宽度寄存器)存储器数据宽度寄存器BWSCON内各位域需要设置的数据内各位域需要设置的数据(3)CPSR中各工作模式的设置位信息中各工作模式的设置位信息(4)管理模式、)管理模式
13、、IRQ模式及用户模式堆栈指针数据模式及用户模式堆栈指针数据2 2、代码区、代码区1: 裸机运行环境建立裸机运行环境建立(1)代码段定义及异常向量表)代码段定义及异常向量表(2)用于设置特殊功能寄存器区的)用于设置特殊功能寄存器区的13个存储器参数个存储器参数(3)以下)以下IsrIRQ为中断源判别程序为中断源判别程序(4)复位异常处理程序,是开机或复位后首先运行的程序)复位异常处理程序,是开机或复位后首先运行的程序(5)设置)设置SDRAM存储器参数存储器参数(6)初始化可能用到的不同工作模式下的堆栈区)初始化可能用到的不同工作模式下的堆栈区3 3、代码区、代码区2: 主程序主程序 + 字符
14、发送子程序字符发送子程序 + 字符接收中断子程序字符接收中断子程序4 4、数据区、数据区: 预存的提示信息,数据缓存区,二级中断向量表预存的提示信息,数据缓存区,二级中断向量表参考程序内的数据区说明参考程序内的数据区说明 数据区定义信息数据区定义信息包括包括: (1) (1)预存的提示信息及数据缓存区,预存的提示信息及数据缓存区,(2)(2)二级中断向量表二级中断向量表(1)预存的提示信息及数据缓存区预存的提示信息及数据缓存区AREA RamData, DATA, READWRITEstring1 DCB 13,10,“-UART单字符串行通信实验单字符串行通信实验-”DCB 13,10,“请
15、将请将UART0与与PC串口进行连接,然后启动超级终端程序串口进行连接,然后启动超级终端程序(115200, 8, N, 1)”DCB 13,10,“从现在开始您从超级中端发送的字符串(回车键结束)将被同时回显至超级终端从现在开始您从超级中端发送的字符串(回车键结束)将被同时回显至超级终端”DCB 13,10,“注意:本实验采用中断方式接收注意:本实验采用中断方式接收,查询方式发送数据查询方式发送数据,其他方式请读者自行实验之。其他方式请读者自行实验之。,0string2 DCB 13,10,Please input:,0string3 DCB 13,10, You input:,0enter
16、Key DCB 13,10,0dataInput SPACE 1000注:以上大部分信息将由字符发送子程序发送到注:以上大部分信息将由字符发送子程序发送到PC机超级终端并加以显示机超级终端并加以显示参考程序内的数据区说明参考程序内的数据区说明( 2 ) 二级向量表二级向量表(共预留(共预留32个字单元,对应中断源悬挂寄存器内定义的中断源)个字单元,对应中断源悬挂寄存器内定义的中断源)DATA_AREA ; 二级向量表起始地址为二级向量表起始地址为0 x33FF_FF00HandleEINT0# 4; 0 x33FF_FF00 = 二级向量表起始地址二级向量表起始地址HandleEINT1# 4
17、; 0 x33FF_FF04HandleEINT2# 4; 0 x33FF_FF08HandleEINT3# 4; 0 x33FF_FF0CHandleEINT4_7# 4; 0 x33FF_FF10HandleEINT8_23# 4HandleCAM# 4HandleBATFLT# 4HandleTICK# 4; 0 x33FF_FF20HandleWDT# 4HandleTIMER0 # 4HandleTIMER1 # 4HandleTIMER2 # 4; 0 x33FF_FF30HandleTIMER3 # 4HandleTIMER4 # 4HandleUART2 # 4HandleLC
18、D # 4; 0 x33FF_FF40HandleEINT0HandleEINT0HandleEINT1HandleEINT1HandleUART0HandleUART0 HandleRTC HandleRTC HandleADC HandleADC二级向量表二级向量表(每表项每表项4字节字节) 接收中断子程序接收中断子程序handleUart0_rxhandleUart0_rx参考程序内的数据区说明参考程序内的数据区说明(2)二级向量表)二级向量表(续续)HandleDMA0# 4HandleDMA1# 4HandleDMA2# 4HandleDMA3# 4; 0 x33FF_FF50Han
19、dleMMC# 4HandleSPI0# 4HandleUART1# 4HandleNFCON# 4; 0 x33FF_FF60HandleUSBD# 4HandleUSBH# 4HandleIIC# 4HandleUART0 # 4; 本实验将要用到的向量单元,具体值由主程序运行过程中填入本实验将要用到的向量单元,具体值由主程序运行过程中填入HandleSPI1 # 4HandleRTC # 4HandleADC # 4END单字符数据串行通信方式下所需的初始化程序流程单字符数据串行通信方式下所需的初始化程序流程设:发送采用查询方式,接收采用中断方式。设:发送采用查询方式,接收采用中断方式。
20、 设置设置GPHCONGPHCON寄存器确定寄存器确定RXDRXD和和TXDTXD引脚引脚 设置设置ULCONULCON寄存器确定数据帧格式寄存器确定数据帧格式 设置设置UCONUCON寄存器确定中断查询方式寄存器确定中断查询方式 设置设置UBRDIVUBRDIV寄存器确定波特率寄存器确定波特率 清清0 SRCPND0 SRCPND和和SUBSRCPNDSUBSRCPND寄存器寄存器提取中断处理程序地址并填入二级向量表提取中断处理程序地址并填入二级向量表 设置不同工作模式下的堆栈区起始指针设置不同工作模式下的堆栈区起始指针 屏蔽所有中断并设置屏蔽所有中断并设置UARTUART中断为中断为IRQ
21、IRQ模式模式 清清0 INTMSK INTMSK和和INTSUBMSKINTSUBMSK寄存器对应位寄存器对应位 参考程序内的代码说明参考程序内的代码说明 (MainMain之前代码因与前章相同不再列出)之前代码因与前章相同不再列出) 1、 初始化串口初始化串口UART0相关寄存器代码相关寄存器代码 Main ldr r0,=pGPHCON; GPIO H组控制寄存器组控制寄存器 ldr r1,=0 x0a0 ; 设置设置GPH2为串行数据发送端为串行数据发送端TxD0,GPH3为接收端为接收端RxD0, str r1,r0 ; 其余保留默认值其余保留默认值0 ldr r0,=pGPHUP
22、; GPIO H组上拉电阻寄存器组上拉电阻寄存器 ldr r1,=0 x7f3 ; GPH2和和GPH3上拉电阻接通,其余禁止上拉电阻接通,其余禁止 str r1,r0 ldr r0,=pINTMOD; 中断模式寄存器设置中断模式寄存器设置 ldr r1,=0 x0; 选择选择IRQ模式模式 str r1,r0 ldr r0,=pULCON0; UART0线控寄存器线控寄存器 ldr r1,=0 x3; 设置设置UART0帧格式为:帧格式为:8位有效数据,位有效数据,1位停止位,位停止位, str r1,r0;无校验,禁止红外无校验,禁止红外 ldr r0,=pUCON0 ; UART0控制寄
23、存器控制寄存器 ldr r1,=0 x345; 收收/发为中断或查询方式发为中断或查询方式,产生接收错误中断产生接收错误中断, 中断信号为电平形式中断信号为电平形式, str r1,r0; 波特率发生器输入时钟为波特率发生器输入时钟为PCLK(本实验本实验=50MHz),其余取默认值,其余取默认值 ldr r0,=pUBRDIV0; 波特率设置寄存器波特率设置寄存器 ldr r1,=0 x01a ; UBRDIV0=(PCLK/(115200*16)-1 取整取整26=0 x01a str r1,r0 参考程序内的代码说明参考程序内的代码说明 2、清、清0有关的悬挂寄存器有关的悬挂寄存器ldr
24、 r0,=pSRCPND ; ldr r0,=pSRCPND ; 中断源悬挂寄存器中断源悬挂寄存器ldr r1,=0 xffffffffldr r1,=0 xffffffff ; 0=; 0=未请求,未请求,1=1=已请求已请求, ,向对应位写向对应位写1 1清清0 0已有的中断请求已有的中断请求str r1,r0str r1,r0 ; ; 清清0 0所有主中断源所有主中断源ldr r0,=pINTPND ; ldr r0,=pINTPND ; 中断悬挂寄存器中断悬挂寄存器ldr r1,=0 xffffffff ; 0=ldr r1,=0 xffffffff ; 0=未请求,未请求,1=1=已
25、请求已请求, ,向对应位写向对应位写1 1清除中断请求清除中断请求str r1,r0str r1,r0 ; ; 清清0 0中断悬挂寄存器所有位中断悬挂寄存器所有位ldr r0,=pSUBSRCPND ; ldr r0,=pSUBSRCPND ; 子中断源悬挂寄存器,子中断源悬挂寄存器,014014位有效位有效ldr r1,=0 x7ffff ; 0=ldr r1,=0 x7ffff ; 0=未请求,未请求,1=1=已请求已请求, ,向对应位写向对应位写1 1清清0 0已有的中断请求已有的中断请求str r1,r0str r1,r0 ; ; 清清0 0所有子中断源所有子中断源 参考程序内的代码说
26、明参考程序内的代码说明3、发送超级终端提示信息、发送超级终端提示信息ldr r0,=string1ldr r1,=0 x0; r1=初值为初值为0的发送数据计数器的发送数据计数器bl uart_puts; 调用发送子程序向调用发送子程序向PC机输出字符串机输出字符串string1get_init ldr r0,=string2ldr r1,=0 x0; r1=初值为初值为0的发送数据计数器的发送数据计数器bl uart_puts;调用发送子程序向调用发送子程序向PC机输出字符串机输出字符串string2ldr r0,=dataInput ; 接收数据缓冲区起始地址接收数据缓冲区起始地址ldr
27、r1,=0 x0; r1=初值为初值为0的接收数据计数器的接收数据计数器 参考程序内的代码说明参考程序内的代码说明4 4、设置、设置UART0UART0中断服务程序在二级向量表,开启中断,进入中断响应死循环中断服务程序在二级向量表,开启中断,进入中断响应死循环ldr r2,=HandleUART0 ldr r2,=HandleUART0 ; ; 设置设置UART0UART0中断服务程序在二级向量表内的入口地址中断服务程序在二级向量表内的入口地址adrl r3,handleUart0_rx; adrl r3,handleUart0_rx; 提取中断服务程序的入口地址并置入二级向量表内提取中断服务
28、程序的入口地址并置入二级向量表内str r3,r2str r3,r2ldr r2,=pINTSUBMSKldr r2,=pINTSUBMSK ; ; 开启子中断屏蔽挂寄存器的开启子中断屏蔽挂寄存器的RXD0RXD0位位ldr r3,=0 x7feldr r3,=0 x7fe ; 0=; 0=中断服务有效,中断服务有效,1=1=中断服务无效中断服务无效str r3,r2str r3,r2ldr r2,=pINTMSKldr r2,=pINTMSK ; ; 开启中断屏蔽挂寄存器的开启中断屏蔽挂寄存器的UART0UART0位位ldr r3,=0 xefffffffldr r3,=0 xeffffff
29、f ; 0=; 0=中断服务有效,中断服务有效,1=1=中断服务无效中断服务无效str r3,r2str r3,r2get_startget_start b .b . ; ; 死循环等待死循环等待UART0UART0的的RXD0RXD0中断中断mrs r2,cpsrmrs r2,cpsr ; ; 从中断模式切换为用户模式,并允许响应从中断模式切换为用户模式,并允许响应IRQIRQ中断请求中断请求 bic r2,r2,#MODEMASK|NOINTbic r2,r2,#MODEMASK|NOINT orr r2,r2,#USERMODEorr r2,r2,#USERMODEmsr cpsr_cx
30、sf,r2msr cpsr_cxsf,r2b get_startb get_startLTORGLTORG;注:主程序注:主程序MainMain内容到此结束,后面为接收中断服务子程序,内容到此结束,后面为接收中断服务子程序, 和字符及字符串发送子程序。和字符及字符串发送子程序。 参考程序内的代码说明参考程序内的代码说明5、接收中断服务子程序,单字符方式、接收中断服务子程序,单字符方式handleUart0_rxstmfd sp!,r8,r9,lrldr r2,=pURXH0; 数据接收缓冲寄存器数据接收缓冲寄存器ldr r3,r2; r3=读出的数据读出的数据and r3,r3,#0 xff;
31、 只保留字数据中的最低字节,即有效字符数据只保留字数据中的最低字节,即有效字符数据cmp r3,#0 x0d; 判断收到的字符是否为回车符判断收到的字符是否为回车符beq stop_flag ; 是,转是,转stop_flag(以回车符结束输入以回车符结束输入)strb r3,r0,r1; 将字符数据写入接收数据缓存区将字符数据写入接收数据缓存区bl uart_putc; 将收到的字符再发回发送方供对方察看将收到的字符再发回发送方供对方察看add r1,r1,#1; 否,接收数据计数值加否,接收数据计数值加1b rx_return; 中断返回中断返回stop_flagmov r3,#0; 将字
32、符串结束标识符将字符串结束标识符0存入接收数据缓存区存入接收数据缓存区strb r3,r0,r1ldr r0,=string3; 设置字符串设置字符串string3起始地址起始地址ldr r1,=0 x0; 设置计数初值为设置计数初值为0bl uart_puts; 调用字符串发送子程序向调用字符串发送子程序向PC机发送机发送string3参考程序内的代码说明参考程序内的代码说明(接收(接收中断服务子程序中断服务子程序续)续)ldr r0,=dataInput; 接收数据缓存区起始地址接收数据缓存区起始地址ldr r1,=0 x0bl uart_puts; 将接收到的数据全部输出到将接收到的数据
33、全部输出到PC机机ldr r0,=enterKey; 输出回车换行符输出回车换行符ldr r1,=0 x0bl uart_putsldr r0,=string2ldr r1,=0 x0; r1=初值为初值为0的发送数据计数器的发送数据计数器bl uart_puts; 向向PC机输出字符串机输出字符串string2ldr r0,=dataInput; 接收数据缓冲区起始地址接收数据缓冲区起始地址ldr r1,=0 x0; r1=初值为初值为0的接收数据计数器的接收数据计数器rx_return; 中断返回。先清除中断,以备后续中断得以响应中断返回。先清除中断,以备后续中断得以响应ldr r2,=pSUBSRCPND; 子中断源悬挂寄存器,子中断源悬挂寄存器,014位有效位有效ldr r3,=0 x7ffff; 0=未请求,未请求,1=已请求已请求,清除所有子中断请求清除所有子中断请求str r3,r2ldr r2,=pSRCPND; 中断源悬挂寄存器中断源悬
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论