?? main.c
字號:
return varBank;
}
/*****************************************************************************
** Function : initA7121. **
** **
** HISTORY : 2005/6/15 Jones created. **
** **
** Description : Init AMIC A7121 **
** **
/****************************************************************************/
void initA7121(void)
{
Uint8 i;
Uint16 tempValue;
#ifdef SPI_CHECK
Uint16 readData;
#endif
// Step 1: Reset RFIC
ResetPin = LOW;
ResetPin = HIGH;
// Step 2: Set a7121 TO STBY mode
Ms0Pin = HIGH; //standy mode MS[1:0]="0b01"
Ms1Pin = LOW;
//SpiClk = LOW;
//CdTxenPin = LOW; //disable CDTXEN
//Step 3: system clock and mode control setting
if(DataRateSet == DATA_RATE_1M)
{ //data rate 1Mbps @xtal=18MHz
//BBOut ratio = 17,datarate ratio = 17, IF ratio = 8
SpiWrite(0x2231, SYSTEM_CLK_REG);
#ifdef SPI_CHECK
readData = SpiRead(SYSTEM_CLK_REG);
#endif
//synthesizer off,tx state,1Mbps,bi-directional TRX,BBout on
SpiWrite(0x039B, MODE_CONTROL_REG);
}
else
{ //data rate 3Mbps @xtal=18MHz
//BBOut ratio = 5,datarate ratio = 5, IF ratio = 3
SpiWrite(0x0CA5, SYSTEM_CLK_REG);
#ifdef SPI_CHECK
readData = SpiRead(SYSTEM_CLK_REG);
#endif
//synthesizer off,tx state,3Mbps,bi-directional TRX,BBout on
SpiWrite(0x03FB, MODE_CONTROL_REG);
}
// Step 4: VCO calibration
if(DataRateSet == DATA_RATE_1M)
{
for(i = 0; i < FREQUENCY_NO; i++)
FreqBank[i] = CalibrationVCO(i);
}
else
{
for (i = 0; i < FREQUENCY_NO; i++)
FreqBank[i] = CalibrationVCO(i);
}
// Step 5: TX & RX mode control setting
//deviation 160k-0xffc4/250k-0xffd0
SpiWrite(0xFFD0, TX_CONTROL1_REG);
SpiWrite(0xE23F, TX_CONTROL2_REG);
//enable fifo,average,recovery clock position=3, ETH ='110'
SpiWrite(0x06F6, RX_CONTROL1_REG);
//vga=0dB,data filter=5
SpiWrite(0x0028, RX_CONTROL2_REG);
//Step 6: FIFO setting
//fifo read/write disable,input data pin=TXD
SpiWrite(0x0FC0, FIFO_CONTROL_REG);
//Step 7: Access code setting
for (i = 0; i < 9; i++)
SpiWrite((AccessCodeTab[i] << 8) | AccessCodeTab[i], ACCESS_CODE_REG);
//Step 8: IFC, DFC, DEMC, RHC & RLC calibration setting
//rssi after sx syn
SpiWrite(0x01F2, CALIBRATION_CONTROL1_REG);
//packet indictor
SpiWrite(0x0001, CALIBRATION_CONTROL2_REG);
//default setting
SpiWrite(0x0D83, ADC_REG);
//auto calibration
SpiWrite(0x0003, CALIBRATION_CONTROL2_REG);//enable calibration process
do
{
tempValue = SpiRead(CALIBRATION_CONTROL1_REG);
tempValue = tempValue & 0x2E00;
}
while (tempValue != 0x2E00);//check calibration ok?
//rx control 2
SpiWrite(0x002F, RX_CONTROL2_REG);//vga=20dB,data filter=5
}
/*****************************************************************************
** Function : initMcu. **
** **
** HISTORY : 2005/6/15 Jones created. **
** **
** Description : Init Winbond W77LE58. **
** **
/****************************************************************************/
void initMcu(void)
{
// init Timer0
TMOD &= 0xF0;
TMOD |= 0x01; // 16 bits timer
ET0 = LOW;
TR0 = LOW;
}
/*****************************************************************************
** Function : writeFifo. **
** **
** HISTORY : 2005/6/16 Jones created. **
** **
** Description : Write data to tx FIFO **
** **
/****************************************************************************/
void writeFifo(void)
{
Uint8 i, j;
Uint8 wData;
for(j = 0; j < FRAME_LIGHT; j ++)
{
wData = TxFrame[j];
for(i = 0; i < 8; i++)
{
FClock = HIGH;
if(wData & 0x80)
Txd = HIGH;
else
Txd = LOW;
FClock = LOW;
wData <<= 1;
}
}
}
/*****************************************************************************
** Function : readWriteFifo. **
** **
** HISTORY : 2005/6/16 Jones created. **
** **
** Description : Write data to Tx FIFO & Read data from Rx FIFO **
** **
/****************************************************************************/
void readWriteFifo(void)
{
Uint8 i, j;
Uint8 wData;
Uint8 rData;
for(j = 0; j < FRAME_LIGHT; j ++)
{
wData = TxFrame[j];
for(i = 0; i < 8; i++)
{
rData <<= 1;
FClock = HIGH;
if(wData & 0x80)
Txd = HIGH;
else
Txd = LOW;
if(TRxD)
rData |= 1;//read "1"
FClock = LOW;
wData <<= 1;
}
RxFrame[j] = rData;
}
}
/*****************************************************************************
** Function : delay. **
** **
** HISTORY : 2005/6/16 Jones created. **
** **
** Description : delay. **
** **
/****************************************************************************/
void delay(Uint8 time)
{
while(time != 0) time --;
}
/*****************************************************************************
** Function : main **
** **
** HISTORY : 2004/11/16 Jones created **
** **
** Description : Main function for StartA7121. **
** **
*****************************************************************************/
void main(void)
{
#ifdef MASTER_MODE
MyType = MASTER;
#else
MyType = SLAVE;
#endif
#ifdef DATA_RATE_3M_MODE
DataRateSet = DATA_RATE_3M;
#else // DATA_RATE_1M_MODE
DataRateSet = DATA_RATE_1M;
#endif
TimeOutFlag = LOW;
Frequency = 0;
initMcu();
initA7121();
if(MyType == MASTER)
{
setTxMode();
writeFifo();
Ms1Pin = HIGH;
delay(30);
CdTxenPin = HIGH;
delay(80);
CdTxenPin = LOW;
setRxMode();
TL0 = 0x00;
TH0 = 0xEF;
ET0 = HIGH;
TR0 = HIGH;
EA = HIGH; // Enable all interrupt
}
else
{
setRxMode();
}
for( ; ; )
{
if(MyType == MASTER && TimeOutFlag == HIGH)
{
// Disable timer0
TimeOutFlag = LOW;
TR0 = LOW;
ET0 = LOW;
Frequency++; // Change Frequency
if(Frequency == FREQUENCY_HOPPING_NO)
Frequency = 0;
setTxMode();
writeFifo();
Ms1Pin = HIGH;
delay(30);
CdTxenPin = HIGH;
delay(80);
CdTxenPin = LOW;
setRxMode();
// enable timer0
TL0 = 0x00;
TH0 = 0xEF;
ET0 = HIGH;
TR0 = HIGH;
}
if(RxSync == HIGH)
{
if(MyType == MASTER)
{ // Disable timer0
TR0 = LOW;
ET0 = LOW;
// Enable timer0
TL0 = 0x00;
TH0 = 0xEF;
ET0 = HIGH;
TR0 = HIGH;
Frequency++; // Change Frequency
if(Frequency == FREQUENCY_HOPPING_NO)
Frequency = 0;
}
delay(30);
setTxMode();
readWriteFifo();
Ms1Pin = HIGH;
delay(30);
CdTxenPin = HIGH;
delay(80);
CdTxenPin = LOW;
if(MyType == SLAVE)
{
Frequency++; // Change Frequency
if(Frequency == FREQUENCY_HOPPING_NO)
Frequency = 0;
}
setRxMode();
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -