📄 spi0.c
字号:
/****************************************Copyright (c)**************************************************
**
**
**
**
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: SPI0.c
**创 建 人: 李功周
**最后修改日期: 2008年12月18日
**描 述: SPI0 API 函数
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 李功周
** 版 本: v1.0
** 日 期: 2008年12月18日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
*/
#include <LPC2103.H>
/*******************************************************************
** 函数名称: void SPI_SendByte()
** 功能描述: 通过SPI接口发送一个字节
** 输 入: INT8U byte: 发送的字节
** 输 出: 无
**********************************************************************/
void SPI_SendByte(unsigned char byte)
{
S0SPDR = byte; /* 发送数据放入SPI数据寄存器 */
while(0 == (S0SPSR & 0x80)); /* 等待SPIF置位,即等待数据发送完毕 */
/* wait for SPIF being set, that is, wait for finishing of data being send */
byte = S0SPDR;
}
/**********************************************************************
** 函数名称: INT8U SPI_RecByte()
** 功能描述: 从SPI接口接收一个字节
** 输 入: 无
** 输 出: 收到的字节
*************************************************************************/
unsigned char SPI_RecByte(void)
{
S0SPDR = 0xfF;
while(0 == (S0SPSR & 0x80)); /* 等待SPIF置位,即等待收到数据 */
/* wait for SPIF being set, that is, wait for being received data */
return(S0SPDR); /* 读取收到的字节 read the byte received */
}
/************************************************************************
函数名称: void SD_SPIDelay()
** 功能描述: SPI总线延时
** 输 入: INT8U value: 延时值,不超过255
** 输 出: 无
*************************************************************************/
void SD_SPIDelay(int value)
{
int i;
for (i = 0; i < value; i++)
SPI_SendByte(0xFF); /* 发送0xFF clock out 0xFF */
}
/****************************************************************************
* 名 称:SPI0Init
* 功 能:SPI初始化。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void SPI0Init(void)
{
PINSEL0 &= ~((0x03 << 8) + (0x03 << 10) + (0x03 << 12) + (0x03 << 14));
PINSEL0 |= (0x01 << 8) + (0x01 << 10) + (0x01 << 12) + (0x01 << 14);
S0SPCCR = 128; /* 设置SPI时钟分频值为128 */
S0SPCR = (0 << 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样
(1 << 4) | // CPOL = 1, SCK 为低有效
(1 << 5) | // MSTR = 1, SPI 处于主模式
(0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先
(0 << 7); // SPIE = 0, SPI 中断被禁止
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -