当前位置:
文档之家› 实验7 UART串行通信基本方式实验
实验7 UART串行通信基本方式实验
; 0x33FF_FF50
; 0x33FF_FF60
; 本实验将要用到的向量单元,具体值由主程序运行过程中填入
单字符数据串行通信方式下所需的初始化程序流程
设:发送采用查询方式,接收采用中断方式。
屏蔽所有中断并设置UART中断为IRQ模式 设置不同工作模式下的堆栈区起始指针 设置GPHCON寄存器确定RXD和TXD引脚 设置ULCON寄存器确定数据帧格式 设置UCON寄存器确定中断查询方式 设置UBRDIV寄存器确定波特率 清0 SRCPND和SUBSRCPND寄存器 提取中断处理程序地址并填入二级向量表 清0 INTMSK和INTSUBMSK寄存器对应位
UART异步串口通信相关程序功能模块
主程序流程框图
开始 裸机板基本功能单元初始化 读取字符数据 进入接收中断处理程序 保存现场信息 读URXH0内字符数据 清0各中断悬挂寄存器 恢复现场 中断返回
查询方式发送子程序
保存现场信息
中断方式接收子程序
中断源判别程序
设置UART0相关功能单元寄存器
设置UART0中断相关寄存器及指针 调用发送子程序发送字符 开启UART0接收中断 UART0接收中断? N Y 检索并进入中断处理程序 返回用户模式 N 查询发送状态位 状态位=1?
Y 向UTXH0写字符数据
恢复现场 返回调用点
参考程序总体组成结构
1、数据符号化定义
(1)端口地址及数据符号化定义: (2)存储器数据宽度寄存器BWSCON内各位域需要设置的数据 (3)CPSR中各工作模式的设置位信息 (4)管理模式、IRQ模式及用户模式堆栈指针数据
2、代码区1: 裸机运行环境建立
中断方式
自动流控方式
DMA方式 中断方式 DMA方式
FIFO多字符数据收/发 FIFO多字符数据收/发 基于MODEM 数据收/发 单字符数据收/发
非自动流控方式
中断方式
查询方式 中断方式
本实验采用了单字符数据收发方式。 单字符收发方式每个通信帧只包含一个字符数据。
可以采用多次数据帧收发实现多字符数据传输(N个字符N个数据帧) 单字符收发方式可以选择查询或中断工作方式。 本实验参考程序发送采用查询方式,接收采用中断方式
波特率 时钟发 生器
PCLK FCLK/n UEXTCKL
接外设总线
TXDn 常规串行输出
UART单字符数据串行通信方式下的相关编程寄存器
以下是以UART0为例的单字符数据通信方式相关编程寄存器特点:
初始化需要编程设置的寄存器: 线控寄存器ULCON,控制寄存器UCON,波特率分频寄存器UBRDIV 数据收发过程中需要读取的状态寄存器: TX/RX状态寄存器UTRSTAT,(接收)错误状态寄存器UERSTAT 收发数据寄存器: 接收缓冲寄存器URXH,发送缓冲寄存器UTXH
参考程序内的代码说明
3、发送超级终端提示信息
ldr r0,=string1 ldr r1,=0x0 bl uart_puts get_init ldr r0,=string2 ldr r1,=0x0 bl uart_puts ldr r1,=0x0 ; r1=初值为0的发送数据计数器 ;调用发送子程序向PC机输出字符串string2 ; r1=初值为0的接收数据计数器 ; r1=初值为0的发送数据计数器 ; 调用发送子程序向PC机输出字符串string1
参考程序内的代码说明
(Main之前代码因与前章相同不再列出)
1、 初始化串口UART0相关寄存器代码
Main ldr r0,=pGPHCON; GPIO H组控制寄存器 ldr r1,=0x0a0 ; 设置GPH2为串行数据发送端TxD0,GPH3为接收端RxD0, str r1,[r0] ; 其余保留默认值0 ldr r0,=pGPHUP ; GPIO H组上拉电阻寄存器 ldr r1,=0x7f3 ; GPH2和GPH3上拉电阻接通,其余禁止 str r1,[r0] ldr r0,=pINTMOD; 中断模式寄存器设置 ldr r1,=0x0 ; 选择IRQ模式 str r1,[r0] ldr r0,=pULCON0; UART0线控寄存器 ldr r1,=0x3 ; 设置UART0帧格式为:8位有效数据,1位停止位, str r1,[r0] ;无校验,禁止红外 ldr r0,=pUCON0 ; UART0控制寄存器 ldr r1,=0x345 ; 收/发为中断或查询方式,产生接收错误中断, 中断信号为电平形式, str r1,[r0] ; 波特率发生器输入时钟为PCLK(本实验=50MHz),其余取默认值 ldr r0,=pUBRDIV0; 波特率设置寄存器 ldr r1,=0x01a ; UBRDIV0=(PCLK/(115200*16))-1 取整≈26=0x01a str r1,[r0]
参考程序内的代码说明
2、清0有关的悬挂寄存器
ldr ldr str ldr ldr str ldr ldr str r0,=pSRCPND r1,=0xffffffff r1,[r0] r0,=pINTPND r1,=0xffffffff r1,[r0] r0,=pSUBSRCPND r1,=0x7ffff r1,[r0] ; ; ; ; ; ; ; ; ; 中断源悬挂寄存器 0=未请求,1=已请求,向对应位写1清0已有的中断请求 清0所有主中断源 中断悬挂寄存器 0=未请求,1=已请求,向对应位写1清除中断请求 清0中断悬挂寄存器所有位 子中断源悬挂寄存器,0~14位有效 0=未请求,1=已请求,向对应位写1清0已有的中断请求 清0所有子中断源
参考程序内的数据区说明
(2)二级向量表(续)
HandleDMA0 HandleDMA1 HandleDMA2 HandleDMA3 HandleMMC HandleSPI0 HandleUART1 HandleNFCON HandleUSBD HandleUSBH HandleIIC HandleUART0 HandleSPI1 HandleRTC HandleADC END # # # # # # # # # # # # # # # 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
string3 DCB 13,10," You input:",0
enterKey DCB 13,10,0 dataInput SPACE 1000
注:以上大部分信息将由字符发送子程序发送到PC机超级终端并加以显示
参考程序内的数据区说明
( 2 ) 二级向量表(共预留32个字单元,对应中断源悬挂寄存器内定义的中断源)
S3C2440目标板串口在逐个接收PC机发来的字符过程中一方面将字 符存入接收数据缓存区,另一方面又将该字符发送回PC机显示,直 到收到回车符为止。
最后将暂存在接收数据缓存区内收到的全部字符一次全部发送到PC 机显示。 本例只考虑开放UART0接收中断(用子中断源屏蔽寄存器屏蔽其它中 断 )。
(1)代码段定义及异常向量表 (2)用于设置特殊功能寄存器区的13个存储器参数 (3)以下IsrIRQ为中断源判别程序 (4)复位异常处理程序,是开机或复位后首先运行的程序 (5)设置SDRAM存储器参数 (6)初始化可能用到的不同工作模式下的堆栈区 3、代码区2: 主程序 + 字符发送子程序 + 字符接收中断子程序
DATA_AREA HandleEINT0 HandleEINT1 HandleEINT2 HandleEINT3 HandleEINT4_7 HandleEINT8_23 HandleCAM HandleBATFLT HandleTICK HandleWDT HandleTIMER0 HandleTIMER1 HandleTIMER2 HandleTIMER3 HandleTIMER4 HandleUART2 HandleLCD # # # # # # # # # # # # # # # # # ; 二级向量表起始地址为0x33FF_FF00 4 ; 0x33FF_FF00 = 二级向量表起始地址 4 ; 0x33FF_FF04 二级向量表(每表项4字节) 4 ; 0x33FF_FF08 4 ; 0x33FF_FF0C HandleEINT0 4 ; 0x33FF_FF10 HandleEINT1 4 4 4 4 ; 0x33FF_FF20 4 HandleUART0 4 4 HandleRTC 4 ; 0x33FF_FF30 HandleADC 4 4 4 handleUart0_rx 4 ; 0x33FF_FF40 接收中断子程序
实验过程描述
本程序实现S3C2440裸机系统与PC机之间的串行通信。
PC机端可以运行Windows下的串口通信工具程序“HyperTerminal” 或者Linux系统下的串口通信工具程序“Minicom”。
本程序开机运行后首先会向PC机发送一些预存的提示信息,提示PC 机在串口通信工具环境下键入字符,之后转入循环等待接收PC机发 送来的字符。 PC机每键入一个字符就会被发送到S3C2440目标板串口,若键入回 车键表示一次传输结束。
寄存器 ULCON0 UCON0 UTRSTAT0 UERSTAT0 UTXH0 URXH0 UBRDIV0 偏移地址 读写属性 0x50000000 读/ 写 0x50000004 读/ 写 0x50000010 只读 0x50000014 只读 0x50000020(L) 字节写 0x50000023(B) 0x50000024(L)字节读 0x50000027(B) 0x50000028 读/ 写 功能描述 UART0的线控寄存器 UART0控制寄存器 UART0 TX/RX状态寄存器 UART0 错误状态寄存器 UART0发送缓冲寄存器 UART0接收缓冲寄存器 UART0波特率分频寄存器 复位值 0x00 0x00 0x6 0x6 不定 不定 不定
实验电路原理
嵌入式系统异步串行通信广泛采用通过9针/孔D型连接头 连接的三线串行通信方式,包括一对收/发交叉连接的信 号线和一根共用的地线。 这种无联络信号线连接方式需要编程员注意避免出现数 据覆盖现象。