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