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

📄 flash_setup.c

📁 BF533的视频采集程序
💻 C
字号:
/******************************************************************************/
//
// Name: 	BF533 EZ-KIT Flash Driver
//
/******************************************************************************

(C) Copyright 2003 - Analog Devices, Inc.  All rights reserved.

File Name:	Flash_Setup.c

Date Modified:	10/25/04		TL		Rev 0.2

Software:       VisualDSP++3.1

Hardware:		ADSP-BF533 EZ-KIT Board

Special Connections:  None

Purpose:		This driver sets up the ADSP-BF533 EZ-KIT flash
				
				

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


#include <cdefBF533.h>
#include "flashsetup.h"

void Sda(bool bSet);
void Scl(bool bSet);
void mynop();
void mDelay(unsigned char j);
void Start(void);
void Stop(void) ;
void Ack(void) ;
void Send(unsigned char Data);
void SkipFrame(unsigned char nSkipFrame);
void SelectAVN(unsigned char Num);


//Setup of the async interface
void Init_EBIU(void)
{
	
	*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	= 0x000F;		//	  |Enable all memory banks

}//end Init_EBIU


//To use the GPIOs of the flash it must be initialized
void Init_Flash(void)
{
	*pFlashA_PortA_Out = 0x0;		// clear data registers
	*pFlashA_PortA_Dir = 0xFFFF;	// set dir=output
}//end Init_Flash



//The GPIOs of the flash are linked to the ADV7183 reset pin as well as to the 
//switch that drives the PPI clock. 
void Init_ADV(void)
{
	unsigned char tempReg;
	
	//De-assert the ADV7183 reset and link the ADV7183 Clock "LLC1" to the Blackfin PPI 
	//clock input.
	tempReg = *pFlashA_PortA_Out;
	*pFlashA_PortA_Out = tempReg | RST_7183 | PPICLK_ADV7183_SELECT;


	//Setup the Blackfin PF registers
	
	if ( ((*pDSPID) & 0xFFFF) < 0x2 ) {		// Workaround for anomaly ID# 05000079 for rev 0.1
		tempReg = *pFIO_INEN;
		*pFIO_INEN = tempReg | ADV7183_OE;
	 }
	//Blackfin PF2 pin must be set as output
	tempReg = *pFIO_DIR;
	*pFIO_DIR = tempReg | ADV7183_OE;

	//Set the Blackfin pin PF2 to output enable the ADV7183 data bus		
	tempReg = *pFIO_FLAG_C;
	*pFIO_FLAG_C = tempReg | ADV7183_OE;

	
	SelectAVN(1);

}//end Init_ADV


//////////////////////////////////////
void mynop()
{
    int j,i;
 	for(i=0;i<25;i++)
 	{
 		j=0;
 	}

}

void Sda(bool bSet)
{
	unsigned char tempReg;	
	
	tempReg = *pFIO_DIR;
	*pFIO_DIR = tempReg |0x2;
	
	tempReg = *pFIO_FLAG_S;
	

	if(bSet)
	{
	  *pFIO_FLAG_D=tempReg|0x2;
	}
	else
	{
	  *pFIO_FLAG_D=tempReg&0xFD;	
	}

}

void Scl(bool bSet)
{
	unsigned char tempReg;
	
	tempReg = *pFIO_DIR;
	*pFIO_DIR = tempReg |0x1;
	
	tempReg = *pFIO_FLAG_S;
	if(bSet)
	{
	  *pFIO_FLAG_D=tempReg|0x1;
	}
	else
	{
	  *pFIO_FLAG_D=tempReg&0xFE;	
	}
}

void Start(void) /*起始条件*/
{
  Sda(1);
  
  Scl(1);
  mynop();
  mynop();
  mynop();
  mynop();
  Sda(0);
  mynop();
  mynop(); 
  mynop();
  mynop();
}

void Stop(void) /*停止条件*/
{
  mynop();
  mynop();
  mynop();
  mynop();
  Sda(0);
   
  Scl(1);
  mynop();
  mynop();
  mynop();
  mynop();
  Sda(1);
  mynop(); 
  mynop();
  mynop();
  mynop();
}

void Ack(void) /*应答位*/
{
  Sda(0);
  mynop();
  mynop();
  mynop();
  mynop();
  Scl(1);
  mynop();
  mynop();
  mynop();
  mynop();
  Scl(0);
}

void Send(unsigned char Data) /*发送数据子程序,Data为要求发送的数据*/

{
unsigned char BitCounter=8; /*位数控制*/
unsigned char temp;        /*中间变量控制*/

do
{
  temp=Data;
 

   Scl(0);
  mynop();
  mynop();
  mynop();
  mynop();
 if((temp&0x80)==0x80)/* 如果最高位是1*/
 {
  Sda(1);
 }
  else
 {
  Sda(0);
 }

   Scl(1);
  mynop();
  mynop();
  mynop();
  mynop();
 temp=Data<<1; /*RLC*/

 Data=temp;

 BitCounter--;

}while(BitCounter);

Scl(0);

}


void mDelay(unsigned char j)
{ 
	int i;
   for(;j>0;j--)
   { for(i=0;i<1500;i++)
   {;}
   }
}

void SkipFrame(unsigned char nSkipFrame)
{
	unsigned char  temp=0;
	temp=nSkipFrame<<3;	
	
	Start(); /*发送启动信号*/
	Send(136); /*Slave add 10001000b*/
	Ack();
	Send(0xE);  /*Sub add   0xE */
	Ack();
	Send(temp);  /*Data*/
	Ack();
	Stop();
	mDelay(20);
	
}

void SelectAVN(unsigned char Num)
{
	
	Start(); /*发送启动信号*/
	Send(136); /*Slave add 10001000b*/
	Ack();
	Send(0x00);  /*Sub add   0x00*/
	Ack();
	Send(Num-1);  /*Data*/
	Ack();
	Stop();
	mDelay(20);
}

/*unsigned char read(unsigned int advreg)
{
	Start();
	send(advreg+1);
	ACK();
	Send
}*/

⌨️ 快捷键说明

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