当前位置:首页 > 芯闻号 > 充电吧
[导读]这个比较简单,一次成功,没遇到任何问题.GraphRotation.c/****************************************************************

这个比较简单,一次成功,没遇到任何问题.


GraphRotation.c


/*************************************************************************************************************
 * 文件名:	GraphRotation.c
 * 功能:		S3C6410 图形旋转底层驱动函数
 * 作者:		cp1300@139.com
 * 创建时间:	2012年10月15日21:12
 * 最后修改时间:2012年10月15日
 * 详细:		图形旋转控制器底层驱动
*************************************************************************************************************/
#include "system.h"
#include "GraphRotation.h"
#include "delay.h"


//超时,单位US
#define GR_TIMEOUT	1000000




/*************************************************************************************************************************
*函数    	:	void Rotation_SetInputImage(u8 TypeImage)
*功能    	:	设置输入旋转图像格式
*参数    	:	TypeImage:图像格式,见宏定义
				#define GR_YUV420	0
				#define GR_YUV422	3
				#define GR_RGB565	4
				#define GR_RGB888	5
*返回    	:	无
*依赖	: 	底层宏定义
*作者     	:	cp1300@139.com
*时间    :	20121016
*最后修改时间:	20121016
*说明    :	无
*************************************************************************************************************************/
void Rotation_SetInputImage(u8 TypeImage)
{
	rGR_CTRLCFG &=  ~(0x7 << 13);	//清除设置
	rGR_CTRLCFG |= (0x7 & TypeImage) << 13;
}



/*************************************************************************************************************************
*函数    	:	void Rotation_SetRotationDeg(u8 Degree)
*功能    	:	设置图像旋转角度
*参数    	:	Degree:旋转角度,见宏定义
				#define GR_0Deg		0		//0
				#define GR_90Deg	1		//90
				#define GR_180Deg	2		//180
				#define GR_270Deg	3		//270
*返回    	:	无
*依赖	: 	底层宏定义
*作者     	:	cp1300@139.com
*时间    :	20121016
*最后修改时间:	20121016
*说明    :	翻转和旋转不能同时生效
*************************************************************************************************************************/
void Rotation_SetRotationDeg(u8 Degree)
{
	rGR_CTRLCFG &=  ~(0x3 << 6);	//清除设置
	rGR_CTRLCFG |= (0x3 & Degree) << 6;
}


/*************************************************************************************************************************
*函数    	:	void Rotation_SetFlipDir(u8 Direction)
*功能    	:	设置图像翻转方向
*参数    	:	Direction:翻转方向,见宏定义
				#define GR_NotFlip	0		//不翻转
				#define GR_VerFlip	2		//垂直翻转
				#define GR_HorFlip	3		//水平翻转
*返回    	:	无
*依赖	: 	底层宏定义
*作者     	:	cp1300@139.com
*时间    :	20121016
*最后修改时间:	20121016
*说明    :	翻转和旋转不能同时生效
*************************************************************************************************************************/
void Rotation_SetFlipDir(u8 Direction)
{
	rGR_CTRLCFG &=  ~(0x3 << 4);	//清除设置
	rGR_CTRLCFG |= (0x3 & Direction) << 4;
}



/*************************************************************************************************************************
*函数    	:	void Rotation_SetSourImageAddr(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_SetSourImageAddr(u32 RGB_Y_Addr,u32 CB_Addr,u32 CR_Addr)
{
	rGR_SRCADDRREG0 = RGB_Y_Addr;
	rGR_SRCADDRREG1 = CB_Addr;
	rGR_SRCADDRREG2 = CR_Addr;
}


/*************************************************************************************************************************
*函数    	:	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;
}


GraphRotation.h



/*************************************************************************************************************
 * 文件名:	GraphRotation.h
 * 功能:		S3C6410 图形旋转底层驱动函数
 * 作者:		cp1300@139.com
 * 创建时间:	2012年10月15日21:12
 * 最后修改时间:2012年10月17日
 * 详细:		图形旋转控制器底层驱动
*************************************************************************************************************/
#ifndef GRAPHROTATION_H_
#define GRAPHROTATION_H_



//旋转图像输入格式
#define GR_YUV420	0
#define GR_YUV422	3
#define GR_RGB565	4
#define GR_RGB888	5

//旋转程度
#define GR_0Deg		0		//0
#define GR_90Deg	1		//90
#define GR_180Deg	2		//180
#define GR_270Deg	3		//270

//翻转定义
//0x80用于区分翻转和旋转
#define GR_NotFlip	0x80		//不翻转
#define GR_VerFlip	0x82		//垂直翻转
#define GR_HorFlip	0x83		//水平翻转



//相关函数
void GraphRotation_Init(void);	//初始化
u8 Rotation_RGB565Image(u32 SourImageAddr,u32 DesImageAddr,u16 VerSize,u16 HorSize,u8 GR_Mode);	//旋转一张RGB565图像



#endif /*GRAPHROTATION_H_*/




//相关寄存器定义


//图形旋转 内存映射
//寄存器 地址 读/写 描述 复位值
#define	rGR_CTRLCFG 		S3C6410_SFR32(0x77200000) 		//读/写 	旋转器控制寄存器 						0x0000_0000
#define	rGR_SRCADDRREG0 	S3C6410_SFR32(0x77200004) 		//读/写 	旋转器源图像(RGB 或Y 组成部分)地址寄存器 	0x0000_0000
#define	rGR_SRCADDRREG1 	S3C6410_SFR32(0x77200008) 		//读/写 	旋转器源图像(CB 组成部分)地址寄存器		0x0000_0000
#define	rGR_SRCADDRREG2 	S3C6410_SFR32(0x7720000C) 		//读/写 	旋转器源图像(CR 组成部分)地址寄存器		0x0000_0000
#define	rGR_SRCSIZEREG 		S3C6410_SFR32(0x77200010) 		//读/写 	旋转器源图像尺寸寄存器 					0x0000_0000
#define	rGR_DESTADDRREG0 	S3C6410_SFR32(0x77200018) 		//读/写 	旋转器目标图像(RGB 或Y 成分)地址寄存器	0x0000_0000
#define	rGR_DESTADDRREG1 	S3C6410_SFR32(0x7720001C) 		//读/写 	旋转器目标图像(CB 组成部分)地址寄存器		0x0000_0000
#define	rGR_DESTADDRREG2 	S3C6410_SFR32(0x77200020) 		//读/写 	旋转器目标图像(CR 组成部分)地址寄存器		0x0000_0000
#define	rGR_STATCFG 		S3C6410_SFR32(0x7720002C) 		//读 	旋转器状态寄存器 						0x0000_0000



//测试


#include "system.h"
#include "uart.h"
#include "tft_lcd.h"
#include "other.h"
#include "delay.h"
#include "timer.h"
#include "ac97.h"
#include "GraphRotation.h"
#include "bmp.h"


//LED1闪烁程序,在定时器0中断服务程序中闪烁,周期400MS
void LED1_flash(void)
{
	LED1_FLASH();
}


//将缓存图像送到显存
void RAMBuff_To_GBuff(const u16 *RAMAddr,vu16 (*GBuff)[LCD_XSIZE],u16 x0,u16 y0,u16 Hsize,u16 Vsize)
{
	u16 x,y;
	
	for(y = y0;y < y0 + Vsize;y ++)
	{
		for(x = x0;x < x0 + Hsize;x ++)
		{
			GBuff[y][x] = *RAMAddr++;
		}
	}
}

//主函数
int main(void)
{	
	u16 ImgeBuff[240 * 320];	//目标图像缓冲区,图像分辨率240*320
	
	LCD_Init();					//初始化LCD
	UART0_Init(DISABLE,115200);	//初始化串口,失能中断接收,波特率115200
	LED_Init();					//初始化LED

	Timer1_Init(400000-1,ENABLE,LED1_flash);	//初始化定时器0,周期400ms
	
	lcd_printf("Get_FCLK : %d Hzn",Get_FCLK());	
	lcd_printf("Get_PCLK : %d Hzn",Get_PCLK());
	
	//图像旋转测试
	RAMBuff_To_GBuff((const u16 *)gImage_bmp,LCD_BUFFER0,0,0,240,320);		//显示原图形
	GraphRotation_Init();		//初始化图形旋转模块
	Rotation_RGB565Image((u32)gImage_bmp,(u32)ImgeBuff,320,240,GR_90Deg);	//图像旋转90°
	RAMBuff_To_GBuff((const u16 *)ImgeBuff,LCD_BUFFER0,240,0,320,240);		//显示旋转90°图形,长宽对调
	Rotation_RGB565Image((u32)gImage_bmp,(u32)ImgeBuff,320,240,GR_HorFlip);	//图像水平翻转
	RAMBuff_To_GBuff((const u16 *)ImgeBuff,LCD_BUFFER0,240+320,0,240,320);		//显示水平翻转的图像,长宽保持不变
	while(1)
	{
		LED2_FLASH();		//LED2闪烁
		Delay_US(600000);
	}
}


//原图片

//开发板上测试效果图


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭