/********************************************************************* **
** Device: A7125
** File: main.c
** Author: JPH
** Target: Winbond W77LE58
** Tools: ICE
** Created: 2008-02-25
** Description:
** This file is a sample code for your reference.
**
** Copyright (C) 2008 AMICCOM Corp.
**
*********************************************************************/
#include "define.h"
#include "w77le58.h"
#include "a7125reg.h"
#include "Uti.h"
/*********************************************************************
** I/O Declaration
*********************************************************************/
#define SCS P1_0 //spi SCS
#define SCK P1_1 //spi SCK
#define SDIO P1_2 //spi SDIO
#define CKO P1_3 //CKO
#define GIO1 P1_4 //GIO1
#define GIO2 P1_5 //GIO2
/*********************************************************************
** Constant Declaration
*********************************************************************/
#define TIMEOUT 50
#define t0hrel 1000
/*********************************************************************
** Global Variable Declaration
*********************************************************************/
Uint8 data timer;
Uint8 data TimeoutFlag;
Uint16 idata RxCnt;
Uint32 idata Err_ByteCnt;
Uint32 idata Err_BitCnt;
Uint16 idata TimerCnt0;
Uint8 data *Uartptr;
Uint8 data UartSendCnt;
Uint8 data CmdBuf[12];
Uint8 xdata tmpbuf[64];
Uint8 idata Err_Frame;
const Uint8 code BitCount_Tab[16] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
const Uint8 code ID_Tab[4]={0x34,0x75,0xC5,0x2A}; //ID code
const Uint8 code PN9_Tab[]=
{ 0xFF,0x83,0xDF,0x17,0x32,0x09,0x4E,0xD1,
0xE7,0xCD,0x8A,0x91,0xC6,0xD5,0xC4,0xC4,
0x40,0x21,0x18,0x4E,0x55,0x86,0xF4,0xDC,
0x8A,0x15,0xA7,0xEC,0x92,0xDF,0x93,0x53,
0x30,0x18,0xCA,0x34,0xBF,0xA2,0xC7,0x59,
0x67,0x8F,0xBA,0x0D,0x6D,0xD8,0x2D,0x7D,
0x54,0x0A,0x57,0x97,0x70,0x39,0xD2,0x7A,
0xEA,0x24,0x33,0x85,0xED,0x9A,0x1D,0xE0
}; // This table are 64bytes PN9 pseudo random code.
const Uint16 code A7125Config[]=
{
0x00, //MODE register, only reset, not use on config
0x42, //MODE CTRL register,
0x00, //CALIBRATION register,
0x3F, //FIFO1 register,
0x00, //FIFO2 register,
0x00, //FIFO register, for fifo read/write
0x00, //IDDATA register, for idcode
0x00, //RCOSC1 register,
0x00, //RCOSC2 register,
0x00, //RCOSC3 register,
0x00, //CKO register,
0x01, //GPIO1 register
0x01, //GPIO2 register,
0x1F, //DATARATE register,
0x50, //PLL1 register,
0x0E, //PLL2 register, RFbase 2400.001MHz
0x96, //PLL3 register,
0x00, //PLL4 register,
0x04, //PLL5 register,
0x3C, //chanel group I,
0x78, //chanel group II,
0xD7, //TX1 register,
0x40, //TX2 register,
0x0A, //DELAY1 register,
0x41, //DELAY2 register,
0x62, //RX register,
0xA0, //RXGAIN1 register,
0x00, //RXGAIN2 register,
0x00, //RXGAIN3 register,
0xD2, //RXGAIN4 register,
0x00, //RSSI register,
0xE2, //ADC register,
0x07, //CODE1 register,
0x56, //CODE2 register,
0x2A, //CODE3 register,
0x06, //IFCAL1 register,
0x00, //IFCAL2 register, only read
0x05, //VCOCCAL register,
0x44, //VCOCAL1 register,
0x80, //VCOCAL2 register,
0x30, //VCO DEV Cal. I register,
0x20, //VCO DEV Cal. II register,
0x80, //VCO DEV Cal. III register,
0x00, //VCO Mod. delay register
0x7A, //BATTERY register,
0x0F, //TXTEST register,
0x47, //RXDEM1 register,
0x80, //RXDEM2 register,
0xF1, //CPC1 register,
0x11, //CPC2 register,
0x05, //CRYSTAL register,
0x45, //PLLTEST register,
0x18, //VCOTEST register,
0x10, //RF Analog Test
0xFF, //IFAT register,
0x37, //Channel select register,
0xFF //VRB register
};
/*********************************************************************
** function Declaration
*********************************************************************/
void InitTimer0(void);
void initUart0(void);
void Timer0ISR (void);
void Uart0Isr(void);
void A7125_Reset(void);
void A7125_WriteReg(Uint8, Uint8);
Uint8 A7125_ReadReg(Uint8);
void ByteSend(Uint8 src);
Uint8 ByteRead(void);
void A7125_WriteID(void);
void A7125_WriteFIFO(void);
void initRF(void);
void A7125_Config(void);
void A7125_Cal(void);
void RxPacket(void);
void StrobeCmd(Uint8);
void SetCH(Uint8);
void CHGroupCal(Uint8);
/*********************************************************************
* main loop
*********************************************************************/
void main(void)
{
//initsw
PMR |= 0x01; //set DME0
//initHW
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
P4 = 0x0F;
InitTimer0();
initUart0();
TR0=1;
EA=1;
if ((P4 & 0x04)==0x04) //if P4.2=1, master
{
initRF();
StrobeCmd(CMD_STBY);
while(1)
{
A7125_WriteFIFO(); //write data to tx fifo
SetCH(100); //freq 2450.001MHz
StrobeCmd(CMD_TX); //entry tx
while(GIO1); //wait transmit completed
SetCH(96); //freq 2448.001MHz
StrobeCmd(CMD_RX); //entry rx
timer=0;
TimeoutFlag=0;
while(GIO1==1 && TimeoutFlag==0); //wait receive completed
if (TimeoutFlag)
{
StrobeCmd(CMD_STBY); //exit rx mode
continue;
}
RxPacket();
Delay10ms(1);
}
}
else //if P4.2=0, slave
{
initRF();
StrobeCmd(CMD_STBY);
RxCnt = 0;
Err_ByteCnt = 0;
Err_BitCnt = 0;
TR0 = 1;
while(1)
{
SetCH(96); //freq 2448.001MHz
StrobeCmd(CMD_RX); //entry rx
while(GIO1); //wait receive completed
RxPacket();
A7125_WriteFIFO(); //write data to tx fifo
SetCH(100); //freq 2450.001MHz
StrobeCmd(CMD_TX); //entry tx
while(GIO1); //wait transmit completed
}
}
}
/************************************************************************
** init Timer0
************************************************************************/
void InitTimer0(void)
{
TR0 = 0;
TMOD =(TMOD & 0xF0)|0x01; //timer0 mode=1
TH0 = (65536-t0hrel)>>8; // Reload Timer0 high byte,low byte
TL0 = 65536-t0hrel;
TF0 = 0; // Clear any pending Timer0 interrupts
ET0 = 1; // Enable Timer0 interrupt
}
/************************************************************************
** Timer0ISR
************************************************************************/
void Timer0ISR (void) interrupt 1
{
TF0 = 0; // Clear Timer0 interrupt
TH0 = (65536-t0hrel)>>8; // Reload Timer0 high byte,low byte
TL0 = 65536-t0hrel;
timer++;
if (timer == TIMEOUT)
{
TimeoutFlag=1;
}
TimerCnt0++;
if (TimerCnt0 == 500)
{
TimerCnt0 = 0;
CmdBuf[0] = 0xF1;
memcpy(&CmdBuf[1], &RxCnt, 2);
memcpy(&CmdBuf[3], &Err_ByteCnt, 4);
memcpy(&CmdBuf[7], &Err_BitCnt, 4);
memcpy(&CmdBuf[11], &Err_Frame, 1);
UartSendCnt = 12;
Uartptr =& CmdBuf[0];
SBUF = CmdBuf[0];
}
}
/************************************************************************
** Init Uart0
************************************************************************/
void initUart0(void)
{
TH1 = 0xFD; //BaudRate 9600;
TL1 = 0xFD;
SCON = 0x40;
TMOD = (TMOD & 0x0F) | 0x20;
REN = 1;
TR1 = 1;
ES = 1;
}
/************************************************************************
** Uart0 ISR
************************************************************************/
void Uart0Isr(void) interrupt 4 using 3
{
if (TI==1)
{
TI=0;
UartSendCnt--;
if(UartSendCnt !=0)
{
Uartptr++;
SBUF = *Uartptr;
}
}
}
/**********************
没有合适的资源?快使用搜索试试~ 我知道了~
A7125-for-FIFO-mode.zip_A7125
共6个文件
h:4个
c:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 133 浏览量
2022-09-24
16:47:27
上传
评论
收藏 7KB ZIP 举报
温馨提示
A7125经典例程,学习无线通讯的好资料。
资源推荐
资源详情
资源评论
收起资源包目录
A7125-for-FIFO-mode.zip (6个子文件)
A7125reg.h 2KB
main.c 16KB
define.h 1KB
Uti.c 2KB
W77LE58.h 4KB
uti.h 351B
共 6 条
- 1
资源评论
朱moyimi
- 粉丝: 65
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功