?? spi_cc1100.c
字號:
#include<msp430x14x.h>
#include "cc1100.h"
#define uint unsigned int
#define uchar unsigned char
//------------------------------------------------------------
void delay(uint i)
{
uint j;
for(j=0;j<i;j++)
;
return;
}
//------------------------------------------------------------
void Init_clk()
{
uint i;
BCSCTL1&=~(XT2OFF);
do
{
IFG1&=~(OFIFG);
for(i=0;i<0x0ff;i++);
}
while((IFG1&OFIFG));
//BCSCTL2=SELM1+SELS;
BCSCTL2=SELM1+SELS+DIVM1+DIVM0;//8 DIV
}
//----------------------------------------------------------------
void Init_UART1()
{
U1CTL=CHAR+SWRST;
U1TCTL=SSEL1;
U1BR0=0X41;
U1BR1=0X03;
U1MCTL=0X00;
U1CTL&=~(SWRST);
ME2|=UTXE1+URXE1;
//IE2|=UTXIE1;
P3SEL|=0XC0;
P3DIR|=0X40;
return;
}
//---------------------------------------------------------------
void Init_spi0()
{
P3SEL|=0X0E;
P3DIR|=0X0A;
U0CTL=CHAR+SYNC+MM+SWRST;
U0TCTL=CKPH+SSEL0+STC;
U0BR0=0X02;
U0BR1=0X00;
U0MCTL=0X00;
ME1|=USPIE0;
U0CTL&=~(SWRST);
return;
}
//-----------------------------------------------------------------
void Init_P1_ISR()
{
P1DIR=0;
P1SEL=0X01;
P1IES|=0X01;
P1IE|=0x01;//open interruput
return;
}
//-----------------------------------------------------------------
void UART1_TX(uchar value)
{
TXBUF1=value;
while((IFG2&UTXIFG1)==0);
IFG2&=~(UTXIFG1);
return;
}
//-----------------------------------------------------------------
uchar spi_WriteRead(uchar data)
{
uchar status;
IFG1&=~URXIFG0;//?
TXBUF0=data;
while((IFG1&URXIFG0)==0);
status=RXBUF0;
IFG1&=~URXIFG0;
return status;
}
//-----------------------------------------------------------------
void spi_Write_reg(uchar addr,uchar value)
{
P2OUT&=~(BIT0);
while(P3IN&0X04);
spi_WriteRead(addr);
spi_WriteRead(value);
P2OUT|=(BIT0);
return;
}
//-----------------------------------------------------------------
void spi_WriteBurst_reg(uchar addr,uchar *buf,uchar num)
{
uchar i,temp;
temp=addr|write_burst;
P2OUT&=~(BIT0);
while(P3IN&0X04);
spi_WriteRead(temp);
for(i=0;i<num;i++)
{
spi_WriteRead(buf[i]);
}
P2OUT|=BIT0;
return;
}
//-----------------------------------------------------------------
void spi_strobe(uchar strobe)
{
P2OUT&=~(BIT0);
while(P3IN&0X04);
spi_WriteRead(strobe);
P2OUT|=BIT0;
return;
}
//-----------------------------------------------------------------
uchar spi_Read_Reg(uchar addr)
{
uchar temp,value;
temp=addr|read_single;
P2OUT&=~(BIT0);
while(P3IN&0X04);
spi_WriteRead(temp);
value=spi_WriteRead(0);
P2OUT|=BIT0;
return value;
}
//-----------------------------------------------------------------
void spi_ReadBurst_Reg(uchar addr,uchar *buf,uchar num)
{
uchar i,temp;
temp=addr|read_burst;
P2OUT&=~(BIT0);
while(P3IN&0X04);
spi_WriteRead(temp);
for(i=0;i<num;i++)
{
buf[i]=spi_WriteRead(0);
}
P2OUT|=BIT0;
return;
}
//-----------------------------------------------------------------
uchar spi_Read_status(uchar addr)
{
uchar value,temp;
temp=addr|read_burst;
P2OUT&=~(BIT0);
while(P3IN&0X04);
spi_WriteRead(temp);
value=spi_WriteRead(0);
P2OUT|=BIT0;
return value;
}
//-----------------------------------------------------------------
uchar spi_Receive_packet(uchar *rxbuf,uchar length,uchar packetlength)
{
uchar status[2];
if(spi_Read_status(TI_CCxxx0_RXBYTES)&BYTE_IN_RXFIFO)
{
packetlength=spi_Read_Reg(TI_CCxxx0_RXFIFO);
if(packetlength<=length)
{
spi_ReadBurst_Reg(TI_CCxxx0_RXFIFO,rxbuf, packetlength);
spi_ReadBurst_Reg(TI_CCxxx0_RXFIFO,status, 2);
if(status[1]&CRC_OK)
{
spi_strobe(TI_CCxxx0_SFRX);
return 1;
}
else
{
spi_strobe(TI_CCxxx0_SFRX);
return 0;
}
}
else
{
spi_strobe(TI_CCxxx0_SFRX);
return 0;
}
}
else
{
spi_strobe(TI_CCxxx0_SFRX);
return 0;
}
}
//-----------------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -