?? 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 + -