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

📄 spi.c

📁 TIDSP2407的CAN总线例程
💻 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 + -