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

📄 x5043.c

📁 dsp2407,采集卡
💻 C
字号:
//***************************************************//
#define		__X5043_INC_
#include 	".\DAT\DEF.H"

//***************************************************//
// CLRWDT
//***************************************************//
void ClrWdt(void)
{
	ClrX_CS();
	SpiDelays();
	SetX_CS();
}

//***************************************************//
// 向SPI总线开始
//***************************************************//
void SpiStart(void)
{
	SetX_CS();
	ClrX_SCK();
	SetX_SO();
	SpiDelays();

	ClrX_CS();
	SpiDelays();
}

//***************************************************//
// 向SPI总线结束
//***************************************************//
void SpiOver(void)
{
	SetX_CS();
	SpiDelays();

	SetX_SO();
	ClrX_SCK();
}

//***************************************************//
// 向SPI总线写入WREN_COMMAND
//***************************************************//
void SpiWriteEnable(void)
{
	SpiStart();
	WP_Disable();
	SpiSendByte(WREN_COMMAND);
	SpiOver();
}

//***************************************************//
// 向SPI总线写入WRDI_COMMAND
//***************************************************//
void SpiWriteDisable(void)
{
	SpiStart();
	SpiSendByte(WRDI_COMMAND);
	WP_Enable();
	SpiOver();
}

//***************************************************//
// 读状态数据子程序
//***************************************************//
UINT SpiReadStatus(void)
{
	UINT rtn;

	SpiStart();
	SpiSendByte(READS_COMMAND);	// 送出控制字节(R/W=1)
	rtn=SpiRecByte();			// 读取一个字节的数据
	SpiOver();

	return(rtn);
}

//***************************************************//
// 写状态数据子程序
//***************************************************//
void SpiWriteStatus(UINT data)
{
	SpiWriteEnable();

	SpiStart();
	SpiSendByte(WRITES_COMMAND);// 送出控制字节(R/W=1)
	SpiSendByte(data);			// 读取一个字节的数据
	SpiOver();

	SpiWait();
	SpiWriteDisable();
}

//***************************************************//
// 读数据子程序
//***************************************************//
void SpiRead(array,adress,n)
UINT *array,adress,n;
{
	SpiStart();
	SpiSendByte(READ_COMMAND);	// 送出控制字节(R/W=1)
	SpiSendByte(adress);		// 送出控制字节(R/W=1)

	for(;n>0;n--,array++)
	{
		*array=SpiRecByte();		// 读取一个字节的数据
	}
	SpiOver();
}

//***************************************************//
// 写数据子程序
//***************************************************//
void SpiWrite(array,adress,n)
UINT *array,adress,n;
{
	UINT rtn;

	SpiWriteEnable();

	SpiStart();
	SpiSendByte(WRITE_COMMAND);	// 送出控制字节(R/W=1)
	SpiSendByte(adress);		// 送出控制字节(R/W=1)

	for(;n>0;n--,array++)
	{
		rtn=*array;
		SpiSendByte(rtn);		// 读取一个字节的数据
	}
	SpiOver();

	SpiWait();
	SpiWriteDisable();
}

//***************************************************//
// 向SPI总线写入数据子程序
//***************************************************//
void SpiSendByte(UINT data)
{
	UINT flag;

	for(flag=0x0080;flag!=0x00;flag/=2)
	{
		if(data&flag)
			SetX_SO();				// 如果相应的位为1,则SDA=1
		else
			ClrX_SO();				// 如果相应的位为0,则SDA=0
		SpiDelays();

		SetX_SCK();					// SCL=1,在SCL=1期间数据线上的状态必须保持不变
		SpiDelays();
		ClrX_SCK();					// IOPC0(SDA为输出)
	}
}

//***************************************************//
// 从SPI总线读取数据
//***************************************************//
UINT SpiRecByte(void)
{
	UINT  	rtn=0;
	UINT  	flag;
	UINT	sz;

	for(flag=0x0080;flag!=0x00;flag/=2)
	{
		ClrX_SCK();					// SCL=1
		SpiDelays();

		sz=X_SIIn();				// 取得应该读取的相应位
		if(sz)
			rtn|=flag;				// 若读取的相应位为1,则rtn值的相应位置1

		SetX_SCK();					// SCL=1,在SCL=1期间数据线上的状态必须保持不变
		SpiDelays();
	}
	return(rtn);
}

//***************************************************//
// SPI等待程序写入完成
//***************************************************//
void SpiWait(void)
{
	UINT count;

	count = 0;
	do
	{
		count++;
	}while((SpiReadStatus() & WIP) && (count < 100));
}

//***************************************************//
// SPI延时程序
//***************************************************//
void SpiDelays(void)
{
	//asm( " RPT #3 ");
	asm( " RPT #9 "); //2007-6-13
	asm( " NOP ");
}

⌨️ 快捷键说明

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