VPFE和VPBE两者的中断,都是来源于VSYNC这个垂直同步信号。而这里的中断,往往就形成一套完整的缓冲机制,包括采集和显示。 在VPFE处,可以看到VINT0和VINT1等是在VSYNC的基础上的,记录HSYNC的个数后,才能产生一次中断,而VSYNC会直接锁存住直到下次才会修改。这也说明了采集在前中断在后。在VPFE初始化的时候,设定的采集存储缓冲区buffe[0],CCDC直接将数据读入到这个地址buffer[0]处。随后在中断里修改存储地址为buffer[1],但不会在这里生效。等待下次VSYNC到来时,使得地址buffer[1]生效,数据将存储到buffer[1]处。从而表明中断时设置了下一帧数据的存储地址,并在VSYNC时生效。当前采集的数据保存地址是在上一个中断设置的。 在VPBE处,VENC模块将会自动产生VSYNC(根据配置的输出制式NTSC或者PAL)表示新的一帧图像开始显示。在VPBE初始化时,设定了数据来源地址为buffer[0],经过VSYNC后有效锁存,此时会先将数据读入OSD,再输出到VENC。而此时产生的中断处设置读取数据的地址为buffe[1],将会在下一个VSYNC出现时锁存住,而成显示buffer[1]。从而表明了中断时设置下次要读取的数据地址但不立即生效,需要在当前帧结束时,下帧开始时有效。每隔一个VSYNC就会产生一个VENC中断。中断出现紧随着寄存器的更新而出现。即寄存器更新后立即出现VENC中断。
|