很想吐槽一下数字逻辑的课程,学的东西跟最后的综合实验,差了不知道多远。在布置大作业时,可以让我们从一堆外围部件中挑自己想要的来做,会有VGA显示屏、MP3、陀螺仪、温湿度感应器、键盘等等,看起来挺高大上的,做了之后才发现,看个文档看得云里雾里的,就好像没上过课一样从头自学。有些文档也写的模棱两可,写出来调试半天也出不来结果,让人抓狂。我就在这介绍两件我在大作业中用到的外围部件:VGA显示屏、VS1003B(MP3)。这个大作业的最终效果是类似音游的小游戏,一边播放音乐一边点击掉落的方块获得分数。
VGA显示屏
这个外围部件非常多人想要,可能因为实用度非常高,在很多场景下都会使用到,写个小游戏、显示个图片什么的都会需要。我觉得VGA的时序是所有部件中比较简单的,是我最快调试通过的。先放一张图
从图中可以大概看到,要让VGA能显示出图片,就需要逐行进行扫描,扫描每一个像素,扫到行尾后就从下一行的行头开始,扫到屏幕右下角后就返回左上角,不断重复这个过程,就可正常显示。时序分为行时序与场时序,分别对应扫描一行的时序和扫描整个屏幕的时序。这里我使用的VGA是640*480,一下为相关信号定义
| 接口名称 | 接口属性 | 描述 |
| clk | input | 25MHZ时钟 |
| color_r | output | 红色分量 |
| color_g | output | 绿色分量 |
| color_b | output | 蓝色分量 |
| hs | output | 行同步 |
| vs | outptut | 场同步 |
可以看到640*480中使用的时钟为25MHZ,然后输出三种颜色分量,注意这里的颜色分量仅为4位,也就是说只能表示0-15。然后行同步信号与场同步信号分别在行时序与场时序中使用。
上图为行时序,在扫描某一行时,不是每一个像素都是有效显示区域,依次为同步区域、后沿区域、有效显示区域和前沿区域,在同步区域时需要将HS信号拉低进行同步,其余拉高即可。场同步也是同理的,只不过场同步是对于整个屏幕所有行而言,同样有行时序中所述的区域,那么VS信号在扫描一次屏幕时只会拉低一次。因此,从整体上看,640*480这个矩形外还有一个更大的矩形,两者所夹的区域是不显示像素的,在扫描到这些区域时,注意将颜色分量全部置0,否则无法显示。
VS1003B (MP3解码)
这个外围部件的使用看起来很简单,在给的中文文档中这么说:只需要简单三步就能让其播放音乐
1、硬复位与软复位
2、初始化相关寄存器(音量、时钟等)
3、向VS1003B发送MP3数据
但是在看完英文文档里介绍的时序后,有许多坑需要注意
与VS1003B的通信采用了SPI协议,有四根线:SCK时钟、SI传入数据、SO传出数据、XCS片选信号。另外的,还有XRESET硬复位信号(低电平有效),XDCS片选SDI时序信号,DREQ数据请求信号。
经过查阅文档,很容易可以知道,发送指令读取或修改寄存器时采用的是SCI时序,传输MP3数据时采用SDI时序,这里只做简单介绍,具体查阅文档可以知道。
首先在软复位与初始化相关寄存器时,都要用到SCI写的时序。设置寄存器时,检测到DREQ为高,就可将XCS拉低,XDCS保持为高,打开SCK,然后通过SI开始传输数据,前8位为命令(02是写命令,03是读命令),接着8位是寄存器地址,最后16位为数据内容,共32位。
在初始化就绪后就可以传输MP3信息了。使用SDI时序向vs1003b传输MP3数据,检测到DREQ为高,就可将XDCS拉低,XCS维持高,打开SCK,通过SI传输4字节的数据,若途中DREQ持续为高则在传输完4字节后自行将XDCS拉高并关闭SCK,在下一时钟到来再恢复并开始传输下一轮4字节数据;若途中DREQ突然变低,则将当前字节传输完毕后,拉高XDCS并关闭SCK进行等待。每次传输完4字节数据,将从缓冲区中获取下一轮4字节数据,当缓冲区为空,将从ROM读取数据放入缓冲区。
在这里我想特别提醒一些坑。第一,发送的时钟频率可以是12.288MHZ的1/6,可以慢一点,但是不能太快,如果想用高速时钟,那么在设置完时钟的寄存器后再使用。第二,文档中说只要DREQ为低时最少可以传输32字节,而不需要去检查它,这是有误导性的,每次传输一位MP3数据时都要检测一下DREQ,如果发现它变低了,将当前字节传输完后变不再传输,XDCS拉高SCK停止传送,等到DREQ变高后再继续。第二点非常重要,如果没做到,音乐可能播几秒就断掉了。最后,我查阅的一个网上资料说,建议传送4字节数据就拉高XDCS一次,等待一下,如果DREQ为高再传,我按照这个来做是没问题的,仅供参考。
最后给一份当时的仿真波形,供参考
再附上我的github链接:http://github.com/oscarab/MusicGame
还有一份网上的调试心得
http://wenku.baidu.com/view/fa1efcc990c69ec3d4bb756a?pcf=2
