欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于MSP430F149的cc1101無線收發源程序
[打印本頁]
作者:
moloto
時間:
2018-9-27 10:37
標題:
基于MSP430F149的cc1101無線收發源程序
最基礎的收發程序,可以在此基礎上完成WOR后續功能的添加
0.png
(39.23 KB, 下載次數: 78)
下載附件
2018-9-27 17:51 上傳
單片機源程序如下:
#include <in430.h>
#include <io430.h>
#include "cc1100.h"
#define INT8U unsigned char
#define INT16U unsigned int
unsigned char PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};
unsigned int TestInt = 0;
const RF_SETTINGS rfSettings =
{
0x00,
0x08, // FSCTRL1 Frequency synthesizer control.
0x00, // FSCTRL0 Frequency synthesizer control.
0x10, // FREQ2 Frequency control word, high byte.
0xA7, // FREQ1 Frequency control word, middle byte.
0x62, // FREQ0 Frequency control word, low byte.
0x5B, // MDMCFG4 Modem configuration.
0xF8, // MDMCFG3 Modem configuration.
0x03, // MDMCFG2 Modem configuration.
0x22, // MDMCFG1 Modem configuration.
0xF8, // MDMCFG0 Modem configuration.
0x00, // CHANNR Channel number.
0x47, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
0xB6, // FREND1 Front end RX configuration.
0x10, // FREND0 Front end RX configuration.
0x18, // MCSM0 Main Radio Control State Machine configuration.
0x1D, // FOCCFG Frequency Offset Compensation Configuration.
0x1C, // BSCFG Bit synchronization Configuration.
0xC7, // AGCCTRL2 AGC control.
0x00, // AGCCTRL1 AGC control.
0xB2, // AGCCTRL0 AGC control.
0xEA, // FSCAL3 Frequency synthesizer calibration.
0x2A, // FSCAL2 Frequency synthesizer calibration.
0x00, // FSCAL1 Frequency synthesizer calibration.
0x11, // FSCAL0 Frequency synthesizer calibration.
0x59, // FSTEST Frequency synthesizer calibration.
0x81, // TEST2 Various test settings.
0x35, // TEST1 Various test settings.
0x09, // TEST0 Various test settings.
0x0B, // IOCFG2 GDO2 output pin configuration.
0x06, // IOCFG0D GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.
0x04, // PKTCTRL1 Packet automation control.
0x05, // PKTCTRL0 Packet automation control.
0x01, // ADDR Device address.
0x0c // PKTLEN Packet length.
};
void delay(unsigned int s)
{
while (s != 0)
{
s--;
}
}
void halWait(unsigned int s)
{
do
{
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
while(--s);
}
void InitSpi(void)
{
CSN_L;
SCK_L;
CSN_H;
}
void halSpiWriteReg(unsigned char addr, unsigned char value)
{
CSN_L;
while (GetMISO);
SpiTxRxByte(addr); //寫地址
SpiTxRxByte(value); //寫入配置
CSN_H;
}
void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
{
INT8U i, temp;
temp = addr | WRITE_BURST;
CSN_L;
while (GetMISO);
SpiTxRxByte(temp);
for (i = 0; i < count; i++)
{
SpiTxRxByte(buffer[i]);
}
CSN_H;
}
void halSpiStrobe(INT8U strobe)
{
CSN_L;
while (GetMISO);
SpiTxRxByte(strobe); //寫入命令
CSN_H;
}
INT8U halSpiReadReg(INT8U addr)
{
INT8U temp, value;
temp = addr|READ_SINGLE;//讀寄存器命令
CSN_L;
while (GetMISO);
SpiTxRxByte(temp);
value = SpiTxRxByte(0);
CSN_H;
return value;
}
void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
{
INT8U i,temp;
temp = addr | READ_BURST; //寫入要讀的配置寄存器地址和讀命令
CSN_L;
while (GetMISO);
SpiTxRxByte(temp);
for (i = 0; i < count; i++)
{
buffer[i] = SpiTxRxByte(0);
}
CSN_H;
}
INT8U halSpiReadStatus(INT8U addr)
{
INT8U value,temp;
temp = addr | READ_BURST; //寫入要讀的狀態寄存器的地址同時寫入讀命令
CSN_L;
while (GetMISO);
SpiTxRxByte(temp);
value = SpiTxRxByte(0);
CSN_H;
return value;
}
void halRfWriteRfSettings(void)
{
halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
// Write register settings
halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
}
void halRfSendPacket(INT8U *txBuffer, INT8U size)
{
halSpiWriteReg(CCxxx0_TXFIFO, size);
halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //寫入要發送的數據
halSpiStrobe(CCxxx0_SIDLE); // 網上解決GDO0不跳變的解決方法,原來沒有
halSpiStrobe(CCxxx0_STX); //進入發送模式發送數據
// Wait for GDO0 to be set -> sync transmitted
while (!GOD0);
// Wait for GDO0 to be cleared -> end of packet
while (GOD0);
halSpiStrobe(CCxxx0_SFTX);
}
void setRxMode(void)
{
halSpiStrobe(CCxxx0_SRX); //進入接收狀態
}
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
{
INT8U status[2];
INT8U packetLength;
INT8U i=(*length)*4; // 具體多少要根據datarate和length來決定
halSpiStrobe(CCxxx0_SRX); //進入接收狀態
halWait(2000);
while (GOD0)
{
halWait(1000);
--i;
if(i<1)
{
return 0;
}
}
if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字節數不為0
{
packetLength = halSpiReadReg(CCxxx0_RXFIFO);//讀出第一個字節,此字節為該幀數據長度
if (packetLength <= *length) //如果所要的有效數據長度小于等于接收到的數據包的長度
{
halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //讀出所有接收到的數據
*length = packetLength; //把接收數據長度的修改為當前數據的長度
// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //讀出CRC校驗位
halSpiStrobe(CCxxx0_SFRX); //清洗接收緩沖區
return (status[1] & CRC_OK); //如果校驗成功返回接收成功
}
else
{
*length = packetLength;
halSpiStrobe(CCxxx0_SFRX); //清洗接收緩沖區
return 0;
}
}
else
{
return 0;
}
}
unsigned char SpiTxRxByte(unsigned char dat)
{
unsigned char i,temp;
temp = 0;
SCK_L;
for(i=0; i<8; i++)
{
if(dat & 0x80)
{
MOSI_H;
}
else
{
MOSI_L;
}
dat <<= 1;
SCK_H;
delay(20);
temp <<= 1;
if(GetMISO)
{
temp++;
}
SCK_L;
delay(20);
}
return temp;
}
unsigned int RESET_CC1100(void)
{
CSN_L;
while (GetMISO);
unsigned int ret = SpiTxRxByte(CCxxx0_SRES); //寫入復位命令
while (GetMISO);
CSN_H;
return ret;
}
unsigned int POWER_UP_RESET_CC1100(void)
{
CSN_H;
halWait(1);
CSN_L;
halWait(1);
CSN_H;
halWait(41);
unsigned int ret = RESET_CC1100(); //復位CC1100
return ret;
}
復制代碼
所有資料51hei提供下載:
XB.zip
(97.67 KB, 下載次數: 46)
2018-9-27 10:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhw2008
時間:
2018-12-9 14:56
有低功耗程序嗎?
作者:
pm1981
時間:
2019-2-25 14:34
這個正是在用的
作者:
HXHNTTXLLA
時間:
2019-6-17 22:23
請問代碼中單片機的使用的晶振頻率是多少啊
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1