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

📄 spi.c

📁 μCOS-II下LPC213x的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 + -