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

📄 blaster.c

📁 在AT91sam7SE上
💻 C
字号:
//blaster.c

#include	"Preprocess.h"
#include	"blaster.h"





VOID	BlsInit(VOID){
	AT91C_BASE_PMC->PMC_PCER = 1 << BLS_PID;
	AT91F_PIO_CfgInput(BLS_PORT_BASE, 1 << BLS_BIT_STATUS | 1 << BLS_BIT_CFG_DONE);	
	AT91F_PIO_CfgOutput(BLS_PORT_BASE, 1 << BLS_BIT_CFG | 1 << BLS_BIT_DATA | 1 << BLS_BIT_DCLK); 
	BlsSetSigCfg(INACTIVE);
}//VOID	BlsInit(VOID){




VOID	BlsSetSigCfg(SIGNAL sg){
	if(INACTIVE == sg){
		BLS_PORT_BASE->PIO_SODR = 1 << BLS_BIT_CFG;
	}else{
		BLS_PORT_BASE->PIO_CODR = 1 << BLS_BIT_CFG;
	}
}//VOID	BlsSetSigCfg(SIGNAL sg){




VOID	BlsPushSoloByte(BYTE bByte){
	UINT i;
	BYTE bBit;

	BlsSetSigDclk(LOW);
	for(i=0; i < BIT_PER_BYTE; i++){
		bBit = bByte >> i;
		bBit &= 0x01;
		
		if(bBit){
			BLS_PORT_BASE->PIO_SODR = 1 << BLS_BIT_DATA;
		}else{
			BLS_PORT_BASE->PIO_CODR = 1 << BLS_BIT_DATA;
		}
		
		BlsSetSigDclk(HIGH);
		BlsSetSigDclk(LOW);
	}//for(i=0; i<8; i++){

}//VOID	BlsPushSoloByte(BYTE bByte){




VOID	BlsSetSigDclk(LEVEL lv){
	Delay(BLS_TM_CK_SWAP_DELAY);
	if(LOW == lv){
		BLS_PORT_BASE->PIO_CODR = 1 << BLS_BIT_DCLK;
	}else{
		BLS_PORT_BASE->PIO_SODR = 1 << BLS_BIT_DCLK;
	}
}//VOID	BlsSetSigDclk(LEVEL lv){





SIGNAL	BlsGetSigStatus(VOID){
	UINT	ui;
	ui = BLS_PORT_BASE ->PIO_PDSR;
	if((ui >> BLS_BIT_STATUS) & 0x01){
		return(INACTIVE);
	}else{
		return(ACTIVE);
	}
}//SIGNAL	BlsGetSigStatus(VOID){






SIGNAL	BlsGetSigCfgDone(VOID){
	UINT	ui;
	ui = BLS_PORT_BASE ->PIO_PDSR;
	if((ui >> BLS_BIT_CFG_DONE) & 0x01){
		return(ACTIVE);
	}else{
		return(INACTIVE);
	}

}//SIGNAL	BlsGetSigCfgDone(VOID){







BOOL	BlsBlast(BYTE* pbyData, UINT uiSize){
	
	SIGNAL	sgCfgDone;
	SIGNAL	sgStatus;
	UINT	i;


	//Step 1:
	//Send config start signal.
	//Drive a transition of 0 to 1 to NCONFIG to indicate start of configuration.
	BlsSetSigCfg(ACTIVE);
	Delay(BLS_TM_CFG_HOLD);
	BlsSetSigCfg(INACTIVE);


	//Step 2:
	//Push data to port one by one.
	Delay(BLS_TM_START_PUSH_DELAY);
	for(; uiSize > 0; uiSize--){
		BlsPushSoloByte(*pbyData);
		pbyData++;
	}



	//Step 3:
	//Start initialization
	//Clock another (INIT_CYCLE) cycles to initialize the device
	for ( i = 0; i < BLS_TM_INIT_CYCLE; i++ ){
		BlsSetSigDclk(LOW);
		BlsSetSigDclk(HIGH);
	}



	//Step 4:
	//check config result.
	sgStatus = BlsGetSigStatus();
	sgCfgDone = BlsGetSigCfgDone();

	if(ACTIVE == sgStatus || INACTIVE == sgCfgDone){
		return(FALSE);
	}




	return(TRUE);

		
}//BOOL	BlsBlast(BYTE* pbyData, UINT uiSize)

⌨️ 快捷键说明

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