spi.c

来自「串行存储芯片AT45DB161B的驱动程序」· C语言 代码 · 共 120 行

C
120
字号
/*
 * 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 + =
减小字号Ctrl + -
显示快捷键?