引 言
AT89C5131是一个基于52内核的单片机。在存储器方面,其内部集成了32 KB的FLASH存储器用于代码的存储;l KB的E2PROM存储器用于用户数据的存储;用户可以使用片上的Bootloader或FLASHAPI,通过USB接口或其他接口(如UART和I2C总线)对FLASH存储器和E2PROM存储器进行ISP或者IAP编程。AT89C5131支持USB 1.1和USB 2.0协议,拥有1个控制端口和6个普通可编程端口,支持控制、批量、中断和同步传输4种传输方式,还支持串行I/O接口模式及Master和Slave的SPI接口模式。
1 系统硬件设计
基于AT89C5131的通信和控制模块主要完成以下功能:在通信方面,通过USB实现与计算机的通信,接收计算机对设备的控制命令和计算机发送的数据,并将设备的工作状态发送给计算机,同时将计算机传来的控制命令和数据通过SPI接口传送到其他设备模块,并收集其他设备模块的状态信息;在控制方面,AT89C5131负责收集设备控制显示面板的控制命令,更新设备显示状态等。由于采用USB通信系统,AT89C5131除了能够根据控制面板控制设备的运行,也能根据计算机的命令控制设备的运行,实现了对设备的双重控制。该系统中AT89C5131的外围连接如图1所示。
1.1 AT89C5131的键盘端口特性及键盘设计
AT89C5131拥有一个允许与8×n矩阵键盘连接的键盘接口,其输入均具有高或低电平可编程中断能力。键盘接口与C51内核的通信通过3个特殊功能寄存器实现,分别是键盘电平选择寄存器(KBLS)、键盘中断使能寄存器(KBE)和键盘标志寄存器(KBF)。
AT89C5131的键盘输入被设计为分享同一个中断向量的8个独立的中断源,寄存器IEN1中的中断使能位KBD允许键盘中断全局的使能及不使能,根据KBLS每一位的值,每一个键盘输入都有检测出可编程电平的能力,然后键盘检测就被反应到KBF中,而通过软件使用KBE可以屏蔽中断标志KBF。正是这样的结构使得键盘排列可以从1×n延伸至8×n的矩阵,同时还使得P1输入用于其他用途。
在该设计中,将4个键盘端口(P1.O,P1.2,P1.3,P1.4)及2个外部中断端口(P3.2,P3.3)与控制面板上的6个按键相连;实现系统的内外、启停、暂停继续控制及参数组的选择等功能。这6个端口都采用低电平触发产生中断。
1.2 USB各端口的特性及USB通信设计
AT89C5131的控制端口O总是默认为控制类型,用于控制传输,有32字节的FIFO;而其他6个可编程端口可以通过设置UEPTYPE的值配置为控制、批量、中断和同步类型;Ping-pong模式的端口可以配置成批量、中断和同步类型,对于批量、中断和同步类型的端口,其方向可以通过设置UEPCONX的值配置为输入或者输出。端口1~端口3有32字节的FIFO;端口4,端口5有2个64 B的FIFO;端口6有2个512 B的FIFO,并且后三个端口均可工作于Ping-pong模式。
在该设计中,PC机将数据通过USB传给AT89C5131,传输完一次后AT89C5131向PC机回传数据传输正确与否的标志,PC机可以根据收到的标志进行相应的操作。PC机向AT89C5131传输的数据主要是参数和控制命令两种类型。为将其区分开来,使用USB的端口4和端口6接收这两种数据。其中,端口4用来接收控制命令;端口6用来接收参数。相应地,控制命令的回传使用端口5;参数的回传使用端口3。为简单起见,端口3~端口6均被配置为批量类型;端口3、端口5为IN端口;端口4、端口6为OUT端口。
1.3 SPI端口特性及SPI通信设计
AT89C5131的SPI模块允许在McU和其他外围设备之间实现全双工、同步、串行通信,它能以配置为主或者从两种操作模式提供可编程极性和相位串行时钟,同时还提供8个可编程的主机时钟率。SPI模块包括4个端点(MOSI,MISO,SCK,SS),MOSI和MISO都是用来传输数据的,且每次只能传输1个字节的数据。不同的是,MOSI将数据由主机输出从机输入,而MISO正好相反。SCK信号用以使通过MOSI和MI-SO的数据输人/输出设备同步,它可以由主机驱动产生8个时钟周期,用以完成一个字节在串行通道上的交换。SS用于从机的选择,低有效。SPI模块的配置和初始化可以通过寄存器SPCON完成,而数据的交换则需要使用寄存器SPSTA和SPDAT两个寄存器,在软件编写过程中,SPI能否正常工作主要取决于对上述3个寄存器的操作。
在该设计中,SPI被配置为主机模式;SS端口处于无效状态;AT89C5131通过MOSI端口向DSP传输参数及控制命令;DSP通过软件设置P1.1(SS)端口的状态表明数据是否正确接收,即若正确接收,则置P1.1为1,否则置P1.1为0;AT89C5131通过检测P1.1的值来决定是否重传数据。
2 系统实现
要使得上述设计在工程应用中得以实现,在硬件设计的基础上。还需对接口进行软件设计。AT89C5131的软件设计主要是USB固件程序的设计,包括系统的初始化,USB接口、UART接口和SPI接口数据的收发以及控制面板按键的功能实现几个方面。软件设计采用C语言编程,最后软件通过FLIP下载到AT89C5131芯片中。这里所采用的编译环境为KeilμVision 3软件设计平台。在具体的工程实现过程中,也遇到了一些问题,但经过反复的修改及调试,这些问题都得到了很好的解决,其中主要有以下几个方面:
按键功能实现控制面板按键的功能是通过电平触发中断实现的。在设计之初,手动按下一次按键总会触发多次中断,对应的LED显示总会很快的跳变,不能满足按一次按键就显示一个状态的要求,于是笔者就在按键功能实现的程序中添加了等待函数,即每发生完一次中断,就等待一段时间,经过调试,上面的问题没有再出现。
USB通信系统系统要求USB能够快速、高效地实现通信,对于速度问题可以通过Ping-pong模式得以解决。系统还要求USB实现双向通信,为使其接收和发送数据互不干扰,所以选用了几个端口实现不同数据的传输。
SPI端口通信 SPI端口工程实现的关键是速度和工作模式的匹配。在设计之初,AT89C5131的SPI工作于从机模式,其数据传输受到DSP的控制,由于其传输速度远远低于DSP中SPI端口的处理速度,所以每通过AT89C5131的SPI传输一组数据时,DSP总需要通过软件控制等待很长一段时间,既便如此也不能保证数据得到正确接收。于是,后来就将AT89C5131的SPI工作模式修改为主机模式,由AT89C5131主动控制数据的传输。然而实现双向通信的关键是对SS信号的控制,在上述工作模式下,SS必须无效,Slave才能较可靠地向发送寄存器写数。
3 结 语
AT89C5131宜于构成低成本的USB控制和通信系统,能实现计算机与设备的通信,并可灵活选择多种通信协议。文中介绍基于AT89C5131的接口设计,主要是实现PC机与MCU以及MCU与DSP的通信,该设计已经在工程实际中得到应用。经过实践检验,证明其合理且操作灵活,具有一定的实用意义。在设计过程中,深切体会到硬件设计与软件设计的极大不同。编译正确且逻辑没有问题的程序源代码,将其烧写至芯片后,硬件电路并不一定能完全地实现所要求的功能,所以必须经过反复的修改程序、烧写、调试,直至正确实现功能。