基于ARM的大屏幕LED显示系统的设计 第13页
时将程序计数器PC指向子程序的入口,当子程序执行完返回调用处时,只需
将存放在LR中的返回地址重新复制给PC即可。
ARM体系结构支持C/C十+以及与汇编语言的混合编程,在一个完整的程序
设计中,除了初始化部分用汇编语言完成以外,其主要的编程任务都用心/C+十
完成,程序在执行时首先完成初始化过程,然后跳转到C/C++程序代码中,汇
编程序和c/c++程序之间一般没有参数的传递,也没有频繁的相互调用词。
2基于ARM的系统初始化过程
基于ARM的芯片53C4510B为复杂的片上系统,这种复杂系统里的硬件模
块是可配置的,需要有软件来设置其需要的工作状态。因此在用户的应用程序
启动之前,需要有专门的一段启动代码来完成对系统的初始化。由于这类代码
直接面对处理器内核和硬件控制器进行编程,一般都使用汇编语言。
系统启动程序所执行的操作跟具体的开发系统相关,通用的内容包括:
(1)中断向量表
ARM要求中断向量表必须放置在从O地址开始,连续8x4字节的空间内。
各个中断向量在向量表中的位置分配如图5一3所示。当一个中断发生后,ARM
处理器便强制把既指针置为向量表中对应中断类型的地址值,因为每个中断
只占据向量表中1个字的存储器空间,只能放置1条ARM指令,所以通常在向
量表中放的是跳转指令,使程序能从向量表里跳转到存储器里的其它地方,再
执行中断处理[56j。外部快速中断
普通外部中断
保留
数据异常
指令预取异常
软件中断
未定义指令中断
复位中断
图5一3中断向量表
硕士学位论文
(2)初始化存储器系统
初始化存储器系统的编程对象是系统的存储器控制器,存储器控制器并不
是A哪内核的一部分,不同的系统其设计不尽相同。一个复杂的系统可能存在
多种存储器类型的接口,需要根据实际的系统设计对此加以配置,对同一种存
储器类型来说,因为访问速度的差异,需不同的时序设置。FLASH和SRAM同属
于静态存储器类型,可合用同一个存储器端口;而SDRAM因为有动态刷新和地
址线复用等特性,通常配有专用的存储器端口。
当一个系统上电后,程序将自动从O地址处开始执行,因此在系统的初始
状态,必须保证在O地址处存在正确的代码,即要求O地址开始处的存储器是
非易失性的ROM或FLASH等。但是因为ROM或FLASH的访问速度相对较慢,每
次中断发生后,都要从读取ROM或FLASH上面的向量表开始,影响了中断响应
速度。因此有的系统便提供一种地址重映射方法,可把O地址重新指向到R胡
中去,接下去执行的指令将来自SDRAM空间。
(3)初始化堆栈
ARM处理器有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独
立的,因此,对程序中需要用到的每一种模式都要给SP寄存器定义一个堆栈
地址。方法是改变状态寄存器(CPSR)内的状态位,使处理器切换到不同的状
态,然后给SP赋值。
(4)初始化有特殊要求的端口和设备
这要由具体的系统和用户需求而定,一般的外设初始化可以在系统初始化
之后进行。
(5)初始化应用程序执行环境
映像一开始总是存储在ROM/FLASH里的,其R0部分既可在ROM/FLASH里执
行,也可转到速度更快的SDRAM中;而RW和ZI这两部分是必须转移到可写的
SDRAM中,所谓应用程序执行环境的初始化,就是完成必要的从FLAsH到SDRAM
的数据传输和内容清零。
(6)呼叫主应用程序
当所有的系统初始化工作完成后,就需要把程序流程转入主应用程序。可
直接从启动代码跳转到应用程序的主函数入口,主函数名字可由用户自己定
义。1.6显示程序的总体结构
显示屏控制软件用ARM汇编语言和C/C++语言编写,基于53C4510B的L印
显示屏软件的主要功能是接收上位机下载的显示数据,向屏体提供显示数据和
各种控制信号。显示程序由主程序和串行口中断服务程序两部分组成,主程序
完成必要的初始化和对LED显示屏的动态扫描控制,按要求读出显示数据并产
生需要的控制信号;中断服务程序解决与上位机进行通信的问题。
由于ARM要求中断向量表必须放置在从0地址开始的连续8x4字节的空
间内,而程序的启动又是从OxOO开始的,所以只能在主程序的开头安排一条
跳转指令。地址OX18是串行通信的中断服务程序首地址,同样安排了一条跳
转指令,跳转到真正的服务程序首地址工RQ一andler。
显示数据可分为两类,一类是固化在FLASH之中的固定数据,另一类是从
上位机接收的存储于SDRAM之中的显示数据。固化的显示数据在开机时进行显
示,直到S3C451OB接收到上位机下载的显示数据之后,改为显示新收到的数
据。安排固化数据的显示,一方面在开机时不会出现显示空白,使显示屏具有
一开就亮的效果,适应人们使用的心理状态,另一方面也便于脱开上位机进行
文修。
系统上电或复位时,CPU从FLASH中读取程序运行,在完成必要的初始化
工作以后,将全部运行代码及存储在FLASH中的显示数据拷贝到SDRAM中,因
此,固化数据的显示过程,是先从FLASH中把整个显示数据读到SDR胡中,然
后再从SDRAM中读出进行显示,这样就和从上位机接收数据的显示过程一样了。
系统初始化工作主要是配置SYSCFG特殊功能寄存器,将53C4510B片内的
SK一体化的SR八M配置为4KCaChe,4KSR产幼,并将用户堆栈设置在片内的SRAM
中。4KSRAM的地址为ox3FE,0000一(ox3FE,1000一1),由于S3C451OB的堆栈由
高地址向低地址生成,将SP初始化为Ox3FE,1000。完成上述操作后,程序跳
转到Ma角函数执行,保存工nit.s,并添加到新建的项目,再新建一个文件,
名为main.c
AREA
ENTRY
B
B
,
具体内容如下:
工nit,c0DE,READONLY;定义一个名为Init的代码段
ResetHandler
;标识程序的入口
;复位异常向量,跳转到程序开始位置
未定义指令异常,跳转到当前位置;SWI异常,跳转到当前位置
;指令预取中止异常,跳转到当前位置
;数据访问中止异常,跳转到当前位置
工RQHandler;工RQ异常,跳转到响应中断服务程序
;F工Q异常,跳转到当前位置
ResetHandler
;*************
LDRRO,=Ox3FF000O
LDRRl,=OxE7FFFFSO;配置SYSCFG,4KCaehe,4KS尺AM
STRRl,仁RO〕
LDRSP,=Ox3FEI000:SP指向4KSRAM的尾地址
BLMain;程序跳转到Main函数执行
B
END
动态扫描的工作原理如前所述,在此给出程序流程图,如图5一4所示。
平读取一个‘乡节送出
GP工00输出八个脉冲
行信息送完
、、否子产产
GP工02输出一个脉冲
GP工03输出一个脉冲
图5一4动态扫描程序流程
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] 下一页
基于ARM的大屏幕LED显示系统的设计 第13页下载如图片无法显示或论文不完整,请联系qq752018766