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

📄 mcsi.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
字号:
/******************************************************************************
            TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION           
                                                                             
   Property of Texas Instruments -- For  Unrestricted  Internal  Use  Only 
   Unauthorized reproduction and/or distribution is strictly prohibited.  This 
   product  is  protected  under  copyright  law  and  trade  secret law as an 
   unpublished work.  Created 1987, (C) Copyright 1997 Texas Instruments.  All 
   rights reserved.                                                            
                  
                                                           
   Filename         : mcsi.c

   Description      : MCSI driver

   Project          : Helen

   Author           :  smunsch@tif.ti.com  Sylvain Munsch.
   modifyed by for samson p-monteil@ti.com Patrice Monteil 
   Modified for Helen by Jean-Philippe Ulpiano : jp_ulpiano@ti.com
              

*******************************************************************************/
#include "mcsi.h" 



/******************************************************************************

  NAME     : MCSI_TestMcsiReg

  SYNOPSIS  : int MCSI_TestMcsiReg(int mcsi_base_address)

  DESCRIPTION  : Check read/write registers access 

  RETURN VALUE  : Return the result of the test OK or BAD
  
  PARAMETERS  : 

  LIMITATIONS  : 

******************************************************************************/
int MCSI_TestMcsiReg(int mcsi_base_address)
{
  int i, dataIoport, res=0;
  
/*---------------------------------------------------------------------
Check that the value of the control and status 
registers after H/W reset is correct   
--------------------------------------------------------------------*/ 

   dataIoport = MCSI_CONTROL_REG(mcsi_base_address); 
   if (dataIoport != 0x0000) { 
     res = 2; 
   } 
   dataIoport = MCSI_MAIN_PARAM_REG(mcsi_base_address); 
   if (dataIoport != 0x0000) { 
     res = 3; 
   } 
   dataIoport = MCSI_INTERRUPTS_REG(mcsi_base_address); 
   if (dataIoport != 0x0000) { 
     res = 4; 
   } 
   dataIoport = MCSI_CHANNEL_USED_REG(mcsi_base_address); 
   if (dataIoport != 0x0000) { 
     res = 5; 
   } 
   dataIoport = MCSI_OVER_CLOCK_REG(mcsi_base_address); 
   if (dataIoport != 0x0000) { 
   res = 6; 
   } 
   dataIoport = MCSI_CLOCK_FREQUENCY_REG(mcsi_base_address); 
   if (dataIoport != 0x0000) { 
   res = 7; 
   } 
   dataIoport = MCSI_STATUS_REG(mcsi_base_address); 
   if (dataIoport != 0x0000) { 
     res = 8; 
   } 
  


/*---------------------------------------------------------------------
Check that the value written to a control register can
be read back and is not reset after a S/W reset   
 --------------------------------------------------------------------*/ 
 MCSI_MAIN_PARAM_REG(mcsi_base_address)      = 0x0a10;      /* write the values */
 MCSI_INTERRUPTS_REG(mcsi_base_address)      = 0x0520;
 MCSI_CHANNEL_USED_REG(mcsi_base_address)    = 0x5a30;
 MCSI_OVER_CLOCK_REG(mcsi_base_address)      = 0x0330;
 MCSI_CLOCK_FREQUENCY_REG(mcsi_base_address) = 0x0630;
 MCSI_CONTROL_REG(mcsi_base_address)         = 0x0001;  
 MCSI_CONTROL_REG(mcsi_base_address)         = 0x0005;  

  /* read them back and check */

  dataIoport = MCSI_CONTROL_REG(mcsi_base_address);  
  if (dataIoport != 0x0005) {  
    res = 1;  
  }  
  
  dataIoport = MCSI_MAIN_PARAM_REG(mcsi_base_address);  
  if (dataIoport != 0x2a10) {  
    res = 9;  
  }  


  dataIoport = MCSI_INTERRUPTS_REG(mcsi_base_address); 
  if (dataIoport != 0x0520) { 
    res = 10; 
  } 
  dataIoport = MCSI_CHANNEL_USED_REG(mcsi_base_address); 
  if (dataIoport != 0x5a30) { 
    res = 11; 
  } 


  dataIoport = MCSI_OVER_CLOCK_REG(mcsi_base_address); 
  if (dataIoport != 0x0330) { 
    res = 12; 
  } 
  dataIoport = MCSI_CLOCK_FREQUENCY_REG(mcsi_base_address); 
  if (dataIoport != 0x0630) { 
    res = 13; 
  } 
  
  dataIoport = 0x0005;  
  dataIoport |= 0x0002;       /* S/W reset */
  MCSI_CONTROL_REG(mcsi_base_address) = dataIoport; 
  dataIoport = 0x0004;  
  dataIoport &= ~0x0002;  
  MCSI_CONTROL_REG(mcsi_base_address) = dataIoport; 

  dataIoport = MCSI_CONTROL_REG(mcsi_base_address);      /* read values after S/W reset and check */
  if (dataIoport != 0x0000) { 
    res = 14; 
  } 
  dataIoport = MCSI_MAIN_PARAM_REG(mcsi_base_address); 
  if (dataIoport != 0x2a10) { 
    res = 15; 
  } 
  dataIoport = MCSI_INTERRUPTS_REG(mcsi_base_address); 
  if (dataIoport != 0x0520) { 
    res = 16; 
  } 
  dataIoport = MCSI_CHANNEL_USED_REG(mcsi_base_address); 
  if (dataIoport != 0x5a30) { 
    res = 17; 
  } 
  dataIoport = MCSI_OVER_CLOCK_REG(mcsi_base_address); 
  if (dataIoport != 0x0330) { 
    res = 18; 
  } 
  dataIoport = MCSI_CLOCK_FREQUENCY_REG(mcsi_base_address); 
  if (dataIoport != 0x0630) { 
    res = 19; 
  } 
  
  if (res)
    return res;
  
  return 1;
}

/*------------------------------------------------------------------------------- 

 NAME : MCSI_WriteChannel

 SYNOPSIS : void MCSI_WriteChannel(int mcsi_base_address,int channel, int data, int nb_bits)

 DESCRIPTION : Write to an MCSI channel

 PARAMETERS : 

 RETURN VALUE : 

 LIMITATIONS : 

-----------------------------------------------------------------------------*/ 
void MCSI_WriteChannel(int mcsi_base_address,int channel, int data, int nb_bits) 
{ 
  data = data << (16-nb_bits);
 
  switch(channel)
  {
     case 0:  MCSI_TX0_REG(mcsi_base_address) = data;    break;
     case 1:  MCSI_TX1_REG(mcsi_base_address) = data;    break;
     case 2:  MCSI_TX2_REG(mcsi_base_address) = data;    break;
     case 3:  MCSI_TX3_REG(mcsi_base_address) = data;    break;
     case 4:  MCSI_TX4_REG(mcsi_base_address) = data;    break;
     case 5:  MCSI_TX5_REG(mcsi_base_address) = data;    break;
     case 6:  MCSI_TX6_REG(mcsi_base_address) = data;    break;
     case 7:  MCSI_TX7_REG(mcsi_base_address) = data;    break;
     case 8:  MCSI_TX8_REG(mcsi_base_address) = data;    break;
     case 9:  MCSI_TX9_REG(mcsi_base_address) = data;    break;
     case 10:  MCSI_TX10_REG(mcsi_base_address) = data;    break;
     case 11:  MCSI_TX11_REG(mcsi_base_address) = data;    break;
     case 12:  MCSI_TX12_REG(mcsi_base_address) = data;    break;
     case 13:  MCSI_TX13_REG(mcsi_base_address) = data;    break;
     case 14:  MCSI_TX14_REG(mcsi_base_address) = data;    break;
     case 15:  MCSI_TX15_REG(mcsi_base_address) = data;    break;
  }
}


/*------------------------------------------------------------------------------- 

 NAME : MCSI_ReadChannel

 SYNOPSIS : int MCSI_ReadChannel(int mcsi_base_address, int channel, int nb_bits) 

 DESCRIPTION : Read from an MCSI channel

 PARAMETERS : 

 RETURN VALUE : 

 LIMITATIONS : 

-----------------------------------------------------------------------------*/ 
int MCSI_ReadChannel(int mcsi_base_address, int channel, int nb_bits) 
{ 
  int dataIoport;
  switch(channel) {
     case 0:  dataIoport =  MCSI_RX0_REG(mcsi_base_address);    break;
     case 1:  dataIoport =  MCSI_RX1_REG(mcsi_base_address);    break;
     case 2:  dataIoport =  MCSI_RX2_REG(mcsi_base_address);    break;
     case 3:  dataIoport =  MCSI_RX3_REG(mcsi_base_address);    break;
     case 4:  dataIoport =  MCSI_RX4_REG(mcsi_base_address);    break;
     case 5:  dataIoport =  MCSI_RX5_REG(mcsi_base_address);    break;
     case 6:  dataIoport =  MCSI_RX6_REG(mcsi_base_address);    break;
     case 7:  dataIoport =  MCSI_RX7_REG(mcsi_base_address);    break;
     case 8:  dataIoport =  MCSI_RX8_REG(mcsi_base_address);    break;
     case 9:  dataIoport =  MCSI_RX9_REG(mcsi_base_address);    break;
     case 10:  dataIoport =  MCSI_RX10_REG(mcsi_base_address);    break;
     case 11:  dataIoport =  MCSI_RX11_REG(mcsi_base_address);    break;
     case 12:  dataIoport =  MCSI_RX12_REG(mcsi_base_address);    break;
     case 13:  dataIoport =  MCSI_RX13_REG(mcsi_base_address);    break;
     case 14:  dataIoport =  MCSI_RX14_REG(mcsi_base_address);    break;
     case 15:  dataIoport =  MCSI_RX15_REG(mcsi_base_address);    break;
     }
  dataIoport = dataIoport >> (16-nb_bits);
  return dataIoport;
}

/*------------------------------------------------------------------------------- 

 NAME : MCSI_ReadAllChannels

 SYNOPSIS : void MCSI_ReadAllChannels(int mcsi_base_address, UWORD16 *ptr_rcv_area)

 DESCRIPTION : Read from an MCSI channel

 PARAMETERS : 

 RETURN VALUE : 

 LIMITATIONS : 

-----------------------------------------------------------------------------*/ 
void MCSI_ReadAllChannels(int mcsi_base_address, UWORD16 *ptr_rcv_area) 
{ 
  int dataIoport;

  dataIoport =  MCSI_RX0_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX1_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX2_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX3_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX4_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX5_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX6_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX7_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX8_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX9_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX10_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX11_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX12_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX13_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX14_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;

  dataIoport =  MCSI_RX15_REG(mcsi_base_address);
  * ptr_rcv_area++ =  dataIoport;
}

/*------------------------------------------------------------------------------- 

 NAME : MCSI_ReadTxMem

 SYNOPSIS : int MCSI_ReadTxMem(int mcsi_base_address, int channel, int nb_bits)

 DESCRIPTION : Read from Tx memory area

 PARAMETERS : 

 RETURN VALUE : 

 LIMITATIONS : 

-----------------------------------------------------------------------------*/ 
int MCSI_ReadTxMem(int mcsi_base_address, int channel, int nb_bits) 
{ 
  int dataIoport;

  switch(channel) {
     case 0:  dataIoport =  MCSI_TX0_REG(mcsi_base_address);    break;
     case 1:  dataIoport =  MCSI_TX1_REG(mcsi_base_address);    break;
     case 2:  dataIoport =  MCSI_TX2_REG(mcsi_base_address);    break;
     case 3:  dataIoport =  MCSI_TX3_REG(mcsi_base_address);    break;
     case 4:  dataIoport =  MCSI_TX4_REG(mcsi_base_address);    break;
     case 5:  dataIoport =  MCSI_TX5_REG(mcsi_base_address);    break;
     case 6:  dataIoport =  MCSI_TX6_REG(mcsi_base_address);    break;
     case 7:  dataIoport =  MCSI_TX7_REG(mcsi_base_address);    break;
     case 8:  dataIoport =  MCSI_TX8_REG(mcsi_base_address);    break;
     case 9:  dataIoport =  MCSI_TX9_REG(mcsi_base_address);    break;
     case 10:  dataIoport =  MCSI_TX10_REG(mcsi_base_address);    break;
     case 11:  dataIoport =  MCSI_TX11_REG(mcsi_base_address);    break;
     case 12:  dataIoport =  MCSI_TX12_REG(mcsi_base_address);    break;
     case 13:  dataIoport =  MCSI_TX13_REG(mcsi_base_address);    break;
     case 14:  dataIoport =  MCSI_TX14_REG(mcsi_base_address);    break;
     case 15:  dataIoport =  MCSI_TX15_REG(mcsi_base_address);    break;
     }

  dataIoport = dataIoport >> (16-nb_bits);

  return dataIoport;
}


/*------------------------------------------------------------------------------- 

 NAME : MCSI_enable

 SYNOPSIS : void MCSI_enable(int mcsi_base_address)

 DESCRIPTION : Enable MCSI clock

 PARAMETERS : 

 RETURN VALUE : 

 LIMITATIONS : 

-----------------------------------------------------------------------------*/ 

void MCSI_enable(int mcsi_base_address)
{
  MCSI_CONTROL_REG(mcsi_base_address) |= 0x01;   
}


/*------------------------------------------------------------------------------- 

 NAME : MCSI_disable

 SYNOPSIS : void MCSI_disable(int mcsi_base_address)

 DESCRIPTION : Disable MCSI clock

 PARAMETERS : 

 RETURN VALUE : 

 LIMITATIONS : 

-----------------------------------------------------------------------------*/ 

void MCSI_disable(int mcsi_base_address)
{
  MCSI_CONTROL_REG(mcsi_base_address) &= 0xFE;   
}

⌨️ 快捷键说明

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