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

📄 gdma.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 3 页
字号:
// PARAMETERS   : None
//
// RETURN VALUE : None
//
//--------------------------------------------------------------------------------
void DMA_ReadGlobalReg(GLOBAL_REGISTER* Global)
{
UWORD32 Temp;
	//DMA_CSDP
	//----------
    Temp=DMA_ACC(GLOB_REG, 0 ,DMA_GCR   );
    Global->Free          =     GetGroupBits( Temp     ,DMA_FREE_POS        ,DMA_FREE_NUMB                      );
    Global->AutogatingOn  =     GetGroupBits( Temp     ,DMA_AUTOGATE_POS    ,DMA_AUTOGATE_NUMB                  );
}

//-------------------------------------------------------------------------------
// NAME         : DMA_ReadChannel       
//
// DESCRIPTION  : Copy the DMA registers in the structure
//
// 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_ReadChannel(UWORD16 ChannelNumber)
{
UWORD32 Temp;

  if (ChannelNumber != DMA_CHANNEL_LCD)
    {
    CHANNEL_DESCRIPTOR* Chptr;
    Chptr=&(SystemDma.DmaChannel[ChannelNumber]);

	//DMA_CSDP
	//----------
    Temp=DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSDP   );
    Chptr->TypeSize          =     GetGroupBits( Temp     ,DMA_TYPE_SIZE_POS        ,DMA_TYPE_SIZE_NUMB                      );
    Chptr->SrcPort          =     GetGroupBits( Temp     ,DMA_SRC_PORT_POS         ,DMA_SRC_PORT_NUMB                       );
    Chptr->DestPort         =     GetGroupBits( Temp     ,DMA_DEST_PORT_POS        ,DMA_DEST_PORT_NUMB                      );
    Chptr->SrcPack          =     GetGroupBits( Temp     ,DMA_SRC_PACK_POS         ,DMA_SRC_PACK_NUMB                       );
    Chptr->DestPack         =     GetGroupBits( Temp     ,DMA_DEST_PACK_POS        ,DMA_DEST_PACK_NUMB                      );
    Chptr->SrcBurst         =     GetGroupBits( Temp     ,DMA_SRC_BURST_POS        ,DMA_SRC_BURST_NUMB                      );
    Chptr->DestBurst        =     GetGroupBits( Temp     ,DMA_DEST_BURST_POS       ,DMA_DEST_BURST_NUMB                     );

	//DMA_CCR
	//----------
    Temp=DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CCR    );
    Chptr->SyncNumb        =     GetGroupBits( Temp     ,DMA_SYNCNUMB_POS         ,DMA_SYNCNUMB_NUMB                );
    Chptr->SyncPr          =     GetGroupBits( Temp     ,DMA_SYNCPR_POS           ,DMA_SYNCPR_NUMB                  );
    Chptr->EventSync       =     GetGroupBits( Temp     ,DMA_FS_POS               ,DMA_FS_NUMB                      );
    Chptr->Priority        =     GetGroupBits( Temp     ,DMA_PRIORITY_POS         ,DMA_PRIORITY_NUMB                );
    Chptr->Enable          =     GetGroupBits( Temp     ,DMA_ENABBLE_POS          ,DMA_ENABLE_NUMB                  );
    Chptr->Autoinit        =     GetGroupBits( Temp     ,DMA_AUTOINIT_POS         ,DMA_AUTOINIT_NUMB                );
    Chptr->Fifofush        =     GetGroupBits( Temp     ,DMA_FLUSH_POS            ,DMA_FLUSH_NUMB                   );
    Chptr->SrcAddressMode  =     GetGroupBits( Temp     ,DMA_SRC_AMODE_POS        ,DMA_SRC_AMODE_NUMB               );
    Chptr->DestAddressMode =     GetGroupBits( Temp     ,DMA_DEST_AMODE_POS       ,DMA_DEST_AMODE_NUMB              );

	//DMA_CICR
	//----------
    Temp=DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CICR    );
    Chptr->TimeoutIntEnable     = GetGroupBits( Temp     ,DMA_TOUTIE_POS           ,DMA_TOUTIE_NUMB              );
    Chptr->DropIntEnable        = GetGroupBits( Temp     ,DMA_DROPIE_POS           ,DMA_DROPIE_NUMB              );
    Chptr->HalfFrameIntEnable   = GetGroupBits( Temp     ,DMA_HALFIE_POS           ,DMA_HALFIE_NUMB              );
    Chptr->FrameIntEnable       = GetGroupBits( Temp     ,DMA_FRAMEIE_POS          ,DMA_FRAMEIE_NUMB             );
    Chptr->LastFrameIntEnable   = GetGroupBits( Temp     ,DMA_LASTIE_POS           ,DMA_LASTIE_NUMB              );
    Chptr->BlockIntEnable       = GetGroupBits( Temp     ,DMA_BLOCKIE_POS          ,DMA_BLOCKIE_NUMB             );
			        
	//DMA_CSR
	//----------
    Temp=DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSR    );
    Chptr->TimeoutInt      =   GetGroupBits( Temp     ,DMA_TOUT_POS             ,DMA_TOUT_NUMB                 );
    Chptr->DropInt         =   GetGroupBits( Temp     ,DMA_DROP_POS             ,DMA_DROP_NUMB                 );
    Chptr->HalfFrameInt    =   GetGroupBits( Temp     ,DMA_HALF_POS             ,DMA_HALF_NUMB                 );
    Chptr->FrameInt        =   GetGroupBits( Temp     ,DMA_FRAME_POS            ,DMA_FRAME_NUMB                );
    Chptr->LastFrameInt    =   GetGroupBits( Temp     ,DMA_LASTFRAME_POS        ,DMA_LASTFRAME_NUMB            );
    Chptr->BlockInt        =   GetGroupBits( Temp     ,DMA_BLOCK_POS            ,DMA_BLOCK_NUMB                );

	//DMA_CSSA_L and DMA_CSSA_U
	//--------------------------
    Chptr->SrcAdd          =  ( GetGroupBits(DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSSA_L )     ,DMA_CSSA_L_POS           ,DMA_CSSA_L_NUMB))  |
                             ((GetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CSSA_U )    ,DMA_CSSA_U_POS           ,DMA_CSSA_U_NUMB          ))<<16);

	//DMA_CDSA_L and DMA_CDSA_U
	//--------------------------
    Chptr->DestAdd          =  ( GetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CDSA_L )     ,DMA_CDSA_L_POS           ,DMA_CDSA_L_NUMB )) |
                               ((GetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CDSA_U )     ,DMA_CDSA_U_POS           ,DMA_CDSA_U_NUMB        ))<< 16);

	//DMA_CEN
	//----------
    Chptr->EltNumber        =  GetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CEN    )     ,DMA_CEN_POS              ,DMA_CEN_NUMB );

	//DMA_CFN
	//----------
    Chptr->FrameNumber      =  GetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CFN    )     ,DMA_CFN_POS              ,DMA_CFN_NUMB );

	//DMA_CFI
	//----------
    Chptr->FrameIndex       =  GetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CFI   )      ,DMA_CFI_POS              ,DMA_CFI_NUMB );

	//DMA_CEI
	//----------
    Chptr->EltIndex         =  GetGroupBits( DMA_ACC(NO_GLOB_REG,Chptr->ChannelNumb  ,DMA_CEI )        ,DMA_CEI_POS              ,DMA_CEI_NUMB );
    }
  else
    {
    LCD_CHANNEL_DESCRIPTOR* Chptr;
       Chptr=&(SystemDma.LcdChannel);
   	//DMA_LCD_CTRL
    	//----------
        Temp=DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_CTRL   );
        Chptr->FrameMode       = GetGroupBits( Temp     ,DMA_LCD_FRAMEMODE_POS    ,DMA_LCD_FRAMEMODE_NUMB      );
        Chptr->FrameItIe         = GetGroupBits( Temp     ,DMA_LCD_FRAMEIE_POS      ,DMA_LCD_FRAMEIE_NUMB        );
        Chptr->BusErrorItIe      = GetGroupBits( Temp     ,DMA_LCD_BUSERROR_POS     ,DMA_LCD_BUSERROR_NUMB       );
        Chptr->Frame1ItCond    = GetGroupBits( Temp     ,DMA_LCD_FRAME1IT_POS     ,DMA_LCD_FRAME1IT_NUMB       );
        Chptr->Frame2ItCond    = GetGroupBits( Temp     ,DMA_LCD_FRAME2IT_POS     ,DMA_LCD_FRAME2IT_NUMB       );
        Chptr->BusErrorItCond  = GetGroupBits( Temp     ,DMA_LCD_BUSERRORIT_POS   ,DMA_LCD_BUSERRORIT_NUMB     );
        Chptr->LcdSrc             = GetGroupBits( Temp     ,DMA_DEST_BURST_POS       ,DMA_DEST_BURST_NUMB         );
    
    	//DMA_LCD_TOP_F1
    	//----------
        Chptr->LcdTopF1           =  (GetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_TOP_F1_U )     ,DMA_LCD_TOP_F1_U_POS      ,DMA_LCD_TOP_F1_U_NUMB      )<<16) | 
	                          (GetGroupBits( 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 ));

    	//DMA_LCD_BOT_F1
    	//----------
        Chptr->LcdBotF1           =  (GetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_BOT_F1_U )     ,DMA_LCD_BOT_F1_U_POS      ,DMA_LCD_BOT_F1_U_NUMB      )<<16) | 
	                          (GetGroupBits( 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 ));

    	//DMA_LCD_TOP_F2
    	//----------
        Chptr->LcdTopF2           =  (GetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_TOP_F2_U )     ,DMA_LCD_TOP_F2_U_POS      ,DMA_LCD_TOP_F2_U_NUMB      )<<16) | 
	                          (GetGroupBits( 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 ));

    	//DMA_LCD_BOT_F2
    	//----------
        Chptr->LcdBotF2           =  (GetGroupBits( DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_BOT_F2_U )     ,DMA_LCD_BOT_F2_U_POS      ,DMA_LCD_BOT_F2_U_NUMB      )<<16) | 
	                          (GetGroupBits( 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 ));
 
    }
}

//-------------------------------------------------------------------------------
// 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
//
//--------------------------------------------------------------------------------
UWORD32 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     ,DMA_TOUT_POS             ,DMA_TOUT_NUMB                 );
    ChptrA->DropInt         =   GetGroupBits( Temp     ,DMA_DROP_POS             ,DMA_DROP_NUMB                 );
    ChptrA->HalfFrameInt    =   GetGroupBits( Temp     ,DMA_HALF_POS             ,DMA_HALF_NUMB                 );
    ChptrA->FrameInt        =   GetGroupBits( Temp     ,DMA_FRAME_POS            ,DMA_FRAME_NUMB                );
    ChptrA->LastFrameInt    =   GetGroupBits( Temp     ,DMA_LASTFRAME_POS        ,DMA_LASTFRAME_NUMB            );
    ChptrA->BlockInt        =   GetGroupBits( Temp     ,DMA_BLOCK_POS            ,DMA_BLOCK_NUMB                );

    if ((ChannelNumber==6)||(ChannelNumber==7)||(ChannelNumber==8))
        Temp=Temp>>7;
    if (ChannelNumber <= 2) // Cover concatenated interrupt status registers
      {
      ChptrB=&(SystemDma.DmaChannel[(ChannelNumber + 6)]);
      ChptrB->TimeoutInt      =   GetGroupBits( Temp     ,(DMA_TOUT_POS + 7)     ,DMA_TOUT_NUMB                 );
      ChptrB->DropInt         =   GetGroupBits( Temp     ,(DMA_DROP_POS + 7)     ,DMA_DROP_NUMB                 );
      ChptrB->HalfFrameInt    =   GetGroupBits( Temp     ,(DMA_HALF_POS + 7)     ,DMA_HALF_NUMB                 );
      ChptrB->FrameInt        =   GetGroupBits( Temp     ,(DMA_FRAME_POS + 7)    ,DMA_FRAME_NUMB                );
      ChptrB->LastFrameInt    =   GetGroupBits( Temp     ,(DMA_LASTFRAME_POS + 7),DMA_LASTFRAME_NUMB            );
      ChptrB->BlockInt        =   GetGroupBits( Temp     ,(DMA_BLOCK_POS + 7)    ,DMA_BLOCK_NUMB                );
      }
    }
  else
    {
    LCD_CHANNEL_DESCRIPTOR* Chptr;
       Chptr=&(SystemDma.LcdChannel);
    	//DMA_LCD_CTRL
    	//----------
        Temp=DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_CTRL   );
        Chptr->Frame1ItCond    = GetGroupBits( Temp     ,DMA_LCD_FRAME1IT_POS     ,DMA_LCD_FRAME1IT_NUMB       );
        Chptr->Frame2ItCond    = GetGroupBits( Temp     ,DMA_LCD_FRAME2IT_POS     ,DMA_LCD_FRAME2IT_NUMB       );
        Chptr->BusErrorItCond  = GetGroupBits( Temp     ,DMA_LCD_BUSERRORIT_POS   ,DMA_LCD_BUSERRORIT_NUMB     );

	// Clear the interrupt flags
        SetGroupBits( Temp     ,DMA_LCD_FRAME1IT_POS     ,DMA_LCD_FRAME1IT_NUMB      ,    DISABLE );
        SetGroupBits( Temp     ,DMA_LCD_FRAME2IT_POS     ,DMA_LCD_FRAME2IT_NUMB      ,    DISABLE );
        SetGroupBits( Temp     ,DMA_LCD_BUSERRORIT_POS   ,DMA_LCD_BUSERRORIT_NUMB    ,    DISABLE  );
	DMA_ACC(NO_GLOB_REG,DMA_CHANNEL_LCD  ,DMA_LCD_CTRL   )=Temp;
    }
return(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_ConfigInt 
//
// DESCRIPTION  : Configure the DMA interrupts prior to transfer
//
// PARAMETERS  :     ChannelNumb      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
//
// RETURN VALUE : None
//
//-------------------------------------------------------------------------------- 
void DMA_ConfigInt(UWORD16 ChannelNumb) 
{
//-----------------------------------------------------
// Initialize ARM Interrupt Handler               
//-----------------------------------------------------
  switch(ChannelNumb)
  {
    case (DMA_CHANNEL_0) : // Physical channel 0, Logical channel 0
    {
      INTH_InitLevel (INTH_FIQNIRQ_DMA_CH0,        
                      INTH_IRQ, // InterruptKind Irq or Fiq
                      INTH_FIQNIRQ_DMA_CH0, // priority
                      INTH_LOW_LEVEL_SENSITIVE); // type level or edge
      // Enable IRQ CH0
      INTH_EnableOneIt(INTH_FIQNIRQ_DMA_CH0);

      break;
    }

⌨️ 快捷键说明

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