软件概要设计1.docx

上传人:b****7 文档编号:10212852 上传时间:2023-02-09 格式:DOCX 页数:39 大小:637.97KB
下载 相关 举报
软件概要设计1.docx_第1页
第1页 / 共39页
软件概要设计1.docx_第2页
第2页 / 共39页
软件概要设计1.docx_第3页
第3页 / 共39页
软件概要设计1.docx_第4页
第4页 / 共39页
软件概要设计1.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

软件概要设计1.docx

《软件概要设计1.docx》由会员分享,可在线阅读,更多相关《软件概要设计1.docx(39页珍藏版)》请在冰豆网上搜索。

软件概要设计1.docx

软件概要设计1

 

T6软件概要设计

北京思普瑞特科技发展有限公司

2009-4-29

版本

编制

审核

批准

说明

0.1

肖晖,

汪超干

2009-5-18,初次制定。

一.软件基本要求及功能概述

在现有硬件平台(详见“T6硬件概要设计”)下,完成打印任务。

要求支持RS232、蓝牙、USB作为数据输入通道,系统使用128X32点阵的LCD作为信息输出,另外在主机的控制下(直通模式,使用采购的IC卡模块),具备IC卡、SIM卡的读写功能和磁卡的读功能。

系统应能支持外接电源和电池作为电源输入,另外具备电池充电能力。

1.1软件环境介绍

整体软件在“KeiluVision3”环境+ULINK2仿真器环境下开发,使用ST公司的标准外围设备驱动函数库。

1.2软件基本架构

1.2.1软件总体基本框图

软件总体框图如下(正常打印模式):

软件模块按实现功能方式的不同,将分成两大类:

中断程序模块和功能程序模块。

其中,中断程序模块有可能调用功能函数模块。

所有中断程序模块没有入口参数和出口参数(将使用全局变量进行程序控制)。

以下介绍的所有的中断程序模块将按照优先级由高到低的顺序排列。

1.2.2软件工作模式简介

软件具备以下几种工作模式,详见下表:

模式名称

进入方法

主要功能

退出模式

测试页

打印模式

开机+FEED键

打印测试页

所有测试页打印完毕或松开FEED键后进入正常打印模式

系统设置模式

开机+MODE键

设置系统参数

(注:

1)

关机

恢复出厂设置

开机+MODE

+FEED并持续5秒

系统设置参数恢复成默认值

完成后自动进入到正常打印模式

正常打印模式

开机

完成打印功能

关机

注1:

仅使用LCD屏的T6M设备具备使用键盘设置打印参数功能。

不具备LCD屏的型号将仅支持串口指令设置方式。

因为正常打印模式将作为本次开发的重点,因此一下部分,如果没有特殊说明,均是指正常打印模式。

1.3中断程序模块简述

1.3.1Timer0中断程序模块简介

Timer0_Int_Server{};//Timer0中断程序模块

实现功能:

实现系统时标功能,每100uS中断一次,在中断程序中将:

1.检查按键状态并设置按键标志(包括双击和长按状态)。

2.设置100uS时标和100mS时标(IC卡和磁卡使用)。

3.串口超时管理。

4.启动AD采集。

5.检查是否有磁卡数据。

运行条件:

系统待机模式和正常运行模式下运行。

在掉电模式下停止运行。

使用变量:

全局变量:

uint32Timer0Cntr;//中断计数器

uint8Timer0100uSFlag;//Timer0标志,高有效

uint8Timer0100mSFlag;//Timer0标志,高有效

uint8KeyFeedFlag;//FEED键的有效标志,高有效

uint32KeyFeedCntr;//FEED键的连击计数器

uint8KeyModeFlag;//MODE键的有效标志,高有效

uint32KeyModeCntr;//MODE键的连击计数器

uint8KeyPwrFlag;//POWER键的有效标志,高有效

uint32KeyPwrCntr;//POWER键的连击计数器

Uint8ExtPowerFlag;//外部电源有效标志,高有效

Uint8ExtUsbFlag;//外部USB有效标志,高有效

uint8Uart1TimeOutCtrl;//UART1超时控制,高有效

uint8Uart1TimeOutFlag;//UART1超时标志,高有效

uint32Uart1TimeOutCntr;//UART1超时计数器

uint8Uart2TimeOutCtrl;//UART2超时控制,高有效

uint8Uart2TimeOutFlag;//UART2超时标志,高有效

uint32Uart2TimeOutCntr;//UART2超时计数器

uint8Uart4TimeOutCtrl;//UART4超时控制,高有效

uint8Uart4TimeOutFlag;//UART4超时标志,高有效

uint32Uart4TimeOutCntr;//UART4超时计数器

uint8AdCtrlFlag;//AD采集控制,位标志(共4个),高有效

uint8AdIndex;//AD采集索引控制,有效值0~3

uint8MsrCardFlag;//磁卡控制标志,高有效

局部变量:

自行定义。

资源占用:

注意事项:

在中断程序中,除可立即完成的操作(如设置键盘标志操作)外,将只设置标志后退出,在主程序任务轮询中完成具体的操作(下同)。

1.3.2Timer1中断程序模块简介

Timer1_Int_Server{};//Timer1中断程序模块

实现功能:

实现打印延时控制功能,每100uS中断一次,在中断程序中将:

1.完成打印的加热时间控制。

2.完成打印的走纸延时控制。

3.完成外部SPEAKER运行控制。

运行条件:

系统待机模式和正常运行模式下,由主程序根据当前打印任务的执行情况启动和禁止。

使用变量:

uint8PrintCtrlFlag;//打印有效控制标志,高有效

uint32PrintCntr;//打印延时计数器

uint32PaperCntr;//走纸延时计数器

uint8BeepMode;//外部SPEAKER模式控制

uint8BeepIndex;//外部SPEAKER运行索引控制

uint32BeepHighCntr;//外部SPEAKER输出高延时计数器

uint32BeepLowCntr;//外部SPEAKER输出低延时计数器

资源占用:

注意事项:

1.3.3Timer2中断程序模块简介

Timer2_Int_Server{};//Timer2中断程序模块

实现功能:

保留功能。

运行条件:

使用变量:

资源占用:

注意事项:

1.3.4UART1中断程序模块简介

Uart1_Int_Server{};//Uart1中断程序模块

实现功能:

完成串行数据的接收功能(RS232数据接收),使用硬件的缓冲(32字节)。

在中断程序中,首先需要判断本次操作是指令还是数据,根据内容进行不同饿处理。

根据程序设置,可以有选择的完成数据校验和命令解析功能。

运行条件:

系统初始化后的默认状态为允许运行,运行过程中可设置成忽略状态(允许中断但不接收数据)。

使用变量:

uint8Uart1Index;//数据索引。

Uint32DataCounter1;//当前数据计数器。

接收到指令是设置,只有在接收指令数

据大于硬件缓冲的情况下才使用。

uint8Uart1TimeOutCtrl;//UART1超时控制,高有效,与TIMER0共用。

uint8Uart1TimeOutFlag;//UART1超时标志,高有效,与TIMER0共用。

uint32Uart1TimeOutCntr;//UART1超时计数器,与TIMER0共用。

资源占用:

注意事项:

1.3.5UART2中断程序模块简介

Uart2_Init_Server{};//Uart2中断程序模块

实现功能:

完成串行数据的接收功能(蓝牙数据接收),使用硬件的缓冲(32字节)。

在中断程序中,首先需要判断本次操作是指令还是数据,根据内容进行不同饿处理。

根据程序设置,可以有选择的完成数据校验和命令解析功能。

运行条件:

系统初始化后的默认状态为允许运行,运行过程中可设置成忽略状态(允许中断但不接收数据)。

使用变量:

uint8Uart2Index;//数据索引。

Uint32DataCounter2;//当前数据计数器。

接收到指令是设置,只有在接收指令数

据大于硬件缓冲的情况下才使用。

uint8Uart2TimeOutCtrl;//UART2超时控制,高有效,与TIMER0共用。

uint8Uart2TimeOutFlag;//UART2超时标志,高有效,与TIMER0共用。

uint32Uart2TimeOutCntr;//UART2超时计数器,与TIMER0共用。

资源占用:

注意事项:

1.3.6USB中断程序模块简介

USB中断将分成以下三个子中断程序。

EP0_Server{};//EP0中断程序模块

实现功能:

完成USB设备的枚举控制以及主机USB命令的接收和设备状态的发送。

运行条件:

系统运行过程中将一直允许运行,

使用变量:

详见USB设计有关章节。

资源占用:

注意事项:

EPx_Out_Sever{};//Epx_Out端点中断程序模块

实现功能:

完成主USB发送数据的接收。

运行条件:

系统运行过程中将一直允许运行,根据EP0的指令,决定是否将接收的数据丢弃。

使用变量:

详见USB设计有关章节。

资源占用:

注意事项:

本设计中将使用EP2_OUT端点(512字节)。

EPx_In_Sever{};//Epx_In端点中断程序模块

实现功能:

完成到主USB数据的发送(目前保留)。

运行条件:

系统运行过程中将一直允许运行,根据EP0的指令,决定是否上传数据。

使用变量:

详见USB设计有关章节。

资源占用:

注意事项:

本设计中将使用EP6_IN端点(512字节)。

1.3.7FLASH中断程序模块简介

Spi1_Int_Server{};//Spi1中断程序模块

实现功能:

完成SPI1接口的串行数据的发送接收功能。

作为SPI接口的FLASH的底层驱动接口程序,将支持整扇区读写和字节读操作。

运行条件:

系统初始化后的默认状态为允许运行。

使用变量:

详见后续的FLASH的运行控制数据结构。

资源占用:

注意事项:

1.3.8PRINTER中断程序模块简介

Spi2_Int_Sever{};//Spi2中断程序模块

实现功能:

完成SPI2接口的串行数据的发送接收(目前仅使用数据发送功能,数据接收功能保留)功能。

以字节为单位,支持任意数据长度的发送。

运行条件:

系统初始化后的默认状态为允许运行。

使用变量:

详见后续的打印运行控制数据结构。

资源占用:

注意事项:

1.3.9UART4中断程序模块简介

Uart4_Int_Sever{};//Uart4中断程序模块

实现功能:

完成串行数据的接收功能(IC卡和SIM卡,数据发送使用查询方式完成),使用硬件的缓冲(32字节)。

在中断程序中,根据程序设置,可以有选择的完成数据校验和命令解析功能。

运行条件:

系统初始化后的默认状态为允许运行,运行过程中可设置成忽略状态(允许中断但不接收数据)。

使用变量:

uint8Uart4Index;//数据索引。

Uint32DataCounter4;//当前数据计数器。

接收到指令是设置,只有在接收指令数

据大于硬件缓冲的情况下才使用。

uint8Uart4TimeOutCtrl;//UART4超时控制,高有效,与TIMER0共用。

uint8Uart4TimeOutFlag;//UART4超时标志,高有效,与TIMER0共用。

uint32Uart4TimeOutCntr;//UART4超时计数器,与TIMER0共用。

资源占用:

注意事项:

1.3.10AD中断程序模块简介

Ad_Int_Sever{};//AD中断程序模块

实现功能:

完成AD采集数据的接收和初步处理。

AD采集由系统定时器触发,由本中断程序处理(读AD采集数据后,设置相应的全局标志)

运行条件:

系统初始化后的默认状态为允许运行。

使用变量:

uint8ChargeOe,//充电允许标志,高有效

uint8ChargeStus,//充电状态,在充电允许标志有效地情况下本标志有效

uint8ChargeCntr,//充电计数器,

uint32ChargeBuffer,//充电数据缓冲器

uint32BatteryStus,//电池电量数据

uint8PrintOe,/打印允许标志,高有效

uint8PaperErrFlag,//打印头缺纸错误标志,高有效。

uint8PaperCntr,//缺纸监测计数器,

uint32ChargeBuffer,//缺纸监测缓冲器

uint8TempErrFlag,//打印头过热错误标志,高有效。

uint8PrtTempCntr,//打印头过热监测计数器,

uint32PrtTempBuffer,//打印头过热监测缓冲器

资源占用:

注意事项:

1.3.11按键中断程序模块简介

本部分包含两个按键中断程序。

KeyMode_Int_Sever{};//MODE键中断程序模块

KeyFeed_Int_Sever{};//FEED键中断程序模块

实现功能:

沿检测中断,将系统从休眠状态唤醒。

运行条件:

系统初始化后的默认状态为禁止运行,在进入休眠状态前启动本功能,从休眠状态中唤醒后禁止本功能。

使用变量:

uint8WakeUpFlag,//系统唤醒标志标志,高有效

资源占用:

注意事项:

1.4功能程序模块简述

1.4.1磁卡操作组件简述

磁卡组件包括两个有效函数,初始化函数和磁卡数据读函数。

Card_Init_Svr{}//磁卡初始化程序

实现功能:

初始化磁卡读功能。

运行条件:

系统初始化后执行,或主程序认为在有必要的情况下执行(读错误的情况下)。

使用变量:

资源占用:

注意事项:

Card_Read_Svr{//磁卡读程序

uint8RetryNumber;//错误重试次数

uint8DataNumber;//读数据长度

uint8DataBuffer[];//读数据缓冲区

}

返回值:

0=读成功,1=读错误。

实现功能:

确认磁卡内部有数据的情况下,读磁卡内部数据。

运行条件:

为保证磁卡内部数据的可靠读取,建议在读磁卡数据时,关闭不必要的中断程序。

使用变量:

uint8CardOe;//磁卡运行控制标志,高有效

uint8CardHeadFlag;//磁卡数据有效标志(数据在磁卡芯片中),高有效

uint8CardDataFlag;//磁卡数据读有效标志,0=未读;1=读正确;2=读错误

uint8CardData[CARDSIZE];//磁卡数据缓冲区

资源占用:

注意事项:

1.4.2FLASH操作组件简述

本处FLASH的操作特指外部SPI接口的FLASH芯片操作,

FLASH组件操作包括三个层次的函数,详见下图:

应用接口层完成与用户程序接口的任务。

BSP接口层完成应用接口层与具体硬件之间的接口。

硬件驱动层完成具体硬件的管理与控制。

整片FLASH中的内容按一下方法进行分配:

以上FLASH按16M字节进行设计。

FLASH内部按扇区进行管理,每扇区规定为256字节。

使用绝对地址为0~1023字节的存储区作为文件信息记录区。

文件信息记录区内容安排如下:

起始8个字节作为本FLASH是否使用的标志,规定为ASC字符的“12345678”。

本应用最多支持126个独立的文件。

注意每个文件的起始位置为一个完整扇区的开始地址。

使用地址从“0x000400”~“0x010000”的空间作为系统信息的存储空间,目前使用“0x000400”~“0x0004ff”的256字节作为系统信息存储空间(存储与打印相关的系统信息),其余空间作为保留信息存在。

建议的系统信息的数据结构见下文。

1.4.3LCD操作组件简述

LCD组件包括特定的用户UI接口控制(打印设置)和打印过程中状态输出。

详细内容见后续章节。

1.4.4打印缓存管理组件简述

详细内容见后续章节。

1.4.5走纸控制函数简述

uint8Paper_Montion_Svr{//手动走纸控制程序

uint16DlyNumber;//走纸延时计数

uint8StepNumber;//走纸数据长度

}

返回值:

0=读成功,1=读错误。

实现功能:

被调用一次,完成一个指定个4步的走纸控制循环。

运行条件:

为保证走纸的顺畅,建议在调用本函数时,关闭不必要的中断程序。

使用变量:

无。

资源占用:

使用指定的IO口。

注意事项:

二.软件模块及层次关系设计

2.1所有模块及归属关系列表

功能分组

模块名称

简要介绍

备注说明

数据输入

串行接口控制

初始化、数据接收、数据处理,数据缓存及指令队列填充

使用同一个数据缓存及指令队列

蓝牙接口控制

初始化、数据接收、数据处理,数据缓存及指令队列填充

USB接口控制

初始化、数据接收、数据处理,数据缓存及指令队列填充

数据处理

IC卡读卡控制

SIM卡读卡控制

磁卡读卡控制

用户接口

键盘输入查询

本功能用户设置模式中使用

LCD菜单显示

按键查询

将忽略“MODE”键

LCD信息显示

显示系统信息和错误信息

系统处理

(设备相关)

系统时标控制

数据采集控制

FLASH读写控制

电池充电管理

系统待机/激活管理

打印缓冲区管理

打印进程管理

走纸控制

系统处理

(功能相关)

打印缓冲填充(带参数)

打印字体处理

包括点阵查询与转置、缩放等处理

2.2模块详细介绍

模块详细介绍包括模块内部处理流程(针对功能比较复杂的模块或包含内部子模块的模块),模块使用的数据结构以及一些认为需要详细介绍的内容。

2.2.1串口控制模块

基本功能介绍:

串口模块使用UART1与主机进行通讯,上传系统数据与状态,接收主机下发的数据与控制。

串口启用最多32字节的硬件缓冲,每一次发送/接收最多可操作32个字节的数据。

串口使用系统结构中定义的固定的模式(波特率、起始位、停止位、奇偶校验以及硬件流控制等)。

每一次发送接收使用校验?

(是否能确定)

串口控制模块在UART1的接收中断有效后被调用,UART1的发送使用查询模式完成。

基本控制结构:

串口控制模块使用以下的结构进行控制,详见以下伪代码

structUart1_struct{

uint8ModuleCtrl;//模块使用控制,0=FALSE;1=DATA;2=DATA+CODE

uint8BusyCtrl;//模块状态,0=FALSE;1=TRUE

uint8ErrorFlag;//模块错误状态,0=FALSE;1=TRUE

uint8ModuleStus;//模块状态,详细定义见下表

uint16DataNumber;//数据接收字节总数

uint8DataBuffer[DATASIZE*8];

//数据接收缓冲,“DATASIZE”为系统宏定义

}

“BusyCtrl”由主程序设置。

ModuleStus:

状态定义,由中断程序置位,由系统应用程序清除。

0x00:

初始数据接收状态,正常接收数据。

0x01:

已经接收了一包有效数据。

控制流程:

推荐的串口的控制程序流程如下:

2.2.2蓝牙控制模块

蓝牙模块使用UART2资源,控制方式与串口控制方式相同。

2.2.3USB控制模块

USB控制模块分为USB设备枚举控制和USB设备数据传输控制。

USB设备枚举控制将在下面得章节中介绍,

2.2.4磁卡控制模块

1.磁卡控制模块使用的数据结构

StructMagCard_struct

{

U8ErrFlag;//解析数据后的正确标志1:

出错0:

正确

U8Tracke1Buffer[R1SIZE];///第一轨道解析后的数据按最大值来存储

U8Tracke2Buffer[R2SIZE];///第二轨道解析后的数据按最大值来存储

U8Tracke3Buffer[R3SIZE];///第三轨道解析后的数据按最大值来存储

}

2.磁卡控制的模块的层次划分

应用层提供卡上用于人机交付的数据。

解析层负责把数据按轨道进行解析。

解析后数据存在磁卡数据结构里。

底层IO驱动负责把数据从芯片里读出来。

3.磁卡控制模块的基本数据流程

2.2.5IC卡及SIM卡控制模块

IC卡及SIM卡的控制使用外部的IC卡硬件模块进行具体的硬件层接口控制,在ARM芯片中使用UART4接口,使用串口通讯的方式(应答式握手通讯),通过外部的IC卡硬件模块,间接地控制IC卡数据和SIM卡数据的读取。

IC卡及SIM卡控制模块使用的数据结构

StructICorSIM_struct

{

U8TrsFlag;//从主机到卡的数据传送任务标志,高有效

U8RevFlag;/从卡到主机的数据传送任务标志,高有效

U8Errorflag;//解析后的数据标志1:

数据出错0:

数据正确

U8Buffer[ICTSIZE];//从主机传送到卡里的数据

U8Buffer[ICRSIZE];//从卡里读出传送到主机的数据

}

IC卡及SIM卡控制的模块的层次划分

通过串口把读到的数据传送到IC卡数据结构的Buffer[]

IC卡及SIM卡控制模块的基本数据流程

通过串口把读到的数据传送到IC卡数据结构的Buffer[]

2.2.6系统走纸控制

系统走纸控制将分为两种场合下的走纸控制,独立走纸控制(按住FEED键后的走纸,)和与打印结合的走纸控制。

在本处将主要介绍独立走纸控制。

走纸函数原型如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1