📄 ezkitutilities.c
字号:
/*********************************************************************************
Copyright(c) 2005 Analog Devices, Inc. All Rights Reserved.
This software is proprietary and confidential. By using this software you agree
to the terms of the associated Analog Devices License Agreement.
$RCSfile: ezkitutilities.c,v $
$Revision: 1.9 $
$Date: 2006/05/03 13:25:22 $
Description: EZ-Kit utility routines. This file contains a collection
of functions that automate typical EZ-Kit functionality,
including control of LEDs and push buttons.
*********************************************************************************/
/*********************************************************************
Include files
*********************************************************************/
#include <services/services.h> // system service includes
#include <sysreg.h> // system config definitions
#include "ezkitutilities.h" // EZ-Kit utility definitions
/*********************************************************************
flash addresses for BF-533 EZ-Kit
*********************************************************************/
#if defined(__ADSP_EDINBURGH__) // the Edinburgh EZ-Kit uses a flash for ports
#define pFlashA_PortA_In ((volatile unsigned char *)0x20270000) // address of flash A port A input data register
#define pFlashA_PortA_Out ((volatile unsigned char *)0x20270004) // address of flash A port A output data register
#define pFlashA_PortA_Dir ((volatile unsigned char *)0x20270006) // address of flash A port A direction register
#define pFlashA_PortB_In ((volatile unsigned char *)0x20270001) // address of flash A port B input data register
#define pFlashA_PortB_Out ((volatile unsigned char *)0x20270005) // address of flash A port B output data register
#define pFlashA_PortB_Dir ((volatile unsigned char *)0x20270007) // address of flash A port B direction register
#define pFlashB_PortA_In ((volatile unsigned char *)0x202E0000) // address of flash B port A input data register
#define pFlashB_PortA_Out ((volatile unsigned char *)0x202E0004) // address of flash B port A output data register
#define pFlashB_PortA_Dir ((volatile unsigned char *)0x202E0006) // address of flash B port A direction register
#define pFlashB_PortB_In ((volatile unsigned char *)0x202E0001) // address of flash B port B input data register
#define pFlashB_PortB_Out ((volatile unsigned char *)0x202E0005) // address of flash B port B output data register
#define pFlashB_PortB_Dir ((volatile unsigned char *)0x202E0007) // address of flash B port B direction register
#endif
//REMOVE WHEN DRIVERS ARE ADDED
/*********************************************************************
Miscellaneous defines
*********************************************************************/
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit specific info
#define RST_7183 (0x8) //decoder reset bit #3 in flashA portA
#define PPICLK_ADV7183_SELECT (0x10) //decoder clock to PPI bit #4 in flashA portA
#define ADV7183_OE_MASK (0x4) //ADV7183 /OE = PF2
#define ADV7183_OE (0) //Index into Codec flag handler array
#define RST_7171 (0x4) // encoder reset
#endif
#if defined(__ADSP_TETON__)
#define ADV7183_RESET (13) //decoder reset bit
#define ADV7183_OE (2) //ADV7183 /OE = PF2
#define ADV7183_Reset_Delay 0x04000000 // For delay after reset
#define ADV7183_Lock 0x0000ffff // For startup locktime delay
#define ADV7179_RESET (14) // encoder reset bit
#endif
/*********************************************************************
LED/Button to pf mappings
*********************************************************************/
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit mappings
ADI_FLAG_ID ezButtonToFlag[] = {
ADI_FLAG_PF8, // button 0
ADI_FLAG_PF9, // button 1
ADI_FLAG_PF10, // button 2
ADI_FLAG_PF11 // button 3
};
ADI_FLAG_ID ezLEDToFlag[] = { // (not used on Edinburgh but needed as placeholder)
ADI_FLAG_PF0, // led 0
ADI_FLAG_PF0, // led 1
ADI_FLAG_PF0, // led 2
ADI_FLAG_PF0, // led 3
ADI_FLAG_PF0, // led 4
ADI_FLAG_PF0 // led 5
};
#endif
#if defined(__ADSP_BRAEMAR__) // ADSP-BF537 EZ-Kit mappings
ADI_FLAG_ID ezButtonToFlag[] = {
ADI_FLAG_PF2, // button 0
ADI_FLAG_PF3, // button 1
ADI_FLAG_PF4, // button 2
ADI_FLAG_PF5 // button 3
};
ADI_FLAG_ID ezLEDToFlag[] = {
ADI_FLAG_PF6, // led 0
ADI_FLAG_PF7, // led 1
ADI_FLAG_PF8, // led 2
ADI_FLAG_PF9, // led 3
ADI_FLAG_PF10, // led 4
ADI_FLAG_PF11 // led 5
};
#endif
#if defined(__ADSP_TETON__) // ADSP-BF561 EZ-Kit mappings
ADI_FLAG_ID ezButtonToFlag[] = {
ADI_FLAG_PF5, // button 0
ADI_FLAG_PF6, // button 1
ADI_FLAG_PF7, // button 2
ADI_FLAG_PF8 // button 3
};
ADI_FLAG_ID ezLEDToFlag[] = {
ADI_FLAG_PF40, // led 0
ADI_FLAG_PF41, // led 1
ADI_FLAG_PF42, // led 2
ADI_FLAG_PF43, // led 3
ADI_FLAG_PF44, // led 4
ADI_FLAG_PF45, // led 5
ADI_FLAG_PF46, // led 6
ADI_FLAG_PF47, // led 7
ADI_FLAG_PF32, // led 8
ADI_FLAG_PF33, // led 9
ADI_FLAG_PF34, // led 10
ADI_FLAG_PF35, // led 11
ADI_FLAG_PF36, // led 12
ADI_FLAG_PF37, // led 13
ADI_FLAG_PF38, // led 14
ADI_FLAG_PF39 // led 15
};
#endif
/*********************************************************************
LED control
*********************************************************************/
static u32 LEDDisplay; // bit field representing the LED display
static u32 LEDEnables; // bit field representing the enabled LEDs
/*********************************************************************
function prototypes
*********************************************************************/
static void ezInitPower(u32 NumCores);
/*********************************************************************
Function: ezInit
Description: Initializes the EZ-Kit. Specifically:
- configures async memories
- configures flash (where applicable)
- configures power to 600/120
*********************************************************************/
void ezInit(u32 NumCores)
{
// configure async memory
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit specific info
*pEBIU_AMBCTL0 = 0x7bb07bb0; // Write access time = 7 cycles, read access time = 11 cycles, no ARDY
*pEBIU_AMBCTL1 = 0x7bb07bb0; // Hold time = 2 cycles, setup time = 3 cycles, transition time = 4 cycles
*pEBIU_AMGCTL = 0x00FF;
#endif
// configure flash
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit specific info
*pFlashA_PortA_Out = 0; // resets port A to initial value
*pFlashA_PortA_Dir = 0xFF; // configure everything on port A as outputs
*pFlashA_PortB_Out = 0; // resets port B to initial value
*pFlashA_PortB_Dir = 0x3f; // configure everything on port B as outputs
#endif
// configure power
ezInitPower(NumCores);
}
/*********************************************************************
Function: ezInitPower
Description: Initializes and sets Power managwmentSDRAM parameters on the EZ-Kit.
(Replaces ezConfigurePLL & ezConfigureSDRAM )
Processor clock set to max in each case
*********************************************************************/
#define DO_NOT_CHANGE_MMR_SETTINGS 0
static void ezInitPower(u32 NumCores)
{
ADI_EBIU_RESULT EBIUResult;
ADI_PWR_RESULT PWRResult;
#if defined (__ADSP_TETON__)
ADI_PWR_COMMAND_PAIR ezkit_power[3];
#endif
// It is important that the EBIU module is configured before Power module
// so that changes to the clock frequencies are correctly reflected in the
// SDRAM settings
//Initializes the EBIU module
ADI_EBIU_COMMAND_PAIR ezkit_sdram[] = {
#if defined (__ADSP_EDINBURGH__)
{ ADI_EBIU_CMD_SET_EZKIT, (void*)ADI_EBIU_EZKIT_BF533 },
#elif defined(__ADSP_BRAEMAR__)
{ ADI_EBIU_CMD_SET_EZKIT, (void*)ADI_EBIU_EZKIT_BF537 },
#elif defined (__ADSP_TETON__)
{ ADI_EBIU_CMD_SET_EZKIT, (void*)ADI_EBIU_EZKIT_BF561 },
#endif
{ ADI_EBIU_CMD_END, 0}
};
EBIUResult = adi_ebiu_Init( ezkit_sdram, DO_NOT_CHANGE_MMR_SETTINGS );
if ((EBIUResult != ADI_EBIU_RESULT_SUCCESS) && (EBIUResult != ADI_EBIU_RESULT_CALL_IGNORED)) {
ezErrorCheck(EBIUResult);
}
//Initializes the power management module
#if defined (__ADSP_TETON__)
u8 ic=0;
ezkit_power[ic].kind = ADI_PWR_CMD_SET_EZKIT;
ezkit_power[ic].value = (void*)ADI_PWR_EZKIT_BF561_500MHZ;
// for Teton (BF561) there is a choice between auto sync if NumCores >1 or
// no synchronization - essential for single-core apps.
if (NumCores>1) {
ic++;
// value field is superfluos for this command
ezkit_power[ic].kind = ADI_PWR_CMD_SET_AUTO_SYNC_ENABLED;
}
ic++;
// value field is superfluos for this command
ezkit_power[ic].kind = ADI_PWR_CMD_END;
#else // otherwise - Edinburgh or Braemar
ADI_PWR_COMMAND_PAIR ezkit_power[] = {
#if defined (__ADSP_EDINBURGH__)
{ ADI_PWR_CMD_SET_EZKIT, (void*)ADI_PWR_EZKIT_BF533_600MHZ },
#elif defined(__ADSP_BRAEMAR__)
{ ADI_PWR_CMD_SET_EZKIT, (void*)ADI_PWR_EZKIT_BF537_600MHZ },
#endif
{ ADI_PWR_CMD_END, 0}
};
#endif
PWRResult = adi_pwr_Init( ezkit_power );
if ((PWRResult != ADI_PWR_RESULT_SUCCESS) && (PWRResult != ADI_PWR_RESULT_CALL_IGNORED)) {
ezErrorCheck(PWRResult);
}
// Crank up speed to max possible
#if !defined (__ADSP_TETON__) || defined(__600_MHZ_TETON__)
ezErrorCheck( adi_pwr_SetFreq( 0, 0, ADI_PWR_DF_NONE ) );
#else
// Again, this is safe, on boards with ADSP-BF561SKBC500X rev 0.2
// There are issues with some BF561 EZ-kits for V >=1.2V
ezErrorCheck( adi_pwr_SetMaxFreqForVolt( ADI_PWR_VLEV_115 ) );
#endif
}
/*********************************************************************
Function: ezInitLEDs
Description: Enables an LED for use
*********************************************************************/
void ezInitLED(u32 LED) // enables an LED
{
// make sure the LED is valid
if (LED >= EZ_NUM_LEDS) return;
// set the enable bit
LEDEnables |= (1 << LED);
// configure the flag for output
#if defined(__ADSP_BRAEMAR__) || defined (__ADSP_TETON__)
adi_flag_Open(ezLEDToFlag[LED]);
adi_flag_SetDirection(ezLEDToFlag[LED], ADI_FLAG_DIRECTION_OUTPUT);
#endif
// dim the LED
ezTurnOffLED(LED);
}
/*********************************************************************
Function: ezTurnOnLED
Description: Lights an LED
*********************************************************************/
void ezTurnOnLED(u32 LED) // lights an LED
{
// update
ezSetDisplay(LEDDisplay | (1 << LED));
}
/*********************************************************************
Function: ezTurnOffLED
Description: Dims an LED
*********************************************************************/
void ezTurnOffLED(u32 LED) // dims an LED
{
// update
ezSetDisplay(LEDDisplay & ~(1 << LED));
}
/*********************************************************************
Function: ezToggleLED
Description: Toggles an LED
*********************************************************************/
void ezToggleLED(u32 LED) // toggles an LED
{
// update
ezSetDisplay(LEDDisplay ^ (1 << LED));
}
/*********************************************************************
Function: ezTurnOnAllLEDs
Description: Lights all LEDs
*********************************************************************/
void ezTurnOnAllLEDs(void) // lights all LEDs
{
// update
ezSetDisplay(0xffff);
}
/*********************************************************************
Function: ezTurnOffAllLEDs
Description: Dims all LEDs
*********************************************************************/
void ezTurnOffAllLEDs(void) // dims all LEDs
{
// update
ezSetDisplay(0);
}
/*********************************************************************
Function: ezToggleAllLEDs
Description: Toggles all LEDs
*********************************************************************/
void ezToggleAllLEDs(void) // toggles all LEDs
{
// update
ezSetDisplay(~LEDDisplay);
}
/*********************************************************************
Function: ezIsLEDon
Description: Senses if an LED is lit
*********************************************************************/
u32 ezIsLEDOn(u32 LED) // senses if an LED is lit
{
// return
return (LEDDisplay & (1 << LED)?TRUE:FALSE);
}
/*********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -