⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdma.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 3 页
字号:
//===============================================================================
//            TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION           
//                                                                             
//   Property of Texas Instruments 
//   For  Unrestricted  Internal  Use  Only 
//   Unauthorized reproduction and/or distribution is strictly prohibited.  
//   This product is protected under copyright law and trade secret law 
//   as an unpublished work.  
//   Created 2000, (C) Copyright 2000 Texas Instruments.  All rights reserved.
//
// Check
//===============================================================================
//




#include "global_types.h"
#include "result.h"
#include "test.h"
#include "intvecs.h"
#include "gdma.h"
#include "gdma_omap32.h"
#include "gdmatest.h"
#include "inth.h"


DMA_SYSTEM_STRUCT SystemDma;

//-------------------------------------------------------------------------------
// NAME         : SDMA_SetupSystemDma       
//
// DESCRIPTION  : Init the SystemDma Structure and Set The debugging mode
//
// PARAMETERS   : WithOrWithoutFree            DMA_FREE_RUNNING
//                                        DMA_SUSPEND_RUNNING 
//
// RETURN VALUE : None
//
//--------------------------------------------------------------------------------
void SDMA_SetupSystemDma(BOOL WithOrWithoutFree )
{
UWORD32 i;

       for (i=0; i<DMA_NUMBER_OF_CHANNEL; i++)
	 {
	   SystemDma.DmaChannel[i].ChannelNumb=i;  
	 }
       
     //DMA_GCR
      //----------
      SetGroupBits(DMA_ACC(GLOB_REG,0  ,DMA_GCR )      ,DMA_FREE_POS        , DMA_FREE_NUMB   , WithOrWithoutFree );

}

void DMA_SetAutogating(BOOL AutoGatingOnOrOff )
{
SetGroupBits(DMA_ACC(GLOB_REG,0,DMA_GCR),DMA_AUTOGATE_POS, DMA_AUTOGATE_NUMB, AutoGatingOnOrOff);
}

//-------------------------------------------------------------------------------
// NAME         : SDMA_SetupChannel       
//
// DESCRIPTION  : Copy the channel structure at the right place in the registers of the
//                specified channel
//
// PARAMETERS   : ChannelNumber       DMA_CHANNEL_0   
//                                    DMA_CHANNEL_1   
//                                    DMA_CHANNEL_2   
//                                    DMA_CHANNEL_3   
//                                    DMA_CHANNEL_4   
//                                    DMA_CHANNEL_5   
//                                    DMA_CHANNEL_6   
//                                    DMA_CHANNEL_7   
//                                    DMA_CHANNEL_8   
//                                    DMA_CHANNEL_LCD 
//
// RETURN VALUE : None
//
//--------------------------------------------------------------------------------
void SDMA_SetupChannel(UWORD16 ChannelNumber)
{
UWORD32 Temp;


  if (ChannelNumber != DMA_CHANNEL_LCD)
    {
    CHANNEL_DESCRIPTOR* Chptr;
      Chptr=&(SystemDma.DmaChannel[ChannelNumber]);
    	//DMA_CSDP
    	//----------
        Temp=0;
        SetGroupBits( Temp     ,DMA_TYPE_SIZE_POS        ,DMA_TYPE_SIZE_NUMB      ,Chptr->TypeSize                           );
        SetGroupBits( Temp     ,DMA_SRC_PORT_POS         ,DMA_SRC_PORT_NUMB       ,Chptr->SrcPort                           );
        SetGroupBits( Temp     ,DMA_DEST_PORT_POS        ,DMA_DEST_PORT_NUMB      ,Chptr->DestPort                          );
        SetGroupBits( Temp     ,DMA_SRC_PACK_POS         ,DMA_SRC_PACK_NUMB       ,Chptr->SrcPack                           );
        SetGroupBits( Temp     ,DMA_DEST_PACK_POS        ,DMA_DEST_PACK_NUMB      ,Chptr->DestPack                          );
        SetGroupBits( Temp     ,DMA_SRC_BURST_POS        ,DMA_SRC_BURST_NUMB      ,Chptr->SrcBurst                          );
        SetGroupBits( Temp     ,DMA_DEST_BURST_POS       ,DMA_DEST_BURST_NUMB     ,Chptr->DestBurst                         );
	DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSDP   )=Temp;

    	//DMA_CCR
  //----------
        Temp=0;
        SetGroupBits( Temp     ,DMA_SYNCNUMB_POS         ,DMA_SYNCNUMB_NUMB       ,Chptr->SyncNumb                          );
        //SetGroupBits( Temp     ,DMA_SYNCPR_POS           ,DMA_SYNCPR_NUMB         ,Chptr->SyncPr                           ); // H1-to-H2 porting mod
        SetGroupBits( Temp     ,DMA_FS_POS               ,DMA_FS_NUMB             ,Chptr->EventSync                         );
        SetGroupBits( Temp     ,DMA_PRIORITY_POS         ,DMA_PRIORITY_NUMB       ,Chptr->Priority                          );
        //SetGroupBits( Temp     ,DMA_ENABBLE_POS          ,DMA_ENABLE_NUMB        ,Chptr->Enable                            );
        SetGroupBits( Temp     ,DMA_AUTOINIT_POS         ,DMA_AUTOINIT_NUMB       ,Chptr->Autoinit                          );
        SetGroupBits( Temp     ,DMA_REPEAT_POS           ,DMA_REPEAT_NUMB         ,Chptr->Repeat                            );
        SetGroupBits( Temp     ,DMA_FLUSH_POS            ,DMA_FLUSH_NUMB          ,Chptr->Fifofush                          );
        SetGroupBits( Temp     ,DMA_SRC_AMODE_POS        ,DMA_SRC_AMODE_NUMB      ,Chptr->SrcAddressMode                    );
        SetGroupBits( Temp     ,DMA_DEST_AMODE_POS       ,DMA_DEST_AMODE_NUMB     ,Chptr->DestAddressMode                   );
	DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CCR    )=Temp;

    	//DMA_CICR
  //----------
        Temp=0;
        SetGroupBits( Temp     ,DMA_TOUTIE_POS           ,DMA_TOUTIE_NUMB         ,Chptr->TimeoutIntEnable                 );
        SetGroupBits( Temp     ,DMA_DROPIE_POS           ,DMA_DROPIE_NUMB         ,Chptr->DropIntEnable                    );
        SetGroupBits( Temp     ,DMA_HALFIE_POS           ,DMA_HALFIE_NUMB         ,Chptr->HalfFrameIntEnable               );
        SetGroupBits( Temp     ,DMA_FRAMEIE_POS          ,DMA_FRAMEIE_NUMB        ,Chptr->FrameIntEnable                   );
        SetGroupBits( Temp     ,DMA_LASTIE_POS           ,DMA_LASTIE_NUMB         ,Chptr->LastFrameIntEnable               );
        SetGroupBits( Temp     ,DMA_BLOCKIE_POS          ,DMA_BLOCKIE_NUMB        ,Chptr->BlockIntEnable                   );
	DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CICR    )=Temp;

    	//DMA_CSR
  //----------
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSR    )     ,DMA_TOUT_POS             ,DMA_TOUT_NUMB           ,Chptr->TimeoutInt                      );
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSR    )     ,DMA_DROP_POS             ,DMA_DROP_NUMB           ,Chptr->DropInt                         );
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSR    )     ,DMA_HALF_POS             ,DMA_HALF_NUMB           ,Chptr->HalfFrameInt                    );
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSR    )     ,DMA_FRAME_POS            ,DMA_FRAME_NUMB          ,Chptr->FrameInt                        );
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSR    )     ,DMA_LASTFRAME_POS        ,DMA_LASTFRAME_NUMB      ,Chptr->LastFrameInt                    );
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSR    )     ,DMA_BLOCK_POS            ,DMA_BLOCK_NUMB          ,Chptr->BlockInt                        );
    
    	//DMA_CSSA_L
	//----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSSA_L) = (UWORD16)(Chptr->SrcAdd);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSSA_L) ,DMA_CSSA_L_POS ,DMA_CSSA_L_NUMB ,(Chptr->SrcAdd & DMA_CSSA_L_MASK));
    
    	//DMA_CSSA_U
  //----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSSA_U) = (UWORD16)((Chptr->SrcAdd)>> 16);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSSA_U) ,DMA_CSSA_U_POS ,DMA_CSSA_U_NUMB ,((Chptr->SrcAdd & DMA_CSSA_U_MASK)>> 16));
    
    	//DMA_CDSA_L
	//----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CDSA_L) = (UWORD16)(Chptr->DestAdd);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CDSA_L) ,DMA_CDSA_L_POS ,DMA_CDSA_L_NUMB ,(Chptr->DestAdd & DMA_CDSA_L_MASK));
    
    	//DMA_CDSA_U
  //----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CDSA_U) = (UWORD16)((Chptr->DestAdd)>> 16);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CDSA_U) ,DMA_CDSA_U_POS ,DMA_CDSA_U_NUMB ,((Chptr->DestAdd & DMA_CDSA_U_MASK)>> 16));
    
    	//DMA_CEN
	//----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CEN) = (UWORD16)(Chptr->EltNumber);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CEN) ,DMA_CEN_POS ,DMA_CEN_NUMB ,(Chptr->EltNumber & DMA_CEN_MASK));
    
    	//DMA_CFN
  //----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CFN) = (UWORD16)(Chptr->FrameNumber);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CFN) ,DMA_CFN_POS ,DMA_CFN_NUMB ,(Chptr->FrameNumber & DMA_CFN_MASK));
    
    	//DMA_CFI
	//----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CFI) = (UWORD16)(Chptr->FrameIndex);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CFI)  ,DMA_CFI_POS ,DMA_CFI_NUMB ,(Chptr->FrameIndex & DMA_CFI_MASK));
    
    	//DMA_CEI
  //----------
        DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CEI)  = (UWORD16)(Chptr->EltIndex);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CEI)    ,DMA_CEI_POS ,DMA_CEI_NUMB ,(Chptr->EltIndex & DMA_CEI_MASK));
    }
  else
    {
    LCD_CHANNEL_DESCRIPTOR* Chptr;
      Chptr=&(SystemDma.LcdChannel);
    	//DMA_LCD_CTRL
    	//----------
	Temp=0;
        SetGroupBits( Temp     ,DMA_LCD_FRAMEMODE_POS    ,DMA_LCD_FRAMEMODE_NUMB     ,Chptr->FrameMode      );
        SetGroupBits( Temp     ,DMA_LCD_FRAMEIE_POS      ,DMA_LCD_FRAMEIE_NUMB       ,Chptr->FrameItIe      );
        SetGroupBits( Temp     ,DMA_LCD_BUSERROR_POS     ,DMA_LCD_BUSERROR_NUMB      ,Chptr->BusErrorItIe   );
        SetGroupBits( Temp     ,DMA_LCD_FRAME1IT_POS     ,DMA_LCD_FRAME1IT_NUMB      ,Chptr->Frame1ItCond   );
        SetGroupBits( Temp     ,DMA_LCD_FRAME2IT_POS     ,DMA_LCD_FRAME2IT_NUMB      ,Chptr->Frame2ItCond   );
        SetGroupBits( Temp     ,DMA_LCD_BUSERRORIT_POS   ,DMA_LCD_BUSERRORIT_NUMB    ,Chptr->BusErrorItCond );
        SetGroupBits( Temp     ,DMA_LCD_SRC_POS          ,DMA_LCD_SRC_NUMB           ,Chptr->LcdSrc         );
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_CTRL   )=Temp;
    
    	//DMA_LCD_TOP_F1
    	//----------
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F1_L) = (UWORD16)((Chptr->LcdTopF1));
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F1_L) ,DMA_LCD_TOP_F1_L_POS ,DMA_LCD_TOP_F1_L_NUMB ,((Chptr->LcdTopF1)&DMA_LCD_TOP_F1_L_MASK));
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F1_U) = (UWORD16)((Chptr->LcdTopF1)>>16);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F1_U) ,DMA_LCD_TOP_F1_L_POS ,DMA_LCD_TOP_F1_L_NUMB ,((Chptr->LcdTopF1)&DMA_LCD_TOP_F1_U_MASK)>>16);

    	//DMA_LCD_BOT_F1
    	//----------
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F1_L) = (UWORD16)((Chptr->LcdBotF1));
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F1_L) ,DMA_LCD_BOT_F1_L_POS ,DMA_LCD_BOT_F1_L_NUMB ,((Chptr->LcdBotF1)&DMA_LCD_BOT_F1_L_MASK));
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F1_U) = (UWORD16)((Chptr->LcdBotF1)>>16);
        //SetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F1_U) ,DMA_LCD_BOT_F1_L_POS ,DMA_LCD_BOT_F1_L_NUMB ,((Chptr->LcdBotF1)&DMA_LCD_BOT_F1_U_MASK)>>16);

    
    	//DMA_LCD_TOP_F2
    	//----------
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F2_L) = (UWORD16)((Chptr->LcdTopF2));
        //SetGroupBits(DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F2_L) ,DMA_LCD_TOP_F2_L_POS ,DMA_LCD_TOP_F2_L_NUMB ,((Chptr->LcdTopF2)&DMA_LCD_TOP_F2_L_MASK));
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F2_U) = (UWORD16)((Chptr->LcdTopF2)>>16);
        //SetGroupBits(DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_TOP_F2_U) ,DMA_LCD_TOP_F2_L_POS ,DMA_LCD_TOP_F2_L_NUMB ,((Chptr->LcdTopF2)&DMA_LCD_TOP_F2_U_MASK)>>16);

    	//DMA_LCD_BOT_F2
    	//----------
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F2_L) = (UWORD16)((Chptr->LcdBotF2));
        //SetGroupBits(DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F2_L) ,DMA_LCD_BOT_F2_L_POS ,DMA_LCD_BOT_F2_L_NUMB ,((Chptr->LcdBotF2)&DMA_LCD_BOT_F2_L_MASK));
        DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F2_U) = (UWORD16)((Chptr->LcdBotF2)>>16);
        //SetGroupBits(DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_BOT_F2_U) ,DMA_LCD_BOT_F2_L_POS ,DMA_LCD_BOT_F2_L_NUMB ,((Chptr->LcdBotF2)&DMA_LCD_BOT_F2_U_MASK)>>16);
    }
}

//-------------------------------------------------------------------------------
// NAME         : DMA_VerifyIfPossible       
//
// DESCRIPTION  : Verify if the setup is compliant with a possible transfert
//
//
// PARAMETERS   : ChannelNumber       DMA_CHANNEL_0   
//                                    DMA_CHANNEL_1   
//                                    DMA_CHANNEL_2   
//                                    DMA_CHANNEL_3   
//                                    DMA_CHANNEL_4   
//                                    DMA_CHANNEL_5   
//                                    DMA_CHANNEL_6   
//                                    DMA_CHANNEL_7   
//                                    DMA_CHANNEL_8   
//                                    DMA_CHANNEL_LCD 
//
// RETURN VALUE : YES or NO
//
//--------------------------------------------------------------------------------
BOOL DMA_VerifyIfPossible(UWORD16 ChannelNumber)
{

    return((BOOL)YES);
}

//-------------------------------------------------------------------------------
// NAME         : DMA_EnableChannel       
//
// DESCRIPTION  : Enable the specified channel
//
// PARAMETERS   : ChannelNumber       DMA_CHANNEL_0   
//                                    DMA_CHANNEL_1   
//                                    DMA_CHANNEL_2   
//                                    DMA_CHANNEL_3   
//                                    DMA_CHANNEL_4   
//                                    DMA_CHANNEL_5   
//                                    DMA_CHANNEL_6   
//                                    DMA_CHANNEL_7   
//                                    DMA_CHANNEL_8   
//                                    DMA_CHANNEL_LCD 
//
// RETURN VALUE : None
//
//--------------------------------------------------------------------------------
void DMA_EnableChannel(UWORD16 ChannelNumber)
{
CHANNEL_DESCRIPTOR* Chptr;

   Chptr=&(SystemDma.DmaChannel[ChannelNumber]);

   if (ChannelNumber==DMA_CHANNEL_LCD)
    {
    return;
    }
   else
    {
     Chptr->Enable = ENABLE;
     //DMA_CCR
     //----------
     SetGroupBits( DMA_ACC(NO_GLOB_REG,ChannelNumber  ,DMA_CCR    )     ,DMA_ENABBLE_POS          ,DMA_ENABLE_NUMB        ,ENABLE                            );
    }
}


//-------------------------------------------------------------------------------
// NAME         : DMA_DisableChannel       
//
// DESCRIPTION  : Enable the specified channel
//
// PARAMETERS   : ChannelNumber       DMA_CHANNEL_0   
//                                    DMA_CHANNEL_1   
//                                    DMA_CHANNEL_2   
//                                    DMA_CHANNEL_3   
//                                    DMA_CHANNEL_4   
//                                    DMA_CHANNEL_5   
//                                    DMA_CHANNEL_6   
//                                    DMA_CHANNEL_7   
//                                    DMA_CHANNEL_8   
//                                    DMA_CHANNEL_LCD 
//
// RETURN VALUE : None
//
//--------------------------------------------------------------------------------
void DMA_DisableChannel(UWORD16 ChannelNumber)
{
CHANNEL_DESCRIPTOR* Chptr;

   Chptr=&(SystemDma.DmaChannel[ChannelNumber]);

   if (ChannelNumber==DMA_CHANNEL_LCD)
    {
    return;
    }
   else
    {
     Chptr->Enable = DMA_ENABLE_RESET_VAL;
     //DMA_CCR
     //----------
     SetGroupBits( DMA_ACC(NO_GLOB_REG,ChannelNumber  ,DMA_CCR    )     ,DMA_ENABBLE_POS          ,DMA_ENABLE_NUMB        ,DMA_ENABLE_RESET_VAL                            );
    }
}


//-------------------------------------------------------------------------------
// NAME         : DMA_ReadGlobalReg       
//
// DESCRIPTION  : Read the contents of the global register
//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -