📄 spi.c
字号:
#include <main.h>
#include "ex.h"
/*----------------------------------------------------------------------------*/
#define x5643cs0 RESET_BIT(PBDATDIR,2)//pin44,IOPB2,x5643_CS
#define x5643cs1 SET_BIT(PBDATDIR,2) //pin44,IOPB2,x5643_CS
#define RstWatchdog x5643cs1;x5643cs0
/*----------------------------------------------------------------------------*/
/*
+------------------------------------------------------------------------------+
函 数 名 : spi_init
功能描述 : SPI的初始化
函数原形 : void spi_init(U16 x)
参数说明 : x:0 ->上升沿input ; x:1 ->下降沿output
支持资源 :
作 者 : 桂林
最后更改日期: 2002-11-12
+------------------------------------------------------------------------------+
*/
void spi_init(U16 x)//x:0 ->上升沿input ; x:1 ->下降沿output
{
SPICCR = 0x0007;//8bit数据(SPIDAT)
if(x==0) SPICTL = 0x000e;//下降沿output
else SPICTL = 0x0006;//上升沿input
SPIBRR = ((40/1)-1);//=(SYSCLK/SPICLK)-1;40Mhz,1Mhz SPI CLK
SPIPRI = 0x0070;//free run
SPICCR = 0x0087;
}
/*
+------------------------------------------------------------------------------+
函 数 名 : x5643_init
功能描述 : x5643的初始化
函数原形 : void x5643_init(U16 x)
参数说明 : x:0 -> no watchdog ; x:1 -> 1.4s watchdog .
支持资源 :
作 者 : 桂林
最后更改日期: 2002-11-12
+------------------------------------------------------------------------------+
*/
void x5643_init(U16 x)//x:0 -> no watchdog ; x:1 -> 1.4s watchdog .
{
U16 tempi=0;
spi_init(0);
x5643cs0;delay_ms(1);
SPITXBUF = (6<<8);delay_15us(1);//WREN
//while(GET_BIT(SPISTS,6));tempi=SPIRXBUF;
x5643cs1;delay_ms(1);
x5643cs0;delay_ms(1);
SPITXBUF = (1<<8);delay_15us(1);//WRSR
if(x){SPITXBUF = (0x02<<8);}// 1.4s watchdog
else {SPITXBUF = (0x32<<8);}// no watchdog
delay_15us(1);
x5643cs1;delay_ms(1);
do
{
x5643cs0;delay_ms(1);
spi_init(0);
SPITXBUF = (5<<8);delay_15us(1);//RSDR
spi_init(1);delay_15us(10);
SPITXBUF = (0x55<<8);delay_15us(1);
tempi=SPIRXBUF;
x5643cs1;
}while(tempi & 0x01);
spi_init(0);
}
/*
+------------------------------------------------------------------------------+
函 数 名 : x5643_write8
功能描述 : x5643写函数(8位数据)
函数原形 : void x5643_write8(U16 addr,U16 x)
参数说明 : addr是数据地址,x是数据
支持资源 :
作 者 : 桂林
最后更改日期: 2002-11-13
+------------------------------------------------------------------------------+
*/
void x5643_write8(U16 addr,U16 x)//15ms
{
U16 tempi=0;
//x5643_init(0);
x5643cs0;delay_ms(1);
SPITXBUF = (6<<8);delay_15us(1);//WREN
x5643cs1;delay_ms(1);
x5643cs0;delay_ms(1);
SPITXBUF = (2<<8);delay_15us(1);//WRITE
SPITXBUF = (addr);delay_15us(1);
SPITXBUF = (addr<<8);delay_15us(1);
SPITXBUF = (x<<8);delay_15us(1);
x5643cs1;delay_ms(1);
do
{
x5643cs0;delay_ms(1);
spi_init(0);
SPITXBUF = (5<<8);delay_15us(1);//RSDR
spi_init(1);delay_15us(10);
SPITXBUF = (0x55<<8);delay_15us(1);
tempi=SPIRXBUF;
x5643cs1;
}while(tempi & 0x01);
spi_init(0);
}
/*
+------------------------------------------------------------------------------+
函 数 名 : x5643_read8
功能描述 : x5643读函数(8位数据)
函数原形 : U16 x5643_read8(U16 addr)
参数说明 : addr是数据地址
支持资源 :
作 者 : 桂林
最后更改日期: 2002-11-13
+------------------------------------------------------------------------------+
*/
U16 x5643_read8(U16 addr)//2ms
{
x5643cs0;delay_ms(1);
SPITXBUF = (3<<8);delay_15us(1);//READ
SPITXBUF = (addr);delay_15us(1);
SPITXBUF = (addr<<8);delay_15us(1);
spi_init(1);
SPITXBUF = (0x55<<8);delay_15us(1);
x5643cs1;delay_ms(1);
spi_init(0);
return(SPIRXBUF);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -