?? +?
字號:
/*--------------------------------------------------------------------
名稱:無線模塊接收程序
功能:
描述:
日期:
--------------------------------------------------------------------*/
#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 + -