📄 spi.c
字号:
/****************************************Copyright (c)**************************************************
** 四川唐门高新技术开发有限公司
** 研 发 部
** 独门暗器之孔雀翎研究室
**
** http://www.蜀中唐门.com
**
** 维护健康 信守诚诺
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: SPI.c
**创 建 人: 赖皮
**最后修改日期: 2007年1月29日
**描 述: μCOS-II下LPC213x的SPI主模式底层驱动中间件
** 去掉信号量判断,改为查询方式
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 赖皮
** 版 本: v1.0
** 日 期: 2007年1月29日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 赖皮
** 日 期: 2007年1月29日
** 描 述:
**
** LAI2005PI@126.com
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define IN_SPI
#include "config.h"
static OS_EVENT *SPISem;
/*********************************************************************************************************
** 函数名称: SPIInit
** 功能描述: 初始化SPI总线为主模式 全查询方式 SPI速度很快 未用MISO
** 输 入: Fdiv:用于设定总线频率(总线频率=Fpclk/Fdiv)
**
** 输 出:TRUE :成功
** FALSE:失败
** 调用模块: OSSemCreate
**
** 作 者: 赖皮
** 日 期: 2007年1月29日
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 SPIInit(uint8 Fdiv)
{
PINSEL0 = (PINSEL0 & 0xffffCCff) //| 0x5500; // 选择管脚为SPI口
| (0x01<<(4*2)) // P0.4连接SCK0
| (0x01<<(6*2)) // P0.6连接MOSI0
;
SPI_SPCCR = Fdiv & 0xfe; // 分频值
SPI_SPCR = (0 << 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样
(0 << 4) | // CPOL = 1, SCK 为低有效
(1 << 5) | // MSTR = 1, SPI 处于主模式
(0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先
(0 << 7) ; // SPIE = 0, SPI 中断被禁止
SPISem = OSSemCreate(1); // 用于互斥访问SPI总线
if (SPISem != NULL)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*********************************************************************************************************
** 函数名称: SPIStart
** 功能描述: 开始访问SPI
** 输 入: 无
**
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 赖皮
** 日 期: 2007年1月29日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SPIStart(void)
{
uint8 err;
OSSemPend(SPISem, 0, &err);
}
/*********************************************************************************************************
** 函数名称: SPIRW
** 功能描述: 读写SPI
** 输 入: Data:发送的数据
** 输 出: SPI接收的数据
** 作 者: 赖皮
** 日 期: 2007年1月29日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 SPIRW(uint8 Data)
{
SPI_SPDR = Data;
while( 0 == (SPI_SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕
return(SPI_SPDR);
}
/*********************************************************************************************************
** 函数名称: SPIEnd
** 功能描述: 访问SPI结束
** 输 入: 无
** 输 出: 无
** 作 者: 赖皮
** 日 期: 2007年1月29日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SPIEnd(void)
{
OSSemPost(SPISem);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -