📄 gdma.c
字号:
//===============================================================================
// 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 + -