📄 +̤
字号:
/*--------------------------------------------------------------------
名称:无线模块接收程序
功能:
描述:
日期:
--------------------------------------------------------------------*/
#include <msp430x14x.h>
#include <stdlib.h>
#include "CC1101_h.h"
#define CSn_PIN BIT5//P1.5cs使能信号,在地址和数据转换期间,CSn脚(芯片选择,低电平有效)
//必须保持低电平,如果过程中变成高,则取消转换。
#define GDO0_PIN BIT4//P1.4
#define SPI_SOMI BIT3//P1.2(和GDO1为同一个脚)//接收数据引脚
#define SPI_CLK BIT2//P1.1 时钟引脚,发送数据下降沿,接收数据上升沿。
#define SPI_SIMO BIT1//P1.0发送数据引脚
//unsigned char txBuffer[LENGTH_ID];
unsigned char rxBuffer[LENGTH+1];//数据长度最大值,收到的数据存放在rxBuffer当中。
//unsigned char RxFlag;//
unsigned char rxAddr[2];//发送方的地址存放在rxAddrz当中。
unsigned int rxLength;//
//-----------------------------------------------------------------------------
//输出数据,发送数据并接收状态信息,返回值为状态信息。
//-----------------------------------------------------------------------------
unsigned char SPI_bitbang_out(unsigned char value)//位响应
{
unsigned char i;
unsigned char rTemp;//接收状态信息数据
for(i = 0; i < 8; i++)
{
P2OUT &=~SPI_CLK; //CLK=0 Set clock low
if(value & 0x80)
P2OUT |= SPI_SIMO; // SIMO=1 Set SIMO high...
else
P2OUT &= ~SPI_SIMO; // SIMO=0 Set SIMO low...
value = value << 1;
P2OUT |= SPI_CLK; //CLK=1 Set clock high
rTemp <<= 1;
if(P2IN & SPI_SOMI)//通过SO接收,芯片状态。
rTemp |= 0x01; //最低位置1
else
rTemp &= 0xfe; //最低位置0
}
P2OUT &=~SPI_CLK; //CLK=0 Set clock low
return(rTemp);
}
//------------------------------------------------------------------------------------
// Input eight-bit value using selected bit-bang pins
//接收数据。
//------------------------------------------------------------------------------------
unsigned char SPI_bitbang_in(void)
{
unsigned char i;
unsigned char rTemp;
for(i = 8; i > 0; i--)
{
P2OUT |= SPI_CLK; //CLK=1 Set clock high
rTemp <<= 1;
if(P2IN & SPI_SOMI)
rTemp |= 0x01;
else
rTemp &= 0xfe;
P2OUT &=~SPI_CLK; //CLK=0 Set clock low
}
return(rTemp);
}
//--------------------------------------------------------------------------------
//spi写寄存器
//--------------------------------------------------------------------------------
void SPIWriteReg(unsigned char addr, unsigned char value)
{
P2OUT &=~CSn_PIN; //CS=0 CS enable开启cs使能
while (P2IN & SPI_SOMI);
//当CSn变低,在开始转换头字节之前,
//MCU必须等待,指导SO脚变低,这表明电压调制器已经稳定,晶体正在运作中, 除非芯片引脚,
//处在sleep或者XOFF状态,SO脚在CSn变低之后总会立即变低。
// Wait for CCxxxx ready
SPI_bitbang_out(addr); // Send address发送地址
SPI_bitbang_out(value); // Send data发送数据
P2OUT |= CSn_PIN; //CS=1 CS disable
}
//-----------------------------------------------------------------------------------
//spi写burst寄存器
//----------------------------------------------------------------------------------
void SPIWriteBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
unsigned char i;
P2OUT &=~CSn_PIN; //CS=0 CS enable//开启cs使能
while (P2IN & SPI_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//发送数据
}
P2OUT |= CSn_PIN; //CS=1 CS disable
}
//---------------------------------------------------------------------------------
//spi读状态
//---------------------------------------------------------------------------------
unsigned char SPIRead(unsigned char addr, unsigned char falg_read)
{
unsigned char rTemp;
P2OUT &=~CSn_PIN; //CS=0 CS enable开启cs使能
while (P2IN & SPI_SOMI); // Wait for CCxxxx ready
SPI_bitbang_out(addr | falg_read); // Send address//发送地址
rTemp = SPI_bitbang_in(); // Read data//读数据
P2OUT |= CSn_PIN; //CS=1 CS disable
return ( rTemp );
}
//--------------------------------------------------------------------------------
//spi读burst寄存器
//--------------------------------------------------------------------------------
void SPIReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
unsigned char i;
P2OUT &=~CSn_PIN; //CS=0 CS enable
while (P2IN & SPI_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
}
P2OUT |= CSn_PIN; //CS=1 CS disable
}
//------------------------------------------------------------------------------
//spistrobe
//------------------------------------------------------------------------------
unsigned char SPIStrobe(unsigned char strobe)
{
unsigned char RxTxstatus;
P2OUT &=~CSn_PIN; //CS=0 CS enable
while (P2IN & SPI_SOMI); // Wait for CCxxxx ready
RxTxstatus = SPI_bitbang_out(strobe); // Send strobe//发送strobe
P2OUT |= CSn_PIN; //CS=1 CS disable
return(RxTxstatus);
}
//-----------------------------------------------------------------------------
//复位
//-----------------------------------------------------------------------------
void PowerupResetCCxxxx(void)
{
P2OUT &=~SPI_CLK; //CLK=0 Set clock low
P2OUT &= ~SPI_SIMO; // SIMO=0 Set SIMO low...
P2OUT |= CSn_PIN; //CS=1 CS disable
_NOP();_NOP();_NOP();_NOP();_NOP();
P2OUT &=~CSn_PIN; //CS=0 CS enable
_NOP();_NOP();_NOP();_NOP();_NOP();
P2OUT |= CSn_PIN; //CS=1 CS disable
_NOP();_NOP();_NOP();_NOP();_NOP();
P2OUT &=~CSn_PIN; //CS=0 CS enable
while (P2IN & SPI_SOMI); // Wait for CCxxxx ready
SPI_bitbang_out(CCxxx0_SRES);
while (P2IN & SPI_SOMI); // Wait for CCxxxx ready
P2OUT |= CSn_PIN; //CS=1 CS disable
}
/*
void TxData(void) //先采用查询发送
{
P1IE &= ~GDO0_PIN; //关闭GDO0中断
txBuffer[0] = 0;
txBuffer[1] = 0x22;
txBuffer[2] = 0x77;
txBuffer[3] = 0xdd;
SPIStrobe(CCxxx0_SFTX); //刷新TX_FIFO
SPIWriteBurstReg(CCxxx0_TXFIFO, txBuffer, LENGTH_ID ); // Write TX data; LENGTH_ID == 4
SPIStrobe(CCxxx0_STX); // Change state to TX, initiatingdata transfer
while (!( P1IN& GDO0_PIN)); // Wait GDO0 to go hi -> sync TX'ed
while ( P1IN& GDO0_PIN); // Wait GDO0 to clear -> end of pkt
P1IFG &= ~GDO0_PIN; // After pkt TX, this flag is set, Clear it.
P1IE |= GDO0_PIN; //开GDO0中断
}*/
const unsigned char ConfigurationCCxxx0_433[47]=
{
//Data :Reg: Name (x = non-default)
0x29, //00 IOCFG2 (x)
0x2E, //01 IOCFG1
0x06, //02 IOCFG0D (x)
0x47, //03 FIFOTHR (x)
0xD3, //04 SYNC1
0x91, //05 SYNC0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -