微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > CC1101接口与STM32

CC1101接口与STM32

时间:11-11 来源:互联网 点击:

d address
// Wait for TX to finish$$
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
SPI_I2S_SendData(SPI1, (uint16_t)value);//发送数据通过SPI1
// Wait for TX to finish
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); // CS disable
}
////////////////////////////////////////////////////////////////////////////////
// 程序名 : void TI_CC_SPIWriteBurstReg(char addr, char *buffer, char count)
// 作用 : 向一个"addr"指向的寄存器中写入值"value"
// 输入参数:char addr :指向的地址
// char value :要写入的值
// 输出参数:无
// 说明:
//
////////////////////////////////////////////////////////////////////////////////
void TI_CC_SPIWriteBurstReg(char addr, char *buffer, char count)
{
unsigned int i;
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); // /CS enable
// Wait for CCxxxx ready
while(GPIO_ReadInputDataBit(TI_CC_SPI_USCIA0_GPIO,
TI_CC_SPI_USCIA0_SOMI)!= RESET)
{
;
}
// Send address
SPI_I2S_SendData(SPI1, (uint16_t)(addr | TI_CCxxx0_WRITE_BURST));
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
for (i = 0; i < count; i++)
{
// Send data
SPI_I2S_SendData(SPI1, (uint16_t)buffer[i]);//发送数据通过SPI1
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
}
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); //CS disable
}
////////////////////////////////////////////////////////////////////////////////
// 程序名 : char TI_CC_SPIReadReg(char addr)
// 作用 : 从一个单一的配置寄存器中读数,寄存器地址:"addr"
// 输入参数:char addr :指向的地址
// 输出参数:char :返回的寄存器值
// 说明:
//
////////////////////////////////////////////////////////////////////////////////
char TI_CC_SPIReadReg(char addr)
{
char x;
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); // /CS enable
// Wait for TX to finish
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
// Send address
SPI_I2S_SendData(SPI1, (uint16_t)(addr | TI_CCxxx0_READ_SINGLE));
// Wait for TX to finish
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
//虚拟的接收数据,用来清空接收寄存器
x = SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
// Dummy write so we can read data
SPI_I2S_SendData(SPI1, (uint16_t)0xff);
// Address is now being TXed, with dummy byte waiting in TXBUF...
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待$$$$
{
;
}
// Dummy byte RXed during addr TX now in RXBUF
// Clear flag//这个在stm32中是硬件清除
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
// Data byte RXed during dummy byte write is now in RXBUF
x = SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); // /CS disable
return x;
}
////////////////////////////////////////////////////////////////////////////////
// 程序名 : void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count)
// 作用 : 从多个寄存器中读数,第一个寄存器地址:"addr",读出的数据存放于"buffer"
// 为起始地址的存储空间,总共读"count"个寄存器。
// 输入参数:char addr :指向的地址
// char *buffer:存放的存储空间的起始地址
// char count:要读的寄存器的数量
// 输出参数:无
// 说明:
//
////////////////////////////////////////////////////////////////////////////////
void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count)
{
char i;
char x;
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); // /CS enable
// Wait for CCxxxx ready
while(GPIO_ReadInputDataBit(TI_CC_SPI_USCIA0_GPIO,
TI_CC_SPI_USCIA0_SOMI)!= RESET)
{
;
}
// Send address
SPI_I2S_SendData(SPI1, (uint16_t)(addr | TI_CCxxx0_READ_BURST));
// Wait for TXBUF ready
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
//虚拟的接收数据,用来清空接收寄存器
x = SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
// Dummy write to read 1st data byte
SPI_I2S_SendData(SPI1, (uint16_t)0xff);//发送数据通过SPI1
// Addr byte is now being TXed, with dummy byte to follow immediately
after
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
x = SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
// First data byte now in RXBUF
for (i = 0; i < (count-1); i++)
{
//UCA0TXBUF = 0; //Initiate next data RX, meanwhile.&$$$$$.
SPI_I2S_SendData(SPI1, (uint16_t)0);//发送数据通过SPI1
// Store data from last data RX
buffer[i] = SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
}
// Store last RX byte in buffer
buffer[count-1]= SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); // CS disable
}
////////////////////////////////////////////////////////////////////////////////
// 程序名 : char TI_CC_SPIReadStatus(char addr)
// 作用 : 从状态寄存器中读数,寄存器地址:"addr"
// 输入参数:char addr :指向的状态寄存器地址
// 输出参数:char :状态寄存器的值
// 说明:
//
////////////////////////////////////////////////////////////////////////////////
char TI_CC_SPIReadStatus(char addr)
{
char x;
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); // /CS enable
//Wait for CCxxxx ready
while(GPIO_ReadInputDataBit(TI_CC_SPI_USCIA0_GPIO,
TI_CC_SPI_USCIA0_SOMI)!= RESET)
{
;
}
// Send address
SPI_I2S_SendData(SPI1, (uint16_t)(addr |
TI_CCxxx0_READ_BURST));//发送数据通过SPI1
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
// Dummy write so we can read data
x = SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
SPI_I2S_SendData(SPI1, (uint16_t)0xff);//发送数据通过SPI1
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
// Read data
x = SPI_I2S_ReceiveData(SPI1);//接收数据通过SPI1
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); // CS disable
return x;
}
////////////////////////////////////////////////////////////////////////////////
// 程序名 : void TI_CC_SPIStrobe(char strobe)
// 作用 : 向命令寄存器写数,写入的值"strobe"
// 输入参数:char strobe :要写入的值
// 输出参数:无
// 说明:
//
////////////////////////////////////////////////////////////////////////////////
void TI_CC_SPIStrobe(char strobe)
{
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); //CS enable
// Wait for CCxxxx ready
while(GPIO_ReadInputDataBit(TI_CC_SPI_USCIA0_GPIO,
TI_CC_SPI_USCIA0_SOMI)!= RESET)
{
;
}
// Send strobe
SPI_I2S_SendData(SPI1, (uint16_t)strobe);//发送数据通过SPI1
// Strobe addr is now being TXed
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); //CS disable
}
////////////////////////////////////////////////////////////////////////////////
// 程序名 : void TI_CC_PowerupResetCCxxxx(void)
// 作用 : 硬复位CC芯片
// 输入参数:无
// 输出参数:无
// 说明:
//
////////////////////////////////////////////////////////////////////////////////
void TI_CC_PowerupResetCCxxxx(void)
{
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); // CS disable
TI_CC_Wait(30);
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); //CS enable
TI_CC_Wait(30);
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); //CS disable
TI_CC_Wait(45);
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); //CS enable
// Wait for CCxxxx ready
while(GPIO_ReadInputDataBit(TI_CC_SPI_USCIA0_GPIO,
TI_CC_SPI_USCIA0_SOMI)!= RESET)
{
;
}
// Send strobe
SPI_I2S_SendData(SPI1, (uint16_t)TI_CCxxx0_SRES);//发送数据通过SPI1
// Strobe addr is now being TXed
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY )!= RESET)//线路忙则等待
{
;
}
// Wait for CCxxxx ready
while(GPIO_ReadInputDataBit(TI_CC_SPI_USCIA0_GPIO,
TI_CC_SPI_USCIA0_SOMI)!= RESET)
{
;
}
GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET); //CS disable
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top