?? rf.c
字號:
#include "Main.H"
void Delay_Xms(INT8U D_val)
{
INT8U i,j;
for(i = 0;i<D_val;i++)
{
for(j=0;j<248;j++)
{
NOP();
NOP();
}
NOP();
}
}
//
//*****************************************************************************************
//函數名:SpisendByte(INT8U dat)
//輸入:發送的數據
//輸出:無
//功能描述:SPI發送一個字節
//*****************************************************************************************
//INT8U SpiTxRxByte(INT8U dat)
//{
// INT8U i,temp;
// temp = 0;
//
// CLK = 0;
// for(i=0; i<8; i++)
// {
// if(dat & 0x80)
// {
// MOSI = 1;
// }
// else
// MOSI = 0;
// dat <<= 1;
//
// CLK = 1;
// NOP();
// NOP();
//
// temp <<= 1;
// if(MISO)
// temp++;
// CLK = 0;
// NOP();
// NOP();
// }
// return temp;
//}
void SpiSendChar(INT8U txbuf)
{
INT8U i;
for(i = 0; i < 8; i++)
{
txbuf <<= 1;
MOSI = CARRY;
CLK = 1;
CLK = 0;
NOP();
NOP();
NOP();
NOP();
}
}
INT8U SpiReceiveChar(void)
{
INT8U i,RxData;
RxData = 0;
for(i = 0; i < 8;i++)
{
RxData <<= 1;
CLK = 1;
NOP();
NOP();
NOP();
NOP();
RxData |= MISO;
CLK = 0;
NOP();
NOP();
NOP();
NOP();
}
return RxData;
}
void POWER_ON_RESET(void)
{
SS = 1;
MOSI = 1;
RESET_n = 0;
Delay_Xms(30);
RESET_n = 1;
Delay_Xms(30);
RESET_n = 0;
Delay_Xms(30);
RESET_n = 1;
Delay_Xms(26);
}
//清接收緩沖區
void Reset_Rx_FIFO(void)
{
SS = 0;
SpiSendChar(0x52);
// Delay_Xms(1);
SpiSendChar(0x00);
SpiSendChar(0x80);
SS = 1;
}
//進入接收狀態
void Enter_Rx_STATE(void)
{
SS = 0;
SpiSendChar(0x07);
// Delay_Xms(1);
SpiSendChar(0x00);
SpiSendChar(0x90);
SS = 1;
}
//讀緩沖
// *Length 接收數據的長度
// *RxBuf 接收數據的緩沖
void Read_FIFO(INT8U *Length,INT8U *rxbuffer)
{
INT8U i;
SS = 0;
SpiSendChar(0xD0);
// Delay_Xms(1);
*Length = SpiReceiveChar();
// for(i = 0; i < *Length; i++)
for(i = 0; i < 4; i++)//Test
{
*rxbuffer++ = SpiReceiveChar();
}
SS = 1;
}
//清發送緩沖
void Reset_Tx_FIFO(void)
{
SS = 0;
SpiSendChar(0x52);
// Delay_Xms(1);
SpiSendChar(0x80);
SpiSendChar(0x00);
}
//進入發送狀態
void Enter_Tx_STATE(void)
{
SS = 0;
SpiSendChar(0x07);
// Delay_Xms(1);
SpiSendChar(0x01);
SpiSendChar(0x10);
SS = 1;
}
//寫發送緩沖
// Length 發送數據的長度
// TxBuf 發送緩沖
void Write_FIFO(INT8U Length,INT8U *txbuffer)
{
INT8U i;
SS = 0;
SpiSendChar(0x50);
// Delay_Xms(1);
SpiSendChar(Length);
for(i = 0; i < Length; i++)
{
SpiSendChar(*txbuffer++);
}
SS = 1;
}
void Write_EM198810_REG(INT8U Addr,INT16U EmData)
{
SS = 0;
SpiSendChar(Addr);
NOP();
NOP();
NOP();
NOP();
NOP();
SpiSendChar(EmData>>8);
SpiSendChar(EmData);
SS = 1;
}
INT16U Read_EM198810_REG(INT8U Addr)
{
INT16U RxData;
INT8U Data_Hi,Data_Li;
SS = 0;
Addr |= 0x80;
SpiSendChar(Addr);
//Delay_Xms(1);
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
Data_Hi = SpiReceiveChar();
Data_Li = SpiReceiveChar();
Delay_Xms(13);
RxData = 0;
RxData = Data_Hi;
RxData <<= 8;
RxData |= Data_Li;
SS = 1;
return RxData;
}
void Initial_frame(void)
{
INT8U frame_adr,i;
INT16U frame_arr[]={0x9800,0xff0f,0x8028,0x8056,0x4ef6,0xf6f5,0x185c,0xd651,0x4404,0xe000,0x0000};
for(i = 0,frame_adr = 0x30;i < 11;i++,frame_adr++)
{
Write_EM198810_REG(frame_adr,frame_arr[i]);
}
}
void Initial_RF_REG(void)
{
INT8U rf_adr,i;
INT16U rf_reg[]={0x354f,0x1f01,0x38d8,0x00a1,0x124c,0x8008,0x2101,0x0004,0x4041,0x7e00,0x0000,0x169d,0x802f,0xb0f8,0xe000,0xa114,0x8191,0x6962,0x0002,0x0002,0xb140,0x780f,0x3f04,0x5800};
for(i=0,rf_adr = 0;rf_adr < 0x1d;rf_adr++)
{
if((rf_adr == 1) || (rf_adr == 3) || (rf_adr == 6) || (rf_adr == 0x11) || (rf_adr == 0x1b))
continue;
Write_EM198810_REG(rf_adr,rf_reg[i]);
i++;
}
}
// Write_EM198810_REG(0x00,0x354f);
// Write_EM198810_REG(0x02,0x1f01);
// Write_EM198810_REG(0x04,);
// Write_EM198810_REG(0x05,);
// Write_EM198810_REG(0x07,);
// Write_EM198810_REG(0x08,);
// Write_EM198810_REG(0x09,);
// Write_EM198810_REG(0x0a,);
// Write_EM198810_REG(0x0b,);
// Write_EM198810_REG(0x0c,);
// Write_EM198810_REG(0x0d,);
// Write_EM198810_REG(0x0e,);
// Write_EM198810_REG(0x0f,);
// Write_EM198810_REG(0x10,);
//// Write_EM198810_REG(0x11,0x0066);
// Write_EM198810_REG(0x12,);
// Write_EM198810_REG(0x13,);
// Write_EM198810_REG(0x14,);
// Write_EM198810_REG(0x15,);
// Write_EM198810_REG(0x16,);
// Write_EM198810_REG(0x17,);
// Write_EM198810_REG(0x18,);
// Write_EM198810_REG(0x19,);
// Write_EM198810_REG(0x1a,);
//// Write_EM198810_REG(0x1b,0x8000);
// Write_EM198810_REG(0x1c,);
void Initial_RF(void)
{
POWER_ON_RESET();
Initial_frame();
Delay_Xms(26);
Initial_RF_REG();
Delay_Xms(26);
Delay_Xms(52);
}
//INT8U REG_TEST(void)
//{
// INT16U temp;
// temp = Read_EM198810_REG(0x00);
// if(temp != 0x354f) return 0;
// temp = Read_EM198810_REG(0x02);
// if(temp != 0x1f01) return 0;
// temp = Read_EM198810_REG(0x04);
// if(temp != 0x38d8) return 0;
// temp = Read_EM198810_REG(0x05);
// if(temp != 0x00a1) return 0;
// temp = Read_EM198810_REG(0x07);
// if(temp != 0x124c) return 0;
// temp = Read_EM198810_REG(0x08);
// if(temp != 0x8008) return 0;
// temp = Read_EM198810_REG(0x09);
// if(temp != 0x2101) return 0;
// temp = Read_EM198810_REG(0x0a);
// if(temp != 0x0004) return 0;
// temp = Read_EM198810_REG(0x0b);
// if(temp != 0x4041) return 0;
// temp = Read_EM198810_REG(0x0c);
// if(temp != 0x7e00) return 0;
// temp = Read_EM198810_REG(0x0d);
// if(temp != 0x0000) return 0;
// temp = Read_EM198810_REG(0x0e);
// if(temp != 0x169d) return 0;
// temp = Read_EM198810_REG(0x0f);
// if(temp != 0x802f) return 0;
// temp = Read_EM198810_REG(0x10);
// if(temp != 0xb0f8) return 0;
//// temp = Read_EM198810_REG(0x11);
//// if(temp != 0x0066) return 0;
// temp = Read_EM198810_REG(0x12);
// if(temp != 0xe000) return 0;
// temp = Read_EM198810_REG(0x13);
// if(temp != 0xa114) return 0;
// temp = Read_EM198810_REG(0x14);
// if(temp != 0x8191) return 0;
// temp = Read_EM198810_REG(0x15);
// if(temp != 0x6962) return 0;
// temp = Read_EM198810_REG(0x16);
// if(temp != 0x0002) return 0;
// temp = Read_EM198810_REG(0x17);
// if(temp != 0x0002) return 0;
// temp = Read_EM198810_REG(0x18);
// if(temp != 0xb140) return 0;
// temp = Read_EM198810_REG(0x19);
// if(temp != 0x780f) return 0;
// temp = Read_EM198810_REG(0x1a);
// if(temp != 0x3f04) return 0;
//// temp = Read_EM198810_REG(0x1b);
//// if(temp != 0x8000) return 0;
// temp = Read_EM198810_REG(0x1c);
// if(temp != 0x5800) return 0;
//
// return 1;
//}
void TxD_RF(INT8U Len,INT8U *dat)
{
Reset_Tx_FIFO();
Delay_Xms(11);
Enter_Tx_STATE();
Delay_Xms(11);
Write_FIFO(Len,dat);
while(PKT_FLAG == 0);
Delay_Xms(20);
// Reset_Rx_FIFO();
// Enter_Rx_STATE();
}
INT8U RxD_RF(INT8U *Len,INT8U *dat)
{
INT8U i;
Reset_Rx_FIFO();
Delay_Xms(20);
Enter_Rx_STATE();
for(i=0;i<10;i++)
{
Delay_Xms(20);
}
if(PKT_FLAG)
{
Read_FIFO(Len,dat);
return 1;
}
else
return 0;
}
void Write_Test(void)
{
Write_EM198810_REG(0x34,0x6201);
Delay_Xms(2);
Write_EM198810_REG(0x35,0x6302);
Delay_Xms(2);
Write_EM198810_REG(0x36,0x6403);
Delay_Xms(2);
}
void SpiReadTest(void)
{
INT8U Adr_R,R_Data_Hi,R_Data_Lo,i;
for(i=0;i<50;i++)
{
SS = 0;
Adr_R = i+29;
Adr_R |= 0x80;
SpiSendChar(Adr_R);
Delay_Xms(1);
R_Data_Hi = SpiReceiveChar();
Delay_Xms(1);
R_Data_Lo = SpiReceiveChar();
SS = 1;
Write_E2prom_Byte(i*2,R_Data_Hi);
Write_E2prom_Byte(i*2+1,R_Data_Lo);
Delay_Xms(1);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -