📄 atflashrdwt.c
字号:
#define EXT_FLASH_GLOBALS
#include "includes.h"
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
/*SPI接口初始化*/
void SPI_MasterInit(void)
{
DDRB |= (1<<PB0) |(1<<PB1)| (1<<PB2); /* 设置MOSI 和SCK 为输出,其他为输入 */
SPCR = (1<<SPE) | (1<<MSTR); /* 使能SPI 主机模式,设置时钟速率为fck/4 */
}
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
void SPITransfer(unsigned char data)
{
SPDR = data;
while (!(SPSR & (1<<SPIF))); /* 等待传输结束 */
}
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
unsigned char SPIReceive(void)
{
SPDR=0x00;
while (!(SPSR & (1<<SPIF))); /* 等待传输结束 */
return SPDR;
}
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
/*SPI数据发送*/
void SPI_MainMPageRead(unsigned char AD1,unsigned char AD2,unsigned char AD3,unsigned char *p)
{
unsigned char i;
PORTB &= ~(1 << 0); /*开始*/
SPITransfer(0xD2);
SPITransfer(AD1);
SPITransfer(AD2);
SPITransfer(AD3);
/*4 dont care byte*/
SPITransfer(0x00);
SPITransfer(0x00);
SPITransfer(0x00);
SPITransfer(0x00);
for(i=0x00;i<32;i++)
{
*(p+i)=SPIReceive( );
}
PORTB |= (1 << 0); /*结束*/
}
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
void SPI_BufferWrite(unsigned char ByteA1,unsigned char ByteA2,unsigned char *p)
{
unsigned char i;
PORTB &= ~(1 << 0); /*开始*/
SPITransfer(0x84);
SPITransfer(0x00);
SPITransfer(ByteA1);
SPITransfer(ByteA2);
for(i=0;i<32;i++)
{
SPITransfer(*(p+i));
}
PORTB |= (1 << 0); /*结束*/
}
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
void SPI_BufferToMainMPage(unsigned char PageA1,unsigned char PageA2)
{
PORTB &= ~(1 << 0); /*开始*/
SPITransfer(0x83);
SPITransfer(PageA1);
SPITransfer(PageA2);
SPITransfer(0x00);
PORTB |= (1 << 0); /*结束*/
}
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
void WriteBigStep(unsigned char Mode,int BigStep)
{
unsigned char Adress1,Adress2;
int page,byte;
page=Mode*100+BigStep/16;
byte=(BigStep%16)*32; //BigStep从0开始
Adress1 = byte/256;
Adress2 = byte%256;
SPI_BufferWrite(Adress1,Adress2,StepData);
if((byte>=480)||(DL_REALY_OVER))
{
page=page<<2;
Adress1 = page/256;
Adress2 = page%256;
SPI_BufferToMainMPage(Adress1,Adress2);
}
}
/************************************************************
Function Name: T0Close
Function: Timer0 close
Paramenter: None
Return value: None
Author: Chen yuan zhen May.30.2008
*************************************************************/
void Read32(unsigned char Mode,int BigStep)
{
unsigned char Adress1,Adress2,Adress3;
int page,byte;
page=Mode*100+BigStep/16;
byte=(BigStep%16)*32;
page=page<<2;
Adress1 = page/256;
Adress2 = page%256+byte/256;
Adress3 = byte%256;
SPI_MainMPageRead(Adress1,Adress2,Adress3,StepData);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -