4、模块的USB接口扩展
考虑到模块板可能需要外挂海量存储器存储指纹模版及与PC机等上位机进行通信,采用CH375扩展了系统的USB接口,它是一个USB总线的通用设备接口芯片,无需用户编写驱动程序,CH375以C语言子程序库提供了USB存储设备的文件级接口,这些应用层接ISIAPI包含了常用的文件级操作,可以方便移植并嵌入到各种常用的单片机程序中,这样对USB 设备的通信就几乎和访问本地硬盘一样。它具有8位数据总线(D0-D7)、读(/RD)、写(/WR)、片选控制线(/CS)以及中断输出(/INT),可以方便地与TMS320VC5402进行连接。另外CH375有一个地址线A0,它占用两个地址位,当A0引脚为高电平时选择命令端口,可以写入命令;当A0引脚为低电平时选择数据端口,可以读写数据,其硬件连接如图3所示。
图3 USB扩展硬件连接图
三、嵌入式软件系统框架的构建
在各功能模块软硬件调试通过后,就要考虑构建整个模块的软件系统,使其能完成预定的工作,模块的预定工作流程如图4所示,主要包括以下几个部分:
(1)系统初始化
该部分的工作主要包括系统工作时钟设置、中断设置和各寄存器的设置。
(2)密码识别
该部分主要实现确认用户ID和更改用户ID 的功能。
(3)指纹图像的采集与识别
该部分主要实现指纹图像的采集与识别的功能。
(4)USB接口通信
该部分实现系统与上位机进行USB接口通行和访问外挂海量储存器的功能。
图4 模块程序流程图
TMS320VC5402提供了四个外部中断,系统设计时将INT0用于触发密码识别,INTI用于触发指纹图像采集和识别,INT2用于触发USB接口通信。在软件程序的开发中,为了减小中断服务程序的程序量,引入WINDOWS消息触发的编程思想,在程序中设计了一个队列,在中断服务程序中,只是将中断类型添加入该队列中,在主程序的死循环中不断扫描中断队列是否有中断,有则取出队列中的第一个中断类型,进行相应处理,没有中断就使模块进入节电模式,程序框架如下:
- main()
- {
- int i,ImageFlag,intType1,intType;
- /**********初始化目标板*********/
- Init_Board();
- InitQueue(&q);//初始化队列
- while(1)//进入死循环
- {
- if(!emptyQueue(&q))
- {/*删除队列中的首节点,并返回该节点的值域*/
- intType1=outQueue(&q);
- /*根据中断类型触发各个功能模块*/
- switch(intType1)
- {
- case 0:
- PassWord_Get();//调用密码识别程序
- case 1:
- ImageGet(0x4000,0x01);//获得指纹图像
- FVSStart0; break;//调用指纹识别程序
- case 2:
- CH375();break;//进行USB接口通信
- default: break;
- }
- }else Idle1();//进入节电模式
- }
- }
- /*外部中断0触发密码验证模块*/
- interrupt void Int0()
- {
- intType=0;
- enQueue(&q,intType);//在队列尾加入新的中断
- }
- interrupt void Int1()/* 外部中断1触发图像采集及识别模块*/
- {
- intType=1;
- enQueue(&q,intType);//在队列尾加入新的中断
- }
- interrupt void Int2() /*外部中断2触发USB接口通信模块*/
- {
- intType=2;
- enQueue(&q,intType);//在队列尾加入新的中断
- }
四、结论
本文采用了基于TMS320VC5402和MBF200的嵌入式技术,设计了一个能独立运行的嵌入式自动指纹识别系统,并根据各硬件模块的组成构建了系统的嵌入式软件框架。实验表明本系统板能实现快速的指纹图像采集和用户ID识别,采集的指纹图像如图5所示。在此基础上加入指纹图像预处理、指纹特征提取以及指纹匹配等指纹识别算法程序,能够构成一个完整的指纹识别系统。