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

📄 gdmatest_omap32.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 5 页
字号:
                      rtn_status = NOT_OK;
                      break;
                      }
                    else if ((UWORD8)(*MemPtr) != (UWORD8)(DMAT_GeneratePattern(Chptr->Pattern,i/4)>>24))
                      {
                      DMAT_SpyWriteFailResults( ChannelNumber, i/4, (0x0000FFFF & (*MemPtr)), 
                                                  (0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i/4)>>24)));
                      rtn_status = NOT_OK;
                      break;
                      }
                    if ((i % 4) != 0)  // Then end of element 
                      {
                      if ((((i/4)+1)%Chptr->EltNumber)==0) // Then end of frame 
                        {
                        MemPtr += Chptr->FrameIndex;
                        }
                      else
                        {
                        MemPtr += Chptr->EltIndex;
                        }
                      }
                    else
                      {
                      MemPtr += 1;
                      }
                    }
                  break;
                  }  // End of case DMA_TYPE_32_BITS
 
                case DMA_TYPE_16_BITS:
                  {
                  UWORD8* MemPtr;
                  for (i = 0; i < (BlockSize * 2); i++)
                    {
                    if (i == 0)
                      {
                      MemPtr = (UWORD8*)Address;
                      }
                    if (((UWORD8)(*MemPtr)) != (UWORD8)DMAT_GeneratePattern(Chptr->Pattern,i/2))
                      {
                      DMAT_SpyWriteFailResults( ChannelNumber, i/2, (0x0000FFFF & (*MemPtr)), 
                                                  (0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i/2))));
                      rtn_status = NOT_OK;
                      break;
                      }
                    else if (((UWORD8)(*MemPtr)) != (UWORD8)(DMAT_GeneratePattern(Chptr->Pattern,i/2)>>8))
                      {
                      DMAT_SpyWriteFailResults( ChannelNumber, i/2, (0x0000FFFF & (*MemPtr)), 
                                                  (0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i/2)>>8)));
                      rtn_status = NOT_OK;
                      break;
                      }
                    if ((i % 2) != 0)  // Then end of element 
                      {
                      if ((((i/2)+1)%Chptr->EltNumber)==0) // Then end of frame 
                        {
                        MemPtr += Chptr->FrameIndex;
                        }
                      else
                        {
                        MemPtr += Chptr->EltIndex;
                        }
                      }
                    else
                      {
                      MemPtr += 1;
                      }
                    }
                  break;
                  }  // End of case DMA_TYPE_16_BITS

                case DMA_TYPE_8_BITS:
                  {
                  UWORD8* MemPtr;
                  for (i = 0; i < BlockSize; i++)
                    {
                    if (i == 0)
                      {
                      MemPtr = (UWORD8*)Address;
                      }
                    if (((UWORD8)(*MemPtr)) != (UWORD8)DMAT_GeneratePattern(Chptr->Pattern,i))
                      {
                      DMAT_SpyWriteFailResults( ChannelNumber, i, (0x0000FFFF & (*MemPtr)), 
                                                  (0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
                      rtn_status = NOT_OK;
                      }
                    if (((i+1)%Chptr->EltNumber)==0)
                      {
                      MemPtr += Chptr->FrameIndex;
                      }
                    else
                      {
                      MemPtr += Chptr->EltIndex;
                      }
                    }
                  break;
                  }  // End of case DMA_TYPE_8_BITS
                }  // End of switch(Chptr->TypeSize)
              break;
              }  // End of case : VERIFY_MEM
            }  // End of switch(MemMode)
          break;
          }  // End of case DMA_ADD_DOUBINDEX
        }//end total switch
    return((BOOL)rtn_status);
    }
  else
    {
    return((BOOL)rtn_status);
    }
}

//-------------------------------------------------------------------------------
// NAME         : DMATEST_Transfer_OMAP32       
//
// DESCRIPTION  : Prepare the data in the source and the destination of the DMA transfer
//                then launch the transfer.
//
// 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_9   
//                                    DMA_CHANNEL_10   
//                                    DMA_CHANNEL_11   
//                                    DMA_CHANNEL_12   
//                                    DMA_CHANNEL_13   
//                                    DMA_CHANNEL_14   
//                                    DMA_CHANNEL_15   
//                                    DMA_CHANNEL_LCD_OMAP32   
//
// RETURN VALUE : IS_OK or NOT_OK if something fail
//
//--------------------------------------------------------------------------------
BOOL DMAT_Transfert_OMAP32( UWORD16 ChannelNumber )
{
UWORD16 Counter=0;
#define UP_COUNT_LIMIT  2 * (Chptr->EltNumber) * (Chptr->FrameNumber)

  if (ChannelNumber != DMA_CHANNEL_LCD_OMAP32)
    {
    CHANNEL_DESCRIPTOR_OMAP32* Chptr;
    Chptr=&(SystemDma_omap32.DmaChannel[ChannelNumber]);

    DMA_Omap32SetupChannel(ChannelNumber);  

    DMA_Omap32EnableChannel(ChannelNumber);  

    // wait until the transfer is completed 
    while ((Chptr->Enable == ENABLE) AND (Counter < UP_COUNT_LIMIT)) 
      {
      Counter++;
      }

    if (Counter >= UP_COUNT_LIMIT)
      {
      RES_Set(DMA_TRANSFERT_FAIL);
      RES_Set(START_ARRAY_DATA);
      RES_Set(Counter);
      RES_Set(UP_COUNT_LIMIT);
      RES_Set(END_ARRAY_DATA);
      return((BOOL)NOT_OK);
      }
    else
      {
      // Check that data transfered are correct
      return(DMAT_InitializeOrVerifyData_OMAP32(ChannelNumber, VERIFY_MEM));
      }
    }
  else
    {
    return((BOOL)IS_OK);
    }
}

//-------------------------------------------------------------------------------
// NAME         : DMAT_ConfigPort_OMAP32       
//
// DESCRIPTION  : Setup port configuration involved with data in the 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_9   
//                                    DMA_CHANNEL_10   
//                                    DMA_CHANNEL_11   
//                                    DMA_CHANNEL_12   
//                                    DMA_CHANNEL_13   
//                                    DMA_CHANNEL_14   
//                                    DMA_CHANNEL_15   
//
//                   SrcPort          
//                   DMA_EMIFF              
//                   DMA_EMIFS              
//                   DMA_OCPT1              
//                   DMA_RHEA               
//                   DMA_OCPT2              
//                   DMA_RHEA_API           
//                                    
//                   SrcAdd           Address of the source
//
//                   DestPort         see SrcPort
//
//                   DestAdd          Address of the destination
//
// RETURN VALUE : IS_OK or NOT_OK if something fail
//
//--------------------------------------------------------------------------------
void DMAT_ConfigPort_OMAP32( UWORD32 ChannelNumber,
                         UWORD32 SrcPort,
                         UWORD32 SrcAdd,
                         UWORD32 DestPort,
                         UWORD32 DestAdd)
{
CHANNEL_DESCRIPTOR_OMAP32* Chptr;

  if (ChannelNumber == DMA_CHANNEL_LCD_OMAP32)
    {
     return;
    }

    Chptr=&(SystemDma_omap32.DmaChannel[ChannelNumber]);
     //DMA Channel Number
     //--------------------
     Chptr->ChannelNumb = ChannelNumber;
                
     //DMA Source
     //--------------------
     Chptr->SrcPort = SrcPort;
     Chptr->SrcAdd = SrcAdd;

     //DMA Destination
     //--------------------
     Chptr->DestPort = DestPort;
     Chptr->DestAdd = DestAdd;
}
//-------------------------------------------------------------------------------
BOOL DMAT_InitWithPattern_BURST( UWORD16 ChannelNumber ,
                              UWORD16  Pattern,
			      //UWORD8   Autogating_on,
			      //UWORD8   Free,
                              UWORD8   TypeSize,
                              UWORD8   SrcBurst,
                              UWORD8   DestBurst,
                              UWORD8   SyncNumb,
                              UWORD8   EventSync,
                              UWORD8   Priority,
                              UWORD8   Autoinit,
                              UWORD8   OMAP31Disable,
                              UWORD8   SrcAddressMode,
                              UWORD8   DestAddressMode,
                              UWORD16  EltNumber,
                              UWORD16  FrameNumber,
                              UWORD16  EltIndex,
                              UWORD16  FrameIndex,
                              UWORD16  DestElementIndex,
                              UWORD8   ConstantFillEnable,
                              UWORD8   TransparentEnable,
                              UWORD8   BlockSynchronizationEnable,
			      UWORD8   PacketSizecsfi,
                              UWORD8   LogicalChannelType,
                              UWORD8   LogicalChannelInterleave)
{
CHANNEL_DESCRIPTOR_OMAP32* Chptr;

 Chptr=&(SystemDma_omap32.DmaChannel[ChannelNumber]);
 Chptr->Pattern = Pattern;
 
                //DMA_GCR
		//--------------------
		//Chptr->AutogatingOn = Autogating_on;
 		//Chptr->Free = Free;
		 
                //DMA_CSDP
                //--------------------
                Chptr->TypeSize = TypeSize;
               
                
                Chptr->SrcBurst = SrcBurst;
                Chptr->DestBurst = DestBurst;
                
                //DMA_CCR
                //-----------------------
                Chptr->SyncNumb = SyncNumb;
                Chptr->EventSync = EventSync;//fs
                Chptr->Priority = Priority;
                Chptr->Autoinit = Autoinit;
                Chptr->OMAP31Disable = OMAP31Disable;
                
                Chptr->SrcAddressMode = SrcAddressMode;
                Chptr->DestAddressMode = DestAddressMode;
                
                //DMA_CEN 
                //----------------------
                Chptr->EltNumber = EltNumber;
                
                //DMA_CFN 
                //----------------------
                Chptr->FrameNumber = FrameNumber;
                
                //DMA_CEI 
                //----------------------
                Chptr->EltIndex = EltIndex;
                
                //DMA_CFI 
                //----------------------
                Chptr->FrameIndex = FrameIndex;

                //DMA_CDEI 
                //----------------------
                Chptr->DEltIndex = DestElementIndex;

⌨️ 快捷键说明

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