📄 fet120_uart05_09600.c
字号:
//******************************************************************************
// MSP-FET430P140 Demo - USART0, Ultra-Low Pwr 9600 Echo ISR, 32kHz ACLK
//
// Description: Echo a received character, RX ISR used. Normal mode is LPM3,
// USART0 RX interrupt triggers TX Echo.
// Baud rate divider with 32768Hz XTAL @9600 = 32768Hz/9600 = 3.41 (0003h 4Ah )
// ACLK = UCLK0 = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO ~800kHz
// //* An external watch crystal is required on XIN XOUT for ACLK *//
//
//
// MSP430F12x(2)
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | P3.4|----------->
// | | 9600 - 8N1
// | P3.5|<-----------
//
//
// M. Buccini
// Texas Instruments Inc.
// Feb 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A
//******************************************************************************
#include <msp430x12x2.h>
#define SINGLE_RX_MODE 0X00
#define SINGLE_TX_MODE 0X01
#define RX_TX_MODE 0X02
#define MODULE_MODE RX_TX_MODE
unsigned char length;
//9600
/*******************************************************************************************
*nrf905_demo.c
*
*This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTYT;
*
*uart:9600BPS
*****************
* 官方网址: http://www.tianyi-dz.com
* 官方论坛: http://www.tianyi-dz.com/bbs
****************
***TY Tech**
***bai chun yu **
***qq:472230383 328997835 **
***Email:baichunyu1232000@163.com **
suzhou 2007 03 29
****************
*/
/********************************************************************************************/
#define WC 0x00 // Write configuration register command
#define RC 0x10 // Read configuration register command
#define WTP 0x20 // Write TX Payload command
#define RTP 0x21 // Read TX Payload command
#define WTA 0x22 // Write TX Address command
#define RTA 0x23 // Read TX Address command
#define RRP 0x24 // Read RX Payload command
/*******************************************************************************************/
#define DELTA 256 // target DCO = DELTA*(4096) ~ 1MHz
unsigned int Compare, Oldcapture;
typedef struct RFConfig
{
unsigned char n;
unsigned char buf[10];
}RFConfig;
RFConfig RxTxConf =
{
10,
0x01, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58
};
unsigned char RecNum;
unsigned char UARTTime;
unsigned char UARTFlag;
unsigned char SendFlagValue;
/*
10--------------------------------10 register
0x01------------------------------CH_NO=1 fRF = ( 422.4 + CH_NOd /10)*(1+HFREQ_PLLd) MHz=422.4
0x0c------------------------------HFREQ_PLLd=0 ,433MHZ,Reduced power,6db
0x44------------------------------rx tx address width is 4 Bytes
0x20------------------------------rx payload width
0x20------------------------------tx payload width
0xcc, 0xcc, 0xcc,0xcc-------------receive address
0x58 -----------------------------Disable Extern Clock;Fosc=16MHZ 8 Bits CRC And enable
*/
// The content of this struct is nRF905's initialize data.初始化数据
// CH_NO=1;433MHZ;Normal Opration,No Retrans;RX,TX Address is 4 Bytes
// RX TX Payload Width is 32 Bytes;Disable Extern Clock;Fosc=16MHZ
// 8 Bits CRC And enable
/*******************************************************************************************/
unsigned char TxBuf[32];
unsigned char RxBuf[32];
/*******************************************************************************************/
unsigned char SendFlag;
/*
#define TX_EN BIT3//P1.3
#define TRX_CE BIT2//P1.2
#define PWR_UP BIT1//P1.1
#define CD BIT4//P2.4
#define AM BIT3//P2.3
#define DR BIT2//P2.2
#define MISO BIT2//P3.2
#define MOSI BIT1//P3.1
#define SCK BIT3//P3.3
#define CSN BIT0//P3.0
#define SET_F BIT0//P2.0
#define LOW_POWER BIT0//P1.0
#define IO_Output_TX_EN() P1DIR |= TX_EN
#define IO_Output_TRX_CE() P1DIR |= TRX_CE
#define IO_Output_PWR_UP() P1DIR |= PWR_UP
#define IO_Output_MOSI() P3DIR |= MOSI
#define IO_Output_SCK() P3DIR |= SCK
#define IO_Output_CSN() P3DIR |= CSN
#define IO_Set_TX_EN() P1OUT |= TX_EN
#define IO_Set_TRX_CE() P1OUT |= TRX_CE
#define IO_Set_PWR_UP() P1OUT |= PWR_UP
#define IO_Set_MOSI() P3OUT |= MOSI
#define IO_Set_SCK() P3OUT |= SCK
#define IO_Set_CSN() P3OUT |= CSN
#define IO_Clear_TX_EN() P1OUT &= ~TX_EN
#define IO_Clear_TRX_CE() P1OUT &= ~TRX_CE
#define IO_Clear_PWR_UP() P1OUT &= ~PWR_UP
#define IO_Clear_MOSI() P3OUT &= ~MOSI
#define IO_Clear_SCK() P3OUT &= ~SCK
#define IO_Clear_CSN() P3OUT &= ~CSN
#define IO_Input_CD() P2DIR &= ~CD
#define IO_Input_AM() P2DIR &= ~AM
#define IO_Input_DR() P2DIR &= ~DR
#define IO_Input_MISO() P3DIR &= ~MISO
*/
#define TX_EN BIT4//P2.4
#define TRX_CE BIT0//P3.0
#define PWR_UP BIT3//P3.3
#define CD BIT2//P3.2
#define AM BIT0//P2.0
#define DR BIT1//P2.1
#define MISO BIT2//P2.2
#define MOSI BIT3//P2.3
#define SCK BIT1//P1.0
#define CSN BIT0//P1.1
#define IO_Output_TX_EN() P2DIR |= TX_EN
#define IO_Output_TRX_CE() P3DIR |= TRX_CE
#define IO_Output_PWR_UP() P3DIR |= PWR_UP
#define IO_Output_MOSI() P2DIR |= MOSI
#define IO_Output_SCK() P1DIR |= SCK
#define IO_Output_CSN() P1DIR |= CSN
#define IO_Set_TX_EN() P2OUT |= TX_EN
#define IO_Set_TRX_CE() P3OUT |= TRX_CE
#define IO_Set_PWR_UP() P3OUT |= PWR_UP
#define IO_Set_MOSI() P2OUT |= MOSI
#define IO_Set_SCK() P1OUT |= SCK
#define IO_Set_CSN() P1OUT |= CSN
#define IO_Clear_TX_EN() P2OUT &= ~TX_EN
#define IO_Clear_TRX_CE() P3OUT &= ~TRX_CE
#define IO_Clear_PWR_UP() P3OUT &= ~PWR_UP
#define IO_Clear_MOSI() P2OUT &= ~MOSI
#define IO_Clear_SCK() P1OUT &= ~SCK
#define IO_Clear_CSN() P1OUT &= ~CSN
#define IO_Input_CD() P3DIR &= ~CD
#define IO_Input_AM() P2DIR &= ~AM
#define IO_Input_DR() P2DIR &= ~DR
#define IO_Input_MISO() P2DIR &= ~MISO
#define led BIT5
#define led_pout P2DIR|=led
#define led_high P2OUT|=led
#define led_low P2OUT&=~led
#define led_shanhuo P2OUT^=led
/*******************************************************************************************/
void InitIO(void); // Initialize IO port
void Config905(void); // Config nRF905 module配置NRF905模式
void SetTxMode(void); // Set nRF905 in Tx mode
void SetRxMode(void); // Set nRF905 in Rx mode
void TxPacket(void); // Send data by nRF905
void RxPacket(void); // Recive data by nRF905
void SpiWrite(unsigned char ); // Write data to nRF905
unsigned char SpiRead(void); // Read data to nRF905
void Delay(unsigned int n); // Delay 100us
void UartInit(void);
void UartStr(unsigned char *p);
void Uart_Str(unsigned char number,unsigned char *p);
void PutChar(unsigned char ch);
/*******************************************************************************************/
void InitIO(void)
{
IO_Output_TX_EN();// P2DIR |= TX_EN
IO_Output_TRX_CE();// P3DIR |= TRX_CE
IO_Output_PWR_UP();// P3DIR |= PWR_UP
IO_Output_MOSI();// P2DIR |= MOSI
IO_Output_SCK();// P1DIR |= SCK
IO_Output_CSN();// P1DIR |= CSN
IO_Input_CD();// P3DIR &= ~CD
IO_Input_AM();// P2DIR &= ~AM
IO_Input_DR();// P2DIR &= ~DRMISO
IO_Input_MISO();// P2DIR &= ~MISO
IO_Set_CSN();//CSN=1;// Spi disable
IO_Clear_SCK();///SCK=0;// Spi clock line init high
IO_Set_PWR_UP();//PWR_UP=1;// nRF905 power on
IO_Clear_TX_EN();////TRX_CE=0;// Set nRF905 in standby mode
IO_Clear_TRX_CE();//TX_EN=0;// set radio in Rx mode
led_pout;
led_high;
Delay(1000);
led_low;
}
/*******************************************************************************************/
//function Delay100us();Delay 100us
/*******************************************************************************************/
void Delay(unsigned int n)
{
unsigned int i;
while(n--)
for(i=0;i<80;i++);
}
/*******************************************************************************************/
/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void Config905(void)
{
unsigned char i;
IO_Output_CSN();
IO_Clear_CSN();//CSN=0; // Spi enable for write a spi command
SpiWrite(WC);// Write config command写放配置命令
for (i=0;i<RxTxConf.n;i++)// Write configration words 写放配置字
{
SpiWrite(RxTxConf.buf[i]);
}
IO_Set_CSN();//CSN=1;// Disable Spi
}
/*******************************************************************************************/
//function SpiWrite();
/*******************************************************************************************/
void SpiWrite(unsigned char byte)
{
unsigned char i;
IO_Output_MOSI();
IO_Output_SCK();
for (i=0;i<8;i++) // Setup byte circulation bits
{
if ((byte&BIT7)==BIT7) // Put DATA_BUF.7 on data line
IO_Set_MOSI();//MOSI=1;
else
IO_Clear_MOSI();//MOSI=0;
IO_Set_SCK(); // Set clock line high
byte=byte<<1;
IO_Clear_SCK(); // Set clock line low
}
}
/*******************************************************************************************/
//function SpiRead();
/*******************************************************************************************/
unsigned char SpiRead(void)
{
unsigned char i;
unsigned char temp;
IO_Output_MOSI();
IO_Output_SCK();
IO_Input_MISO();
for (i=0;i<8;i++)// Setup byte circulation bits
{
temp=temp<<1; // Right shift DATA_BUF
IO_Set_SCK(); // Set clock line high
if ((P2IN&MISO)==MISO)
temp|=1;// Read data
else
temp&=~0;
IO_Clear_SCK(); // Set clock line low
}
return temp;// Return function parameter
}
/*******************************************************************************************/
//function TxPacket();
/*******************************************************************************************/
void TxPacket(void)
{
unsigned char i;
IO_Output_CSN();
IO_Output_TRX_CE();
IO_Clear_CSN(); // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
TxBuf[0]=length;
for(i=1;i<32;i++)
{
TxBuf[i]=RxBuf[i-1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -