📄 mx21_max.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 + -