//图形旋转 内存映射
//寄存器 地址 读/写 描述 复位值
#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 Hz\n",Get_FCLK());
lcd_printf("Get_PCLK : %d Hz\n",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);
}
}
//原图片
//开发板上测试效果图