垂直中断(vertical blank interrupt)和水平中断(horizontal blank interrupt)

垂直中断(vertical blank interrupt)和水平中断(horizontal blank interrupt)。


ndsl的硬件在屏幕上绘图的时候,是从上到下,从左到右,每个屏幕象素点依次绘制的。如下图:




绘制的过程是一行一行地绘制,每当绘制完一行。黑色箭头所指示,就引发一个水平中断(Hblank
interrupt)。当所有的行都被绘制,相当于完成了一次红色箭头所指示的路径,硬件引发一个垂直中断(Vbland
interrupt)。当然,完成这些过程,是否引发中断,还要设置对应的寄存器。


为什么需要这些中断?举个例子:



如上图:最左边的文字是经过的时间,每一行的左边图形表示当时显存的内容,右边表示当时屏幕的显示内容。实际上,显存是一块线性的连续内存,并且每一个单位(8bit或者16bit)对应屏幕上的一点。但是为了具像,所以把显存抽象成跟屏幕一样是个矩形。另外要指出:nds是每1/60秒(2/120秒)绘制一次屏幕。


下面是对上图的解释:

0秒的时候:

内存的内容是一个正方形,硬件准备绘图,这时屏幕上什么也没有。
       
1/120秒的时候:

硬件把内存一半的内容绘制到屏幕上,屏幕上出现半个正方形。
    
再过了0.01/120秒的时候(也就是1.01/120):

这时你的程序希望显示一个三角形,于是就把整个内存的内容改写成三角形了,而在这短短的时间内,nds的绘制屏幕的硬件并没有停止,而是继续把显存的内容绘制到屏幕上,也就是绘制了第三行那小小的红色块。不过这些似乎并没有太大影响。

2/120秒的时候:

绘制的硬件完成了内存下半部红色区域所指示的内容的绘制,本来你写的程序以为要显示一个三角形,但实际上却显示成了右图所示的一个类似T状的图形。这并不是你所希望的结果。


实际上的程序和情况会比这个更加复杂和不可预知。因此,垂直和水平中断向量就是为了克服这个问题而引入的。


当完成了一次屏幕绘制的时候,就引发一个垂直中断。通过引发这个中断,这个时候就不再绘制屏幕,用户可以在这个时候更新显存,等到更新完毕的时候,设置好所有要显示的内容的时候,再让硬件进行绘制。这样就能够保证显示出来的东西是你所希望的东西了。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值