📄 ssp.c
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: SSP.c
**创 建 人:
**最后修改日期:
**描 述: LPC2300硬件SSP软件包,包含主机和从机的操作
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: zhangbin
** 版 本: v1.00
** 日 期: 2007-3-30
** 描 述: LPC2300硬件SSP软件包,包含主机和从机的操作.
** 说明:只对SSP0进行了设置。
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
** 使用说明:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "SSP.h"
#define SCK0 (1 << 15) // SCK0 与 P0.15复用
#define SSEL0 (1 << 16) // SSEL0 与 P0.16复用
#define MISO0 (1 << 17) // MISO0 与 P0.17复用
#define MOSI0 (1 << 18) // MOSI0 与 P0.18复用
/*********************************************************************************************************
**函数名称:SSP_Init
**函数功能:初始化SSP控制器
**入口参数:Type 通信格式
** 0--SPI
** 1--SSI
** 2--Microwire
** MODE 模式位
** 0 从机
** 非0 主机
** F_ssp SSP通信速率
** INT_En SSP中断使能控制字节,按位来操作
** bit0--接收溢出中断
** bit1--超时中断
** bit2--Rx FIFO至少有一半为满时,产生中断
** bit3--Tx FIFO至少有一半为空时,产生中断
**出口参数:无
**说明:在SPI模式下,默认CPHA=0,CPOL=1,数据位数默认为8位
** 通信速率限制在Fpclk/(254*256)~Fpclk/2
** 如果通信格式参数错误,则默认为SPI格式。
********************************************************************************************************/
#define SSPCR1_SSE 1 << 1 // SSP使能
void SSP_Init(void)
{
PCONP |= (1 << 21); // 在外设功率控制寄存器里使能SSP外设,默认情况下,该外设已被使能
/* 初始化P1.20、P1.21、P1.23、P1.24为SSP接口引脚,不用另外的IO口作从机选择线,直接用SSEL1完成片选595的功能*/
PINSEL3 |= (0x03 << 8)|(0x03 << 10)|(0x03 << 14)|(0x03 << 16);
/* 设置数据长度为8位,帧格式SPI,总线空闲时时钟线为高电平,第一个时钟沿采样,位速率为默认值。 */
SSP0CR0 = 0x00000047;
SSP0CPSR = 0x02; // 设置SSP从Pclk获得的分频值,主模式下有效, 最小值为0x02
SSP0CR1 = SSPCR1_SSE; // 设置SSP为主机模式,不使用回写模式,并使能
}
/*********************************************************************************************************
**函数名称:uint8 SSP_SendByte(uint8 data)
**函数功能:SSP接口向总线发送1字节数据
**入口参数:data 待发送的数据
**出口参数:接收到的数据
********************************************************************************************************/
uint8 SSP_SendByte(uint8 data)
{
while ( (SSP0SR & 0x02) == 0 ); // 等待发送FIFO留出空间
SSPDR = data;
while((SSPSR & 0x01) == 0); //等待TFE置位,即发送FIFO空
return(SSPDR);
}
/*********************************************************************************************************
**函数名称:uint8 SSP_RcvByte(void)
**函数功能:SSP接口从总线接收1字节数据
**入口参数:无
**出口参数:接收到的数据
********************************************************************************************************/
uint8 SSP_RcvByte(void)
{
while((SSPSR & 0x04) == 0); //等待RFF置位,即接收FIFO不为空
return(SSPDR);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -