*********
*函数 : void Rotation_SetDesImageAddr(u32 RGB_Y_Addr,u32 CB_Addr,u32 CR_Addr)
*功能 : 设置目标图像地址
*参数 : RGB_Y_Addr : RGB或者Y组成部分
* CB_Addr:CB组成部分
* CR_Addr:CR组成部分
*返回 : 无
*依赖 : 底层宏定义
*作者 : cp1300@139.com
*时间 : 20121016
*最后修改时间: 20121016
*说明 : 无
*************************************************************************************************************************/
void Rotation_SetDesImageAddr(u32 RGB_Y_Addr,u32 CB_Addr,u32 CR_Addr)
{
rGR_DESTADDRREG0 = RGB_Y_Addr;
rGR_DESTADDRREG1 = CB_Addr;
rGR_DESTADDRREG2 = CR_Addr;
}
/*************************************************************************************************************************
*函数 : void Rotation_SetImageSize(u16 VerSize,u16 HorSize)
*功能 : 设置源图像尺寸
*参数 : VerSize:源图像垂直尺寸
* HorSize:源图像水平尺寸
*返回 : 无
*依赖 : 底层宏定义
*作者 : cp1300@139.com
*时间 : 20121016
*最后修改时间: 20121016
*说明 : 无
*************************************************************************************************************************/
void Rotation_SetImageSize(u16 VerSize,u16 HorSize)
{
rGR_SRCSIZEREG = ((u32)VerSize << 16) + HorSize;
}
/*************************************************************************************************************************
*函数 : void GraphRotation_Init(void)
*功能 : 初始化图形旋转模块
*参数 : 无
*返回 : 无
*依赖 : 底层宏定义
*作者 : cp1300@139.com
*时间 : 20121015
*最后修改时间: 20121015
*说明 : 无
*************************************************************************************************************************/
void GraphRotation_Init(void)
{
Set_GateClk(HCLK_ROT,ENABLE); //使能图形旋转寄存器时钟
}
/*************************************************************************************************************************
*函数 : u8 Rotation_RGB565Image(u32 SourImageAddr,u32 DesImageAddr,u16 VerSize,u16 HorSize,u8 GR_Mode)
*功能 : 旋转一张RGB565图像
*参数 : SourImageAddr:源图像地址;DesImageAddr:目标地址;VerSize:垂直分辨率;HorSize:水平分辨率;GR_Mode:旋转或者翻转模式
*返回 : 0:成功;1:失败
*依赖 : 底层宏定义
*作者 : cp1300@139.com
*时间 : 20121016
*最后修改时间: 20121016
*说明 : 旋转和翻转无法同时使用
*************************************************************************************************************************/
u8 Rotation_RGB565Image(u32 SourImageAddr,u32 DesImageAddr,u16 VerSize,u16 HorSize,u8 GR_Mode)
{
u32 cnt;
cnt = rGR_STATCFG; //读取,消除状态标志
Rotation_SetInputImage(GR_RGB565); //设置源图像为RGB565格式
Rotation_SetSourImageAddr(SourImageAddr,0,0); //设置源图像地址
Rotation_SetDesImageAddr(DesImageAddr,0,0); //设置目标图像地址
Rotation_SetImageSize(VerSize,HorSize); //设置源图像尺寸
if(GR_Mode & 0x80) //翻转
{
Rotation_SetRotationDeg(GR_0Deg); //不旋转
Rotation_SetFlipDir(GR_Mode - 0x80); //设置翻转
}
else //旋转
{
Rotation_SetFlipDir(0); //不翻转
Rotation_SetRotationDeg(GR_Mode); //设置旋转
}
rGR_CTRLCFG |= BIT0; //开始旋转
//用于等待旋转成功
cnt = 0;
while(!(rGR_STATCFG & BIT8))
{
cnt ++;
Delay_US(1);
if(cnt > GR_TIMEOUT) //等待超时
return 1;
}
return 0;
}