指纹考勤机(如图所示)通常用于在工作日的上班时间,采集员工指纹信息,以确定该员工是否正常上班。其基本功能要求有: a、能够采集指纹信息,并求取指纹特征,然后与事先预存在指纹特征库中的指纹特征比对。b、系统中需存储指纹图原始信息和指纹特征信息,这些指纹信息

admin2021-06-09  53

问题 指纹考勤机(如图所示)通常用于在工作日的上班时间,采集员工指纹信息,以确定该员工是否正常上班。其基本功能要求有:

a、能够采集指纹信息,并求取指纹特征,然后与事先预存在指纹特征库中的指纹特征比对。b、系统中需存储指纹图原始信息和指纹特征信息,这些指纹信息,是预先采集并存储的。每个新员工初来企业工作时,需先采集其指纹图原始信息,并求取指纹特征,然后添加到指纹原始图信息库和指纹特征库中。c、在新员工指纹信息采集时,需通过键盘输入其员工ID,然后采集其指纹图信息,采集完成后,按“保存”键可保存指纹图信息。若按“取消”键,则可取消本次采集。
d、指纹考勤机上需要一个LCD显示屏,便于显示相关的信息。
e、需要与后台PC机通信,以便把考勤信息传输给后台PC机保存,并可以查询及生成相关统计报表。
根据上述功能要求的描述,若采用S3C2410芯片为核心来构建该指纹考勤机的硬件平台,请完善下面的叙述(程序)和回答有关的问题。(完善程序或回答问题所需的寄存器格式见题后的附录)。
(1)在硬件平台构建时,若选用的指纹采集模块的图像芯片分辨率设置为256×360,一幅灰度等级为256的指纹图需要存储单元【81】KB(注:1024B=1KB)。若指纹图信息库中需要存储100幅员工指纹原始图像信息,那么,在设计存储器系统时,至少需要设计容量为【82】MB的存储单元来存储指纹原始图信息。(保留2位小数)
(2)若在设计指纹采集模块的接口电路时,选用GPE端口的GPE15和GPE14分别连接指纹采集模块的SDA和SCL引脚,GPE端口的GPE7~GPE0连接指纹采集模块的数据线D7~D0,用于输入原始图像信息。那么,在相关驱动程序中,需用下面语句来初始化GPE15、GPE14的引脚功能:
rGPECON=((rGPECON & 0x0FFFFFFF) |【83】) // rGPECON是端口E的控制寄存器
并用下面语句来初始化GPE7~GPE0的引脚功能:
rGPECON= ((rGPECON &【84】)
(3)在设计键盘接口电路时,选用GPF0~GPF3来输出键盘行扫描信号,选用GPF4~GPF7来输入键盘列信号(其按键排列示意图如图所示),即把键盘设计成4×4的阵列形式。在软件设计时,自行设计了键盘扫描函数,请你补充完善之:

//**KEYOUTPUT是键盘扫描时的输出地址,KEYINPUT是键盘读入时的地址
#define KEYOUTPUT (*(volatile INT8U *)0x56000054)
#define KEYINPUT (*(volatile INT8U *)0x56000054)
INT16U ScanKey()
{
INT16U key=0xFFFF;
INT8U i;
INT8U temp=0xFF,output;
rGPFCON= ((rGPFCON|【85】) & 0xFF55);//初始化GPF0~GPF3为输出,rGPFCON是端口F的控制寄存器
rGPFCON= rGPFCON&【86】;//初始化GPF4~GPF7为输入
for (i=1;((i<=【87】)&&(i>0)); i<<=1)
{
output|= 0xFF;
output&= (~i);
KEYOUTPUT=output;
temp= KEYINPUT;
if((temp&0xF0)!=【88】)
{
key =(~i);
key <<= 8;
key |= ((temp&0xF0)|0x0F);
return (key);
}
}
return 0xFFFF;
}
上面的键盘扫描函数返回值是键盘扫描码,通过键盘扫描码我们可以判断是否有按键按下,并确定是哪个按键按下。例如:若返回值为:【89】时,可知是键盘中的“8”键按下,若返回值为0xFE7F时,可知是键盘中的【90】键被按下。若无键按下时,返回值应为:【91】
(4)若LCD显示屏的接口电路设计时,选用S3C2410的端口C和端口D来控制LCD屏的相关信号,那么,初始化端口D引脚功能的语句可以编写如下:
rGPDCON=【92】) //rGPDCON是端口D的控制寄存器
(5)与后台PC机的通信通过串口进行,若硬件设计时选用UART1部件来实现串口,那么,在相关驱动程序中需要用下面一组语句来初始化相关的硬件部件(注:设置波特率为115200bps)。
rGPHCON=( rGPHCON & 0xFFFFF0FF ) |【93】;//rGPHCON是端口H的控制寄存器
rUFCON1=0x0;//FIFO disable
rUMCON1=0x0;
rULCON1=(5<<【94】)|(0<<【95】)|( 3 );//设置线路控制寄存器:偶校验,1位停止位,8位数据位
rUCON1=0x245;//设置控制寄存器
rUBRDIV2=( (int)(PCLK/(115200×【96】)+ 0.5) -1 );//PCLK是系统主频
(6)若在设计系统启动引导程序时,需要设置系统的异常向量表,因为ARM9体系结构中规定异常向量之间各相差【97】个字节,因此,需要在各异常向量处设计一条分枝指令。对于S3C2410微处理器来说,启动引导程序还需要完成禁止看门狗部件和禁止【98】,并设置各工作模式下的【99】指针。然后再通过BL指令来引导应用程序的【100】函数。
说明:下面是试题解答时需要用到的寄存器格式及相关说明。
1)端口D控制寄存器(GPDCON)的格式

2)端口E控制寄存器(GPECON)的格式

3)端口F控制寄存器(GPFCON)的格式

4)GPHCON寄存器的形式

5)ULCONn寄存器的形式

选项

答案(1)【81】90【82】8.79。 (2)【83】0xA0000000【84】0xFFFF0000 (3)【85】0x0055【86】x00FF【87】8【88】0xF0【89】0xFDBF【90】“保存”【91】0xFFFF (4)【92】 0xAAAAAAAA (5)【93】0x00000A00(或0xA00)【94】3【95】2【96】16 (6)【97】4【98】中断(中断部件)【99】SP(堆栈)【100】main()(main,主)

解析 (1)灰度等级为256表明其像素深度是8,图像数据量=图像水平分辨率*图像垂直分辨率*像素深度/8,即256*360*8/8=92160B/1024=90KB;存储100幅图像所需容量=90KB*100/1024=8.79MB。
(2)GPE15和GPE14的第三功能分别为SDA和SCL,对照E口控制寄存器GPECON,相应引脚的赋值应为10,即1010;而GPE7~GPE0作为输入口赋值应为00,其余置11;故为0xA0000000和0xFFFF0000。
(3)题中选用矩阵键盘接口,采用中断方式读取键盘值。参考F口的控制寄存器GPFCON,将端口作为输出口则将相应端口值置为01,作为输入口则置为00,其余口置11:对矩阵键盘采用循环扫描法读取键盘按键情况,需要循环8次:无键按下,则全1,有键按下,则相应置0。循环结构中i<=8;当没有按键被按下,输出为0xFFFF,有相应的键被按下时,结合行列值便可判断。
(4)LCD显示屏自身不带控制器,没有驱动电路;本系统中主要利用GPIO口设计驱动电路来进行控制,主要利用GPC和GPD端口。初始化数值可根据端口D的控制寄存器GPDCON来确定,所有端口置10即可。
(5)选用UART1部件来实现串口,根据GPHCON可知,将端口GPH4和GPH5置10,其余端口置00即可;UART的波特率由除数寄存器决定,也取决于外部时钟,关系式如下:UBRDIVn=INT(UCLK/(波特率*16))–1。其中UCLK可以是PCLK。
(6)软件平台的构建步骤通常是:首先移植启动引导程序(Bootloader),然后完成Linux内核的移植,随后还需构建根文件系统。基于ARM9核的处理器,各异常向量之间相差4个字节。因此,需要在各异常向量处设计一条无条件转移指令。对于S3C2410微处理器来说,启动引导程序还需要完成禁止看门狗部件和禁止中断,并设置各工作模式下的SP指针,然后再通过BL指令来引导应用程序的main函数。
转载请注明原文地址:https://jikaoti.com/ti/gIo7FFFM
0

最新回复(0)