//函数名:SpisendByte(INT8U dat)
//输入:发送的数据
//输出:无
//功能描述:SPI发送一个字节
//*****************************************************************************************
INT8U SpiTxRxByte(INT8U dat)
{
INT8U i,temp
temp = 0
SCK = 0
for(i=0i<8i++)
{
if(dat &0x80)
{
MOSI = 1
}
else MOSI = 0
dat <<= 1
SCK = 1
_nop_()
_nop_()
temp <<= 1
if(MISO)temp++
SCK = 0
_nop_()
_nop_()
}
return temp
}
//*****************************************************************************************
//函数名:void RESET_CC1100(void)
//输入:无
//输出:无
//功能描述:复位CC1100
//*****************************************************************************************
void RESET_CC1100(void)
{
CSN = 0
while (MISO)
SpiTxRxByte(CCxxx0_SRES) //写入复位命令
while (MISO)
CSN = 1
}
//*****************************************************************************************
//函数名:void POWER_UP_RESET_CC1100(void)
//输入:无
//输出:无
//功能描述:上电复位CC1100
//*****************************************************************************************
void POWER_UP_RESET_CC1100(void)
{
CSN = 1
halWait(1)
CSN = 0
halWait(1)
CSN = 1
halWait(41)
RESET_CC1100()//复位CC1100
}
//*****************************************************************************************
//函数名:void halSpiWriteReg(INT8U addr, INT8U value)
//输入:地址和配置字
//输出:无
//功能描述:SPI写寄存器
//*****************************************************************************************
void halSpiWriteReg(INT8U addr, INT8U value)
{
CSN = 0
while (MISO)
SpiTxRxByte(addr) //写地址
SpiTxRxByte(value) //写入配置
CSN = 1
}
//*****************************************************************************************
//函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
//输入:地址,写入缓冲区,写入个数
//输出:无
//功能描述:SPI连续写配置寄存器
//*****************************************************************************************
void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
{
INT8U i, temp
temp = addr | WRITE_BURST
CSN = 0
while (MISO)
SpiTxRxByte(temp)
for (i = 0i <counti++)
{
SpiTxRxByte(buffer[i])
}
CSN = 1
}
//*****************************************************************************************
//函数名:void halSpiStrobe(INT8U strobe)
//输入:命令
//输出:无
//功能描述:SPI写命令
//*****************************************************************************************
void halSpiStrobe(INT8U strobe)
{
CSN = 0
while (MISO)
SpiTxRxByte(strobe) //写入命令
CSN = 1
}
//*****************************************************************************************
//函数名:INT8U halSpiReadReg(INT8U addr)
//输入:地址
//输出:该寄存器的配置字
//功能描述:SPI读寄存器
//*****************************************************************************************
INT8U halSpiReadReg(INT8U addr)
{
INT8U temp, value
temp = addr|READ_SINGLE//读寄存器命令
CSN = 0
while (MISO)
SpiTxRxByte(temp)
value = SpiTxRxByte(0)
CSN = 1
return value
}
//*****************************************************************************************
//函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
//输入:地址,读出数据后暂存的缓冲区,读出配置个数
//输出:无
//功能描述:SPI连续写配置寄存器
//*****************************************************************************************
void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
{
INT8U i,temp
temp = addr | READ_BURST //写入要读的配置寄存器地址和读命令
CSN = 0
while (MISO)
SpiTxRxByte(temp)
for (i = 0i <counti++)
{
buffer[i] = SpiTxRxByte(0)
}
CSN = 1
}
//*****************************************************************************************
//函数名:INT8U halSpiReadReg(INT8U addr)
//输入:地址
//输出:该状态寄存器当前值
//功能描述:SPI读状态寄存器
//*****************************************************************************************
INT8U halSpiReadStatus(INT8U addr)
{
INT8U value,temp
temp = addr | READ_BURST //写入要读的状态寄存器的地址同时写入读命令
CSN = 0
while (MISO)
SpiTxRxByte(temp)
value = SpiTxRxByte(0)
CSN = 1
return value
}
我还有其他的,其实想这样的模拟的很简单的,网上也很多,我做了个点阵用SPI的方式,但是那是自带的,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)