📄 omap30_sysdma.c
字号:
//----------
SetGroupBits(DMA_ACC(NO_GLOB_REG, ChannelNumber, DMA_CCR), SYSDMA_DMA_CCR_CHX_EN_POS, SYSDMA_DMA_CCR_CHX_EN_NUMB, ENABLE);
}
}
//-------------------------------------------------------------------------------
// NAME : DMA_ReadGlobalReg
// DESCRIPTION : Read the contents of the global register
// PARAMETERS : None
// RETURN VALUE : None
//--------------------------------------------------------------------------------
void DMA_ReadGlobalReg(GLOBAL_REGISTER* Global)
{
UWORD32 Temp;
//DMA_CSDP
//----------
Temp = REG16(SYSDMA_DMA_GCR_ADD);
Global->Free = GetGroupBits(Temp, SYSDMA_DMA_GCR_FREE_POS, SYSDMA_DMA_GCR_FREE_NUMB);
Global->AutogatingOn = GetGroupBits(Temp, SYSDMA_DMA_GCR_AUTOGATING_ON_POS, SYSDMA_DMA_GCR_AUTOGATING_ON_NUMB);
}
//-------------------------------------------------------------------------------
// NAME : DMA_GetCondBitsInterrupt
// DESCRIPTION : Get back the condition bits 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_GetCondBitsInterrupt(UWORD16 ChannelNumber)
{
UWORD32 Temp;
if (ChannelNumber != DMA_CHANNEL_LCD)
{
CHANNEL_DESCRIPTOR* ChptrA;
CHANNEL_DESCRIPTOR* ChptrB;
ChptrA=&(SystemDma.DmaChannel[ChannelNumber]);
//DMA_CSR
//----------
Temp=DMA_ACC(NO_GLOB_REG, ChannelNumber, DMA_CSR);
ChptrA->TimeoutInt = GetGroupBits(Temp, SYSDMA_DMA_CSR_CHX_TOUT_POS, SYSDMA_DMA_CSR_CHX_TOUT_NUMB);
ChptrA->DropInt = GetGroupBits(Temp, SYSDMA_DMA_CSR_CHX_DROP_POS, SYSDMA_DMA_CSR_CHX_DROP_NUMB);
ChptrA->HalfFrameInt = GetGroupBits(Temp, SYSDMA_DMA_CSR_CHX_HALF_POS, SYSDMA_DMA_CSR_CHX_HALF_NUMB);
ChptrA->FrameInt = GetGroupBits(Temp, SYSDMA_DMA_CSR_CHX_FRAME_POS, SYSDMA_DMA_CSR_CHX_FRAME_NUMB);
ChptrA->LastFrameInt = GetGroupBits(Temp, SYSDMA_DMA_CSR_CHX_LAST_POS, SYSDMA_DMA_CSR_CHX_LAST_NUMB);
ChptrA->BlockInt = GetGroupBits(Temp, SYSDMA_DMA_CSR_CHX_BLOCK_POS, SYSDMA_DMA_CSR_CHX_BLOCK_NUMB);
if (ChannelNumber <= 2) // Cover concatenated interrupt status registers
{
ChptrB=&(SystemDma.DmaChannel[(ChannelNumber + 6)]);
ChptrB->TimeoutInt = GetGroupBits(Temp, (SYSDMA_DMA_CSR_CHX_TOUT_POS + 7), SYSDMA_DMA_CSR_CHX_TOUT_NUMB);
ChptrB->DropInt = GetGroupBits(Temp, (SYSDMA_DMA_CSR_CHX_DROP_POS + 7), SYSDMA_DMA_CSR_CHX_DROP_NUMB);
ChptrB->HalfFrameInt = GetGroupBits(Temp, (SYSDMA_DMA_CSR_CHX_HALF_POS + 7), SYSDMA_DMA_CSR_CHX_HALF_NUMB);
ChptrB->FrameInt = GetGroupBits(Temp, (SYSDMA_DMA_CSR_CHX_FRAME_POS + 7), SYSDMA_DMA_CSR_CHX_FRAME_NUMB);
ChptrB->LastFrameInt = GetGroupBits(Temp, (SYSDMA_DMA_CSR_CHX_LAST_POS + 7), SYSDMA_DMA_CSR_CHX_LAST_NUMB);
ChptrB->BlockInt = GetGroupBits(Temp, (SYSDMA_DMA_CSR_CHX_BLOCK_POS + 7), SYSDMA_DMA_CSR_CHX_BLOCK_NUMB);
}
}
else
{
LCD_CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.LcdChannel);
//DMA_LCD_CTRL
//----------
Temp = DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, SYSDMA_DMA_LCD_CRTL);
Chptr->Frame1ItCond = GetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_1_IT_COND_POS , SYSDMA_DMA_LCD_CRTL_FRAME_1_IT_COND_NUMB);
Chptr->Frame2ItCond = GetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_2_IT_COND_POS , SYSDMA_DMA_LCD_CRTL_FRAME_2_IT_COND_NUMB);
Chptr->BusErrorItCond = GetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_COND_POS, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_COND_NUMB);
// Clear the interrupt flags
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_1_IT_COND_POS, SYSDMA_DMA_LCD_CRTL_FRAME_1_IT_COND_NUMB, DISABLE);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_FRAME_2_IT_COND_POS, SYSDMA_DMA_LCD_CRTL_FRAME_2_IT_COND_NUMB, DISABLE);
SetGroupBits(Temp, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_COND_POS, SYSDMA_DMA_LCD_CRTL_BUS_ERROR_IT_COND_NUMB, DISABLE);
DMA_ACC(NO_GLOB_REG, DMA_CHANNEL_LCD, DMA_LCD_CTRL) = Temp;
}
}
//-------------------------------------------------------------------------------
// NAME : DMA_EnableIntFlags
// DESCRIPTION : Setup interrupt flags in the channel structure specified
// 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
// PARAMETERS : TimeoutIntEnable ENABLE or DISABLE
// DropIntEnable "
// HalfFrameIntEnable "
// FrameIntEnable "
// LastFrameIntEnable "
// BlockIntEnable "
// RETURN VALUE : IS_OK or NOT_OK if something fail
//--------------------------------------------------------------------------------
void DMA_EnableIntFlags( UWORD16 ChannelNumber,
UWORD32 TimeoutIntEnable,
UWORD32 DropIntEnable,
UWORD32 HalfFrameIntEnable,
UWORD32 FrameIntEnable,
UWORD32 LastFrameIntEnable,
UWORD32 BlockIntEnable)
{
CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.DmaChannel[ChannelNumber]);
//DMA Interrupt Flag Control
//---------------------------
Chptr->TimeoutIntEnable = TimeoutIntEnable;
Chptr->DropIntEnable = DropIntEnable;
Chptr->HalfFrameIntEnable = HalfFrameIntEnable;
Chptr->FrameIntEnable = FrameIntEnable;
Chptr->LastFrameIntEnable = LastFrameIntEnable;
Chptr->BlockIntEnable = BlockIntEnable;
}
//-------------------------------------------------------------------------------
// NAME : DMA_EnableLcdIntFlags
// DESCRIPTION : Setup interrupt flags in the channel structure specified
// PARAMETERS : FrameItIe ENABLE or DISABLE
// BusErrorItIe "
// RETURN VALUE : IS_OK or NOT_OK if something fail
//--------------------------------------------------------------------------------
void DMA_EnableLcdIntFlags(UWORD32 FrameItIe,
UWORD32 BusErrorItIe)
{
LCD_CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.LcdChannel);
//LCD Channel Interrupt Flag Control
//---------------------------
Chptr->FrameItIe = FrameItIe;
Chptr->BusErrorItIe = BusErrorItIe;
}
//-------------------------------------------------------------------------------
// NAME : DMA_LcdFrameMode
//
// DESCRIPTION : Setup lcd channel frame mode
//
// PARAMETERS : FrMode DMA_LCD_FRAMEMODE_ONEFRAME
// DMA_LCD_FRAMEMODE_TWOFRAME
//
// RETURN VALUE : IS_OK or NOT_OK if something fail
//
//--------------------------------------------------------------------------------
void DMA_LcdFrameMode(UWORD32 FrMode)
{
LCD_CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.LcdChannel);
//DMA FrameMode
//--------------------
Chptr->FrameMode = FrMode;
}
//-------------------------------------------------------------------------------
// NAME : DMA_LcdConfigPort
//
// DESCRIPTION : Setup lcd channel port configuration
//
// PARAMETERS : SrcPort DMA_LCD_SDRAM_SRC
// DMA_LCD_IMIF_SRC
//
// AddTop1 Start address of the source for the 1st frame
// AddBot1 End address of the source for the 1st frame
//
// AddTop2 Start address of the source for the 2nd frame
// AddBot2 End address of the source for the 2nd frame
//
// RETURN VALUE : IS_OK or NOT_OK if something fail
//
//--------------------------------------------------------------------------------
void DMA_LcdConfigPort(UWORD32 SrcPort,
UWORD32 AddTop1,
UWORD32 AddBot1,
UWORD32 AddTop2,
UWORD32 AddBot2)
{
LCD_CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.LcdChannel);
//DMA Source
//--------------------
Chptr->LcdSrc = SrcPort;
//DMA Addresses
//--------------------
Chptr->LcdTopF1 = AddTop1;
Chptr->LcdBotF1 = AddBot1;
Chptr->LcdTopF2 = AddTop2;
Chptr->LcdBotF2 = AddBot2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -