歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

S3C6410圖形旋轉裸機驅動

這個比較簡單,一次成功,沒遇到任何問題.

GraphRotation.c

/*************************************************************************************************************
 * 文件名: GraphRotation.c
 * 功能:  S3C6410 圖形旋轉底層驅動函數
 * 作者:  [email protected]
 * 創建時間: 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
*返回     : 無
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 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
*返回     : 無
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 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  //水平翻轉
*返回     : 無
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 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組成部分
*返回     : 無
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 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組成部分
*返回     : 無
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 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:源圖像水平尺寸
*返回     : 無
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 20121016
*最後修改時間: 20121016
*說明    : 無
*************************************************************************************************************************/
void Rotation_SetImageSize(u16 VerSize,u16 HorSize)
{
 rGR_SRCSIZEREG = ((u32)VerSize << 16) + HorSize;
}


/*************************************************************************************************************************
*函數     : void GraphRotation_Init(void)
*功能     : 初始化圖形旋轉模塊
*參數     : 無
*返回     : 無
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 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:失敗
*依賴 :  底層宏定義
*作者     : [email protected]
*時間    : 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;
}

Copyright © Linux教程網 All Rights Reserved