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

📄 omap30_sysdma.c

📁 有关于USB的一些主机端驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
     //----------
     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 + -