标签:
嵌入式系统 S3C44B0X微处理器 税控收款机 arm7
基于S3C44B0X微处理器税控收款机系统的设计
作者:贺安坤 陈明 郝红旗 来源:微计算机信息
摘要:嵌入式系统的应用领域越来越广泛。文章以S3C44B0X微处理器及Nucleus PLUS操作系统为核心,介绍了税控收款机系统的组成及软硬件设计。
关键词:嵌入式系统;S3C44B0X微处理器;税控收款机
1引言
税控收款机是指具有特定税控功能的电子收款机。所谓特定税控功能是指能够保证数据的正确生成、可靠存储、安全传输,并可实现税务管理和稽查等功能。税控收款机系统设计一般采用目前流行的嵌入式系统结构。硬件设计考虑高性价比和高可靠性,软件设计上,考虑系统的稳定性、实时性和可靠性。根据这一原则税控收款机系统开发可选取ARM体系结构的主芯片S3C44B0X微处理器及高性能微内核的实时操作系统(Nucleus PLUS)。Samsung S3C44B0X微处理器是三星公司为手持设备和一般应用提供的高性价比和高性能的微控制器解决方案,其CPU核采用的ARM公司16/32位ARM7TDMI RISC结构,S3C44B0X通过在ARM7TDMI内容基础上扩展一系列的通用外围器件,使系统费用降至最低,消除了增加附加配置的需要。 Nucleus PLUS 是为实时嵌入式应用而设计的一个抢先式多任务操作系统内核,其95%的代码是用ANSI C写成的,因此非常便于移植并能够支持大多数类型的处理器。以下就税控收款机系统软硬件开发的关键技术加以论述。
2硬件设计
2.1硬件组成
税控收款机硬件除S3C44B0X微处理器外,还主要包括主存储器、RAM存储器、打印机、显示屏、键盘、及其它的通信设备等。主存储器主要是指Flash存储器,又分为NandFlash和NorFlash,如采用512K的NorFlash 39vf040(SST公司),32M的NandFlash k9f56080b(Samsung公司)。RAM存储器主要是利用它的读取速度快等特点来运行程序,即我们俗称的内存,几乎所有的嵌入式系统包括PC机都遵循这一特点,即把程序加载到SDRAM中运行。如采用8M字节的SDRAM HY57V641620HG。图1为税控收款机硬件系统框图。
2.2 底层驱动的设计
底层驱动包含三部分内容:BOOT向量表部分,S3C44B0X监控程序部分及税控机在Nucleus下的BSP。
BOOT向量表
因系统选用的是Nucleus操作系统,对S3C44B0X的中断是向量模式。所以在boot.s(汇编语言编写)文件中主要是设置向量表的跳转地址。表1为ARM7TDMI的异常向量表。
|
地 址 |
异 常 |
进入模式 |
|
0x0000,0000 |
复位 |
管理模式 |
|
0x0000,0004 |
未定义指令 |
未定义模式 |
|
0x0000,0008 |
软件中断 |
管理模式 |
|
0x0000,000C |
中止(预取指令) |
中止模式 |
|
0x0000,0010 |
中止(数据) |
中止模式 |
|
0x0000,0014 |
保留 |
保留 |
|
0x0000,0018 |
IRQ |
IRQ |
|
0x0000,001C |
FIQ |
FIQ |
表1 ARM7TDMI的异常向量表
S3C44BOX把复位信号也作为中断来处理,系统复位时程序(pc)指针被置成0,使程序跳到0x00000000开始运行。在boot.s文件的开始(0地址)使用了一条跳转指令:
B 0x1000
其作用是在系统上电复位或者手动复位后系统程序指针跳到0地址执行时,系统将程序跳转到0x1000即4K地址的地方继续执行(4K地址烧入监控程序)。
44B0X的监控程序
负责初始化系统以及拷贝应用程序到内存并且运行。该部分关键的两个文件是mon.s和Main.c,mon.s(汇编语言编写)文件用来初始化中断、存储器、堆栈等,进行系统初始化,建立C程序运行环境。由于在BOOT向量表中直接跳转到了监控程序的起始处执行程序,之前并没有对44B0进行硬件上的寄存器等进行初始化,所以在这个程序中的开始是先屏蔽中断,然后配置时钟控制寄存器,再配置存储器控制寄存器,设定中断向量,设定各个模式下的堆栈,建立好C语言的运行环境,负责把自身代码从ROM中拷贝到内存中并且拷贝初始化
数据区以及初始化0数据段,最后跳到Main函数执行C语言的函数体。Main.c是监控程序的主程序入口文件,主要是进行端口的初始化,设定系统主时钟,初始化串口并且设定波特率等工作方式,并将应用程序从NandFlash上读取到内存中并运行。下面是监控程序中存储控制寄存器配置的源代码。
…
adr r0, ResetHandler
ldr r1, =ResetHandler
sub r0, r1, r0
ldr r1, =SMRDATA
sub r0, r1, r0
ldmia r0, {r1-r13}
ldr r0, =0x01c80000 ;BWSCON Address
stmia r0, {r1-r13}
SMRDATA:
.word 0x01000000 @ BWSCON: 总线宽度与等待状态控制寄存器
@ bank6: SDRAM 16bit; bank0: ROM 8bit; bank1:
@ peripheral at Bank 3-5 : 8bit, nBE
@ Not using UB/LB
@ WAIT disable
.word 0x00002b50 @ Bankcon0 boot rom 39vf040 512k NorFlash
@:Tacs=1; Tcos="1"; Tacc="4"; Toch="1"; Tcah="1"
.word 0x00001f00 @ Bankcon1网口控制芯片 16bit: Tacs="0"; Tcos="4"; Tacc="14"; Toch="0"; Tcah="0"
.word 0x00001f00 @ Bankcon2权限锁 N/A
.word 0x00001f00 @ Bankcon3 NandFlash : Tacs="0"; Tcos="4"; Tacc="14"; Toch="0"; Tcah="0"
.word 0x00001f00 @ Bankcon4键盘数据口 : Tacs="0"; Tcos="4"; Tacc="14"; Toch="0"; Tcah="0"
.word 0x00001f00 @ Bankcon5 8bit 外接数据口 : Tacs="0"; Tcos="4"; Tacc="14"; Toch="0"; Tcah="0"
.word 0x00018008 @ Bankcon6 SDRAM; Trcd=2clocks; column addr 8-bit
.word 0x00001f00 @ Bankcon7液晶以及16C554(扩展串口)
@: Tacs="0"; Tcos="4"; Tacc="14"; Toch="0"; Tcah="0"
.word 0x008005fe @ REFRESH 15.6us
.word 0x00000000 @ Bank 6/7 size: 32M/32/8M
.word 0x00000020 @ MRSRB6 CAS latency = 2clocks
.word 0x00000020 @ MRSRB7 CAS latency = 2clocks
@Tacs 在nGCSn 有效之前地址建立时间
@Tcos 在nOE上芯片选择建立时间
@Tacc 存取周期
@Toch 在nOE上芯片选择保持时间
@Tcah 在nGCSn有效地址保持时间
@Trcd RAS 到 CAS 延时y
Nucleus下的BSP驱动
BSP驱动部分可以分为两大部分:一是直接操作外设的驱动,包括串口打印机驱动,flash驱动,led驱动,vfd驱动等几部分,这些驱动跟44B0X内部寄存器没有直接关系;另外一大类驱动则是直接配置44B0内部寄存器的驱动,包括设置gpio,配置中断寄存器,rtc时钟读写,timer的设置,uart