微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于 DSP 的电子负载:电子负载控制系统软件设计

基于 DSP 的电子负载:电子负载控制系统软件设计

时间:01-23 来源:3721RD 点击:

5.4 LCD显示程序设计

在电子负载控制系统中,本系统选用的信号板液晶显示屏是由长沙太阳人公司提供的SMG12864ZK字符型液晶,内置ST7920接口型液晶显示控制器。因为DSP2812的最高时钟频率可工作在150MHZ,周期为6.67ns,而ST7920控制器中指令与指令输入之间的时间间隔都是在几十微秒或毫秒,小液晶的作用主要是显示当前的测试模式,具体的实时处理数据的显示由电脑来完成。

在液晶编程设计过程中,如何能够控制好个控制参数的时序是至关重要的,本款液晶的读写时序如图5.6所示。

因为DSP对ST7920等的访问不需要使用判"忙"过程,故没有判"忙"函数的设计。在程序设计时,要特别注意GPIO的控制,在配置时一定要添加EALLOW保护,否则会导致配置数据时发生数据丢失或数据冲突,液晶驱动初始化配置程序如下:

void main(void)

{

InitSysCtrl();//初始化系统控制寄存器、PLL、看门狗和时钟

DINT; //禁止和清除所有CPU中断向量表

InitPieCtrl();//初始化PIE控制寄存器

IER=0x0000; //禁止所有CPU中断

IFR=0x0000; //清除所有中断标志

InitPieVectTable(); //初始化中断向量表

EALLOW; //允许更改受保护的寄存器

GpioMuxRegs.GPBMUX.all=0; //使相关I/O工作在GPIO模式

……

GpioMuxRegs.GPBDIR.bit.GPIOB0=1; // RS(控制液晶屏的数据指令选择引脚)

GpioMuxRegs.GPBDIR.bit.GPIOB11=1; // RW(控制液晶屏的数据读写选择引脚)

GpioMuxRegs.GPBDIR.bit.GPIOB12=1; // E(控制液晶屏的使能引脚)

GpioMuxRegs.GPBDIR.bit.GPIOB1=1;//引脚用于控制74LVX3245(U1)方向选择GpioMuxRegs.GPBDIR.bit.GPIOB2=1;//引脚用于控制74LVX3245(U2)方向选择GpioDataRegs.GPBSET.bit.GPIOB2=1; //将方向选择引脚置高

EDIS; //禁止更改受保护的寄存器

lcdreset(); //初始化LCD屏

lcdwc(0x01);//清除显示

delay(50); //延时50*66.7ns

hzklib(); //调用显示函数……

}

5.5键盘程序设计

键盘程序采用查询方法来实现键值的识别。执行主程序前,首先调用按键的查询程序,判断选择的测试模式。键盘输入信息设计思想如下所示。

(1)判断是否有键按下

按键被按下时,相应DSP的GPIO口输入线的电平被拉低。因此,判断是否有键按下,读取DSP端口值即可,若端口为低电平,则表明有按键键按下;若端口仍为高电平,无键按下。

(2)确定按下的键值

本设计中用到的按键少,一个按键对应一个GPIO口,通过读取不同的GPIO口的值,就可以知道当前按键的键值。

(3)等待按键释放

确定按键的键值以后,仍然需要判断按键的释放,延时一断时间后调用执行相应的子程序。

(4)消抖处理

由于选用的按键是机械触点,因此用手按动一个键时,按键的断开和闭合瞬间会出现电压波动,如图5.7所示。

为了保证按键键值的识别,电压抖动的时候不能进行状态的输入查询。为此,程序中增加消抖算法,DSP获得按键被按下信息后,并即刻确认按键的键值,而是延时1ms后再次检测相应端口,如果按键仍处于低电平,则说明按键确实被按下。同理,在DSP检测到按键释放时,GPIO口恢复高电平,程序同样也延时1ms,进行后沿的消抖,然后再识别键值。

5.6串行通讯设计

由于研究的是基于DSP的实验样机,在控制精度足够高的情况下,才能完成整机的成型,监控系统是在以后深入的研究的内容,目前仅在CCS环境下进行了调试测试,只对通讯做了简单的研究。

串行通讯采用SCI异步通信接口,SCI模块采用标准的非归零数据格式,能够实现CPU和其他具有SCI端口的外设进行数据通讯。进行通信协议的设计,首先要进行信息帧结构的设计,串行异步通信以帧为单位,每次传送一个数据帧。

TMS320LF2812的数据发送和接收由数据发送单元和接收单元来完成。算法程序运行一次就不停的查询是否接收到串口收到的数据,判断标志位tran_flag是否为1,一旦接收到数据,就将该数据发送出去,并清tran_flag,同时恢复串口为接收模式。DSP2812 SCI与计算机通信,采用超级中断接收数据,DSP每隔4微妙向计算机发送个数据。

vvoid main(void)
{
……
SciReg.SCICTL2.TXINTENA = 1;// 使能SCI发送中断
while (1)
Interrupt void SCI_TX_isr (void )
{
int i;
for ( i= 0 ; i < 10 ; i ++ ); // 软件延时1.5微秒,重新初始化PIE,为SCI准备下一次中断
SciRegs.SCITXBUF=pid_cc.pid_out_reg3 + InitOut;
PieCtrlRegs.PIEACK.all = 0x0100;// 响应中断
while ( SciRegs.SCICTL2.bit.tran_flag = = 0 );;// 状态检测模式,等待发送标志为空
}
void InitSci(void) // SCI初始化
{
EALLOW;
GpioMuxRegs.GPFMUX.all = 0x0030; // 配置SCI –TX
EDIS;
SciaRegs.SCICCR.all = 0x07;// 8位字符长度
SciaRegs.SCICTL1.all = 0x03; // 使能 TX

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top