基于S3C44BOX的电子词典软件设计与实现DOC.docx
《基于S3C44BOX的电子词典软件设计与实现DOC.docx》由会员分享,可在线阅读,更多相关《基于S3C44BOX的电子词典软件设计与实现DOC.docx(29页珍藏版)》请在冰点文库上搜索。
基于S3C44BOX的电子词典软件设计与实现DOC
基于S3C44BOX勺电子词典软件设计与实现
1概述
此次基于ARM7勺电子词典系统开发作业,由我们小组4人合作完成,其中我主要负责软件方面勺开发,所做勺方面有英译汉软件功能勺实现,输入值软件识别功能勺实现以及看门狗定时器勺实现。
由于不怎么熟悉arm勺开发,基本是看着书做,设计思路和方法、功能实现也都是书上怎么来,自己就怎么实现,希望傅老师谅解,这块勺基础确实薄弱。
2S3C44BOX处理器介绍
2.1S3C44BOX简介
S3C44BOX微处理器片类集成ARM7TDMI核,采用0.25卩mCMOS工艺制造,并在ARM7TDMI核勺基础上集成了丰富勺外围功能模块,便于低成本设计嵌入式系统应用系统。
片上集成勺主要功能如下:
DMA通道。
控制,片选逻辑)。
并带有一个LCD专用DMA通
在ARM7TDMI基础上增加至8KB勺Cache。
外部扩充存储器控制器(FP/EDO/SDRAMLCD控制器(最大支持256色勺DSTN),道。
2个通用DMA通道2个带外部请求引脚勺
2个带有握手协议勺UART,1个SIO。
1个多主勺I2C总线控制器。
1个I2S总线控制器。
5个PWM定时器及1个内部定时器。
看门狗定时器。
71个通用可编程I/O口,8个外部中断源。
功耗控制模式:
正常,低速,休眠和停止。
8路10位ADC。
具有日历功能的RTC(实时时钟)。
PLL时钟发生器。
2.2S3C44BOX特点
2.2.1S3C44BOX体系结构
S3C44BOX是基ARM7TDMI体系结构的SOC。
集成了手持设备和通用嵌入式系统应用的解决方案;
16/32位RISC体系结构和ARM7TDMI处理器内核强大的指令体系;
Thumb代码压缩机,最大化代码密度同时保持了32位指令的性能;基于JTAG的片上集成ICE调试支持解决方案;
32>8位硬件乘法器;
实现低功耗SAMBAII(三星ARM处理器嵌入式微控制器总线体系结构)的新型总线结构。
2.2.2系统(存储)管理
支持大/小端方式;
寻址空间:
每bank32M字节(共256M字节);
支持每bank可编程的8/16/32位数据总线宽度;
7个bank具有固定的bank起始地址和可编程的bank大小;
1个bank具有可编程的bank起始地址和bank大小;
8个存储器bank:
-6个ROM,SRAM存储器bank;
—2个ROM/SRAM/DRAM(快速页面,EDO和同步DRAM);
所有的存储器bank具有可编程的操作周期;
支持外部等待信号延长总线周期;
支持掉电时DRAM/SDRAM的自刷新模式;
支持均匀/非均匀的DRAM地址。
223Cache存储器和内部SRAM
4路组相联统一的8KB指令/数据Cache;
未用的Cache空间用来作为4/8KBCache存储空间可作为片内的SRAM使用;
支持LRU(近期最少使用)替换算法
采用保持主存储器与cache内容一致性的“写穿式”策略
写存储器具有4级深度
当缓冲区出错时,采用“请求数据优首先填充”技术2.2.4时钟和电源管理
低功耗
正常模式低速模式休眠模式SL空闲模式停止模式
片上PLL使MCU工作时钟最大达到75MHZ可以通过软件设置各功能模块的输入时钟电源模式:
正常,慢速,空闲和停止模式;正常工作模式;不加PLL的低时钟频率模式;只停止CPU的时钟;LCD控制器工作停止所有的时钟;
通过EINT[7:
0]或RTC报警中断从停止模式唤醒2.2.5中断控制器
30个中断源(看门狗定时器,6个定时器,6个UART,8个外部中断,4个DMA,2个RTC,1个ADC,1个I2C,1个SIO)
采用向量化的IRQ中断模式以减少中断的延迟可选的电平/边沿模式触发外部中断电平/边沿模式具有可编程的优先级支持FIQ为紧急的中断请求进行服务
2.2.6定时器和PWM(脉宽调制)
5通道16位具有PWM功能的定时器,1通道16位内部定时器(可进行基于DMA或中断的操作)
可编程的占空比周期,频率,和优先级能产生死区
支持外部时钟源2.2.7RTC(实时时钟)
充分的时钟特性:
毫秒,秒,分钟,小时,日,星期,月,年
32.768KHZ时钟;
定时警报,可用于唤醒CPU;可产生时钟节拍中断
2.2.8通用I/O口
8个外部中断口
71个多功能输入/输出口229UART(异步串行通讯)
2通道UART,可进行基于DMA或中断的操作支持5位,6位,7位或8位串行数据传输/接收支持在发送/接收期间的H/W握手功能可编程的波特率
支持IrDA1.0(115.2Kbps)
支持用于测试的回馈模式
每个通道具有2个内部32字节的FIFO分别用于输入和输出2210DMA(直接存储器操作)控制器
2通道通用DMA(直接存储器操作)控制器,不需要CPU干预
2通道DMA桥(外设DMA)控制器
支持I/O到存储器,存储器到I/O,I/O到I/O的6种DMA请求:
软件,4个内部功能模块(UART,SIO,定时器,IIS),和外部引脚。
在同时发生的多个DMA之间具有可编程的优先级顺序;采用猝发式的传输模式以提高FPDRAM,EDODRAM和SDRAM的数据传输速率;
支持在外部设备到存储器和存储器到外部设备之间采用fly-by模式
2.2.11A/D转换器
8通道的ADC
最大500kSPS/10-bit
2.2.12LCD控制器
支持彩色/黑白/灰度LCD屏支持单路扫描和双路扫描支持虚拟显示屏功能系统存储器用来作为显示缓存用专门的DMA来从系统存储器中获得图象数据可编程的屏幕大小灰度等级:
16级灰度;最多256种颜色
2.2.13看门狗定时器
16位的看门狗定时器
在定时器溢出时发出中断请求或系统复位
2
2.2.14I2C总线接口
1通道多主I2C总线,可进行基于中断的操作模式
可进行串行,8位,双向数据传输,标准模式速度达到100Kbit/S,快速模
式达到400Kbit/s
2
2.2.15IS总线接口
1通道音频l2S总线接口,可进行基于DMA的操作串行,每通道8/16位数据传输
支持MSB-justified数据格式2216SIO(同步串行I/O)
1通道SIO,可进行基于DMA或中断的操作
可编程的波特率
支持8位串行数据的传输和接收操作2.2.17工作电压范围
内核2.5V,I/O口:
3.0V到3.6V2.2.18工作频率
最大75MHz2.2.19封装
160LQFP/160FBGA
2.3S3C44BOX功能结构框图
JTAG
ODCk(PLL)
CPUUnrt
WriteBtrfter
**
*
ARurrcMiCPUCare
Cflctie&K-t)vle
4*
PowdrMBnag^msnl
floundgryScan
ARM7TDMTAP
Contrallflr
A/bitAf
Uemorvl/F
ROM/SRAM<
DRfiMSDRAM
LCD
1LCD1
DU^
1CONIf
(rfSnuptCONT.L
32763Hz
申
£DMA(2Ch)jU
SystemQusBnoge&ArtiTralionJ
go^tA(;o)
GPIOL^Cwhollflr)|*
l-CBust
CDnirt^llSr
WsrchdoyTimer
HS&fiL
CEMUTDllftrp
UAKToTtiachL
Lzi_I
(RoalTimoCta—
SynchnDnoulUO卡口£
PWMTimsfQ”4,$(ln|ern叭
TCLKLeXTCLK
图1S3C44BOX功能结构框图
2.4S3C44BOX芯片引脚定义
sp
w
XTE
-EMC
n3>-VEDKT
愛03CJ0siacy-^SS3負皆Z3一cm巨UJWQTJXicm呂衣上h口_Fr£l-A1盂咅ypcrn豆写s凸ixpcia容SJCtw
OWE已nCIBKPCHUMEi星lPUUE歹云旱g戈gD>-.Ek95-eRZ^
£sLM-E-EDVJ陪s->NQ<5asST赛兰E门P殆己TM婪smflp:
!
gs
—■•-—"■"—•■—n一1三1—七ifgfqog口去g[biv口4ia卩耳4"
PMr灵CtE口此mmPF曰QfS口rnghTirrMITin.rc.i—i—iIrlrwiuiTbn*ii>\nJh
llAI*U
MIW(WTMI(lAIMJ
MUJId"ZQfilOIkKlAfruMJ[MWQMMOMAjIMIAJ|»IAi
Q*r«urAirwrAiAWILMCIWdX灼AmHTKSPMADORH^PAj
ADOn21X]P«
AmnNiCnjgANihiiH^bu
PomuTiCHij
ADUH1HJIK,
AZOnia山"nij
*rmi?
V5SI0I—
S3C44B0X
160-LQFP
All㈣fBrrfUra
■pH
n
-iu
IH
a/
eB
q:
Qk
□D
a3爵二1hH忖IB1T|JH,拓If
11沖il
I——r
nn
吕
n
Elj
MU*Wd
/rt!
wi
kA;SAE>:
■jckinrziUT-lVDrCPErT3UnVDGCP[6lOLTardK^TEEl_rij|IilFUKi斗卜d18让鼻冲l-bOTCLK
RLCW*nfTAifl
■4BJicaaxypro
ICEZKGffrIaoTroE£mmzKAE弓Ac~»finirniniHiir[^tT4^ac用Hti凰U仙引JlfUFTHCV]K/rvCISMHflMKFmnWOMECLKGFFftLM'J匚M2
CU1rlUHn^FSFI□.KtuIGPEO廖0iiJIJUTTX-t3l™b
TTKrinSTk±lNl”垃RlKjCJ'CJT
-□■占s-sHHts寻二二asKfciw潯穽吟S2営咒A采le吐aPN出fe
cs^ps^^brd;h■書|^-巒Elvnl^nH-£o艮3僉sd
umESCTCnsiass-Im-TPPFySPQSnccs^n岂岂nRk国
衣
SB
咅艮cmWGftswJr琴nOZSO
靑
3s
-霍沪-雷卬ds^JlTprwuroH乍-™自」ibs.os^峻帝?
UDW星-nUSW一&r1us2-h9QkTBSNnOA一
电g
Afnrwwoi=
Au)頁
UJUf
图2S3C44BOX芯片引脚定义图
3基于S3C44BOX电子词典开发
嵌入式系统以其体积小,性能好,功耗低,可靠性高以及面向行业应用的特点已被广泛应用与各个领域。
其中电子词典是嵌入式系统消费电子领域典型的应用实例,它具有完整的输入/输出设备。
3.1电子词典系统定义与需求分析
电子词典系统应具备以下功能要求:
(1)能够通过键盘、触摸屏输入英文
a〜z:
实现字母输入;
Pageup/down:
显示上/下一个被查询过的单词;
Lineup/down:
光标移至上/下一行,在单词输入过程中,在单词翻译区会有拼写相近单词显示,用Lineup/down按键可以上下选择这些单词;
Enter:
翻译,将当前单词与词库中的内容相比较,如有一致则显示其内容,否则给出提示;
Backspace:
退格,删除单词最末尾的字母并将光标前移一位;
LCD的相应
提供友好的人机界面,将输入的内容和翻译的结果显示在
提供触摸屏输入六个功能键。
(2)
(3)
(4)
区域内。
对输入的单词即时翻译。
可以记忆3个已经查询过的单词。
理1]
Ab-LJzhzrtdicbitaddup
图3-1查询界面
3.2电子词典方案设计
为实现电子词典功能需求,结合嵌入式系统软硬件协同技术设计,采取以下设计方案。
3.2.1硬件设计
依据ARM芯片的选择原则,此处选择集成了丰富的外围功能模块,便于低成本设计嵌入式应用系统的S3C44BO处理器作为系统的主控制器。
利用其内置的LCD控制器实现LCD控制接口;
利用I2C总线控制器实现键盘控制接口;
利用A/D转换器实现触摸屏控制接口;
利用UART实现调试接口;
利用GPIO连接LED灯显示有关状态。
以上5个硬件部分的开发中,其中第1,2,3,5本组其他同学完成,第4个部分UART实现调试接口的开发与应用,在本文档中重点说明,由本人单独完成。
322软件设计
本电子词典软件只要完成键盘操作,菜单操作及LCD显示功能。
根据软件
模块化设计方法将系统软件分为3个模块;词库编写,功能控制软件设计,人机交互接口功能设计。
我负责软件的总体设计图,实现其基本功能。
其中按键分别具有如下功能:
a~z:
实现字母输入;
Pageup/down:
显示上/下一个被查询过的单词;
Lineup/down:
光标移至上/下一行,在单词输入过程中,在单词翻译区会有拼写相近单词显示,用Lineup/down按键可以上下选择这些单词;
Enter:
翻译,将当前单词与词库中内如相比较,若一致则显示其内容,否则给出提示;
Backspace退格,删除单词最末尾的字母并将光标前移一位。
本电子词典系统还需要提供触摸输入,在触摸屏上划分出6个区域,分别对应键盘上的6个功能键。
4开发环境
电子词典硬件模块测试软件和无操作系统电子词典应用软件的开发采
用了相同的交叉开发环境。
宿主机PC机上运行ARM公司为方便用户在基于ARM内核处理器上进行软件开发而推出的集成开发工具ARMADS(ARMDeveloper
Suite)最新版本1.2在CodewarriorIDE(IntegrateDevelopmentEnvironment)集成开发环境中编辑电子词典软件程序,通过交叉编译器和交叉链接器对软件进行编译,链接。
最终生成可执行文件,通过在线仿真器Multi
ICE将此可真行文件下载到目标板运行。
在线仿真器通过并口链接宿主机,通过JTAG接口链接目标机。
串口线直接链接宿主机和目标板,在宿主机PC机上
显示吊饰信息。
为加快软件开发的进度,在电子词典硬件平台未建立起来以前先使用EmbestEDUKIT实验板作为目标本吊饰各功能模块软件。
5开发功能说明和代码
5.1英译汉功能软件
由于要查的英文单词有两种输入方式:
一种是通过在输入框中输入字母;另一种是通过上一行/下一行键在选择框里显示的单词中进行选择,所以用参数Position表示输入方式(TRUE输入框,FALSE选择框查找)。
具体实现流程如图所示:
结束
/************************************************************
name:
translate
*func:
Translationfunctionimpiementationprogram
para:
none
*ret:
none
*modify:
*comment
*************************************************************/
U8transate(S8*word,U8Position,U8No)
U8k=0;
Trans_Clear();
Dis_Chinese(20,55,Gui_WHITE,”正在查找,请等待!
”
if(!
Position)
strcpy(word,vocab[No].c);
Disp_String(word,English_area.xO+5,English_area.y0+2);
for(k=0;k{
if(strcmp(word,vocab[k].c)==0)
Trans_Clear();
Disp_String(vocab[k].d,20,55);
Disp_chinese(20,75,GUI_WHITE,vocab[k].e);
Disp_String(vocab[k].f,20,95);
Returnk;
}
Trans_Clear()'
Dis_Chinese(20,55,GUI_WHITE,”查无此词!
”
return(k=ALL_WNo);
/********************************************************************
name:
KeyboardInt
*func:
keyboardinterrupthandlerfunction
para:
none
*ret:
none
*modify:
*comment:
********************************************************************/
voidKeyboardInt(void)
intnTemp,i,j,k,m=0;
charbbyte;
rI_ISPC=BIT_EINT1;
//clearpendingbit
charpbyte[10];
nTemp=key_read();
if(nTemp>-1)
//Lcd_Draw_HLine(10,310,80,WHITE,50);
input_char=nTemp;
Lcd_DspAscll8x16(15,45,WHITE,word);
switch(input_char)case0:
num=1;break;
case1:
num=2;break;
case2:
num=3;break;
case3:
num=4;break;
case4:
num=5;break;
case5:
num=6;break;
case6:
num=7;break;
case7:
num=8;break;
case8:
num=9;break;
case9:
counter=1;break;
case
10:
counter=2;break;
case
11:
counter=3;break;
case
12:
m=1;
Lcd_Draw_HLine(15+n-10,15+n,45,WHITE,16);
word[wordIndex]-\0';
wordIndex--;
/*if(n==0)
wordIndex=0;
Lcd_Draw_HLine(10,310,85,WHITE,160);
}break;*/
case13:
word[wordIndex]-\0';
wordIndex=0;
for(i=0;i<20;i++)
if(strcmp(word,vocab[i].c)==0)
j=0;
k=i;
break;
else
j=1;
if(j==0)
Lcd_DspAscll8x16(15,40,BLUE,vocab[k].c);
Lcd_DspAscll8x16(15,60,BLUE,vocab[k].d);
Lcd_DspAscll8x16(15,80,BLUE,vocab[k].f);
//#else
Lcd_DspHz16(15,100,BLUE,vocab[k].e);
//#endif
else
{
Lcd_DspHz16(15,120,BLUE,"未找到相应的单词");
DelayMs(600);
Lcd_DspHz16(15,120,WHITE,"未找到相应的单词");
case14:
word[wordlndex]-\0';
wordIndex=0;
if(strcmp(word,vocab[i].c)==0)
j=0;
k=i;
break;
else
j=1;
if(j==0)
Lcd_DspAscll8x16(15,40,BLUE,vocab[k].c);
Lcd_DspAscll8x16(15,60,BLUE,vocab[k].d);
Lcd_DspAscll8x16(15,80,BLUE,vocab[k].f);
//#else
Lcd_DspHz16(15,100,BLUE,vocab[k].e);
//#endif
else
if(20>x>0)
for(i=0;i<20;i++)
vocab[x].c[i]=word[i];
word[i]='\0';
Lcd_DspAscll8x16(15,40,BLUE,vocab[x].c);
x++;
else
//Lcd_DspAscll8x16(15,45,BLUE,word);
for(i=0;i<20;i++)
word[i]='\0';
break;
〃Lcd_Draw_Box(10,40,310,80,GREEN);
break;
if(num!
=0&&counter!
=0)
switch(3*(num-1)+counter-1)
{
case0:
bbyte='a';break;
case1:
bbyte='b';break;
case2:
bbyte='c';break;
case3:
bbyte='d';break;
case4:
bbyte='e';break;
case5:
bbyte='f';break;
case6:
bbyte='g';break;
case7:
bbyte='h';break;
case8:
bbyte='i