您的位置:首页 > 移动开发 > IOS开发

基于NIOS-II的示波器:PART4 系统调试&测试

2017-05-24 19:05 246 查看
本文记录了在NIOS II上实现示波器的第四部分。

本文主要包括:修改部分BUG,以及测试

本文所有的硬件以及工程参考来自魏坤示波仪,重新实现驱动并重构工程。

version 1.0 界面修改&系统调试&测试

界面修改

在示波器0.1版本中已经说明了界面的编写方法,在确定了该版本的基本功能之后,重新设计界面以及按键如下:



其中
s0~s5
为下排功能选择按键,其中重要的有:

当通道选择为
CH1
时,输入耦合选择的也是
CH1


点按水平控制时,选择通过
s8 s9
来调节对应通道的水平轴

其中
s6~s15
用来调节参数

s6 s7
用来调节触发的
level


s10 ~ s14
则按照左边屏幕上的说明操作

部分功能调整

按键中断陷入死循环BUG

在之前设计的策略中,
s6~s15
由于是用来调节参数,其在按键起来之前持续作用。于是将案件起来的判断放在了处理函数之中。但是中断结束之时对于按键弹起的操作又有单独判断。

根据不同按键分配不同策略。

即时处理
STOP
指令


STOP
指令的处理放到中断中,而非等待系统更新状态之后,这样能够更精准的响应
STOP
请求。

if (KEY_DATA == 4) {
//等待按键抬起
while (IORD_ALTERA_AVALON_PIO_DATA(KEY_PORT_BASE) != 0x03);
//切换暂停和启动模式
if (RUN_STOP_FLAG == 0){
RUN_STOP_FLAG = 1;
sprintf((char *) lcd_buffer, "  STOP  ");
display_ascii(322, 16, 0xf800, MENU_FULL_COLOR);
}
else{
RUN_STOP_FLAG = 0;
sprintf((char *) lcd_buffer, "  RUN  ");
display_ascii(332, 16, 0x07e0, MENU_FULL_COLOR);
}

} else {
//正常情况
if (RUN_STOP_FLAG == 0) {
if (KEY_DATA != 0xff) {
//将KEY_DATA传给CON_DATA
CON_DATA = KEY_DATA;
CON_FLAG = 1;
KEY_DATA = 0xff;
}
if (!(CON_DATA>=6 && CON_DATA <= 9)) {
//等待按键抬起
while (IORD_ALTERA_AVALON_PIO_DATA(KEY_PORT_BASE) != 0x03);
}
}
}


调整触发
level
以及
CH1 level
时水平轴及时刷新


/*
* 函数名:TRIG_CON
* 说明    :当输入为1则增加,若输入为1则减少
* 日期:2017-03-27
*/
void TRIG_CON(unsigned char flag) {
while (IORD_ALTERA_AVALON_PIO_DATA(KEY_PORT_BASE) != 0x03) {
if (flag == 1 && TRIG_DATA < 244)
TRIG_DATA++;
else if (flag == 0 &&TRIG_DATA > 11)
TRIG_DATA--;
//添加此处 能够及时刷新
DISP_TRIG(TRIG_DATA);
//向MEM_CTL模块中写入触发condition
IOWR_ALTERA_AVALON_PIO_DATA(TRIG_DATA_BASE, TRIG_DATA);
TL_LOOP = 0;
delay_ms(150);
}
}


增加系统初始化输出

在初始化
LCD
之后,对系统初始化的结果输出,用于跟踪系统的状态。



其中添加行与列变量,用于一行一行进行显示。

可以将该功能打包成系统输出函数,但后无需此功能,便直接写入到响应部分代码,并打包函数。

Version 1.0 版本测试

这里只给出示例测试,其余图片过大,不好上传。

正弦波测试



函数信号发生器输出

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  FPGA NIOSII