📄 ezkitutilities.c
字号:
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);
}
/*********************************************************************
Function: ezCycleLEDs
Description: Cycles LEDs
*********************************************************************/
void ezCycleLEDs(void) // cycles all LEDs
{
static u32 CycleDisplay;
// insure at least 1 LED is enabled
if (LEDEnables == 0) return;
// calculate the pattern
do {
CycleDisplay <<= 1;
if (CycleDisplay == 0) CycleDisplay = 1;
} while ((CycleDisplay & LEDEnables) == 0);
// update
ezSetDisplay(CycleDisplay);
}
/*********************************************************************
Function: ezGetDisplay
Description: Gets the display pattern
*********************************************************************/
u32 ezGetDisplay(void) // gets the pattern
{
// get it
return (LEDDisplay);
}
/*********************************************************************
Function: ezSetDisplay
Description: Sets the display pattern
*********************************************************************/
void ezSetDisplay(u32 Display) // sets the display
{
u32 i;
u32 Mask;
// update the display
LEDDisplay = Display & LEDEnables;
// FOR (each LED)
for (i = 0, Mask = 1; i < EZ_NUM_LEDS; i++, Mask <<= 1) {
// IF (the LED should be lit)
if (LEDDisplay & Mask) {
// light it
#if defined(__ADSP_EDINBURGH__)
*pFlashA_PortB_Out |= Mask;
#endif
#if defined(__ADSP_BRAEMAR__) || defined (__ADSP_TETON__) || defined (__ADSP_STIRLING__) || defined (__ADSP_MOAB__)
adi_flag_Set(ezLEDToFlag[i]);
#endif
// ELSE
} else if (LEDEnables & Mask) {
// dim it
#if defined(__ADSP_EDINBURGH__)
*pFlashA_PortB_Out &= ~Mask;
#endif
#if defined(__ADSP_BRAEMAR__) || defined (__ADSP_TETON__) || defined (__ADSP_STIRLING__) || defined (__ADSP_MOAB__)
adi_flag_Clear(ezLEDToFlag[i]);
#endif
// ENDIF
}
// ENDFOR
}
}
/*********************************************************************
Function: ezInitButton
Description: Enables a button for use
*********************************************************************/
void ezInitButton(u32 Button) // enables a button
{
// make sure the button is valid
if (Button >= EZ_NUM_BUTTONS) return;
// open the flag and make it an input
adi_flag_Open(ezButtonToFlag[Button]);
adi_flag_SetDirection(ezButtonToFlag[Button], ADI_FLAG_DIRECTION_INPUT);
}
/*********************************************************************
Function: ezIsButtonPushed
Description: Returns TRUE if a button has been pushed, FALSE otherwise.
*********************************************************************/
u32 ezIsButtonPushed(u32 Button) // returns TRUE if button is pushed, FALSE otherwise
{
u32 Value;
// make sure the button is valid
if (Button >= EZ_NUM_BUTTONS) return (FALSE);
// sense it
adi_flag_Sense(ezButtonToFlag[Button], &Value);
// return
return (Value);
}
/*********************************************************************
Function: ezClearButton
Description: Clears a push button latch. This must be called to
reset the latch for the push button, if a button has
been pressed.
*********************************************************************/
void ezClearButton(u32 Button) // clears a button latch
{
volatile int i;
// make sure the button is valid
if (Button >= EZ_NUM_BUTTONS) return;
// delay to allow for any debounce to clear
ezDelay(10);
// clear the flag corresponding to the button
adi_flag_Clear(ezButtonToFlag[Button]);
}
/*********************************************************************
Function: ezDelay
Description: Delays for approximately 1 msec when running at 600 MHz
*********************************************************************/
void ezDelay(u32 msec) {
volatile u32 i,j;
// value of 0x3000000 is about 1 sec so 0xc49b is about 1msec
for (j = 0; j < msec; j++) {
for (i = 0; i < 0xc49b; i++) ;
}
}
/*********************************************************************
Function: ezErrorCheck
Description: This function is intended to be used as a means to
quickly determine if a function has returned a non-zero
(hence an error) return code. All driver and system
services functions return a value of zero for success and
a non-zero value when a failure occurs. This function
makes all LEDs glow dimly when a non-zero value is
passed to it.
*********************************************************************/
void ezErrorCheck(u32 Result) // lights all LEDS and spins on nonzero value
{
while (Result != 0) {
ezCycleLEDs();
}
}
/*********************************************************************
Function: ezResetad1836
Description: This function is intended to be used to reset the AD1836 audio codec
*********************************************************************/
void ezReset1836(void)
{
int i;
static unsigned char data;
#if defined (__ADSP_EDINBURGH__)
*pFlashA_PortA_Dir = data = 0x01;
#if defined (__ADSP_EDINBURGH_AVEXTNDR__) || defined (__ADSPBF533_AVEXTNDR__)
*pFlashA_PortA_Dir = data = 0x40;
#endif
*pFlashA_PortA_Out = 0x00; //write to Port A to reset AD1836
asm("nop; nop; nop;"); //wait at least 5 ns in reset
*pFlashA_PortA_Out = data; //write to Port A to enable AD1836
#endif //__ADSP_EDINBURGH__
#if defined (__ADSP_BRAEMAR__)
#elif defined (__ADSP_BRAEMAR___AVEXTNDR__) || defined (__ADSPBF537_AVEXTNDR__)
SlaveSelect = 6; //SPI Slave Select connected to 1836
adi_flag_Open(ADI_FLAG_PF6);
adi_flag_SetDirection(ADI_FLAG_PF6, ADI_FLAG_DIRECTION_OUTPUT);
adi_flag_Clear(ADI_FLAG_PF6); //Clear PF6 to reset the AD1836
asm("nop; nop; nop;"); //assert reset for at least 5 ns
adi_flag_Set(ADI_FLAG_PF6); //Set PF6 to reset the AD1836
#endif //__ADSP_BRAEMAR__
#if defined (__ADSP_TETON__)
adi_flag_Open(ADI_FLAG_PF15);
adi_flag_SetDirection(ADI_FLAG_PF15, ADI_FLAG_DIRECTION_OUTPUT);
adi_flag_Clear(ADI_FLAG_PF15); //Clear PF6 to reset the AD1836
asm("nop; nop; nop;"); //Assert reset for at least 5 ns
adi_flag_Set(ADI_FLAG_PF15); //Set PF6 to reset the AD1836
#endif //__ADSP_TETON__
//Now wait 4500 MCLK periods (MCLK = 12.288 MHz) to recover from reset
for (i=0; i<220000; i++) { asm("nop;"); } //Prevents compiler from optimizing
}
/*********************************************************************
Function: ezEnableVideoDecoder
Description: Connects up the bus, sets up the video clocking and
enables the AD7183.
*********************************************************************/
void ezEnableVideoDecoder(void) // connects bus, sets up video clock and enables the 7183
{
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit specific info
#define ADV7183_OE_FLAG ADI_FLAG_PF2
unsigned short tempReg;
//The GPIOs of the flash are linked to the ADV7183 reset pin as well as to the
//switch that drives the PPI clock. De-assert the ADV7183 reset and link the ADV7183
//Clock "LLC1" to the Blackfin PPI clock input. See EZ-KIT schematics for more details.
tempReg = *pFlashA_PortA_Out;
tempReg &= ~RST_7171; // disable 7171
*pFlashA_PortA_Out = tempReg | RST_7183 | PPICLK_ADV7183_SELECT;
//Setup the Blackfin PF registers
#if defined(__ADSP_EDINBURGH__) && (__SILICON_REVISION__==0xffff || __SILICON_REVISION__==0x1)
tempReg = *pFIO_INEN;
*pFIO_INEN = tempReg | ADV7183_OE_MASK;
#endif
// open PF2 and PF13
adi_flag_Open(ADI_FLAG_PF2);
adi_flag_Open(ADI_FLAG_PF13);
//Blackfin PF2 pin must be set as output
adi_flag_SetDirection(ADI_FLAG_PF2, ADI_FLAG_DIRECTION_OUTPUT);
//Set the Blackfin pin PF2 to output enable the ADV7183 data bus
adi_flag_Clear(ADI_FLAG_PF2);
#endif // Edinburgh
#if defined(__ADSP_TETON__)
volatile long delay_time;
//Blackfin PF2 pin must be set as output
adi_flag_SetDirection(ADI_FLAG_PF2, ADI_FLAG_DIRECTION_OUTPUT);
//Blackfin PF13 pin must be set as output
adi_flag_SetDirection(ADI_FLAG_PF13, ADI_FLAG_DIRECTION_OUTPUT);
ssync();
// set bit PF2 to disable ADV7183 outputs
adi_flag_Set(ADI_FLAG_PF2);
ssync();
// clear bit PF13 to reset ADV7183
adi_flag_Clear(ADI_FLAG_PF13);
ssync();
// set bit PF13 to re-enable ADV7183
adi_flag_Set(ADI_FLAG_PF13);
ssync();
for (delay_time = 0; delay_time < ADV7183_Reset_Delay; delay_time++)
asm("nop;");
// clear bit to enable ADV7183 outputs
adi_flag_Clear(ADI_FLAG_PF2);
ssync();
for (delay_time = 0; delay_time < ADV7183_Lock; delay_time++)
asm("nop;");
#endif // Teton
}
/*********************************************************************
Function: ezEnableVideoEncoder
Description: Enables the AD7171 or AD7179
*********************************************************************/
void ezEnableVideoEncoder(void) // enables the 7171
{
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit specific info
unsigned short tempReg;
tempReg = *pFlashA_PortA_Out;
tempReg &= ~(RST_7183 | PPICLK_ADV7183_SELECT); // disable 7183
*pFlashA_PortA_Out = tempReg | RST_7171;
#endif // Edinburgh
#if defined(__ADSP_TETON__)
// open PF14
adi_flag_Open(ADI_FLAG_PF14);
//Blackfin PF14 pin must be set as output
adi_flag_SetDirection(ADI_FLAG_PF14, ADI_FLAG_DIRECTION_OUTPUT);
ssync();
// clear bit to reset ADV7179, Blackfin pin PF14
adi_flag_Clear(ADI_FLAG_PF14);
ssync();
adi_flag_Set(ADI_FLAG_PF14);
ssync();
#endif // Teton
}
/*********************************************************************
Function: ezDisableVideoEncoder
Description: Disables the AD7179.
*********************************************************************/
void ezDisableVideoEncoder(void)
{
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit specific info
unsigned short tempReg;
tempReg = *pFlashA_PortA_Out;
tempReg &= ~(RST_7171); // disable 7171
*pFlashA_PortA_Out = tempReg;
#endif // Edinburgh
#if defined(__ADSP_TETON__)
adi_flag_Clear(ADI_FLAG_PF14);
// close PF14
adi_flag_Close(ADI_FLAG_PF14);
ssync();
#endif
}
/*********************************************************************
Function: ezDisableVideoDecoder
Description: Disables 7183
*********************************************************************/
void ezDisableVideoDecoder(void)
{
#if defined(__ADSP_EDINBURGH__) // ADSP-BF533 EZ-Kit specific info
// open PF2
adi_flag_Open(ADI_FLAG_PF2);
//Blackfin PF2 pin must be set as output (PF2 is ADV7183 Output Enable)
adi_flag_SetDirection(ADI_FLAG_PF2, ADI_FLAG_DIRECTION_OUTPUT);
//Set the Blackfin pin PF2 to disable ADV7183
adi_flag_Set(ADI_FLAG_PF2);
#endif // Edinburgh
#if defined(__ADSP_TETON__)
// set bit PF2 to disable ADV7183 outputs
adi_flag_Set(ADI_FLAG_PF2);
ssync();
// clear bit PF13 to reset ADV7183
adi_flag_Clear(ADI_FLAG_PF13);
ssync();
#endif
// close PF2 and PF13
adi_flag_Close(ADI_FLAG_PF2);
adi_flag_Close(ADI_FLAG_PF13);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -