📄 +̤
字号:
/*-----------------------------------------------------------------------------
名称:无线模块发送程序
功能:发送一串数据
描述:
P1.5--------------------------CSn_PIN
P1.4--------------------------GDO0_PIN
P1.3--------------------------SPI_SOMI
P1.2--------------------------SPI_CLK
P1.1--------------------------SPI_SIMO
------------------------------------------------------------------------------*/
#include <msp430x14x.h>
#include <stdlib.h>
#include "CC1101_h.h"
#define CSn_PIN BIT5
#define GDO0_PIN BIT4
#define SPI_SOMI BIT3 //输出(和GDO1为同一个脚)
#define SPI_CLK BIT2
#define SPI_SIMO BIT1
#define CSn_1() P1OUT |= CSn_PIN //CS = 1
#define CSn_0() P1OUT &=~CSn_PIN //CS = 0
#define CLK_1() P1OUT |= SPI_CLK //CLK = 1
#define CLK_0() P1OUT &=~SPI_CLK //CLK = 0
#define SIMO_1() P1OUT |= SPI_SIMO // SIMO = 1
#define SIMO_0() P1OUT &= ~SPI_SIMO // SIMO = 0
#define Val_SOMI P1IN & SPI_SOMI
unsigned char RxFlag;
//------------------------------------------------------------------------------
//延时微妙
//------------------------------------------------------------------------------
void Delay_us(unsigned int cycles)
{
while(cycles>15) // 15 cycles consumed by overhead
cycles = cycles - 6; // 6 cycles consumed each iteration
}
//------------------------------------------------------------------------------
//延时毫秒
//------------------------------------------------------------------------------
void Delay_ms(unsigned char count)
{
while(count--)
Delay_us(1000);
}
//-----------------------------------------------------------------------------
//spi输出数据,并返回状态信息
//-----------------------------------------------------------------------------
unsigned char SPI_bitbang_out(unsigned char value)
{
unsigned char i;
unsigned char rTemp;
for(i = 0; i < 8; i++)
{
CLK_0(); // Set clock low
if(value & 0x80) // If bit is high...
SIMO_1(); // Set SIMO high...
else
SIMO_0(); // Set SIMO low...
value = value << 1;
CLK_1(); // Set clock high
rTemp <<= 1;
if(Val_SOMI)
rTemp |= 0x01;
else
rTemp &= 0xfe;
}
CLK_0(); // Set clock low
return(rTemp);
}
//------------------------------------------------------------------------------
// 输入8位数据
//------------------------------------------------------------------------------
unsigned char SPI_bitbang_in(void)
{
unsigned char i;
unsigned char rTemp;
for(i = 8; i > 0; i--)
{
CLK_1(); // Set clock high
rTemp <<= 1;
if(Val_SOMI)
rTemp |= 0x01;
else
rTemp &= 0xfe;
CLK_0(); // Set clock low
}
return(rTemp);
}
//------------------------------------------------------------------------------
//spi写寄存器 地址+数据
//------------------------------------------------------------------------------
void SPIWriteReg(unsigned char addr, unsigned char value)
{
CSn_0(); // CS enable
while (Val_SOMI); // Wait for CCxxxx ready
SPI_bitbang_out(addr); // Send address
SPI_bitbang_out(value);// Send data
CSn_1(); // CS disable
}
//------------------------------------------------------------------------------
//spi写突发寄存器
//------------------------------------------------------------------------------
void SPIWriteBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
unsigned char i;
CSn_0(); // CS enable
while (Val_SOMI); // Wait for CCxxxx ready
SPI_bitbang_out(addr | CCxxx0_WRITE_BURST); // Send address
for (i = 0; i < count; i++)
{
SPI_bitbang_out(buffer[i]); // Send data
}
CSn_1(); // CS disable
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
unsigned char SPIRead(unsigned char addr, unsigned char falg_read)
{
unsigned char rTemp;
CSn_0(); // CS enable
while (Val_SOMI); // Wait for CCxxxx ready
SPI_bitbang_out(addr | falg_read); // Send address
rTemp = SPI_bitbang_in(); // Read data
CSn_1(); // CS disable
return ( rTemp );
}
//------------------------------------------------------------------------------
//spi从相应地址寄存器当中读取数据
//------------------------------------------------------------------------------
void SPIReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
unsigned char i;
CSn_0(); // CS enable
while (Val_SOMI); // Wait for CCxxxx ready
SPI_bitbang_out(addr | CCxxx0_READ_BURST); // Send address
for (i = 0; i < count; i++)
{
buffer[i] = SPI_bitbang_in(); // Read data
}
CSn_1(); // CS disable
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
unsigned char SPIStrobe(unsigned char strobe)
{
unsigned char RxTxstatus;
CSn_0(); // CS enable
while (Val_SOMI); // Wait for CCxxxx ready
RxTxstatus = SPI_bitbang_out(strobe); // Send strobe
CSn_1(); // CS disable
return(RxTxstatus);
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
void PowerupResetCCxxxx(void)
{
CLK_0(); // Set clock low
SIMO_0(); // Set SIMO low...
CSn_1(); // CS disable
Delay_us(30);
CSn_0(); // CS enable
Delay_us(30);
CSn_1(); // CS disable
Delay_us(45);
CSn_0(); // CS enable
while (Val_SOMI); // Wait for CCxxxx ready
SPI_bitbang_out(CCxxx0_SRES); //?′λCC1101
while (Val_SOMI); // Wait for CCxxxx ready
CSn_1(); // CS disable
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
void Initialize_CPU(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -