日志档案

发表于 2007-1-11 17:01:35

4

标签: 嵌入式系统  S3C44B0X微处理器  税控收款机  arm7  

基于S3C44B0X微处理器税控收款机系统的设计

基于S3C44B0X微处理器税控收款机系统的设计

 

作者:贺安坤 陈明 郝红旗 来源:微计算机信息

 

摘要:嵌入式系统的应用领域越来越广泛。文章以S3C44B0X微处理器及Nucleus PLUS操作系统为核心,介绍了税控收款机系统的组成及软硬件设计。
关键词:嵌入式系统;S3C44B0X微处理器;税控收款机

1引言

税控收款机是指具有特定税控功能的电子收款机。所谓特定税控功能是指能够保证数据的正确生成、可靠存储、安全传输,并可实现税务管理和稽查等功能。税控收款机系统设计一般采用目前流行的嵌入式系统结构。硬件设计考虑高性价比和高可靠性,软件设计上,考虑系统的稳定性、实时性和可靠性。根据这一原则税控收款机系统开发可选取ARM体系结构的主芯片S3C44B0X微处理器及高性能微内核的实时操作系统(Nucleus PLUS)。Samsung S3C44B0X微处理器是三星公司为手持设备和一般应用提供的高性价比和高性能的微控制器解决方案,其CPU核采用的ARM公司16/32ARM7TDMI RISC结构,S3C44B0X通过在ARM7TDMI内容基础上扩展一系列的通用外围器件,使系统费用降至最低,消除了增加附加配置的需要。 Nucleus PLUS 是为实时嵌入式应用而设计的一个抢先式多任务操作系统内核,其95%的代码是用ANSI C写成的,因此非常便于移植并能够支持大多数类型的处理器。以下就税控收款机系统软硬件开发的关键技术加以论述。

2硬件设计

2.1硬件组成

    税控收款机硬件除S3C44B0X微处理器外,还主要包括主存储器、RAM存储器、打印机、显示屏、键盘、及其它的通信设备等。主存储器主要是指Flash存储器,又分为NandFlashNorFlash,如采用512KNorFlash 39vf040SST公司),32MNandFlash k9f56080bSamsung公司)。RAM存储器主要是利用它的读取速度快等特点来运行程序,即我们俗称的内存,几乎所有的嵌入式系统包括PC机都遵循这一特点,即把程序加载到SDRAM中运行。如采用8M字节的SDRAM HY57V641620HG。图1为税控收款机硬件系统框图。

  

2.2 底层驱动的设计

底层驱动包含三部分内容:BOOT向量表部分,S3C44B0X监控程序部分及税控机在Nucleus下的BSP

BOOT向量表

因系统选用的是Nucleus操作系统,对S3C44B0X的中断是向量模式。所以在boot.s(汇编语言编写)文件中主要是设置向量表的跳转地址。表1ARM7TDMI的异常向量表。

 

进入模式

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地址执行时,系统将程序跳转到0x10004K地址的地方继续执行(4K地址烧入监控程序)。

44B0X的监控程序

负责初始化系统以及拷贝应用程序到内存并且运行。该部分关键的两个文件是mon.sMain.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