📄 spi.c
字号:
/****************************************Copyright (c)*****************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: SSP.c
**创 建 人:
**最后修改日期:
**描 述: LPC2400硬件SSP软件包,包含主机和从机的操作
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: zhangbin
** 版 本: v1.00
** 日 期: 2007-3-30
** 描 述: LPC2400硬件SSP软件包,包含主机和从机的操作
** 说明: 只对SSP0进行了设置
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: Li Baihua
** 版 本: v1.01
** 日 期: 2008-07-01
** 描 述: LPC2400硬件SPI软件包,包含主机和从机的操作
** 说明: 只对SPI进行了设置
**------------------------------------------------------------------------------------------------------
**********************************************************************************************************/
#include "config.h"
#define SPI_CS (1 << 16) /* P0.16口为片选脚 */
#define CE_Low() (IO0CLR |= SPI_CS) /* 选中从器件 */
#define CE_High() (IO0SET |= SPI_CS)
const uint32 LED_TBL[] =
{
0xFF, 0x00, /* 全部熄灭后,再全部点亮 */
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, /* 依次逐个点亮 */
0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, /* 依次逐个叠加 */
0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, /* 依次逐个递减 */
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, /* 两个靠拢后分开 */
0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 /* 从两边叠加后递减 */
};
/**********************************************************************************************************
** 函数名称: Delay
** 函数功能: 长软件延时
** 入口参数: dly 延时参数,值越大,延时越久
** 出口参数: 无
**********************************************************************************************************/
void Delay(uint32 dly)
{
uint32 i = 0;
for (; dly > 0; dly--)
for (i = 0; i < 5000; i++);
}
/**********************************************************************************************************
** 函数名称: SPIInit
** 功能说明: 初始化LPC2400系列ARM的SPI引脚及寄存器
** 入口参数: 无
** 出口参数: 无
**********************************************************************************************************/
void SPIInit(void)
{
/* 初始化SPI引脚 */
PINSEL0 = 0;
IO0DIR |= SPI_CS; /* 设置SPI的片选引脚 */
PINSEL0 |= 0xc0000000; /* 设置P0.15脚为SCK脚 */
PINSEL1 &= (~(0x03)); /* 设置P0.16引脚为SPI引脚 */
PINSEL1 = (0x03 << 2) | (0x03 << 4); /* 设置P0.17、P0.18引脚为SPI引脚 */
/* 初始化SPI寄存器 */
S0SPCCR = 0x48; /* 设置SPI时钟分频 */
S0SPCR = (0 << 2) | /* SPI控制器每次传输8位数据 */
(0 << 3) | /* CPHA = 0, SCK第一个时钟沿采样 */
(0 << 4) | /* CPOL = 0, SCK 为高有效 */
(1 << 5) | /* MSTR = 1, SPI 处于主模式 */
(1 << 6) | /* LSBF = 0, SPI 数据传输MSB在先 */
(0 << 7); /* SPIE = 0, SPI 中断被禁止 */
}
/**********************************************************************************************************
** 函数名称: SPISndByte
** 函数功能: 通过硬件SPI接口发送一个字节
** 入口参数: data
** 出口参数: 无
**********************************************************************************************************/
void SPISndByte(uint8 data)
{
volatile unsigned long temp = 0;
CE_Low();
S0SPDR = data;
while (0 == (S0SPSR & 0x80)); /* 等待SPIF置位,数据发送完毕 */
temp = S0SPSR; /* 通过读S0SPSR,清除SPIF标志 */
CE_High();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -