?? spi.c
字號:
#include "Sys_Define.h"
#define PCLK 0x00000001
#define PCSN 0x00008000
#define PSO 0x00001000
#define PSI 0x00000800
#define P_SPI_MODE_CTRL (volatile unsigned int*)(0x88110000)
#define P_NAND_GPIO_SETUP (volatile unsigned int*)(0x8820002C)
#define P_NAND_GPIO_PULL (volatile unsigned int*)(0x88200030)
#define P_SPI_INTERFACE_SEL (volatile unsigned int*)(0x882000a4)
#define P_NAND_GPIO_INPUT (volatile unsigned int*)(0x8820006c)
void delay( U16 time )
{
U16 i;
for(i=0;i<time;i++);
}
//以下為使用軟件模擬SPI時序方式實現SPI的代碼
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/****************************************************************************************
* Function:
* Description: 初始化SPI接口,用軟件模擬時序方式實現SPI
* Syntax:
* Modify:
* parameter: 無
* Returns: 無
* Notes:
****************************************************************************************/
void InitSPI() //初始化SPI
{
*P_SPI_INTERFACE_SEL &= ~0x00000100; //禁能SPI
*P_SPI_MODE_CTRL = 0x0; //禁能
*P_NAND_GPIO_PULL |= 0x00009801;
*P_NAND_GPIO_SETUP |= 0x90018000;
*P_NAND_GPIO_SETUP &= ~0x08000000;
}
/****************************************************************************************
* Function:
* Description: 信號線上發送1字節數據
* Syntax:
* Modify:
* parameter: U8 ucData 要發送的1字節數據
* Returns: 無
* Notes:
****************************************************************************************/
void putSPIchar(char ucData)
{
U8 i;
*P_NAND_GPIO_SETUP &= ~PCLK; //時鐘線置0
for(i=8;i>0;)
{
i--;
if( (ucData>>i) & 0x01 )
{
*P_NAND_GPIO_SETUP |= PSO;
}
else
{
*P_NAND_GPIO_SETUP &= ~PSO;
}
delay(80); //60
*P_NAND_GPIO_SETUP |= PCLK;
delay(80);
*P_NAND_GPIO_SETUP &= ~PCLK;
}
}
/****************************************************************************************
* Function:
* Description: 信號線上接收1字節數據
* Syntax:
* Modify:
* parameter: 無
* Returns: 接收到的數據
* Notes:
****************************************************************************************/
U8 SPI_RB()
{
U8 i,ucRxData;
*P_NAND_GPIO_SETUP &= ~PCLK; //時鐘線置0
for(i=8;i>0;i--)
{
delay(10);
ucRxData <<=1;
*P_NAND_GPIO_SETUP |= PCLK;
if( (*P_NAND_GPIO_INPUT) & PSI )
{
ucRxData |= 1;
}
delay(10);
*P_NAND_GPIO_SETUP &= ~PCLK;
}
return ucRxData;
}
/****************************************************************************************
* Function:
* Description: SPI短地址寫,即地址為1字節,寫入的數據為1字節
* Syntax:
* Modify:
* parameter: U8 Address:需要寫入的寄存器地址
U8 *DataPtr:需要寫入的數據的指針
* Returns: 無
* Notes:
****************************************************************************************/
void putSPIchar2(U8 Address, U8 Data)
{
*P_NAND_GPIO_SETUP &= ~PCSN; //使能線置0
delay(10);
putSPIchar(Address);
putSPIchar(Data);
*P_NAND_GPIO_SETUP |= PCSN; //使能線置1
}
/****************************************************************************************
* Function:
* Description: SPI短地址讀,即地址為1字節,讀出的數據為1字節
* Syntax:
* Modify:
* parameter: U8 Address:需要讀的寄存器地址
U8 *DataPtr:讀出的數據存放的指針
* Returns: 無
* Notes:
****************************************************************************************/
unsigned char getSPIchar(unsigned char Address)
{
unsigned char Data;
*P_NAND_GPIO_SETUP &= ~PCSN; //使能線置0
delay(10);
putSPIchar(Address);
Data = SPI_RB();
*P_NAND_GPIO_SETUP |= PCSN; //使能線置1
return Data;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -