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

📄 lpc900spi.c

📁 MFRC522 单片机读写程序
💻 C
字号:
/**************************************Copyright (c)*************************************
**                              广州周立功单片机发展有限公司
**                                    研    究    所
**                                       产品一部 
**
**                                http://www.zlgmcu.com
**
**--------------文件信息----------------------------------------------------------------
** 文 件 名:    LPC900SPI.C
** 文件描述:    LPC900SPI
** 版    本:    V1.0 
** 创 建 人:    朱旻
** 创建日期:    xxxx.xx.xx
** 最后修改日期:
**=======================================================================================
**-----------------修改记录--------------------------------------------------------------
** 修改内容:    1、 修改文件结构
** 当前版本:    
** 修 改 人:    曾本森
** 修改日期:    2007.09.22
** 注    意: 
****************************************************************************************/
#define LPC900SPI_GLOBALS
#include "Reg931.h"
#include "PN511Reg.h"
#include "LPC900SPI.h"
/****************************************************************************************
** 函数原型:    void SPI_Init()
** 函数功能:    SPI 初始化
** 入口参数:    -
** 出口参数:    -
** 返 回 值:    -
** 描   述:    
****************************************************************************************/
void SPI_Init()
{
	P2M1 &= 0xc3;
    P2M2 &= 0xc3;
	CFGNSS();
	SPCTL = 0xd0;	                    // 忽略SS,SPI使能,MSB先发送,主模式,速度为CCLK/4
	SPSTAT = 0xc0;
}
/****************************************************************************************
** 函数原型:    unsigned char spi_transceive(unsigned char out)
** 函数功能:    SPI数据发送
** 入口参数:    -
** 出口参数:    -
** 返 回 值:    -
** 描   述:    
****************************************************************************************/
unsigned char spi_transceive(unsigned char out)
{
	SPDAT = out;	                    // 发送
	while(!(SPSTAT & 0x80));	        // 等待SPIF置位
	SPSTAT = 0x80;
	return SPDAT;
}

/****************************************************************************************
** 函数原型:    void RcSetReg(unsigned char RegAddr, unsigned char RegVal)
** 函数功能:    向SPI从机写入数据
** 入口参数:    unsigned char RegAddr       ; 从机地址
**              unsigned char RegVal        ; 写入的值
** 出口参数:    -
** 返 回 值:    -
** 描   述:    
****************************************************************************************/
void RcSetReg(unsigned char RegAddr, unsigned char RegVal)
{
    MF_NSS = 0;
	spi_transceive(RegAddr<<1);
	spi_transceive(RegVal);
	MF_NSS = 1;
}

/****************************************************************************************
** 函数原型:    unsigned char RcGetReg(unsigned char RegAddr)
** 函数功能:    从SPI从机指定的地址读出数据
** 入口参数:    unsigned char RegAddr       ; 从机地址
** 出口参数:    -
** 返 回 值:    读出的值
** 描   述:    
****************************************************************************************/
unsigned char RcGetReg(unsigned char RegAddr)
{
    unsigned char RegVal;

	MF_NSS = 0;
	spi_transceive(0x80|(RegAddr<<1));
	RegVal = spi_transceive(0);
	MF_NSS = 1;
	return RegVal;		//返回接收数据
}

/****************************************************************************************
** 函数原型:    void RcModifyReg(unsigned char RegAddr, unsigned char ModifyVal, 
**                               unsigned char MaskByte)
** 函数功能:    修改SPI从机中指定地址的位
** 入口参数:    unsigned char RegAddr       ; 从机地址
**              unsigned char ModifyVal     ; 修改模式(置位/清位)
**              unsigned char MaskByte      ; 修改的位(置1有效)
** 出口参数:    -
** 返 回 值:    -
** 描   述:    
****************************************************************************************/
void RcModifyReg(unsigned char RegAddr, unsigned char ModifyVal, unsigned char MaskByte)
{
    unsigned char RegVal;

    RegVal = RcGetReg(RegAddr);
    if(ModifyVal)
    {
        RegVal |= MaskByte;
    }
    else
    {
        RegVal &= (~MaskByte);
    }
    RcSetReg(RegAddr, RegVal);
}
/****************************************************************************************
** 函数原型:    void ReadFIFO(unsigned char idata *DataBfr,unsigned char Len)
** 函数功能:    读FIFO中的数据
** 入口参数:    unsigned char Len           ; 读出的字节数
** 出口参数:    unsigned char idata *DataBfr; 读出的数据
** 返 回 值:    -
** 描   述:    
****************************************************************************************/
void ReadFIFO(unsigned char idata *DataBfr,unsigned char Len)
{
	unsigned char i;

	if(Len == 0)
		return;

	MF_NSS = 0;
	spi_transceive(0x80|(JREG_FIFODATA<<1));

	for(i=0;i<(Len-1);i++)
	{
		DataBfr[i] = spi_transceive(0x80|(JREG_FIFODATA<<1));	//连续接收数据
	}
	DataBfr[i] = spi_transceive(0);	//接收最后一个数据
	MF_NSS = 1;
}
/****************************************************************************************
** 函数原型:    void ReadFIFO(unsigned char idata *DataBfr,unsigned char Len)
** 函数功能:    向FIFO中写入数据
** 入口参数:    unsigned char idata *DataBfr; 写入的数据
**              unsigned char Len           ; 写入的字节数
** 出口参数:    
** 返 回 值:    -
** 描   述:    
****************************************************************************************/
void WriteFIFO(unsigned char idata *DataBfr,unsigned char Len)
{
	unsigned char i;
	
	if(Len == 0)
		return;

	MF_NSS = 0;
	spi_transceive(JREG_FIFODATA<<1);
	for(i=0;i<Len;i++)
	{
		spi_transceive(DataBfr[i]);
	}
	MF_NSS = 1;
}


⌨️ 快捷键说明

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