📄 spi.c
字号:
/*
* All rights reserved.
* atmel corporation data flash at45db161B driver.
*/
#ifndef __SPI_C__
#define __SPI_C__
//#pragma LARGE
#include "SPI.h"
#include "config.h"
#include <stdlib.h>
#include <intrins.h>
// AT45DB161 operate code define
#define AT45DB_BUFFER1_XFER 0x53
#define AT45DB_BUFFER2_XFER 0x55
#define AT45DB_BUFFER1_WRITE 0x84
#define AT45DB_BUFFER2_WRITE 0x87
#define AT45DB_WRITE_ONLY1 0x88
#define AT45DB_WRITE_ONLY2 0x89
#define AT45DB_PAGE_ERASE 0x81
#define AT45DB_STATUS_READ 0xd7
#define AT45DB_ARRAY_READ 0xE8
// Added by alex 2007/10/24
#define MAIN_TO_BUFFER1_TRANSFER 0x53
#define BUFFER1_WRITE_ONLY 0x84
#define BUFFER1_TO_MAIN_IN_ERASE 0x83
#define AUTO_PAGE_REWRITE 0x58
#define _at45db_begin() _nop_();\
_nop_();\
EE_CS = 0;
#define _at45db_end() EE_CS = 1;
void delay_ms(unsigned long count)
{
unsigned char i;
while (count--)
{
for (i=0; i<180; i++)
{
_nop_();
_nop_();
}
}
}
void _delayxms(unsigned short count)
{
unsigned char i;
while (count--)
{
for (i=0; i<120; i++)
{
_nop_();
}
}
}
void at45db_init()
{
_delayxms(100);
EE_RST = 1;
EE_CS = 1;
EE_SCK = 1;
EE_SO = 1;
EE_SI = 1;
}
void _at45db_write8(unsigned char udata) //small
{
unsigned char i;
for (i = 0; i < 8; i ++)
{
EE_SCK = 0;
if ((udata & 0x80) == 0x80)
{
EE_SO = 1;
}
else
{
EE_SO = 0;
}
udata = udata << 1;
EE_SCK = 1;
}
EE_SO = 0;
EE_SCK = 0;
}
unsigned char _at45db_read8() //small
{
//unsigned char i, rdata = 0x00;
unsigned char i;
xdata unsigned char rdata = 0x00;
//EE_SI = 1;
for (i = 0; i < 8; i ++)
{
EE_SCK = 1;
rdata = (rdata << 1) | EE_SI;
EE_SCK = 0;
}
return rdata;
}
unsigned char _at45db_check_busy()
{
unsigned char idle = 0x80;
unsigned short i = 1024;
while (i --) //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -