计算机三级嵌入式系统综合题

本文详细介绍了基于S3C2410芯片构建指纹考勤机的硬件平台和软件设计,包括指纹图像存储需求、GPIO端口配置、键盘接口、LCD显示、串口通信和异常处理。此外,还探讨了便携式血氧仪的硬件设计,如光电信号采集、ADC转换和定时器应用。
摘要由CSDN通过智能技术生成

1B=8bit

       在嵌入式或者单片机开发编程中,一个无符号的32为整型数据会有多种表达形式,根据编译器的库函数支持而言:(1)unsigned int 32(C语言标准表达方法);(2)uint32_t ;(3)u32。这三种方式都是在表达同一个意思,无非是想开发人员在写代码时定义数据类型能少写几个符号,因为前后版本升级,为了兼容旧版本才会出现这么多表示方法。

1.指纹考勤机

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

       a.能够采集指纹信息,并求取指纹特征,然后与事先预存在指纹特征库中的指纹特征对比。

       b.系统中需存储指纹图原始信息和指纹特征信息,这些指纹信息,是预先采集并存储的。每个新员工初来企业工作时,需先采集其指纹图原始信息,并求取指纹特征,然后添加到指纹原始图信息库和指纹特征库中。

       c.在新员工指纹信息采集时,需通过键盘输入其员工ID,然后采集其指纹图信息,采集完成后,按“保存”键可保存指纹图信息。若按“取消”键,则可取消本次采集。

       d.指纹考勤机上需要一个LCD显示屏,便于显示相关的信息。

       e.需要与后台PC机通信,以便把考勤信息传输给后台PC机保存,并可以查询及生成相关统计报表。

       根据上述功能要求的描述,若采用S3C2410芯片为核心来构建该指纹考勤机的硬件平台,请完善下面的叙述(程序)和回答有关的问题。(完善程序或回答问题所需的寄存器格式见题后的附录)。

       (1)在硬件平台构建时,若选用的指纹采集模块的图像芯片分辨率设置为256×360,一幅灰度等级为256的指纹图需要存储单元___KB(注:1024B=1KB)。若指纹图信息库中需要存储100幅员工指纹原始图像信息,那么,在设计存储器系统时,至少需要设计容量为___MB的存储单元来存储指纹原始图信息。(保留2位小数)

       【解析】bit化成Byte,除以1024。

       【答案】90、 8.79

       (2)若在设计指纹采集模块的接口电路时,选用GPE端口的GPE15和GPE14分别连接指纹采集模块的SDA和SCL引脚,GPE端口的GPE7~GPE0连接指纹采集模块的数据先D7~D0,用于输入原始图像信息。那么,在相关驱动程序中,需用下面语句来初始化GPE15、GPE14的引脚功能:

       rGPECON=((rGPECON & 0x0FFFFFFF) | ____________)//rGPECON是端口E的控制寄存器

并用下面语句来初始化GPE7~GPE0的引脚功能:

       rGPECON=((rGPECON & ____________)

       【解析】控制寄存器代码格式是低位在右,高位在左。rGPECON & 0x0FFFFFFF就是将GPE14和GPE15逻辑与为了0,其余逻辑与后不变,保留之前的功能。根据控制寄存器功能表,GPE14和GPE15要初始化其功能作为SDA和SCL引脚,那么GPE14和GPE15就要采用第三功能IICSDA和IICSCL,(1010)B=(A)H。还需注意的,是其它引脚功能应初始化为暴露

       【答案】0xAFFFFFFF、0xFFFF0000

       (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 | ____________) & 0xFF55);    //初始化GPF0~GPF3为输出,rGPFCON是端口F的控制寄存器
     rGPFCON=rGPFCON & ____________;    //初始化GPF4~GPF7为输入
    for(i=1;((i<=____________)&&(i>0));i<<=1)
    {
        output|=0xFF;
        output&=(~i);
        KEYOUTPUT=output;
        temp=KEYINPUT;
        if((temp&0xF0)!=____________)
        {
            key=(~i);
            key<<=8;
            key|=((temp&0xF0)|0x0F);
            return(key);
        }
    }
    return 0xFFFF;
}

上面的键盘扫描函数返回值是键盘扫描码,通过键盘扫描码我们可以判断是否有按键按下,并确定是哪个按键按下。例如:若返回值为:____________时,可知是键盘中的“8”键按下,若返回值为0xFE7F时, 可知是键盘中的____________键被按下。若无键按下时,返回值应为:________。

       【解析】GPF端口只有8个I/O引脚,采用4位16进制控制。

       宏定义中将十六进制数据转换为基类型为无符号8位的指针,左边的“*”保证在编译过程中会指向这个地址的内容

       解析for()循环:在表达式中,每次循环以后8位循环变量i就要左移1位

                               每次进入循环体后,8位变量output都要初始化为全1

                               第一次进循环体,i=0000 0001,取反后i=1111 1110

                               再将output和i按位与,output=1111 1110=i,可以看出,每次进循环体output都会初始化为全1,再加上“&”的原因,实际上每次output=~i

                               将output给到键盘连接的具有输出功能I/O端口(注意!!!并不是给控制寄存器!!!而是让输出I/O端口输出相应的高低电平,如何将KEYOUTPUT表示为I/O端口和宏定义语句有关)。这时PGF7~PGF4、PGF3~PGF0对应的输出就是1111 1110,由于PGF7~PGF4的功能是输入,高位的1111并不对其起作用。

                               当“1”“4”“7”“保存”中某一个键被按下,相应的GPF4~GPF7的输入信号会被下拉为0。

                               将8个I/O端口的数据给到temp(事实上只有4位输入才有用)。

                               将输入数据中的表示输出的低4位置零,然后判断。只要按下按键,高4位中某一位一定是0,而没被按下, 高四位一定全1。所以,只要temp&0xF0之后 != 0xF0,就说明有键被按下,进一步需要判断是哪个键。

                               key是16位,i是8位,赋值给key,key=0000 0000 1111 1110(猜的)

                               key左移8位,因为key是无符号数,低位补0,key=1111 1110 0000 0000

                               temp&0xF0 = ???? 0000,再与0x0F相或,???? 1111,再与key相或,(16位数据与8位数据相或)key=1111 1110 0000 0000 | ???? 1111 = 1111 1110 ???? 0000 = 0xFD?0。然后可以根据码值判断是哪个键被按下,其中从低到高第3位十六进制表示输出的情况。

                               i在下一次循环中将左移1位,GPF1引脚将会输出低电平。

                               总的来说,i在if语句里就是将输出数据保存到key变量中,其功能就是将输出引脚置低电平,而输出引脚只有4个,起始为1,循环4次。

       【答案】0x0055、0x00FF、4、0xF0、0xFDB0、“保存”、0xFFFF

       (4)若LCD显示屏的接口电路设计时,选用S3C2410的端口C和端口D来控制LCD屏的相关信号,那么,初始化端口D引脚功能的语句可以编写如下:

       rGPDCON=____________)        //rGPDCON是端口D的控制寄存器

       【答案】0xAAAAAAAA

       (5)与后台PC机的通信通过串口进行,若硬件设计时选用UART1部件来实现串口,那么,在相关驱动程序中需要用下面一组语句来初始化相关的硬件部件(注:设置波特率为115200bps)。

       rGPHCON=(rGPHCON & 0xFFFFF0FF) | ________;        //rGPHCON是端口H的控制寄存器

       rUFCON1=0x0;        //FIFO disable

       rUMCON1=0x0;

       rULCON1=(5<<_) | (0<<_) | (3);        //设置线路控制寄存器:偶校验,1位停止位,8位数据位

       rUCON1=0x245;        //设置控制寄存器

       rUBRDIV2=((int)(PCLK/(115200x____________)+0.5)-1);        //PCLK是系统主频

       【解析】“rUFCON1=0x0;        //FIFO disable”表示将UART的FIFO模式关闭,以普通模式运行

                     rULCON1最后的值为??101011,5=(0101)B,低3位左移3位后,正好表示最后的??101。形成了         0101000        ,这时还需要将0左移2位保证最上面的1能参与或运算。

                                   0000

                                   0011

                            ————

                           ??101011

                     +0.5是为了取整

       【答案】0x00000A00、3、2、16

       (6)若在设计系统启动引导程序式,需要设置系统的异常向量表,因为ARM9体系结构中规定异常向量之间各相差个___________字节,因此,需要在各异常向量处设计一条分支指令。对于S3C2410微处理器来说,启动引导程序还需要完成禁止看门狗部件和禁止____________,并设置各工作模式下的____________指针。然后再通过BL指令来引导应用程序的____________函数。

       【解析】

       【答案】4、中断、堆栈、main()

总结:在对GPIO进行初始化时对于未明确功能引脚要保留功能

2.便携式血氧仪

       便携式血氧仪采用无创伤的血氧检测方法,通过光电信号检测人体手指内动脉血的周期变化特征,从而计算出动脉血氧饱和度(其外形如图所示)。若便携式血氧仪以S3C2410芯片为核心,并外加其他功能电路来进行设计,其基本功能描述如下:

       a.利用动脉血液种血红蛋白和还原血红蛋白对红光或红外光吸收率的不同,采用光电电路来无创伤检测动脉血氧饱和度,并检测脉率。

       b.若动脉血氧饱和度低于90%,需进行声光报警,声光报警的频率与脉搏的频率一致。

       c.便携式血氧仪中能保存1个月中所检测的动脉血氧饱和度、脉率等参数,保存参数时需要同时保存相关的检测时间,并可通过按键“→”和按键“⬅”来查看。

       d.采用普通单色液晶LCD作为显示器,显示动脉血氧饱和度、脉率等参数。

       根据上述功能要求的描述,请完善下面的叙述(程序)和回答有关的问题。

       (1)在便携式血氧仪的硬件平台设计时,除了需要设计最小系统所需的时钟电路、复位电路等外,还必须设计光电信号采集电路来采集动脉血对红光或红外光的反射。现选用一个波长660nm的红光LED和一个波长910nm的红外光LED作为光源,其阳极接电源正极,且由GPE15引脚和GPE14引脚分别加同相驱动电路后控制相关LED的阴极使其发光。那么,GPE15或GPE14输出____________;电平时,其控制的LED发光。在相关驱动程序中,初始化GPE15或GPE14引脚功能的语句可以是:

       rGPECON=((rGPECON | 0x50000000) & ____________);        //rGPECON是端口E的控制寄存器

       只控制波长910nm的红外光LED亮(GPE14引脚控制)的语句可以是:

       rGPEDAT=rGPEDAT & ____________;        //rGPEDAT是端口E的数据寄存器

       只控制波长660nm的红光LED灭(GPE15引脚控制)的语句可以是:

       rGPEDAT=rGPEDAT | ____________; 

       【答案】低、0x5FFFFFFFFF、0xBFFF、0x8000

       (2)硬件平台设计时,还需设计一个光敏电路来接收动脉血对红光或红外光的反射光,将光信号转换成电流。经过放大的光电流信号,必须经过____________转换电路,变为数字信号后,才可以输入CPU进行处理。由于脉搏波的能量主要分布在0.5~5Hz范围,因此,对脉搏波信号的采样频率至少应该为____________Hz,所得到的数字脉搏波信号才不至于失真。

       【解析】假如是周期波形,一高一低算一个周期,采样就需要把高低都采下来,那么一个周期内就有两次采样,所以采样的频率是信号的两倍。

       【答案】ADC、10

       (3)为了满足声光报警的频率(即报警LED闪烁频率及蜂鸣器“嘀…嘀…”鸣叫频率)与脉搏频率一致,设计时选用Timer1部件来产生一个时间间隔,该时间间隔为脉搏波周期的1/2。若检测出脉搏波频率为2Hz,系统主频参数PCLK为254MHz,分割器值选择为16,预分频器值选择为99,那么,Timer1部件产生的时间间隔应为___________ms,初始化函数可以设计如下,请补充完善。(注:下面程序中所用的参数请用十六进制表示)

void Timer1Int(void)
{
    //设置定时器配置寄存器0(TCFG0)
    rTCFG0=____________;    //dead zone=0,Timer1预分频器值设99
    //设置定时器配置寄存器1(TCFG1)
    rTCFG1=____________;    //工作在中断方式,分割器值为16
    //设置计数常数
    rTNTB1=0xA122;
    //设置控制寄存器TCON
    rTCON=____________;    //仅更新TCNTB1和TCMPB1
    rTCON=____________;    //仅Timer1启动
}

       【解析】死区长度已告知为0

                      TCFG1的DMA请求猜测:当为0000时,数据传输需要CPU参与,也就是通过中断打断CPU,而采用DMA就不需要CPU的参与直接通过DMA传输。

       【答案】250、0x00000063、0x00000030、0x00000200、0x00000100

       (4)在保存所检测的动脉血氧饱和度、脉率等参数时,需同时保存检测时间。检测时间通过读取S3C2410芯片内部的____________部件来获得实时的日期及时间。在相关驱动程序中,可以用下面一段语句来初始化该部件。

void R_init(void)
{
    //初始化相关寄存器,rRTCCON是控制寄存器变量。
    rRTCCON=rRTCCON|____________;    //设置使能该部件的控制位
    rRTCALM=____________;            //报警功能(即闹钟)全部禁止
    rRTCRST=0x00;
    rTICNT=____________;    //时间间隔设置为1s
    rRTCCON=(rRTCCON&____________);    //设置不使能该部件的控制位
    ……//省略了其他语句
}

       【解析】

       【答案】RTC、0x01、

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值