裸板串口课程设计_第1页
裸板串口课程设计_第2页
裸板串口课程设计_第3页
裸板串口课程设计_第4页
裸板串口课程设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电 子 科 技 大 学语言类综合项目实践报告学生姓名: 学 号: 指导教师: 实验时间: 年 月 日1、课程设计目的本课设目的是对在裸板上进行一些初始化操作,实现UART串口通讯驱动,即实现PC端与开发板间串口的通讯,从PC终端输入字符,开发板再将其返回到PC终端(也叫回显)。驱动程序的实质即对硬件资源的管理。2、 课程设计任务了解串口通信基本原理,查看开发板上datasheet上关于串口的连接方式,以及其特点;根据ARM mini2440的硬件原理,设置对应的寄存器,用程序初始化串口硬件,控制串口硬件实现字符串接收、发送等功能。编程实现ARM UART(Universal Asynchron

2、ous Receiver and Transmitter)通讯。主要任务为:1、设置管脚模式;2、设置通信模式(8个数据位,1个停止位,无校验);3、设置数据读取模式(中断、轮询);4、设置是否用硬件缓存(FIFO,NONFIFO);5、设置是否启用硬件流控;6、设置传输速度:波特率。3、裸板串口的设计3.1需求分析数据流程图3.1.1顶层数据流图3.2概要设计程序结构图3.3详细设计程序流程图4、裸板串口的实现4.1 关看门狗4.1.1代码4-1LDR R0,=0x53000000 (1)MOVR1,#0x0 STRR1,R0 4.1.2注释看门狗定时器控制寄存器寄存器地址描述复位值WTCO

3、N0x53000000看门狗定时器控制寄存器0x8021WTCON位描述初始值Watchdog timer【5】看门狗定时器使能位。0=无效 1=有效1Reset enable/disable【1】对于复位信号看门狗定时器 输出使能位。1:看门狗定时器曹氏,发出s3c2440A复位信号。0:看门狗定时器复位功能无效1Interrupt generation【2】中断使能位0=无效 1=有效04-1(1)设置看门狗定时器控制寄存器的值,看门狗定时器内部有一个递减计数器,当该计数器递减为0的时候,会产生复位控制器信号,自动重启控制器。在这里,我们为了防止看门狗产生复位控制器信号,将机器重启,所以要

4、将看门狗定时器控制寄存器中的内容赋0,使看门狗定时器无效.4.2 关中断代码4-2LDR R0,=0x4A000008 (1)LDR R1,=0x3ff STR R1,R0 中断屏蔽寄存器寄存器地址读写描述复位值INTMSK0x4A000008R/W决定哪个中断源被屏蔽0=中断服务无效 1=中断服务有效0xFFFFFFFF4-2(1)设置中断屏蔽寄存器。中断屏蔽寄存器该寄存器包括32位,每个都是和一个中断源相关。如果某位置1,则CPU不会服务相应中断源的中断请求。如果屏蔽位为0,中断请求可以被服务。这里我们将0x3ff写入中断屏蔽寄存器中是将所有的中断服务屏蔽。因为这里我们这里只需执行一个简单

5、的数据传输服务,如果中断服务没有被屏蔽,那我们的传输过程中就可能受到中断服务的影响,导致传输服务停止或出错。所以在最开始我们就要屏蔽掉中断服务。4.3 时钟设置代码4-3LDR R0,=0x4C000000 (1)MOV R1,#0xFFFFFFFF STR R1,R0 锁定时间计数寄存器寄存器地址读写描述复位值LOCKTIME PLL0x4C000000R/W锁定时间计数寄存器0xFFFFFFFFLOCKTIME位描述初始值U_LTIME31:16UPLL对于UCLK的锁定时间计数值0xFFFFM_LTIME15:0MPLL对于FCLK、HCLK、PCLK的锁定时间计数值0xFFFF4-3(

6、1)设置锁定时间计数寄存器的值。锁定时间计数寄存器分别设定了UPLL对于UCLK的锁定时间计数值和MPLL对于FCLK、HCLK、PCLK的锁定时间计数值,这里我们在设定UCLK与MPLL的相关值之前,先将锁定时间计数寄存器进行一个初始化复位。PS:1. MPLL用于CPU及其他外围器件,UPLL用于USB 2. MPLL产生的FCLK, HCLK, PCLK三种频率分别有不同的用途: FCLK是CPU提供的时钟信号。 HCLK是为AHB总线提供的时钟信号,主要用于高速外设,比如内存控制器,中断控制器,LCD控制器,DMA 等。S3C2440最大支持400MHz的主频,我们可以通过设定MPLL

7、, UPLL寄存器来设定CPU的工作频率。 PCLK是为APB总线提供的时钟信号,主要用于低速外设,比如看门狗,UART控制器, IIS, I2C, SDI/MMC, GPIO,RTC and SPI等。 3. UPLL,专门用于驱动USB host/Device。并且驱动USB host/Device的频率必须为48MHz。 4. 设置MPLL和UPLL时,必须先设定UPLL,然后才能设定MPLL,而且中间需要大约7个空指令(NOP)的间隔。代码4-4LDR R0,=0x4C000014 (1)MOV R1,#7 STR R1,R0 时钟分频器控制寄存器寄存器地址读写描述复位值CLKDIVN

8、0x4C000014R/W时钟分频器控制寄存器0x00000000CLKDIVN位描述初始值DIVN_UPLL3UCLK选择寄存器(UCLK必须对USB提供 48MHz)0:UCLK=UPLL clock UPLL时钟被设置为48MHz1:UCLK=UPLL clock/2 UPLL时钟被设置为96MHz0HDIVN2:100:UCLK=FCLK/101:UCLK=FCLK/210:UCLK=FCLK/4,当CAMDIVN9=0 UCLK=FCLK/8,当CAMDIVN9=111:UCLK=FCLK/3,当CAMDIVN8=0 UCLK=FCLK/6,当CAMDIVN8=100PDIVN00:

9、PCLK是和HCLK/1相同的时钟1:PCLK是和HCLK/2相同的时钟04-4(1)设置时钟分频器控制寄存器的值,这里我们设置为7,从上表可看出是为了将时钟频率设置为PCLK=HCLK/2,因为当CAMDIVN8=1,所以UCLK=FCLK/6,而UCLK=UPLL clock, UPLL时钟被设置为48MHz。代码4-5 LDR R0,=0x4c000008 (1) LDR R1,=(56<<12)+(2<<4)+2) STR R1,R0 NOP (2) NOP NOP NOP NOP NOP NOP LDRR0,=0x4c000004 (3) LDRR1,=(68

10、<<12)+(1<<4)+1) STR R1,R0 BL M_INIT BL StacksInit BL UART MPLL、UPLL配置寄存器寄存器地址读写描述复位值MPLLCOM0x4c000004R/WMPLL配置寄存器0x00096030UPLLCOM0x4c000008R/WUPLL配置寄存器0x0004d0304-5(1)先设置MPLL配置寄存器的值,根据公式R1=(U_MDIV<<2)+(U_PDIV<<4)+U_SDIV)得出配置值。4-5(2)这里使用了7个空指令,4-3(1)的PS里已说明这一点4-5(3)再设置UPLL配置寄

11、存器,根据公式R1=(M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)得出配置值。However we seted the CLKDIV2 value to 1,so the UPLL value is seted to 98MHz and if you remove the command of "LDR R1,R0",the code is also right;I don't know the reason ,so I think the following UPLL value setting could be omit

12、tedif we want to set the baut to 115200,because of the Baud-Rate Error Tolerance, we need a HCLK which is greater than 50MHZ;so we set the MDIV to 68,set the PDIV to 1 and set the SDIV to 1 as well so that we can get a FCLK which is 304MHZ4-5(6)跳转到M_INIT,进行内存初始化工作4-5(7)跳转到StacksInit,进行堆栈初始化4-5(8)跳转到

13、UART ,进行串口设置 4.4内存初始化代码4-6M_INITLDR r0, =0x48000000 LDR r1, =0x48000034 (1)ADR r2, memdata Initmemloop (2) LDR r3, r2, #4 STR r3, r0, #4 TEQ r0, r1 BNE initmemloop MOV pc,lr (7)memdata DCD 0x22000000 ;BWSCON (8) DCD 0x00000700 ;BANKCON0 (9) DCD 0x00000700 ;BANKCON1 DCD 0x00000700 ;BANKCON2 DCD 0x000

14、00700 ;BANKCON3 DCD 0x00000700 ;BANKCON4 DCD 0x00000700 ;BANKCON5 DCD 0x00018005 ;BANKCON6 DCD 0x00018005 ;BANKCON7 DCD 0x008e07a3 ;REFRESH (10) DCD 0x000000b1 ;BANKSIZE (11) DCD 0x00000030 ;MRSRB6 (12) DCD 0x00000030 ;MRSRB7 (13)总线宽度&等待状态控制寄存器寄存器地址描述复位值BWSCON0x48000000总线宽度&等待状态控制寄存器0X000000

15、00Bank控制寄存器寄存器地址复位值寄存器地址复位值BANKCON00x480000040x0700BANKCON40x480000100x0700BANKCON10x480000080x0700BANKCON50x480000140x0700BANKCON20x4800000C0x0700BANKCON60x4800001C0x180084-6(1)设置4-6(2)设置GPHCON的值为0x48000034,决定SRAM对bank6与bank7使用UB/LB,并且决定bank1的数据总线宽度为保留的,bank0的数据总线宽度为32bit 4-6(3)4-6(4)4-6(5)4-6(6)4-

16、6(7)4-6(8)设置BWSCON的值为0x22000000,决定对bank6与bank7使用UB/LB4-6(9)将BANKCON07控制寄存器复位4-6(10) / /23位:1:刷新使能有效 /21:20位:00:SDRAM RAS预充电时间=2clock /19:18位:11:SDRAM半行周期时间Tsrc=7clock /10:0位:1110100011:SDRAM刷新计数值4-6(11)/0x000000b1=10110001 /7位:1:ARM内核突发操作使能有效 /5位:1:SCKE使能SDRAM power down模式有效 /4位:1:SCLK仅当访问周期才被激活 /2:

17、0位:001:BANK6/7存储分布为64MB/64MB4-6(12)MRSRB6 模式寄存器集寄存器bank64-6(13)MRSRB7 模式寄存器集寄存器bank7 /0x00000030=110000 /6:4位:100:CAS反应时间011=3 clock4.5堆栈初始化代码4-7_STACKBASEADDREQU0x33ff8000 (1)StackUse EQU (_STACKBASEADDR-0x3800)StackSvcEQU(_STACKBASEADDR-0x2800)StackUndEQU(_STACKBASEADDR-0x2400)StackAbtEQU(_STACKBA

18、SEADDR-0x2000)StackIRQEQU(_STACKBASEADDR-0x1000)StackFIQEQU(_STACKBASEADDR-0x0000)USERMODE EQU 0x10 (2)FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bSYSMODEEQU0x1fIRQDISEQU0x80 (3)FIQDISEQU0x40 StacksInit (4) MOVR0,LR;Save the func return Addr MSR CPSR_c,#(SVCMODE|IRQDIS|

19、FIQDIS)LDRSP,=StackSvcMSRCPSR_c,#(UNDEFMODE|IRQDIS|FIQDIS)LDRSP,=StackUndMSRCPSR_c,#(ABORTMODE|IRQDIS|FIQDIS)LDRSP,=StackAbtMSRCPSR_c,#(IRQMODE|IRQDIS|FIQDIS)LDRSP,=StackIRQMSRCPSR_c,#(FIQMODE|IRQDIS|FIQDIS)LDRSP,=StackFIQMSRCPSR_c,#(SYSMODE|IRQDIS|FIQDIS)LDRSP,=StackUseMOVPC,R04-7(1)堆栈地址定义4-7(2)工作模

20、式定义4-7(3)初始化定义4.6串口设置代码4-8UART LDR R0,=0x56000070(1)LDR R1,R0ORR R1,R1,#0xa0(2)STR R1,R0LDR R0,=0x56000078(3)MOV R1,#0(4)STR R1,R0LDR R0,=0x50000000 (5)MOV R1,#3(6)STR R1,R0LDR R0,=0x50000004(7)MOV R1,#0x5(8)STR R1,R0LDR R0,=0x50000008(9)MOV R1,#0 (10)STR R1,R0LDR R0,=0x5000000c(11)MOV R1,#0(12)STR

21、R1,R0LDR R0,=0x50000028(13)MOV R1,#26 (14)STR R1,R0;to confirm that whether the UART is workingLDR R0,=0x50000020 (15)MOV R1,#98 (16)STR R1,R0LOOP (17)LDR R0,=0x50000010LDR R1,R0 (18) ANDS R1,R1,#1 BEQ LOOP (19)LDR R0,=0x50000024LDR R1,R0(20); LDR R0,=0x50000020STR R1,R0B LOOPEND4-8(1)设置端口H控制寄存器GPHC

22、ON,GPHCON与GPHUP是两个管脚设置寄存器,GPHCON负责GPIO port H设置位,而GPHCON负责GPIO port H设置位4-8(2)把R1和#0xa0按位进行逻辑“或”运算,并把结果存入R。目的是设置GPH2 to TXD0,GPH3 to RXD04-8(3)设置GPHUP 4-8(4)the pull up function is disabled,到这里的前几个步骤都是在设置UART的管脚模式4-8(5)设置线性控制寄存器ULCON0,它主要用来配置奇偶校验模式、停止位、字长,即UART的通讯模式4-8(6)将0x3=00000011送入线性控制器,即控制发送接搜

23、毎帧的数据位数为8bit;4-8(7)通过设置UART0控制寄存器UCON0来确定数据读取模式4-8(8)将0x245=00000101送入UCON0,第0、1位决定用中断请求或查询模式来读取UART接收缓存寄存器中的数据 ,第2、3决定用中断请求或查询模式来写数据到UART发送缓存寄存器.4-8(9)这里是通过设置FIFO控制寄存器UFCON0,来设置硬件的缓存模式4-8(10)设置为0000000 使FIFO 无效,即NON-FIFO模式4-8(11)设置MODEM控制寄存器UMCON0 4-8(12)使Auto Flow Control无效,nRTS由软件控制,0=Hlevel(去激活n

24、RTS)4-8(13)设置波特率除数寄存器UBRDIV0。它存储在波特率除数寄存器中的值用于君顶串行发送接收时钟率(波特率)4-8(14)由公式UBRDIVn=(int)(UART clock/(buad rate *16 ))-1得出UBRDIV0中的值为26,决定串行发送接收时钟率(波特率)4-8(15)设置发送缓存寄存器UTXH04-8(16)UART0发送的数据为984-8(17)If we add a loop forever we could get a right answer,otherwise the PC will print wrong charater forever.

25、;I think my code is wrong somewhere,but I can not find it out,so I add a loop for get a right answer4-8(18) ;get value of UTRSTAT0 which is the UART status register4-8(19)if the UTRSTAT00 was seted to 1,the buffer register has a received data 4-8(20)将数据返回到PC中5、 测试5.1测试工具:硬件:开发板:友善之臂公司的“mini2440”CPU处

26、理器:SamsungS3C2440A,主频400MHa,最高533MHzSDRAM内存:在板64M SDRAM、32bit数据总线、SDRAM时钟频率高达100MHz仿真器:J-link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWARM,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发串口线软件:1、 ADS(ARM Developer Suite),是在1993年由Metrowerks公司开发,是AR

27、M处理器下最主要的开发工具。ADS 是全套的实时开发软件工具,包编译器生成的代码密度和执行速度优异。可快速低价地创建ARM 结构应用。2、JflashARM是J-link烧写工具3、SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单的说是Windows下登录UNIX或Linux服务器主机的软件。不同就是SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。有流行CRTTelnet客户机的所有特点,包括:自动注册、对不

28、同主机保持不同的特性、打印功能、颜色设置、可变屏幕尺寸、用户定义的键位图和优良的VT100,VT102,VT220和ANSI竞争.能从命令行中运行或从浏览器中运行.其它特点包括文本手稿、易于使用的工具条、用户的键位图编辑器、可定制的ANSI颜色等.SecureCRT的SSH协议支持DES,3DES和RC4密码和密码与RSA鉴别.5.2测试过程:1、新建1个ADS工程,命名为UART,然后新建file文件init.s,在创建放入时候就将该文件添加到刚建立的UART工程中,并勾上degug、release和debugrel三个选项,需要注意的是过程不能是中文名,路径不能包含中文。2、 设置ADS,在Edit ->DebugRel Settings->Linker->ARM formELF中将output format输出形式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论