📄 spi.c
字号:
#include "config.h"
const u32_t MCP2515_SCK = (1 << 22); //P1.22 SCK
const u32_t MCP2515_CS = (1 << 11); //P0.11 CS
const u32_t MCP2515_SO = (1 << 12); //P0.12 SO
const u32_t MCP2515_SI = (1 << 13); //P0.13 SI
const u32_t X5043_SCK = (1 << 20); //P0.20 SCK
const u32_t X5043_CS = (1 << 23); //P0.23 CS
const u32_t X5043_SO = (1 << 28); //P1.28 SO
const u32_t X5043_SI = (1 << 29); //P1.29 SI
const u32_t ENC28J60_SCK = (1 << 17); //P0.17 SCK
const u32_t ENC28J60_CS = (1 << 16); //P0.16 CS
const u32_t ENC28J60_SO = (1 << 30); //P1.30 SO
const u32_t ENC28J60_SI = (1 << 20); //P1.20 SI
/*******************************************************************************
*名称: IniSPI() 初始化SPI
*功能: 初始化
*******************************************************************************/
void IniSPI ( void )
{
OS_ENTER_CRITICAL();
//设置P0.13 SI P0.12 SO P0.11 CS(MCP2515)//P0.20 SCK|P0.23 CS(X5403)// P0.17 SCK |P0.16 CS(ENC28J60)
//设置SO,SI,CS,SCK为GPIO(X5403)
PINSEL2 = (PINSEL2 & 0xfffffff0); //无JTAG,全为GPIO
IO0DIR |= MCP2515_CS | MCP2515_SI; //SI,CS输出(MCP2515) P0.13 SI P0.11 CS
IO1DIR |= MCP2515_SCK; //SCK输出 P1.22 SCK
IO0DIR &=~(MCP2515_SO); //SO输入 P0.12 SO
IO1CLR |= MCP2515_SCK; //SK=0
IO0CLR |= MCP2515_SI; //SI=0
IO0DIR |= X5043_SCK | X5043_CS; //SCK,CS输出(X5043) P0.20 SCK|P0.23 CS
IO1DIR |= X5043_SI; //SI输出 P1.29 SI
IO1DIR &=~(X5043_SO); //SO输入 P1.28 SO
IO0CLR |= X5043_SCK; //SK=0
IO1CLR |= X5043_SI; //SI=0
IO0DIR |= ENC28J60_SCK | ENC28J60_CS; //SCK,CS输出(ENC28J60) P0.17 SCK |P0.16 CS
IO1DIR |= ENC28J60_SI; //SI输出 P1.20 SI
IO1DIR &=~(ENC28J60_SO); //SO输入 P1.30 SO
IO0CLR |= ENC28J60_SCK; //SK=0
IO1CLR |= ENC28J60_SI; //SI=0
OS_EXIT_CRITICAL();
}
/*******************************************************************************
*名称: WriteSPI() 写SPI一个字节
*功能: 写SPI一个字节
const u32_t MCP2515_SCK = (1 << 22); //P1.22 SCK
const u32_t MCP2515_CS = (1 << 11); //P0.11 CS
const u32_t MCP2515_SO = (1 << 12); //P0.12 SO
const u32_t MCP2515_SI = (1 << 13); //P0.13 SI
*******************************************************************************/
void WriteSPI (u8_t data)
{
u8_t i=0;
IO1CLR |= MCP2515_SCK; //SK=0
for ( i=0; i<8 ;i++ )
{
if ( (data & 0x80)==0 )
{
IO0CLR |= MCP2515_SI; //SI=0
}
else
{
IO0SET |= MCP2515_SI; //SI=1
}
IO1SET |= MCP2515_SCK; //SK=1
data = data << 1;
IO1CLR |= MCP2515_SCK; //SK=0
}
}
/*******************************************************************************
*名称: ReadSPI() 读SPI一个字节
*功能: 读SPI一个字节
const u32_t MCP2515_SCK = (1 << 22); //P1.22 SCK
const u32_t MCP2515_CS = (1 << 11); //P0.11 CS
const u32_t MCP2515_SO = (1 << 12); //P0.12 SO
const u32_t MCP2515_SI = (1 << 13); //P0.13 SI
*******************************************************************************/
u8_t ReadSPI ( void )
{
u8_t i=0;
u32_t bdata1=0;
u8_t cdata = 0;
IO1CLR |= MCP2515_SCK; //SK=0
for ( i=0; i<8 ;i++ )
{
IO1SET |= MCP2515_SCK; //SK=1
cdata = cdata << 1;
bdata1 = IO0PIN & MCP2515_SO; //SO
if ( bdata1)
{
cdata = cdata | 0x01;
}
else
{
cdata = cdata & (~0x01);
}
IO1CLR |= MCP2515_SCK; //SK=0
}
return cdata;
}
/*******************************************************************************
*名称: X5043_WriteSPI() 写SPI一个字节
*功能: 写SPI一个字节
const u32_t X5043_SCK = (1 << 20); //P0.20 SCK
const u32_t X5043_CS = (1 << 23); //P0.23 CS
const u32_t X5043_SO = (1 << 28); //P1.28 SO
const u32_t X5043_SI = (1 << 29); //P1.29 SI
*******************************************************************************/
void X5043_WriteSPI (u8_t data)
{
u8_t i=0;
IO0CLR |= X5043_SCK; //SK=0
for ( i=0; i<8 ;i++ )
{
if ( (data & 0x80)==0 )
{
IO1CLR |= X5043_SI; //SI=0
}
else
{
IO1SET |= X5043_SI; //SI=1
}
IO0SET |= X5043_SCK; //SK=1
data = data << 1;
IO0CLR |= X5043_SCK; //SK=0
}
}
/*******************************************************************************
*名称: X5043_ReadSPI() 读SPI一个字节
*功能: 读SPI一个字节
const u32_t X5043_SCK = (1 << 20); //P0.20 SCK
const u32_t X5043_CS = (1 << 23); //P0.23 CS
const u32_t X5043_SO = (1 << 28); //P1.28 SO
const u32_t X5043_SI = (1 << 29); //P1.29 SI
*******************************************************************************/
u8_t X5043_ReadSPI ( void )
{
u8_t i=0;
u32_t bdata1=0;
u8_t cdata = 0;
IO0CLR |= X5043_SCK; //SK=0
for ( i=0; i<8 ;i++ )
{
IO0SET |= X5043_SCK; //SK=1
cdata = cdata << 1;
bdata1 = IO1PIN;
bdata1 = bdata1 & X5043_SO; //SO
if ( bdata1)
{
cdata = cdata | 0x01;
}
else
{
cdata = cdata & (~0x01);
}
IO0CLR |= X5043_SCK; //SK=0
}
return cdata;
}
/*******************************************************************************
*名称: ENC28J60_WriteSPI() 写SPI一个字节
*功能: 写SPI一个字节
const u32_t ENC28J60_SCK = (1 << 17); //P0.17 SCK
const u32_t ENC28J60_CS = (1 << 16); //P0.16 CS
const u32_t ENC28J60_SO = (1 << 30); //P1.30 SO
const u32_t ENC28J60_SI = (1 << 20); //P1.20 SI
*******************************************************************************/
void ENC28J60_WriteSPI (u8_t data)
{
u8_t i=0;
IO0CLR |= ENC28J60_SCK; //SK=0
for ( i=0; i<8 ;i++ )
{
if ( (data & 0x80)==0 )
{
IO1CLR |= ENC28J60_SI; //SI=0
}
else
{
IO1SET |= ENC28J60_SI; //SI=1
}
IO0SET |= ENC28J60_SCK; //SK=1
data = data << 1;
IO0CLR |= ENC28J60_SCK; //SK=0
}
}
/*******************************************************************************
*名称: ENC28J60_ReadSPI() 读SPI一个字节
*功能: 读SPI一个字节
const u32_t ENC28J60_SCK = (1 << 17); //P0.17 SCK
const u32_t ENC28J60_CS = (1 << 16); //P0.16 CS
const u32_t ENC28J60_SO = (1 << 30); //P1.30 SO
const u32_t ENC28J60_SI = (1 << 20); //P1.20 SI
*******************************************************************************/
u8_t ENC28J60_ReadSPI ( void )
{
u8_t i=0;
u32_t bdata1=0;
u8_t cdata = 0;
IO0CLR |= ENC28J60_SCK; //SK=0
for ( i=0; i<8 ;i++ )
{
IO0SET |= ENC28J60_SCK; //SK=1
cdata = cdata << 1;
bdata1 = IO1PIN & ENC28J60_SO; //SO
if ( bdata1)
{
cdata = cdata | 0x01;
}
else
{
cdata = cdata & (~0x01);
}
IO0CLR |= ENC28J60_SCK; //SK=0
}
return cdata;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -