微机实验报告(含思考题)实验3

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


实验三
ARM汇编实现串口通信实验
1.掌握ARM 的串行口工作原理。
2.学习编程实现ARM和PC机的UART通信。
3.掌握ARM裸机下汇编语言编程方法。



1.学习串行通信原理,了解串行通信控制寄存器。
2.编程实现ARM 和计算机之间的串行通信。


1、ARM汇编基础
2、ARM处理器通用IO口的操作


? 硬件:ARM嵌入式开发平台,PC 机一台,并口线,串口线,JTAG板
? 软件:RVDS,H-JTAG


1.异步串行I/O
异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各
不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线(输
入,输出)即可进行。

2.串口通信流程
串口通信就是读写寄存器的操作,通过配置相关寄存器,查询寄存器就可以操作串口通信。
需要配置的寄存器有系统时钟,UART行控制寄存器,UART控制寄存器,UART FIFO控制寄
存器,UART MODEM控制寄存器,UART波特率控制寄存器;需要查询的寄存器是发送/接收状
态寄存器。


1. 打开CodeWarrior for RVDS,建立一个工程,通过查S3C2440处理器手册的UART通信
寄存器,serialcommutication.s文件中添加代码实现串口通信传输
2. 设置工程配置选项,Language Setting->Realview Assembler和Realview Compiler中的
Architecture设置为ARM920T,配置RVDS下的连接器Linker->Realview Linker中的RO Base
为0x30000000
3.
编译和调试工程。
4. 连接PC和实验板的并口,串口;并口连接至ARM的JTAG口,串口连接至COM PORT
口;打开电源;打开H-JTAG程序(。
5. 点击调试器Dubeg->Run,运行程序,打开超级终端,在开始->程序->附件->通讯里打开
超级终端,使用COM1,设置波特率115200,8位数据位,无奇偶校验,1位停止位,无数
据流控制。
6. 从键盘输入数据,观察超级终端是否打印出字符。如有正确的字符打印,则通信成功。

实验程序:
;************** SerialCommunication Experiment*****************

;相关寄存器地址定义
CLKDIVN EQU 0x4C000014 ;CLKDIVN for PCLK and FCLK
CAMDIVN EQU 0x4C000018 ;CANDIVN
ULCON0 EQU 0x50000000 ;UART line control register 0
UCON0 EQU 0x50000004 ;UART control register 0
UFCON0 EQU 0x50000008 ;UART FIFO control register 0
UMCON0 EQU 0x5000000C ;UART modem control register 0
UBRDIV0 EQU 0x50000028 ;UART baud rate divisor register 0
UTRSTAT0 EQU 0x50000010 ;UART TX/RX status register 0
UTXH0 EQU 0x50000020 ;UART transmit buffer register 0
URXH0 EQU 0x50000024 ;UART receive buffer register 0
MPLLCON EQU 0x4C000004 ;MPLL control register
GPHCON EQU 0x56000070 ;GPIO F control register
GPHUP E

QU 0x56000078 ;GPIO F pull-up register

AREA SerialCommunication,CODE,READONLY

ENTRY

ldr r2,=MPLLCON ;设置MPLL为0x00076022 FCLK=Mpll=(2*m*Fin)/(p*(2的
s次方)), Fin=16.9344MHz
; m=(MDIV+8), p=(PDIV+2),
s=SDIV
mov r3,#0x22
mov r4,#0x00076000
ADD r3,r3,r4
str r3,[r2]


ldr r2,=CLKDIVN ; CLKDIVN 设置为 0x03, PCLK=FCLK/4
mov r3,#0x03
str r3,[r2]

ldr r2,=CAMDIVN ; CLKDIVN 设置为 0x0200, PCLK=FCLK/4
mov r3,#0x200
str r3,[r2]

ldr r2,=ULCON0 ; ULCON0 设置为 0x03, 含义是正常操作模式,无校验,停止位1,8
个数据位
mov r3,#0x03
str r3,[r2]

ldr r2,=UCON0 ;UCON0 设置为 0x05 表示发送、接收数据都使用查询方式
mov r3,#0x05
str r3,[r2]

ldr r2,=UFCON0 ;UFCON0 设置为 0x00 为不使用 FIFO
mov r3,#0x00
str r3,[r2]

ldr r2,=UMCON0 ;UMCON0 设置为 0x00 为不使用流控
mov r3,#0x00
str r3,[r2]

ldr r2,=UBRDIV0 ;UBRDIV0 设置为36,含义为 波特率设为 115200, 由下面公式算
得:UBRDIVn = (int)(PCLK/bps*16)-1
;其中 PCLK =66.68MHz
mov r3,#36
strh r3,[r2]

ldr r2,=GPHCON ;UART0 set to rxd and txd
ldr r3,=0xa0
str r3,[r2]

ldr r2,=GPHUP ;pull up
ldr r3,=0x0f
str r3,[r2]

;-------------填写代码实现串口传输--------------
C_UTRSTAT00
ldr r2,=UTRSTAT0
ldr r3,[r2]
add r3,r3,#1
CMP r3,#0
beq C_UTRSTAT00

C_UTRSTAT01
ldr r2,=UTRSTAT0
ldr r3,[r2]
add r3,r3,#2
cmp r3,#0
beq C_UTRSTAT01

ldr r2,=UTXH0
ldr r3,=URXH0
ldr r4,[r3]
str r4,[r2]
B C_UTRSTAT00

END


1. 查看相关寄存器,思考怎么配置UART时钟信号和UART配置寄存器?
答:设置mellcon寄存器的值可以设置时钟,改变ulcon的值可以配置UART配置寄存
器。
2.
修改串口传输函数,使其在超级终端中输入“Enter”回车键后,输出“回车”加“换行”。
(“回车”和“换行”对应的ASCⅡ码分别为0x0d和0x0a).
答:函数修改为:
C_UTRSTAT00
ldr r2,=UTRSTAT0
ldr r3,[r2]
add r3,r3,#1
CMP r3,#0
beq C_UTRSTAT00

C_UTRSTAT01
ldr r2,=UTRSTAT0
ldr r3,[r2]
add r3,r3,#2
cmp r3,#0
beq C_UTRSTAT01

ldr r2,=UTXH0
ldr r3,=URXH0
ldr r4,[r3]
str r4,[r2]
cmp r4,0x0d
blne X
B C_UTRSTAT00

X
bl C_UTRSTAT00
bl C_UTRSTAT01
ldr r2,=UTXH0
ldr r4,#0x0a
str r4,[r2]



本实验体现的异步串口通信的代码实现过程

相关文档
最新文档