📄 omap30_sysdma.c
字号:
//-------------------------------------------------------------------------------
// TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
// Property of Texas Instruments
// For Unrestricted Internal Use Only
// Unauthorized reprofuction 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
//
//------------------------------------------------------------------------------
#include "omap30.h"
//-------------------------------------------------------------------------------
//
// FUNCTIONS
//
//-------------------------------------------------------------------------------
DMA_SYSTEM_STRUCT SystemDma;
//-------------------------------------------------------------------------------
// NAME : DMA_SetupSystemDma
// DESCRIPTION : Init the SystemDma Structure and Set The debugging mode
// PARAMETERS : WithOrWithoutFree DMA_FREE_RUNNING
// DMA_SUSPEND_RUNNING
// RETURN VALUE : None
//--------------------------------------------------------------------------------
void DMA_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 ,SYSDMA_DMA_GCR ) ,SYSDMA_DMA_GCR_FREE_POS , SYSDMA_DMA_GCR_FREE_NUMB , WithOrWithoutFree );*/
SetGroupBits(REG16(SYSDMA_DMA_GCR_ADD), SYSDMA_DMA_GCR_FREE_POS, SYSDMA_DMA_GCR_FREE_NUMB, WithOrWithoutFree );
}
//-------------------------------------------------------------------------------
// NAME : DMA_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 DMA_SetupChannel(UWORD16 ChannelNumber)
{
UWORD32 Temp;
if (ChannelNumber != DMA_CHANNEL_LCD)
{
CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.DmaChannel[ChannelNumber]);
//DMA_CSDP
//----------
Temp=0;
SetGroupBits(Temp, SYSDMA_DMA_CSDP_CHX_DATA_TYPE_POS, SYSDMA_DMA_CSDP_CHX_DATA_TYPE_NUMB, Chptr->TypeSize);
SetGroupBits(Temp, SYSDMA_DMA_CSDP_CHX_SRC_POS, SYSDMA_DMA_CSDP_CHX_SRC_NUMB, Chptr->SrcPort);
SetGroupBits(Temp, SYSDMA_DMA_CSDP_CHX_DST_POS, SYSDMA_DMA_CSDP_CHX_DST_NUMB, Chptr->DestPort);
SetGroupBits(Temp, SYSDMA_DMA_CSDP_CHX_SRC_PACK_POS, SYSDMA_DMA_CSDP_CHX_SRC_PACK_NUMB, Chptr->SrcPack);
SetGroupBits(Temp, SYSDMA_DMA_CSDP_CHX_DST_PACK_POS, SYSDMA_DMA_CSDP_CHX_DST_PACK_NUMB, Chptr->DestPack);
SetGroupBits(Temp, SYSDMA_DMA_CSDP_CHX_SRC_BURST_EN_POS, SYSDMA_DMA_CSDP_CHX_SRC_BURST_EN_NUMB, Chptr->SrcBurst);
SetGroupBits(Temp, SYSDMA_DMA_CSDP_CHX_DST_BURST_EN_POS, SYSDMA_DMA_CSDP_CHX_DST_BURST_EN_NUMB, Chptr->DestBurst);
DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CSDP) = Temp;
//DMA_CCR
//----------
Temp=0;
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_SYNC_POS, SYSDMA_DMA_CCR_CHX_SYNC_NUMB, Chptr->SyncNumb);
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_SYNC_PR_POS, SYSDMA_DMA_CCR_CHX_SYNC_PR_NUMB, Chptr->SyncPr);
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_FS_POS, SYSDMA_DMA_CCR_CHX_FS_NUMB, Chptr->EventSync);
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_PRIO_POS, SYSDMA_DMA_CCR_CHX_PRIO_NUMB, Chptr->Priority);
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_AUTO_INIT_POS, SYSDMA_DMA_CCR_CHX_AUTO_INIT_NUMB, Chptr->Autoinit);
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_FIFO_FLUSH_POS, SYSDMA_DMA_CCR_CHX_FIFO_FLUSH_NUMB, Chptr->Fifofush);
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_SRC_AMODE_POS, SYSDMA_DMA_CCR_CHX_SRC_AMODE_NUMB, Chptr->SrcAddressMode);
SetGroupBits(Temp, SYSDMA_DMA_CCR_CHX_DST_AMODE_POS, SYSDMA_DMA_CCR_CHX_DST_AMODE_NUMB, Chptr->DestAddressMode);
DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CCR) = Temp;
//DMA_CICR
//----------
Temp=0;
SetGroupBits(Temp, SYSDMA_DMA_CICR_CHX_TOUT_IE_POS, SYSDMA_DMA_CICR_CHX_TOUT_IE_NUMB, Chptr->TimeoutIntEnable);
SetGroupBits(Temp, SYSDMA_DMA_CICR_CHX_DROP_IE_POS, SYSDMA_DMA_CICR_CHX_DROP_IE_NUMB, Chptr->DropIntEnable);
SetGroupBits(Temp, SYSDMA_DMA_CICR_CHX_HALF_IE_POS, SYSDMA_DMA_CICR_CHX_HALF_IE_NUMB, Chptr->HalfFrameIntEnable);
SetGroupBits(Temp, SYSDMA_DMA_CICR_CHX_FRAME_IE_POS, SYSDMA_DMA_CICR_CHX_FRAME_IE_NUMB, Chptr->FrameIntEnable);
SetGroupBits(Temp, SYSDMA_DMA_CICR_CHX_LAST_IE_POS, SYSDMA_DMA_CICR_CHX_LAST_IE_NUMB, Chptr->LastFrameIntEnable);
SetGroupBits(Temp, SYSDMA_DMA_CICR_CHX_BLOCK_IE_POS, SYSDMA_DMA_CICR_CHX_BLOCK_IE_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 ) ,SYSDMA_DMA_CSR_CHX_TOUT_POS ,SYSDMA_DMA_CSR_CHX_TOUT_NUMB ,Chptr->TimeoutInt );
//SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSR ) ,SYSDMA_DMA_CSR_CHX_DROP_POS ,SYSDMA_DMA_CSR_CHX_DROP_NUMB ,Chptr->DropInt );
//SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSR ) ,SYSDMA_DMA_CSR_CHX_HALF_POS ,SYSDMA_DMA_CSR_CHX_HALF_NUMB ,Chptr->HalfFrameInt );
//SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSR ) ,SYSDMA_DMA_CSR_CHX_FRAME_POS ,SYSDMA_DMA_CSR_CHX_FRAME_NUMB ,Chptr->FrameInt );
//SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSR ) ,SYSDMA_DMA_CSR_CHX_LAST_POS ,SYSDMA_DMA_CSR_CHX_LAST_NUMB ,Chptr->LastFrameInt );
//SetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb ,DMA_CSR ) ,SYSDMA_DMA_CSR_CHX_BLOCK_POS ,SYSDMA_DMA_CSR_CHX_BLOCK_NUMB ,Chptr->BlockInt );
//DMA_CSSA_L
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CSSA_L), SYSDMA_DMA_CSSA_L_CHX_CSSA_L_POS, SYSDMA_DMA_CSSA_L_CHX_CSSA_L_NUMB, (Chptr->SrcAdd));
//DMA_CSSA_U
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CSSA_U), SYSDMA_DMA_CSSA_U_CHX_CSSA_U_POS, SYSDMA_DMA_CSSA_U_CHX_CSSA_U_NUMB, ((Chptr->SrcAdd & 0xFFFF0000)>> 16));
//DMA_CDSA_L
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CDSA_L), SYSDMA_DMA_CDSA_L_CHX_CDSA_L_POS, SYSDMA_DMA_CDSA_L_CHX_CDSA_L_NUMB, (Chptr->DestAdd));
//DMA_CDSA_U
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CDSA_U), SYSDMA_DMA_CDSA_U_CHX_CDSA_U_POS, SYSDMA_DMA_CDSA_U_CHX_CDSA_U_NUMB, ((Chptr->DestAdd & 0xFFFF0000)>> 16));
//DMA_CEN
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CEN), SYSDMA_DMA_CEN_CHX_CEN_POS, SYSDMA_DMA_CEN_CHX_CEN_NUMB, (Chptr->EltNumber));
//DMA_CFN
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CFN), SYSDMA_DMA_CFN_CHX_CFN_POS, SYSDMA_DMA_CFN_CHX_CFN_NUMB, (Chptr->FrameNumber));
//DMA_CFI
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CFI), SYSDMA_DMA_CFI_CHX_CFI_POS, SYSDMA_DMA_CFI_CHX_CFI_NUMB, (Chptr->FrameIndex));
//DMA_CEI
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, Chptr->ChannelNumb, DMA_CEI), SYSDMA_DMA_CEI_CHX_CEI_POS, SYSDMA_DMA_CEI_CHX_CEI_NUMB, (Chptr->EltIndex));
}
else
{
LCD_CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.LcdChannel);
//DMA_LCD_CTRL
//----------
Temp=0;
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_MODE_POS, SYSDMA_DMA_LCD_CRTL_FRAME_MODE_NUMB, Chptr->FrameMode);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_IT_IE_POS, SYSDMA_DMA_LCD_CRTL_FRAME_IT_IE_NUMB, Chptr->FrameItIe);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_IE_POS, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_IE_NUMB, Chptr->BusErrorItIe);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_1_IT_COND_POS, SYSDMA_DMA_LCD_CRTL_FRAME_1_IT_COND_NUMB, Chptr->Frame1ItCond);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_2_IT_COND_POS, SYSDMA_DMA_LCD_CRTL_FRAME_2_IT_COND_NUMB, Chptr->Frame2ItCond);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_COND_POS, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_COND_NUMB, Chptr->BusErrorItCond);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_LCD_SOURCE_POS, SYSDMA_DMA_LCD_CRTL_LCD_SOURCE_NUMB, Chptr->LcdSrc);
DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD ,DMA_LCD_CTRL )=Temp;
//DMA_LCD_TOP_F1
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_TOP_F1_L), SYSDMA_DMA_LCD_TOP_F1_L_ADD_L_POS, SYSDMA_DMA_LCD_TOP_F1_L_ADD_L_NUMB, ((Chptr->LcdTopF1)&DMA_LCD_TOP_F1_L_MASK));
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_TOP_F1_U), SYSDMA_DMA_LCD_TOP_F1_U_ADD_H_POS, SYSDMA_DMA_LCD_TOP_F1_U_ADD_H_NUMB, ((Chptr->LcdTopF1)&DMA_LCD_TOP_F1_U_MASK)>>16);
//DMA_LCD_BOT_F1
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_BOT_F1_L), SYSDMA_DMA_LCD_BOT_F1_L_ADD_L_POS, SYSDMA_DMA_LCD_BOT_F1_L_ADD_L_NUMB, ((Chptr->LcdBotF1)&DMA_LCD_BOT_F1_L_MASK));
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_BOT_F1_U), SYSDMA_DMA_LCD_BOT_F1_U_ADD_H_POS, SYSDMA_DMA_LCD_BOT_F1_U_ADD_H_NUMB, ((Chptr->LcdBotF1)&DMA_LCD_BOT_F1_U_MASK)>>16);
//DMA_LCD_TOP_F2
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_TOP_F2_L), SYSDMA_DMA_LCD_TOP_F2_L_ADD_L_POS, SYSDMA_DMA_LCD_TOP_F2_L_ADD_L_NUMB, ((Chptr->LcdTopF2)&DMA_LCD_TOP_F2_L_MASK));
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_TOP_F2_U), SYSDMA_DMA_LCD_TOP_F2_U_ADD_H_POS, SYSDMA_DMA_LCD_TOP_F2_U_ADD_H_NUMB, ((Chptr->LcdTopF2)&DMA_LCD_TOP_F2_U_MASK)>>16);
//DMA_LCD_BOT_F2
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_BOT_F2_L), SYSDMA_DMA_LCD_BOT_F2_L_ADD_L_POS, SYSDMA_DMA_LCD_BOT_F2_L_ADD_L_NUMB, ((Chptr->LcdBotF2)&DMA_LCD_BOT_F2_L_MASK));
SetGroupBits(DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_BOT_F2_U), SYSDMA_DMA_LCD_BOT_F2_U_ADD_H_POS, SYSDMA_DMA_LCD_BOT_F2_U_ADD_H_NUMB, ((Chptr->LcdBotF2)&DMA_LCD_BOT_F2_U_MASK)>>16);
}
}
//-------------------------------------------------------------------------------
// 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -