【微机实验报告(含思考题)河畔下的哈】实验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 EQU 0x56000078 ;GPIO F pull-up register

AREA SerialCommunication,CODE,READONL Y

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]

相关文档
最新文档