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

📄 mx21_max.c

📁 MX21_InitCodeLib.rar freescale mx21系列ARM芯片9328的WINCE5.0下初始化代码
💻 C
字号:
/**********************************************************************
*
*         (C) COPYRIGHT 2004 FREESCALE, INC.
*         ALL RIGHTS RESERVED
*
*
*     Group/Division: WMSG/MMDO
*
*    Description	: 
*
*     Related Specifications:
*
*     Errata:
*
*     File Name: MX21_MAX.c
*     Revision Number: 0.1
*     Author(s): Sharad Kumar
*     Date created: 30Apr2004
*     Revision History:
*        Date      Rev     Description
*        ----      ---     -----------
*        30Apr2004  0.1     First Draft
*
**********************************************************************/
#include "MX21_MAX.h"


//---------------------------------------------------
// configure master priority for a single MAX Slave port,
// MAX_SLV0_MPR0 - MAX_SLV3_MPR3. Specify the MAX slave port 
// as the first argument, and a priority list of masters as the
// second parameter. Refer to the  typedef declaration for 
// max_slaves and max_masters
//--------------------------------------------------- 
void
MAX_ConfigSlv(max_slaves   slave,    // Max slave port id
              max_masters* master) 	 // Max slave master priority
{									 // for slave port
	
	int _priority;
	
	_priority = (master[0] & MAX_MSTR_MASK) << MAX_MSTR0_OFFSET   |
                (master[1] & MAX_MSTR_MASK) << MAX_MSTR1_OFFSET   |	              
                (master[2] & MAX_MSTR_MASK) << MAX_MSTR2_OFFSET   |	              
                (master[3] & MAX_MSTR_MASK) << MAX_MSTR3_OFFSET   |	              
                (master[4] & MAX_MSTR_MASK) << MAX_MSTR4_OFFSET   |	              
                (master[5] & MAX_MSTR_MASK) << MAX_MSTR5_OFFSET;
                
    // the entire MAX_MPRx register needs
    // to be written at once. 
	switch(slave) 
	{
		case MAX_SLAVE0:
			
			MAX_MPR0.all = 	_priority;
			break;
			
		case MAX_SLAVE1:
			
			MAX_MPR1.all =  _priority;
			break;			
		
		case MAX_SLAVE2:
			
			MAX_MPR2.all =  _priority;
			break;	
		
		case MAX_SLAVE3:
		default:
			
			MAX_MPR3.all =  _priority;
			break;		
	}
	
	return;
}
               

//---------------------------------------------------
// configure alternate master priority for a single MAX Slave port,
// MAX_SLV0_AMPR0 - MAX_SLV3_AMPR3. Specify the MAX slave port 
// as the first argument, and a priority list of masters as the
// second parameter. Refer to the  typedef declaration for 
// max_slaves and max_masters
//--------------------------------------------------- 

void
MAX_ConfigAltSlv(max_slaves   slave,      // Max slave port
                 max_masters* master) 	  // Max slave master priority
{							    		  // for slave port
	
	int _priority;
	
	_priority = (master[0] & MAX_MSTR_MASK) << MAX_MSTR0_OFFSET   |
                (master[1] & MAX_MSTR_MASK) << MAX_MSTR1_OFFSET   |	              
                (master[2] & MAX_MSTR_MASK) << MAX_MSTR2_OFFSET   |	              
                (master[3] & MAX_MSTR_MASK) << MAX_MSTR3_OFFSET   |	              
                (master[4] & MAX_MSTR_MASK) << MAX_MSTR4_OFFSET   |	              
                (master[5] & MAX_MSTR_MASK) << MAX_MSTR5_OFFSET;
                
    // the entire MAX_AMPRx register needs
    // to be written at once. 
	switch(slave) 
	{
		case MAX_SLAVE0:
			
			MAX_AMPR0.all =  _priority;
			break;
			
		case MAX_SLAVE1:
			
			MAX_AMPR1.all =  _priority;
			break;			
		
		case MAX_SLAVE2:
			
			MAX_AMPR2.all =  _priority;
			break;	
		
		case MAX_SLAVE3:
		default:
			
			MAX_AMPR3.all =  _priority;
			break;		
	}

	return;
}
               

//---------------------------------------------------
// Configure slave port control vector (SGPCR0-SGPCR3)
//--------------------------------------------------- 

void
MAX_ConfigSlvControl (max_slaves  slave,
                      uint32_t   vector) 
{
	switch(slave) 
	{
		case MAX_SLAVE0:
			MAX_SGPCR0.all = vector;
			break;
			
		case MAX_SLAVE1:
			MAX_SGPCR1.all = vector;			
			break;			
		
		case MAX_SLAVE2:
			MAX_SGPCR2.all = vector;		
			break;	
		
		case MAX_SLAVE3:
		default:
			MAX_SGPCR3.all = vector;		
			break;		
	}
	
	return;

}


//---------------------------------------------------
// configure alternate slave port (ASGPCR0-ASGPCR3)
// control vector
//---------------------------------------------------

void
MAX_ConfigAltSlvControl (max_slaves  slave,
                         uint32_t   vector) 
{
	switch(slave) 
	{
		case MAX_SLAVE0:
			MAX_ASGPCR0.all = vector;
			break;
			
		case MAX_SLAVE1:
			MAX_ASGPCR1.all = vector;		
			break;			
		
		case MAX_SLAVE2:
			MAX_ASGPCR2.all = vector;		
			break;	
		
		case MAX_SLAVE3:
		default:
			MAX_ASGPCR3.all = vector;		
			break;		
	}
	
	return;

}



//---------------------------------------------------
// Configure all MAX slave ports with different control 
// vector. All have the same master priority.
// Also refer to the  typedef declaration for max_slaves 
// and max_masters 
//---------------------------------------------------
void
MAX_ConfigAll_Slv(max_masters* master,
                  uint32_t*    vector) 
{
	int i;

    
	for (i = 0; i <= MAX_NO_SLAVES; i++) 
	{
	    MAX_ConfigSlvControl (i,vector[i]);
		MAX_ConfigSlv(i, master);
	}
	return;
}

//---------------------------------------------------
// configure all alternate MAX Slave ports. Uses the
// following functions:
//  MAX_ConfigAltSlvControl (...)
//  MAX_ConfigAltSlv(...)
//--------------------------------------------------- 
void
MAX_ConfigAll_AltSlv(max_masters* master,
                     uint32_t*    vector) 
{
	int i;

    
	for (i = 0; i <= MAX_NO_SLAVES; i++) 
	{
	    MAX_ConfigAltSlvControl (i,vector[i]);
		MAX_ConfigAltSlv(i, master);
	}
	return;
}

//---------------------------------------------------
// configure arbitration modes for a master, MGPCRx
//---------------------------------------------------
void 
MAX_ConfigArbMode(max_masters   masters,
                  max_arb_modes arb_mode)
{
	switch (arb_mode) 
	{
		case MAX_ARB_PAGE:
		
			MAX_MGPCR0.all = arb_mode;
			break;
		
		case MAX_ARB_1:

			MAX_MGPCR1.all = arb_mode;
			break;
        
        case MAX_ARB_4:		
			
			MAX_MGPCR2.all = arb_mode;        
			break;
        
        case MAX_ARB_8:        
        
			MAX_MGPCR3.all = arb_mode;                
			break;
			        
        case MAX_ARB_16:        
        default:
        
			MAX_MGPCR4.all = arb_mode;                        
			break;			                
	}
	return;
}

//---------------------------------------------------
// configure MAX arbitration modes 
// for all masters. max_arb_mode[i] corresponds
// to master(i), MGPCR0-MGPCR5
//---------------------------------------------------                  
void 
MAX_ConfigAll_ArbModes(max_arb_modes* arb_modes) 
{
	int i;
	
	for (i = 0; i < MAX_NO_MASTERS; i++) 
	{
		   MAX_ConfigArbMode(i, arb_modes[i]);
	}
	return;
}

//---------------------------------------------------
// configure MAX
//---------------------------------------------------
void
MAX_Configure(max_masters*      master_priority,
              max_masters*      alt_master_priority,
              uint32_t*         slave_control_vec,
              uint32_t*         alt_slave_control_vec,
              max_arb_modes*    master_arb_modes ) 
{
   
   // configure each slave port (s0,s1,s2,s3) with apporpriate
   // master priorities, and control values
   
   MAX_ConfigAll_Slv(master_priority, slave_control_vec);
   
   // configure each slave port (s0,s1,s2,s3) with apporpriate
   // alternate master priorities, and control values
   
   MAX_ConfigAll_AltSlv(alt_master_priority, alt_slave_control_vec);
   
   // configure arbitration mode for each master port
   
   MAX_ConfigAll_ArbModes(master_arb_modes);
   
	return;
}

⌨️ 快捷键说明

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