📄 x5043.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 + -