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