📄 access4096.asm
字号:
.define C_SCK_PIN 0x0001
.define C_SDA_PIN 0x0002
.define P_SCK_Data 0x7000; //P_IOA_Data
.define P_SCK_Buffer 0x7001; //P_IOA_Buffer
.define P_SCK_Dir 0x7002; //P_IOA_Dir
.define P_SCK_Attrib 0x7003; //P_IOA_Attrib
.define P_SDA_Data 0x7000; //P_IOA_Data
.define P_SDA_Buffer 0x7001; //P_IOA_Buffer
.define P_SDA_Dir 0x7002; //P_IOA_Dir
.define P_SDA_Attrib 0x7003; //P_IOA_Attrib
.define P_SystemClock 0x7013
.DEFINE P_Watchdog_Clear 0x7012 // Watchdog Reset
.public R_IO_ReadData;
.const C_Program_Time =4 //60us
.const C_SectorErase_Time =400 //60us*400=24ms
.const C_MassErase_Time =1200 //60us*1166=70ms
.IRAM
.VAR R_IO_ReadData=0;
.code
//===========================================================================================
// Function Name:
// Description :
// Syntax :
// Input :
// Output :
// Destroy :
// Used :
//=====================================================================================
.public _F_SPR4096_IO_Initial;
_F_SPR4096_IO_Initial:
//Initial SCK pin output with high;
r1=[P_SCK_Attrib];
r1|=C_SCK_PIN;
[P_SCK_Attrib]=r1;
r1=[P_SCK_Dir];
r1|=C_SCK_PIN;
[P_SCK_Dir]=r1;
r1=[P_SCK_Buffer];
r1|=C_SCK_PIN;
[P_SCK_Buffer]=r1;
//Initial SDA pin output with high;
r1=[P_SDA_Attrib];
r1|=C_SDA_PIN;
[P_SDA_Attrib]=r1;
r1=[P_SDA_Dir];
r1|=C_SDA_PIN;
[P_SDA_Dir]=r1;
r1=[P_SDA_Buffer];
r1|=C_SDA_PIN;
[P_SDA_Buffer]=r1;
r1=0x0089
[P_SystemClock]=r1
retf;
//===========================================================================================
// Function Name: SPR4096_IO_WriteAByte
// Description :
// Syntax : SPR4096_IO_WriteAByte(unsigned long int Addr,Data);
// Input :
// Output :
// Destroy :
// Used :
//==========================================================================================
.PUBLIC _SPR4096_IO_WriteAByte;
_SPR4096_IO_WriteAByte:
push bp to [sp];
bp = sp + 1;
push r2,r4 to [sp];
r1=[bp+3]; //addr low
r2=[bp+4]; //addr high
r3=[bp+5]; //data
call F_SPR4096_IO_WriteAByte;
pop r2,r4 from [sp];
pop bp from [sp];
retf;
//===========================================================================================
// Function Name: F_SPR4096_IO_WriteAByte
// Description :
// Syntax :
// Input : r1:addr low ;r2:addr high;r3:data
// Output :
// Destroy :
// Used :
//==========================================================================================
.PUBLIC F_SPR4096_IO_WriteAByte;
F_SPR4096_IO_WriteAByte:
// call F_SPR4096_IO_Initial_IO_FlashMode;// for test may be del
call F_IO_EndReadOrWrite; //add for test
call F_IO_Set_Start_Flag;
call F_IO_WriteAddrTO4096;
call F_WriteDataTO4096;
call F_IO_EndReadOrWrite;//F_EndWrite;
call F_Delay_Program_Time;
retf;
//===========================================================================================
// Function Name: SPR4096_IO_ReadAByte
// Description :
// Syntax : unsigned int SPR4096_IO_ReadAByte (unsigned long int Addr);
// Input :
// Output :
// Destroy :
// Used :
//==========================================================================================
.PUBLIC _SPR4096_IO_ReadAByte;
_SPR4096_IO_ReadAByte:
push bp to [sp];
bp = sp + 1;
push r2,r4 to [sp];
r1=[bp+3]; //low addr
r2=[bp+4]; //high addr
call F_SPR4096_IO_ReadAByte;
pop r2,r4 from [sp];
pop bp from [sp];
retf;
//===========================================================================================
// Function Name: SPR4096_IO_ReadAByte
// Description :
// Syntax : call SPR4096_IO_ReadAByte;
// Input : r1:low addr(16bit);r2:high addr(8bit);
// Output :
// Destroy :
// Used :
//==========================================================================================
.PUBLIC F_SPR4096_IO_ReadAByte;
F_SPR4096_IO_ReadAByte:
r2|=0x0100; //set read flag
// call F_SPR4096_IO_Initial_IO_FlashMode;// for test may be del
call F_IO_EndReadOrWrite; //add for test
call F_IO_Set_Start_Flag;
call F_IO_WriteAddrTO4096;
call F_IO_ReadDataFrom4096;
call F_IO_Set_SDA_LowOutPut;
call F_IO_EndReadOrWrite;
r1=[R_IO_ReadData];
retf;
//===========================================================================================
// Function Name:
// Description :
// Syntax :
// Input :
// Output :
// Destroy :
// Used :
//==========================================================================================
F_IO_Set_Start_Flag:
push r1 to [sp];
//set communication start flag;
r1=[P_SDA_Buffer];
r1 &=C_SDA_PIN^0xffff;
[P_SDA_Buffer]=r1; //set SDA pin low
call F_BringAClockDelay;
r1=[P_SCK_Buffer];
r1 &=C_SCK_PIN^0xffff;
[P_SCK_Buffer]=r1; //set SCK pin low
pop r1 from [sp];
retf
//===========================================================================================
// Function Name:
// Description :
// Syntax :
// Input :
// Output :
// Destroy :
// Used :
//==========================================================================================
F_IO_ReadDataFrom4096:
push r1,r2 to [sp];
//set SDA pin to input with float;
r1=[P_SDA_Attrib];
r1|=C_SDA_PIN;
[P_SDA_Attrib]=r1;
r1=[P_SDA_Dir];
r1&=C_SDA_PIN^0xFFFF;
[P_SDA_Dir]=r1;
r1=[P_SDA_Buffer];
r1&=C_SDA_PIN^0xFFFF;
[P_SDA_Buffer]=r1;
r1=0;
r4=8;
L_Save_8bit_Data:
r1 =r1 lsl 1;
r2=[P_SDA_Data];
cmp r4,1
JE L_BringAEndClock;
call F_BringAClock;
jmp L_BringAClock;
L_BringAEndClock:
call F_BringAEndClock;
L_BringAClock:
r2&=C_SDA_PIN;
jz L_Data_Bit_is_zero;
r2=0x0001;
r1+=r2;
L_Data_Bit_is_zero:
r4-=1;
jnz L_Save_8bit_Data;
[R_IO_ReadData]=r1;
pop r1,r2 from [sp];
retf
//===========================================================================================
// Function Name:
// Description :
// Syntax :
// Input :
// Output :
// Destroy :
// Used :
//==========================================================================================
F_BringAClock:
push r1 to [sp];
//set sclk=0;
r1=[P_SCK_Buffer];
r1&=C_SCK_PIN^0xFFFF;
[P_SCK_Buffer]=r1;
call F_BringAClockDelay;
//set sclk=1;
r1|=C_SCK_PIN;
[P_SCK_Buffer]=r1;
call F_BringAClockDelay;
//set sclk=0;
r1&=C_SCK_PIN^0xFFFF;
[P_SCK_Buffer]=r1;
pop r1 from [sp];
retf;
//===========================================================================================
// Function Name:
// Description :
// Syntax :
// Input :
// Output :
// Destroy :
// Used :
//==========================================================================================
F_BringAClockDelay:
push r1 to [sp];
r1=5;
L_BringAClockDelay:
r1-=1;
JNZ L_BringAClockDelay;
pop r1 from [sp];
retf;
//===========================================================================================
// Function Name:
// Description :
// Syntax :
// Input : r1: low addr(16 bits); r2: high addr(9 bits);
// Output :
// Destroy :
// Used :
//==========================================================================================
F_IO_WriteAddrTO4096:
push r1,r4 to [sp];
r3=0x9;
L_Send9BitAddr:
r4=r2&0x0100;
JZ L_9BitAddr_Is_Zero;
r4=[P_SDA_Buffer];
r4|=C_SDA_PIN;
[P_SDA_Buffer]=R4; //Set SDA to high;
call F_BringAClock;
jmp L_Send9BitAddr_Next;
L_9BitAddr_Is_Zero:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -