摘要:本文通过讨热敏电阻数据采集应用程序实例来说明MAXQ2000评估板的使用,并介绍相关的MAXQ2000评估板基本装置和 MAXQ2000微控制器的LCD控制器及外设特性。
关键词:开发环境;C编译器;LCD控制器;SPI通信;中断源
1、前言
为MAXQ产品线处理器提供的工具包括IAR的ANSI(美国国家标准系员会)C编译器以及IAR 的Embedded Workbench(嵌入式工作台)集成开发环境。
IAR Embedded Workbench开发环境为MAXQ2000提供了基于C语言或基于汇编语言的应用程序开发手段。使用MAXQ2000评估板与串口—JTAG适配器模块的硬件配置,IAR 的Embedded Workbench可以完全访问MAXQ2000的基于JTAG的自举装载过程以及在线调试特性。这对新的或刚熟悉MAXQ2000微控制器来说,可大大简化了应用程序开发。
因此只要具备这些工具并具有MAXQ特殊用途寄存器的基础知识,开发者可以快速简单地开始为MAXQ架构编写应用程序。为了说明与理解MAXQ架构的开发过程的简单化,最有效的办法就是举一个对温度采样应用程序实例。这里既然提到的应用程序使用了MAXQ2000处理器以及MAXQ2000评估板,因此有必要首先对MAXQ2000评估板基本特点与MAXQ2000有关 LCD控制器性能及其外设作简述。
2、关于MAXQ2000Q的 LCD控制器性能及其外设。
MAXQ2000是MAXQ系列众多产品中的第一个.典型的MAXQ器件具有16位数据、代码与寄存器。该微控制器集成了一个16位CPU、64kB闪存、2kB SRAM,以及4 ×36字段LCD控制器。板上LCD控制器根据显示存储器中的内容为LCD产生信号。应用程序代码确立了用户配置的选项,并对显示存储器进行写操作。然后,LCD控制器以选定的显示刷新频率产生必需的字段与公共端信号,于是微控制器就不必经常地进行显示管理并直接驱动LCD。另外,该控制器支持四种显示模式。
*静态
*1/2占空比多路复用,1/2偏压
*1/3占空比多路复用,1/3偏压
*1/4占空比多路复用,1/4偏压
显示存储器的17个字节可以用于LCD控制器,或通用应用存储。 另一个增强的LCD特性是集成的分压电阻。这些电阻省去了外部元件,可以用来调节对比度。图1所示为用于静态显示的LCD驱动电压配置.不连接LCD时,36字段的每个引脚都可以配置为通用I/0。
特别指出是MAXQ2000具有广泛的集成外设,包括:
*132字段的LCD控制器
*集成SPI端口,具备主机与从机模式
*1-Wire总线主机
*两个串行UART(通用异步接收/传送器)
*硬件乘法器
*三个16位定时器/计数器
*看门狗定时器
*32位实时时钟,具有亚秒与日历闹钟
*支持在线调试的JTAG接口
3、MAXQ2000评估板的装置与连接
3.1 MAXQ2000评估板为MAXQ2000微控制器提供了完整的硬件开发环境,包括如下特性:
为MAXQ2000内核与VDDIO提供板上电源;可调的电源电压(1.8V至3.6V),可以用于VDDIO或VLCD电源;为所有MAXQ2000信号与电源电压提供引出脚;独立的LCD子板连接器;带3V,3.5位静态LCD显示器的LCD子板;为串口0 UART提供包含流控信号线的全RS-232电平驱动器;外部中断与微控制器系统复位按钮;MAXl407多用途ADC/DAC IC;与MAXQ2000 SPI总线接口相连;1-Wire接口,包括出iButton接线柱与1—Wire EEPROM IC;为端口引脚P0.7至P0.0的电平提供柱状图LED显示;为应用程序的装入与在系统调试提供JTAG接口。
3.2 MAXQ2000评估板的连接
而为应用程序开发设置MAXQ2000评估板与串口-JTAG接口模块也很简单,可按照以下步骤简单地连接电路板。
* 将5VDC稳压电源(中间接线柱为正,±5%)插人串口-JTAG电路板的电源插孔J2。
* 将5V至9VDC电源插人MAXQ2000评估板的电源插孔J1。
* 用一条直通式DB9串行电缆连接串口-JTAG电路板的J1连接器与PC上的一个COM端口。
* 用JTAG适配器电缆连接串口-JTAG电路板上的1×9连接器P2与MAXQ2000评估板上的2×6连接器J4。
* 打开上述两个DC电源。
*在标准操作中,MAXQ2000评估板上的所有DIP开关都应处于OFF的位置。
根据以上二个技术前提介绍,就可以用IAR Embedded Workbench(嵌入式工作台)开发环境使用MAXQ2000评估板了。
4、从应用程序实例理解MAXQ2000评估扳使用
通过举一个应用程序实例,说明MAXQ2000评估扳使用,即MAXQ架构的开发过程的简单化. 这里提到的应用程序使用了MAXQ2000处理器以及MAXQ2000评估板。
4.1 温度采样应用程序实例设计思路
该实例展示了LCD控制器、SPI(串行外设接口)端口的主机模式、UART(通用异步接收/传送器)之一、硬件乘法器,以及定时器之一的使用。其定时器用来产生周期性的中断。当出现中断时MAXQ2000处理器读取热敏电阻的一个温度读数并用LCD与其中一个串口输出其结果。其SPI端口与MAXl407(16位、低功耗含有ADC)数据采集系统接口,将热敏电阻与ADC相连,然后通过采样获得温度读数。根据该设计思路,值此应先叙述LCD控制器程序。
4.2 LCD控制器的使用
为了使用LCD显示器,必须配置两个控制寄存器。一旦这些寄存器设置完毕,将LCD数据寄存器之一中的位置位,就可以点亮LCD上的字段。下列代码说明了在该应用实例中如何配置LCD控制器。
void initLCD( )
{
LCRA_bit.FRM=7; //Set Up frame frequency.
LCRA_bit.LCCS=1 // Set clock source to HFClk / 128.
LCRA_bit.DUTY=0;// Set up static duty cycle.
LCRA_bit.LRA=0; // Set R-adj to 0.
LCRA _bit LRIGC=1 // Select external LCD drive power.
LCFG_bit.PCF= 0×0F// Set up all segments as outputs.
LCFG_bit.OPM= l; // Set to normal operation mode.
LCFG_bit.DPE=1; // Enable display.
4.3 通过SPI通信
三个寄存器用来控制MAXQ2000支持的不同SPI模式。为了与MAXl407通信,用以下代码初始化SPI部分,并将其置为正确的模式。
PD5 |= 0×070; // Set cs, SCLK, and DOUT pins aS output.
PD5 &= ~0×080; // Set DIN pin as input.
SPICK = 0×10; // Configure SPI for rising edge, sample input
SPICF =0×00; // on inactive edge, 8 bit, divide by 16.
SPICN-bit.MSTM=1; // Set Q2000 as the master.
SPICN-bit.SPIEN =1 ;// Enable SPI.
只要设置了SPI配置寄存器,就可以用SPI B寄存器发送与接收数据。对该寄存器进行写操作,将启动SPI主机与从机之间的双向通信。传输完成后,SPI CN寄存器中的STBY位被置位。以下给出了SPI发送与接收的代码。
unsigned int sendSPI(unsigned int spib)
{
SPIB = spib; // Load the data to send
while(SPICN-bit.STBY) // Loop until the data has been sent.
SPICN_bit.SPIC =0; // Clear the SPI transfer complete flag.
return SPIB;
4.4 写串行端口
在该应用实例中,用MAXQ2000的一个串口输出当前的温度读数。数据写到端口之前,应用程序必须先设置波特率与串口模式。此外,需要初始化几个寄存器来开放串口通信。
Void initserial( )
{
SCON0_bit.SMl =1; // set to Mode 1.
SCON0_bit REN =l; // Enable receives.
SMD0_bit.SMOD=1;// set baud rate to 16 times the baud clock.
PRO = 0×3AFB; // Set phase for 115200 with a 16MHz Crystal.
SCON0_bit TI=0; // clear the transmit flag.
SBUF0 = 0×0D; // Send carriage return to start communication.
正如SPI通信子程序,一个寄存器用来发送并接收串行数据。对SBUF0寄存器的写操作将启动一次传输。当数据在串口上有效时,读取SBUF0寄存器将取回输人数据。该实例程序中使用了以下函数向串口输出数据。
int putchar(int Ch)
{
while(SCON0_bit.TI = 0);// wait until we can send.
SCON0 bit.TI = 0; // clear the sent flag.
SBUF0 =Ch; //send the char.
return Ch;
4.5 使用定时器产生周期性中断
该应用实例中用到的最后一部分是16位定时器之一。该定时器用来产生中断,触发每秒二次的温度读数。在该实例中配置计数器时,编程者必须设定重装值,指定时钟信号源,并启动定时器。以下代码给出了初始化定时器0所需的步骤。
T2V0=0×00000; // Set current timer Value.
T2R0=0×00BDC; // Set reload value.
T2CFG0_bit.T2DIV= 7;// Set div 土28 mode.
T2CNA0_bit.TR2=1; // start the timer.
在该实例中将该定时器用作中断源,还需要一些更多的步骤。对于MAXQ架构,中断必须分三级开放:全局、每个模块内部、局部。使用IAR的编译器,通过调用_enable_interrupt( )函数开放全局中断。这就有效地将中断与控制(1C)寄存器中的中断全局使能(1GE)位置位。由于定时器0位于模块3中,将中断屏蔽寄存器(1MR)中的位3置位,开放该模块的中断。将定时器/计数器2控制寄存器A(T2CNA)中的定时器中断使能(ET2)位置位,开放局部中断。以下给出了该应用实例中执行的这些步骤。
_enable_interrupt ( )
T2CNA0_bit.ET2= 1; // Enable interrupts.
IMR |=0×08; // Enable the interrupts for module 3.
最后,使用中断还需要初始化中断向量。IAR的编译器允许每个模块使用不同的中断处理函数。为特定模块设置中断处理程序,需要使用#pragma向量指示器。中断处理函数还应当首先通过-interrupt关键字声明。该应用实例以如下方式为模块3声明中断处理程序。
#pragma vector=3
_interrupt void timerInterrupt( )
{
//Add interrupt handler here.
5、结论
上面是用ANSI兼容的C语言编写代码的实例,从中可以看出设计者在了解了一些外设寄存器的详细内容后,应用IAR的Embedded Workbench集成开发环境使用MAXQ2000评估扳,可以很容易地为MAXQ2000处理器及MAXQ产品线中的其它处理器开发应用程序,其特点是简单速度快.。
参考文献:
1、美Qong Li著<<嵌入式糸统的实时概念>> 北京航空航天大学出版社2004年6月1日出版.
2、赖麟文 编著<<8051诧单片机C语言软件设计的艺术>>科学出版社2002年6月出版.
3、<