【发明内容】
本发明所要解决的技术问题在于提供一种手持设备屏幕画面同时实现90度和270度旋转的方法,该方法只需要很小的缓存器容量,最大程度上的节省了电路实现面积,而且不同功能的电路之间可以复用,也大幅减少了电路的实现面积。
本发明采用以下技术方案解决上述技术问题:
手持设备屏幕画面同时实现90度和270度旋转的方法,包括如下步骤:
步骤一:设计一旋转电路结构:包括外部源存储器、CPU、总线、外部目标存储器、旋转单元;所述外部源存储器、CPU、外部目标存储器分别连接到所述总线;所述总线连接所述旋转单元;
所述旋转单元包括配置寄存器、图像块读取单元、旋转控制单元、内部缓存器、图像块回写控制单元;所述图像块读取单元连接所述旋转控制单元、所述旋转控制单元连接所述内部缓存器、所述内部缓存器连接所述图像块回写控制单元;所述图像块读取单元和图像块回写控制单元分别连接到所述总线;
其中所述CPU负责通过总线对配置寄存器进行配置;所述外部源存储器负责存储原图像;所述外部目标存储器负责存储处理后图像的数据;所述总线为一个互联的单元,将挂载在总线上的各个单元连接在一起,任一个总线上的单元可以通过总线访问到挂载在总线的其他单元;所述图像块读取控制单元负责通过总线从外部源存储器读取原图像数据,并把数据送到旋转控制单元;所述旋转控制单元根据用户配置的旋转角度,将读入的图像块数据按照一定顺序和位置存储到内部缓存器中;所述内部缓存器负责缓存经过旋转控制单元处理后的图像块数据;所述图像块回写控制单元负责从内部缓存器读出处理后的图像块数据,再将数据通过总线回写到外部目标存储器中;所述配置寄存器负责存储整个旋转过程需要的信息,该信息包括图像的宽高、旋转的角度、原始图像在外部源存储器中的起始地址值,目标图像在外部目标存储器中的起始地址,开始工作的开关位;
步骤二:当用户使用旋转电路时,用CPU通过总线对配置寄存器中的值进行配置;首先配置需要旋转的角度,然后再配置图像的尺寸,原始图像在外部源存储器中的起始地址值,目标图像在外部目标存储器中的起始地址这些必须的信息,当以上信息配置完毕后通过配置电路开始工作的开关位使电路进入工作状态;
步骤三:在配置完毕电路开始工作后,图像块读取控制单元通过总线从外部源存储器按图像块读取原图像数据,并把数据送到旋转控制单元;
步骤四:在读入原图像数据进入旋转控制单元后,旋转控制单元根据用户配置的旋转角度,将读入的图像块数据按照一定顺序和位置存储到内部缓存器中;
步骤五:在一整个图像块的数据都经过旋转控制单元写入内部缓存器后,图像块回写控制单元开始从内部缓存器读出处理后的图像块数据,再将数据通过总线回写到外部目标存储器中;
步骤六:当处理完一个图像块并将其完全回写到目标外部存储器后,从第二步开始重复一个新的图像块处理;
步骤七:图像块按照一定的读取顺序一个接一个的处理,直到整个图像处理完毕。
本发明的优点在于:1、本发明的电路结构同时实现了90度和270度旋转功能;2、将90度和270度旋转使用的缓存空间进行复用,以减少存储器和电路的使用;3、相对与其他处理方式,基于块处理的方式保证了只需要很少的电路就可以实现旋转功能;4、配置简单,方便用户使用,该电路只需要用户配置图像的宽高,旋转的角度,原始图像在外部源存储单元中的起始地址值,目标图像在外部目标存储器中的起始地址,电路就可以完成工作;5、灵活的应用场合,该电路可以使用于屏幕需要显示的画面的旋转,也可以对一些指定位置的小图像进行旋转处理后写入指定的目标位置,并且可以多次操作以实现图像处理的作用。
【具体实施方式】
手持设备屏幕画面同时实现90度和270度旋转的方法,首先设计一旋转电路结构,如图1所示:包括外部源存储器、CPU、总线、外部目标存储器、旋转单元;所述外部源存储器、CPU、外部目标存储器分别连接到所述总线;所述总线连接所述旋转单元;
所述旋转单元包括配置寄存器、图像块读取单元、旋转控制单元、内部缓存器、图像块回写控制单元;所述图像块读取单元连接所述旋转控制单元、所述旋转控制单元连接所述内部缓存器、所述内部缓存器连接所述图像块回写控制单元;所述图像块读取单元和图像块回写控制单元分别连接到所述总线;
其中所述CPU负责通过总线对配置寄存器进行配置;所述外部源存储器负责存储原图像;所述外部目标存储器负责存储处理后图像的数据;所述总线为一个互联的单元,将挂载在总线上的各个单元连接在一起,任一个总线上的单元可以通过总线访问到挂载在总线的其他单元;所述图像块读取控制单元负责通过总线从外部源存储器读取原图像数据,并把数据送到旋转控制单元;所述旋转控制单元根据用户配置的旋转角度,将读入的图像块数据按照一定顺序和位置存储到内部缓存器中;所述内部缓存器负责缓存经过旋转控制单元处理后的图像块数据;所述图像块回写控制单元负责从内部缓存器读出处理后的图像块数据,再将数据通过总线回写到外部目标存储器中;所述配置寄存器负责存储整个旋转过程需要的信息,该信息包括图像的宽高、旋转的角度、原始图像在外部源存储器中的起始地址值,目标图像在外部目标存储器中的起始地址,开始工作的开关位。
总体操作流程:
首先当用户使用旋转电路时,用CPU通过总线对配置寄存器中的值进行配置;首先配置需要旋转的角度,然后再配置图像的尺寸,原始图像在外部源存储器中的起始地址值,目标图像在外部目标存储器中的起始地址这些必须的信息,当以上信息配置完毕后通过配置电路开始工作的开关位使电路进入工作状态;
在配置完毕电路开始工作后,图像块读取控制单元通过总线从外部源存储器按图像块读取原图像数据,并把数据送到旋转控制单元;
在读入原图像数据进入旋转控制单元后,旋转控制单元根据用户配置的旋转角度,将读入的图像块数据按照一定顺序和位置存储到内部缓存器中;
在一整个图像块的数据都经过旋转控制单元写入内部缓存器后,图像块回写控制单元开始从内部缓存器读出处理后的图像块数据,再将数据通过总线回写到外部目标存储器中;
当处理完一个图像块并将其完全回写到目标外部存储器后,从第二步开始重复一个新的图像块处理;
图像块按照一定的读取顺序一个接一个的处理,直到整个图像处理完毕。
下面详细描述电路结构中各单元工作原理:
图像块读取控制单元原理示意:
如图2所示,每个小框代表一个图像块,图像块在原图像中的读取顺序为从上到下,从左到右。每个图像块中间的虚线代表图像块内部的像素读取顺序,每个横向的虚线箭头代表一次突发传输。
突发传输读起始地址的计算:
1、首次突发传输的地址为整个原图像的起始地址;
2、在一个突发传输结束后,下一个突发传输的开始地址为上一次突发传输起始地址加上原图像中一行像素的地址偏移量;
3、不断重复上一条的操作直到第一个块列的最后一个突发传输传输完;(块列意为将图像按块划分后,处于同一列的全部块)
4、第二个块列开始时的突发传输起始地址为原图像起始地址加上一次突发传输长度的像素地址偏移量;
5、下一个突发传输的开始地址同第2点一样,为上一次突发传输起始地址加上原图像中一行像素的地址偏移量;
6、如此不断重复,直到整个原图像被读取完毕。
块旋转原量示意:
图像块的大小为N乘N像素,其中N的大小为一次突发传输的像素数量;如果N越大,相应的内部缓存器会变大,但是每次突发传输的长度越大则总线的数据传输效率越高;但是无论N的大小,旋转处理的控制机制是一样的;为了方便说明原理,后面的描述都以4乘4的图像块处理为例。
如图3a与图3b所示,是以4乘4块为例,说明旋转前后的像素位置;图中图像块中的像素编号为该像素在原图像块中的行列位置。
旋转控制单元工作原理:
N乘N的块需要N个长度为N的内部缓存器,以4乘4块为例,则需要4个缓存器,每个缓存器可以存4个像素。
如图4所示,在4乘4原图像块中,每次突发传输4个像素,一共4次传输16个像素。
图5所示为顺时针90度旋转时,旋转控制单元如何把每次突发传输的像素写到对应的缓存器中。
旋转控制单元顺时针90旋转时具体工作流程:
1、在第一次突发传输中,旋转控制单元将前4个像素依次写入缓存器0到缓存器3的最高地址位;
2、在第二次突发传输中,旋转控制单元将第二次突发传输的4个像素依次写入缓存器0到缓存器3的地址2中;
3、每次突发传输,4个像素依次写入缓存器0到缓存器3的地址都递减1;直到整个图像块读入完毕;
4、当整个图像块传输完毕后,缓存器也都已经存满,此时已经准备好可以被图像块回写单元从内部缓存器读出后通过总线写回目标外部存储器。
图6所示为顺时针270度旋转时,旋转控制单元如何把每次突发传输的像素写到对应的缓存器中。
旋转控制单元顺时针270旋转时具体工作流程;
1、在第一次突发传输中,旋转控制单元将前4个像素依次写入缓存器0到缓存器3的最低地址位;
2、在第二次突发传输中,旋转控制单元将第二次突发传输的4个像素依次写入缓存器0到缓存器3的地址1中;
3、每次突发传输4个像素依次写入缓存器0到缓存器3的地址都递增1,直到整个图像块读入完毕;
4、当整个图像块传输完毕后,缓存器也都已经存满,此时已经准备好可以被图像块回写单元从内部缓存器读出后通过总线写回目标外部存储器。
图像块回写控制单元原理:
图像块回写控制单元从内部缓存器读取数据的机制:由于原图像块数据在经过旋转控制单元写入内部缓存器后,已经经过了旋转处理,所以不管是90度还是270度旋转,图像块回写控制单元在从内部缓存器读取时,都是从缓存器0开始,地址从0到3的数据在通过总线回写目标外部存储器时构成一次突发传输,然后再读缓存器1中的4个数回写到目标外部存储器,一直到缓存器3从内部缓存器被读取并回写完毕后,该图像块处理完毕。
图像块回写控制单元对图像块之间回写顺序的控制:
如图7所示,,每个小框代表一个图像块,每个图像块中间的虚线代表图像块内部的像素读取顺序,每个横向的虚线箭头代表一次突发传输。由于图像块在原图像中的读取顺序为从上到下,从左到右,所以在90读旋转后图像块的回写顺序变为图7所示的从右到左,从上到下。
90度旋转时图像块回写时地址的计算:
1、首次突发写传输的起始地址为目标图像起始地址加上一行像素的偏移地址再减去一次突发传输长度的偏移地址;
2、在一个突发传输结束后,下一个突发传输的开始地址为上一次突发传输起始地址加上原图像中一行像素的地址偏移量;
3、在一个图像块回写完毕后,新的块的第一次突发传输起始地址为前一个图像块第一次突发传输起始地址减去一次突发传输长度的偏移地址;
4、不断重复上两条的操作直到第一个块行的最后一个块传输完;(块行意为将图像按块划分后,处于同一行的全部块)
5、第二个块行开始的第一次突发传输起始地址为前一个块行第一次突发传输起始地址加上图像块高度乘以一行像素地址偏移量的积(也就是一整个块行的地址偏移量);
6、如此每个块行不断重复,直到整个图像被回写完毕。
如图8所示,每个小框代表一个图像块,每个图像块中间的虚线代表图像块内部的像素读取顺序,每个横向的虚线箭头代表一次突发传输。由于图像块在原图像中的读取顺序为从上到下,从左到右,所以在270读旋转后图像块的回写顺序变为图8所示的从左到右,从下到上。
270度旋转时图像块回写时地址的计算:
1、首次突发写传输的起始地址为:目标图像起始地址+(目标图像高度-1)*一行像素的偏移地址。其实就是将首次突发写传输的起始地址定为目标图像的左下角开始;
2、在一个突发传输结束后,下一个突发传输的开始地址为上一次突发传输起始地址减去原图像中一行像素的地址偏移量;
3、在一个图像块回写完毕后,新的块的第一次突发传输起始地址为前一个图像块第一次突发传输起始地址加上一次突发传输长度的偏移地址;
4、不断重复上两条的操作直到第一个块行的最后一个块传输完;
5、第二个块行开始的第一次突发传输起始地址为前一个块行第一次突发传输起始地址减去图像块高度乘以一行像素地址偏移量的积(也就是一整个块行的地址偏移量);
6、如此每个块行不断重复,直到整个图像被回写完毕。