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