ULCON1 EQU 0x50004000 ;UART line control register 0 UCON1 EQU 0x50004004 ;UART control register 0 UFCON1 EQU 0x50004008 ;UART FIFO control register 0 UMCON1 EQU 0x5000400C ;UART modem control register 0 UBRDIV1 EQU 0x50004028 ;UART baud rate divisor register 0 UTRSTAT1 EQU 0x50004010 ;UART TX/RX status register 0 UTXH1 EQU 0x50004020 ;UART transmit buffer register 0 URXH1 EQU 0x50004024 ;UART receive buffer register 0 MPLLCON EQU 0x4C000004 ;MPLL control 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,=ULCON1 ; ULCON1设置为 0x07, 含义是正常操作模式,无校验,停止位2,8个数据位 mov r3,#0x07 str r3,[r2]
ldr r2,=UCON1 ;UCON1设置为 0x05 表示发送、接收数据都使用查询方式,该处初始化为中断模式也正确 mov r3,#0x05 str r3,[r2]
ldr r2,=UFCON1 ;UFCON1设置为 0x00 为不使用 FIFO mov r3,#0x00 str r3,[r2]
ldr r2,=UMCON1 ;UMCON1设置为 0x00 为不使用流控 mov r3,#0x00
str r3,[r2]
ldr r2,=UBRDIV1 ;UBRDIV1设置为216,含义为波特率设为 19200, 由下面公式算得:UBRDIVn = (int)(PCLK/bps*16)-1
;其中 PCLK =66.68MHz mov r3,#216 strh r3,[r2]
;或者16进制表示0XD8
10.9在上题中,若采用查询方式进行数据传输,要将位于地址 DATA处的100字节发送到其他设备,试画出程序流程图, 并写出相关程序段。
查询方式进行数据传输的代码段如下:
CHECK
LDR R2,=UTRSTAT1
LDR R3,[R2] AND R3,R3,#0X02 CMP R3,#0X02 BNE WAIT SET LDR R5,=DATA LDRB R3,[R5],#1 LDR R2,=UTXH1 STRB R3,[R2]
SUB R5,R5,#1 CMP R5,#0x64
BNE CHECK
10.10在10.8题中,若要实现处理器收到数据0xAA,则回应1字节数据0x55的功能,试画出采用查询方式传输的程序流程图,并写出相关程序段。进一步思考如果采用中断方式工作,需要对软件进行怎样的修改?
相应代码段如下:
CHECK
LDR R2,=UTRSTAT1 LDR R3,[R2] AND R3,R3,#0X01 CMP R3,#0X01 BNE CHECK WAIT
LDR R3,[R2] AND R3,R3,#0X02 CMP R3,#0X02 BNE WAIT SET LDR R2,=URXH1 LDRB R3,[R2]
CMP R3,#0xAA
MOVEQ R3,#0x55
开始 LDR R2,=UTXH1 STRB R3,[R2] B CHECK
配置控制初始化控制字查询收发状态寄存器UTRSTAT1的状态位UTRSTAT1[0] UTRSTAT0[0]=1
是 查询收发状态寄存器UTRSTAT1的状态位UTRSTAT1[1]
否UTRSTAT0[1]=1
是 取出接收寄存器URXH1里的值放入寄存器R5
R5=0xAA否
是
R5=0x55 将R5的值复位发送寄存器UTXH1
若采用中断方式工作的话,需要将UCON1配置寄存器设为中断工作模式;在接收到数据后触发中断,进入中断子程序,进行相应操作。
否“微处理器系统原理与嵌入式系统设计”第十一章习题解答
1. 简述嵌入式软件系统的分层结构,各层之间有何联系?
嵌入式软件系统主要包括驱动层、操作系统层、中间软件和应用层。 驱动层与硬件直接相连,其为操作系统和应用提供所需驱动支持。
操作系统层从驱动层得到所需的驱动支持,可以调度应用层中各个任务的执行。 中间软件为应用层提供一些面向应用领域的中间件软件。
2. 简述嵌入式软件系统的工作流程,系统引导及加载在该流程中位于何处,有哪些功
能?
工作流程由下图所示:
该执行流程主要分为5个阶段:1.上电复位、板级初始化阶段。2.系统引导/升级阶段。3.系统初始化阶段。4.应用初始化阶段。5.多任务应用阶段。 系统引导及加载在该流程中位于第二阶段,其主要作用是初始化硬件设备、建立内存空间的映射图,然后将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
11.3 简述U-Boot第一阶段工作的主要任务,它与第二阶段如何衔接?
代码通常放在start.s文件中,用汇编语言写成,其主要功能是设置处理器状态、初始化中断和内存时序、对整个U-Boot目标代码进行重新定位。接着通过下列语句跳转到C代码执行,实现阶段一与阶段二的衔接: ldr pc, _start_armboot _start_armboot: .word start_armboot