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

📄 flash_sub.c

📁 Avr Atmeg128汽车行驶记录仪 带有USB驱动 c语言
💻 C
字号:
#include "flash_sub.h"

uchar longdata[4];
uchar SEC[528];

void Flash_InIt(void)
{
	DDRG |=_BV(PG4)|_BV(PG3);
	PORTG = 0X18;
	DDRB |=_BV(DDB2)|_BV(DDB1)|_BV(DDB0); 
	SPCR |= _BV(SPE) |_BV(MSTR) |_BV(SPR1); 
}

void WriteSpi(uchar cData)
{
	uchar i;
//	CSFLASH_ON ;
	SPDR = cData;
	while(!(SPSR & _BV(SPIF)))
	;
//	i = SPSR;
//	SPDR = 0;
//	while(!(SPSR & _BV(SPIF)))
	;
//	i = SPSR;
	
//	CSFLASH_OFF;
	i = SPSR;
//	return i;
}

uchar ReadSpi(void)
{
	uchar i=0;
//	CSFLASH_ON;
	SPDR = 0;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
//	CSFLASH_OFF;
	i = SPDR;
	return i;
	
	
}

uchar GetFlashState(void)
{
    uchar i=0;       
	CSFLASH_ON ;
	SPDR = 0XD7;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	SPDR = 0;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	i = SPDR;
	CSFLASH_OFF;
	
	return i;
}

WriteBuff1(uchar *p)
{
	uint i=0,j=528,k;
	CSFLASH_ON;
	SPDR = 0X84;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	for(k=0;k<2;k++)
	{
		SPDR = 0;
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
	}
	for(k=0;k<j;k++)
	{
		SPDR = *(p+k);
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
	}
	CSFLASH_OFF;
	i = SPSR;

}

ReadBuff1(uchar *p)
{
	uint i=0,j=528,k;
	CSFLASH_ON;
	SPDR = 0XD4;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	for(k=0;k<2;k++)
	{
		SPDR = 0;
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
	}
	for(k=0;k<j;k++)
	{
		SPDR =0;
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
		*(p+k) = SPDR;
	}
	CSFLASH_OFF;
	i = SPSR;

}

//
//将指定缓冲区内容写入FLASH相应页
void StorePage(uint pageno,uchar *tab,uint cnt)
{
    uint i;
    (uint)longdata[0] = pageno << 2;
    CSFLASH_ON;
    WriteSpi(0x85);
    WriteSpi(longdata[0]);
    WriteSpi(longdata[1]);
    WriteSpi(0);
    for(i=0;i<512;i++)
    {
        WriteSpi(*tab);
		tab++;
    }
	for(i=512;i<cnt;i++)
	{ WriteSpi(0);
	}
    CSFLASH_OFF;
}

//
//读取FLASH页面到临时缓冲区
void LoadPage(uint pageno,uchar *tab,uint cnt)
{
    uint i=0;
    (uint)longdata[0] = pageno << 2;
    CSFLASH_ON;
    WriteSpi(0xD2);
    WriteSpi(longdata[0]);
    WriteSpi(longdata[1]);
    WriteSpi(0);
    WriteSpi(0);
    WriteSpi(0);
    WriteSpi(0);
    WriteSpi(0);
    for(i=0;i<cnt;i++)
    {
        *tab = ReadSpi();
		tab++;
    }
    CSFLASH_OFF;
}

⌨️ 快捷键说明

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