📄 spi_config.c
字号:
#include "reg24le1.h"
#include "config.h"
//给主SPI接口的一些状态的宏定义
#define txFifoReady (SPIMSTAT&0X01)
#define rxDataReady (SPIMSTAT&0X04)
#define txFifoEmpty (SPIMSTAT&0x02)
#define rxFifoFull (SPIMSTAT&0x08)
//给从SPI接口的一些状态的宏定义
#define csnHigh (SPISSTAT&0x20)
#define csnLow (SPISSTAT&0x10)
#define spiSlaveDone (SPISSTAT&0x01)
//定义函数
void mspiconfig() /*SPI的配置函数*/
{
SPIMCON0=(0x01<<4)|0x01;/*配置SPI时钟为1/4·ckMCU, MSBit first, LSBit last. 使能SPI*/
SPIMCON1=0x0f;/*禁止所有SPI中断 */
}
//配置从SPI接口的寄存器
void sspiconfig()
{
SPISCON0=0x01; //使能SLAVE SPI
}
//主机传输一个数据
unsigned char transmit(unsigned char dat)
{
unsigned da;
CSN=0;
if(txFifoReady)
SPIMDAT=dat;
/* else
{
while(!txFifoReady);
SPIMDAT=dat;
}
if(rxDataReady)
da=SPIMDAT ;
CSN=1; */
delay(5);
return da;
}
//从机接受一个数据
unsigned char getdat()
{
unsigned char dat;
if(spiSlaveDone)//如果有传输
dat=SPISDAT;
return dat;
}
/*配置对应的IO口*/
void ioconfig()
{
//master spi
P1DIR&=0xC3;/*配置P12,P13,P14,P15为输出*/
P1DIR|=0X40;//P16为输入
CSN=1;
//slave spi
P1DIR&=0xfe; //配置SSPI的端口方向P00输出 SCSN
P1DIR|=0X02; //MISO
P0DIR|=0X80; //MOSI
P0DIR|=0X20; //SCLK
P0DIR|=0X01; //配置P00为按键输入
P00=1;
LED=0; /*低输出*/
}
/*配置串口*/
void uart()
{
CLKCTRL = 0x28; /*设置16M时钟*/
CLKLFCTRL = 0x01; /*设置32.768K时钟*/
P0DIR &= 0xF7; /* P03 (TxD) 输出 */
P0DIR |= 0x10; // P04 (RxD) 输入 */
P0|=0x18;
S0CON = 0x50;
PCON |= 0x80; // SMOD = 1
WDCON |= 0x80; // Select internal baud rate generator
S0RELL = 0xFB;
S0RELL = 0xF3; // BAUD_38K4
}
/*延时函数*/
void delay(unsigned int dx)
{
int dj;
for(;dx>0;dx--)
for(dj=120;dj>0;dj--)
{
;
}
}
/*打印一个字符*/
void putch(char ch)
{
S0BUF=ch;
while(!TI0);
TI0=0;
}
/*字符串的显示*/
void puts(char *str)
{
while(*str!='\0')
{
putch(*str++);
}
}
unsigned char keyscan()
{
static char f=0;
P0CON=0XD0; //设置P00为输入
if(!P00)
{
delay(5);
if(!P00)
{
while(!P00);
if(f)
f=0;
else
f=1;
return (f);
}
}
return f;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -