c8051spi.c
来自「关于新华龙C8051f020的spi和ad5620的驱动」· C语言 代码 · 共 68 行
C
68 行
void AD_READ(void) //读AD数据
{ unsigned char temp,clear;
unsigned int i,ad1,ad2,ad0;
SELECT_AD; //选通AD芯片
SPDR = 0x00; //指令通道0
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
SPDR = 0x00;
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
temp = SPDR;
NOSELECT_AD;
SELECT_AD; //选通AD芯片
SPDR = 0x08;
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
ad0=(unsigned int)(temp*256)+clear;
SPDR = 0x08; //指令通道1
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
temp=SPDR;
NOSELECT_AD;
SELECT_AD; //选通AD芯片
SPDR = 0x10; //指令通道2
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
ad1=(unsigned int)(temp*256)+clear;
SPDR = 0x10;
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
temp=SPDR;
NOSELECT_AD;
SELECT_AD; //选通AD芯片
SPDR = 0x00; //指令通道0
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
ad2=(unsigned int)(temp*256)+clear;
SPDR = 0x00;
while (!(SPSR&(1<<SPIF)));
NOSELECT_AD;
}
void portini(void) //SPI端口初始化
{
XBR0=0X02;
XBR1=0X40;
P0MDOUT=0X00;
}
void spiini(void) //设置3线SPI使能和SPI串口时钟频率为了和cs5463兼容
{
SPI0CKR=sysclk/(2*Fsck)-1;
SPI0CFG=0x47; //CKPHA CKPOL BC2 BC1 BC0 SPIFRS2 SPIFRS1 SPIFRS0
//时钟相位 时钟极性 指示发送到几位 数据帧有几位
//
//
SPI0CN=0x03; //SPIF WCOL MODF RXOVRN TXBSY SLVSEL MSTEN SPIEN
//SPI中断标志 写冲突标志 方式错误 接收溢出 发送忙 从选择 主方式使能 SPI使能
//
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?