使用SPI 和芯片进行通讯 请问这种时序图 程序应该怎么写 为什么我读出来的数都不符合格式呢

使用SPI 和芯片进行通讯 请问这种时序图 程序应该怎么写 为什么我读出来的数都不符合格式呢,第1张

你的芯片上面有SPI的模块吗?如果有的话,你直接配置对应的寄存器就好了,如果你没有,是通过MCU的IO来模仿这个SPI *** 作的话,你就需要确认那个是master那个是slave,然后根据master和slave的输出来控制对应的管腿。

//*****************************************************************************************

//函数名: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的方式,但是那是自带的,


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7950523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存