400Vhuganqi/RN8209D官方资料/RN8209C 01-04资料合集/RN8209C 04支持软件/RN8209C及D初始化及UART通讯参考程序.txt

762 lines
26 KiB
Plaintext
Raw Permalink Normal View History

2024-12-10 20:11:28 +08:00
//----------------------start RN8209 <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>---------------------------------------------------//
#define ADSYSCON 0x00
#define ADEMUCON 0x01
#define ADHFConst 0x02
#define ADPStart 0x03
#define ADDStart 0x04
#define ADGPQA 0x05
#define ADGPQB 0x06
#define ADPhsA 0x07
#define ADPhsB 0x08
#define ADQPHSCAL 0x09
#define ADAPOSA 0x0a
#define ADAPOSB 0x0b
#define ADRPOSA 0x0c
#define ADRPOSB 0x0d
#define ADIARMSOS 0x0e
#define ADIBRMSOS 0x0f
#define ADIBGain 0x10
#define ADD2FPL 0x11
#define ADD2FPH 0x12
#define ADDCIAH 0x13
#define ADDCIBH 0x14
#define ADDCUH 0x15
#define ADDCL 0x16
#define ADEMUCON2 0x17
#define ADPFCnt 0x20
#define ADDFcnt 0x21
#define ADIARMS 0x22
#define ADIBRMS 0x23
#define ADURMS 0x24
#define ADUFreq 0x25
#define ADPowerPA 0x26
#define ADPowerPB 0x27
#define ADEnergyP 0x29
#define ADEnergyP2 0x2a
#define ADEnergyD 0x2b
#define ADEnergyD2 0x2c
#define ADEMUStatus 0x2d
#define ADSPL_IA 0x30
#define ADSPL_IB 0x31
#define ADSPL_U 0x32
#define ADIE 0x40
#define ADIF 0x41
#define ADRIF 0x42
#define ADSysStatus 0x43
#define ADRData 0x44
#define ADWData 0x45
#define ADDeviceID 0x7f
#define WriteEn 0xea
//----------------------end RN8209 <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>-----------------------------------------------//
//---start У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>-------<2D><><EFBFBD>ɸ<EFBFBD><C9B8>ݼ<EFBFBD><DDBC><EFBFBD>оƬ<D0BE><C6AC><EFBFBD>ģ<EFBFBD>
typedef struct
{
u16 SYSCON;
u16 EMUCON;
u16 HFConst;
u16 PStart;
u16 QStart; //10
u16 GPQA;
u16 GPQB;
u16 IAGain;
u16 UGain;
u16 IBGain;
u16 PhsA;
u16 PhsB;
u16 QPhsCal; //22
u16 APOSA;
u16 APOSB;
u16 RPOSA;
u16 RPOSB;
u16 IARMSOS; //32
u16 IBRMSOS; //34
u16 EMUCON2;
float KUrms; // <20><>ѹϵ<D1B9><CFB5>
float KIArms; // Aͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
float KIBrms; // Bͨ<42><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
float KPrms; // <20><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
u16 RealUI[2]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֵ<CABE><D6B5><EFBFBD><EFBFBD><EFBFBD>ʴ<EFBFBD><CAB4>ڴ<EFBFBD>ֵʱ<D6B5><CAB1>ʾ 0.2%
u32 RealPw; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֵ<CABE><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ֵʱ<D6B5><CAB1>ʾ 0.2%
u32 ChkSum;
u16 RTCDota0; // RTCУ<43><D0A3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
u8 TemperAdj[2]; // <20>ߵ<EFBFBD><DFB5>²<EFBFBD><C2B2><EFBFBD>ֵ
u8 RTCAdj[4]; // RTC<54>ߵ<EFBFBD><DFB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֵ
u8 CurAdj; // <20><><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><ECB2B9>ֵ
u8 OfsetAdjAcVolt[2]; //<2F><><EFBFBD>ݵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>OFFSET<45><54>ֵ
u16 CorrectionTemper; //У<><D0A3>ʱ<EFBFBD>̱<EFBFBD><CCB1>Ƶ<EFBFBD><C6B5><EFBFBD>
}sDl645FirmParaFile_TypeDef; //58 Byte
//---end У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>-------<2D><><EFBFBD>ɸ<EFBFBD><C9B8>ݼ<EFBFBD><DDBC><EFBFBD>оƬ<D0BE><C6AC><EFBFBD>ģ<EFBFBD>
//---start <20><><EFBFBD><EFBFBD>ֵ˲ʱֵ<CAB1><D6B5>ת<EFBFBD>ļ<EFBFBD>-------
typedef struct
{
u8 ChkErrCnt;
u32 Pw[2]; //pa,pb
u32 UI[3]; // Ia=UI[0] Inal U
u16 Frequency; //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>λ<EFBFBD><CEBB>
u32 Pulse; //ǰ̨<C7B0><CCA8><EFBFBD><EFBFBD>
u16 Pstart;
//---<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---
u32 Pulse_Eg; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 PDirect; //<2F><><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>
u32 ChkSum1; //<2F><><EFBFBD><EFBFBD>EMU<4D><55>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
// У<><D0A3>ʹ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
u16 RatintU; // <20><EFBFBD><EEB6A8>ѹ
u16 RatingI; // <20><EFBFBD><EEB6A8><EFBFBD><EFBFBD>
u32 TempU; // <20><>ǰУ<C7B0><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
u32 TempI; // <20><>ǰУ<C7B0><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 TempPw; // <20><>ǰУ<C7B0><D0A3><EFBFBD><EFBFBD><E3B9A6>
} sDl645FrontTmp_TypeDef;
//---end <20><><EFBFBD><EFBFBD>ֵ˲ʱֵ<CAB1><D6B5>ת<EFBFBD>ļ<EFBFBD>-------
//---start <20><><EFBFBD><EFBFBD>ֵ˲ʱֵ<CAB1>ļ<EFBFBD>-------
typedef struct
{
struct sDl645FrontPubData_TypeDef
{
u16 U; //---<2D><>ѹ---NNN.N
u32 Ia; //---<2D><><EFBFBD><EFBFBD>NNNN.NNNN(<28><><EFBFBD><EFBFBD>ֵҪ<D6B5><D2AA>3<EFBFBD><33>3С<33><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵҪ<D6B5><D2AA>2<EFBFBD><32>4С<34><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>)---
u32 In; //---<2D><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>
sDF09 Pw; //---˲ʱ<CBB2>й<EFBFBD>p
u16 Pf; //---<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N.NNN--- <09><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>{Pf Pfa Pfb Pfc}
u16 Angle; //---<2D><><EFBFBD><EFBFBD>NNN.N---
u16 Frequency; //---Ƶ<><C6B5>NN.NN
u32 PPwave; //---һ<><D2BB><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NN.NNNN
u8 Chnsel;
u16 Temperature; //---NNN.N <20><EFBFBD>
u16 ClockBat; //---NN.NN <20><><EFBFBD>ص<EFBFBD>ѹ
u32 tWorkBat; //---NNNN ʱ<>ӹ<EFBFBD><D3B9><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>ӣ<EFBFBD>
u8 PDirect; //---ԭ<><D4AD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>
u16 CfIn; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD>ж<EFBFBD>
u8 CfTime; //
u8 Step;
u16 FrontStamp;
u16 tMaxI; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬0.5sΪ<EFBFBD><EFBFBD>λ
u8 SafeCurFlag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޲<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>־
} PubData;
struct sDl645FrontPriData_TypeDef
{
u8 Flag; //---<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECB3A3>־---
} PriData;
struct sDl645FrontPriPara_TypeDef
{
u32 PConstE; //<2F>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
u16 Crc;
} PriPara;
} sDl645Front_TypeDef;
//---end <20><><EFBFBD><EFBFBD>ֵ˲ʱֵ<CAB1>ļ<EFBFBD>-------
//---start <20><><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>-------
typedef struct
{
u16 EFlag; //ͨѶ״̬
u16 RxLen; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
u16 TxLen;
u32 TimeOutStamp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
u8 *pTx;
u8 fBps; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>־
u8 NewBps; //<2F>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>
u32 NewBpsStamp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//u8 TxAddr;
u8 RxBuf[MAX_COMPACK_SIZE];//<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
u8 TxBuf[MAX_COMPACK_SIZE];//<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
}sComPack_TypeDef;
//---end ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>-------
/*****************************************************************************
** Function name: fnUSART_RN8209_Init(u8 Cfg)
**
** Description: <09><><EFBFBD><EFBFBD>UART<52><54>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڸ<D6BD>ʽ<EFBFBD><CABD><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD><EFBFBD>͡<EFBFBD><CDA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC>ʼ<EFBFBD><CABC>ʱִ<CAB1><D6B4>
**
** Parameters: <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**
** Returned value: NONE
**
******************************************************************************/
#define PinMode_RN8209RX(x) ( (x == GPIO_MODE_OUT) ? (GPIO->PMA &= 0xfbffffff) : (GPIO->PMA |= 0x04000000) ) // P3.2
#define PinMode_RN8209TX(x) ( (x == GPIO_MODE_OUT) ? (GPIO->PMA &= 0xf7ffffff) : (GPIO->PMA |= 0x08000000) ) // P3.3
void fnUSART_RN8209_Init(u8 Cfg)
{
u32 ClkDiv;
ClkDiv = fnDl645MainClock_Get();//<2F><>ȡϵͳ<CFB5><CDB3>ǰʱ<C7B0><CAB1>Ƶ<EFBFBD><C6B5>
switch(Cfg & 0xE0)
{
case USART_BPS_600: //600
ClkDiv=ClkDiv/(600*16)-1;//<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ǰʱ<C7B0><CAB1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EBB4AE>ͨѶ<CDA8><D1B6><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>UART2->BAUDֵ
break;
case USART_BPS_1200: //1200
ClkDiv=ClkDiv/(1200*16)-1;
break;
case USART_BPS_2400: //2400
ClkDiv=ClkDiv/(2400*16)-1;
break;
case USART_BPS_4800: //RN8209C<39><43>֧<EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD>ʣ<EFBFBD>4800
ClkDiv=ClkDiv/(4800*16)-1;
break;
case USART_BPS_9600: //9600
ClkDiv=ClkDiv/(9300*16)-1;
break;
default:
ClkDiv=ClkDiv/(2400*16)-1; //2400
break;
}
//UART2<54><32><EFBFBD><EFBFBD>RN8209ͨѶ.
UART2->BAUD = ClkDiv;
UART2->CTRL = (3 << 0) | /* uart enable ʹ<><CAB9>*/
(3 << 6) | /* data bit: 8 <20><><EFBFBD><EFBFBD>λ*/
(2 << 8); /* even żУ<C5BC><D0A3>*/
PinMode_RN8209RX(GPIO_MODE_IN);//MCU<43><55><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PinMode_RN8209TX(GPIO_MODE_OUT);//MCU<43><55><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return;
}
/*****************************************************************************
** Function name: USART_ITConfig(u8 ComPort, FunctionalMODE USART_IT, FunctionalState NewState)
**
** Description: <09>˿ڹ<CBBF><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
**
** Parameters: ComPort<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>񣨴<EFBFBD><F1A3A8B4><EFBFBD>0<EFBFBD><30>1<EFBFBD><31>2<EFBFBD><32>3<EFBFBD><33><EFBFBD><EFBFBD> USART_IT<49><54><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD>ʽѡ<CABD>񣨽<EFBFBD><F1A3A8BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>
** NewState<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ѡ<CCAC><D1A1><EFBFBD><EFBFBD>ʹ<EFBFBD>ܻ<EFBFBD><DCBB>رգ<D8B1>
**
** Returned value: NONE
**
******************************************************************************/
void USART_ITConfig(u8 ComPort, FunctionalMODE USART_IT, FunctionalState NewState)
{
u8 Compose;
Compose=(ComPort<<2)|(USART_IT<<1)|(NewState);
switch(Compose)
{
//----------------RN8209-----------------------------
case (SCOM_PORT_RN8209<<2)|(USART_IT_RX<<1)|DISABLE: //RN8209ͨ<39>ſ<EFBFBD>|<7C><><EFBFBD><EFBFBD>|<7C>ر<EFBFBD>
UART2->CTRL &=0xffe7; //<2F><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD>ν<EFBFBD><CEBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD>ж<EFBFBD>
UART2->STA = 0x3d; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD>־
break;
case (SCOM_PORT_RN8209<<2)|(USART_IT_RX<<1)|ENABLE: //RN8209ͨ<39>ſ<EFBFBD>|<7C><><EFBFBD><EFBFBD>|<7C><><EFBFBD><EFBFBD>
UART2->CTRL |=0x18; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD>ж<EFBFBD>
UART2->STA = 0x3d; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD>־
break;
case (SCOM_PORT_RN8209<<2)|(USART_IT_TX<<1)|DISABLE: //RN8209ͨ<39>ſ<EFBFBD>|<7C><><EFBFBD><EFBFBD>|<7C>ر<EFBFBD>
UART2->CTRL &=0xfff9; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD>ж<EFBFBD>
UART2->STA = 0x02; //<2F><EFBFBD><E5B7A2><EFBFBD>жϱ<D0B6>־
break;
case (SCOM_PORT_RN8209<<2)|(USART_IT_TX<<1)|ENABLE: //RN8209ͨ<39>ſ<EFBFBD>|<7C><><EFBFBD><EFBFBD>|<7C><><EFBFBD><EFBFBD>
UART2->CTRL |=0x06; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD>ж<EFBFBD>
UART2->STA = 0x02; //<2F><EFBFBD><E5B7A2><EFBFBD>жϱ<D0B6>־
UART2->TXD=*(ComPack[SCOM_PORT_RN8209].pTx++);
ComPack[SCOM_PORT_RN8209].TxLen--;
break;
default: return;
}
return;
}
/*****************************************************************************
** Function name:UART2_HANDLER(void)
**
** Description:<3A><>RN8209<30><39><EFBFBD>еײ<D0B5>ͨѶ<CDA8>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RN8209<30><39><EFBFBD>ݵĽ<DDB5><C4BD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
**
** Parameters: NONE
**
** Returned value: NONE
**
******************************************************************************/
void UART2_HANDLER(void)
{
u32 status;
u8 temp;
status = UART2->STA;
/* UART error irq <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if((UART2->CTRL & 0x10) && (status & 0x3c))
{
ComPack[SCOM_PORT_RN8209].RxLen=0;
ComPack[SCOM_PORT_RN8209].EFlag=SCOMPK_EFLAG_IDLE;
UART2->STA = status;
}
/* receive data complete irq <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>*/
if((UART2->CTRL & 0x8) && (status & 0x1))
{
temp = UART2->RXD;
ComPack[SCOM_PORT_RN8209].RxBuf[ComPack[SCOM_PORT_RN8209].RxLen++]=temp;
UART2->STA = 0x1; // clear receive IF
}
/* transmit data complete irq <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>*/
if((UART2->CTRL & 0x4) && (status & 0x2))
{
if(ComPack[SCOM_PORT_RN8209].TxLen>0)
{
//for(i=0;i<30;i++) __NOP();
UART2->TXD=*(ComPack[SCOM_PORT_RN8209].pTx++);
ComPack[SCOM_PORT_RN8209].TxLen--;
UART2->STA = 0x2;
}
}
UART2->STA = status;//<2F><><EFBFBD>жϱ<D0B6>ʶλ
return;
}
/*****************************************************************************
** Function name:Rn8209Delay(u16 t)
**
** Description:<3A><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
**
** Parameters: t <20><><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
**
** Returned value: NONE
**
******************************************************************************/
void Rn8209Delay(u16 t)
{
u16 i;
if(Dl645Inactive.PubData.InactiveStamp) return;
while(t--)
{
for (i = 0;i < 400;i++)
;
WDT->EN = 0xbb;
}
}
/*****************************************************************************
** Function name:fnRN8209_Write(u8 wReg,u8 *pBuf,u8 ucLen)
**
** Description:дRN8209<30>Ĵ<EFBFBD><C4B4><EFBFBD>
**
** Parameters:wReg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>*pBuf<75><66>д<EFBFBD><D0B4>ֵ<EFBFBD>Ĵ<EFBFBD><C4B4>ŵ<EFBFBD>ַ<EFBFBD><D6B7>ucLen<65><6E><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֵ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
**
** Returned value: <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ-<2D>ɹ<EFBFBD><C9B9><EFBFBD>ʧ<EFBFBD><CAA7>
**
******************************************************************************/
ErrorStatus fnRN8209_Write(u8 wReg,u8 *pBuf,u8 ucLen)
{
u8 i,j,temp,chksum,Repeat;
ErrorStatus err;
if( (ucLen == 0) || (ucLen > 4) ) return(ERROR);
for( Repeat =2; Repeat != 0 ; Repeat--)
{
err = SUCCESS;
ComPack[SCOM_PORT_RN8209].pTx=&ComPack[SCOM_PORT_RN8209].TxBuf[0];
//д<><D0B4><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>λbit[7]=0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit[6:0]Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ĵ<EFBFBD>ַ
temp =wReg|0x80;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1<EFBFBD><31>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>Ϊд<CEAA><D0B4><EFBFBD><EFBFBD>
*(ComPack[SCOM_PORT_RN8209].pTx++)=temp;
chksum = temp;
for(i = ucLen; i > 0;i-- )
{
*(ComPack[SCOM_PORT_RN8209].pTx++)=pBuf[i-1]; //<2F><>RN8209<30><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
chksum +=pBuf[i-1];
}
chksum = ~chksum;
*(ComPack[SCOM_PORT_RN8209].pTx++)=chksum;
ComPack[SCOM_PORT_RN8209].TxLen = ucLen+2;
ComPack[SCOM_PORT_RN8209].pTx=&ComPack[SCOM_PORT_RN8209].TxBuf[0];
USART_ITConfig(SCOM_PORT_RN8209 , USART_IT_TX, ENABLE); //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
Rn8209Delay(30);//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//RN8209дʹ<D0B4>ܻ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>WData<74>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷд<C8B7>룩-----------------------
ComPack[SCOM_PORT_RN8209].pTx=&ComPack[SCOM_PORT_RN8209].TxBuf[0];
if(wReg == 0xEA)
{//RN8209дʹ<D0B4>ܻ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
*(ComPack[SCOM_PORT_RN8209].pTx)=0X43;
}
else
{//<2F><>д<EFBFBD><D0B4>WData<74>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*(ComPack[SCOM_PORT_RN8209].pTx)=wReg;
}
ComPack[SCOM_PORT_RN8209].TxLen = 1;
ComPack[SCOM_PORT_RN8209].RxLen=0;
USART_ITConfig(SCOM_PORT_RN8209 , USART_IT_RX, ENABLE); //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
USART_ITConfig(SCOM_PORT_RN8209 , USART_IT_TX, ENABLE); //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
memset(&ComPack[SCOM_PORT_RN8209].RxBuf[0] , 0x00 , 10);
Rn8209Delay(25);//<2F>ȴ<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
fnWDT_Restart();
j = 0;
if(wReg == 0xEA)
{//RN8209дʹ<D0B4>ܻ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
if(pBuf[0] == 0XE5)
{//RN8209дʹ<D0B4><CAB9>
temp = ComPack[SCOM_PORT_RN8209].RxBuf[0];
if(!(temp&0x10)) err = ERROR;
}
else if(pBuf[0] == 0XDC)
{//RN8209д<39><D0B4><EFBFBD><EFBFBD>
temp = ComPack[SCOM_PORT_RN8209].RxBuf[0];
if(temp&0x10) err = ERROR;
}
}
else
{ //<2F><>д<EFBFBD><D0B4>WData<74>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ComPack[SCOM_PORT_RN8209].RxBuf[j++]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pBuf[i-1]<5D><>
for(i = ucLen; i > 0;i--)
{
temp = ComPack[SCOM_PORT_RN8209].RxBuf[j++];
if((wReg == 0)&&(i==2)) temp = 0;//<2F><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
if(temp != pBuf[i-1])
{
err = ERROR;
break;
}
}
}
fnWDT_Restart();
if(err == SUCCESS) break;
fnScomPk_Init(SCOM_PORT_RN8209);
}
USART_ITConfig(SCOM_PORT_RN8209 , USART_IT_TX, DISABLE); //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܹر<DCB9>
return(err);
}
/*****************************************************************************
** Function name:fnRN8209_Read(u8 wReg,u8 *pBuf,u8 ucLen)
**
** Description:<3A><>RN8209<30>Ĵ<EFBFBD><C4B4><EFBFBD>
**
** Parameters:wReg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>*pBuf<75><66><EFBFBD><EFBFBD>ֵ<EFBFBD>Ĵ<EFBFBD><C4B4>ŵ<EFBFBD>ַ<EFBFBD><D6B7>ucLen<65><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
**
** Returned value: <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ-<2D>ɹ<EFBFBD><C9B9><EFBFBD>ʧ<EFBFBD><CAA7>
**
******************************************************************************/
ErrorStatus fnRN8209_Read(u8 wReg,u8 *pBuf,u8 ucLen)
{
u8 i,temp,Repeat;
u8 j=0;
u8 chksum=0;
ErrorStatus err;
if(ucLen == 0) return(ERROR);
for( Repeat=2; Repeat != 0 ; Repeat--)
{
err = SUCCESS;
temp = wReg ;
chksum=wReg;
j = 0;
ComPack[SCOM_PORT_RN8209].pTx=&ComPack[SCOM_PORT_RN8209].TxBuf[0];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>λbit[7]=0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit[6:0]Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ĵ<EFBFBD>ַ
*(ComPack[SCOM_PORT_RN8209].pTx)=temp;
ComPack[SCOM_PORT_RN8209].TxLen = 1;
USART_ITConfig(SCOM_PORT_RN8209 , USART_IT_RX, ENABLE); //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
USART_ITConfig(SCOM_PORT_RN8209 , USART_IT_TX, ENABLE); //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
memset(&ComPack[SCOM_PORT_RN8209].RxBuf[0] , 0x00 , 10);
Rn8209Delay(25);//<2F>ӳ٣<D3B3><D9A3>Եȴ<D4B5><C8B4><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fnWDT_Restart();
for(i = ucLen; i > 0;i--)
{
pBuf[i-1] = ComPack[SCOM_PORT_RN8209].RxBuf[j++]; //<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><E6B5BD><EFBFBD><EFBFBD>pBuf[]
chksum += pBuf[i-1];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
}
chksum = ~chksum;
temp=ComPack[SCOM_PORT_RN8209].RxBuf[j++];
if(temp!=chksum)
{//<2F><>У<EFBFBD><D0A3><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
err = ERROR;
for(i = ucLen; i > 0;i--) pBuf[i-1] = 0;
}
if(err == SUCCESS) break;
fnScomPk_Init(SCOM_PORT_RN8209);
}
USART_ITConfig(SCOM_PORT_RN8209 , USART_IT_TX, DISABLE); //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܹر<DCB9>
ComPack[SCOM_PORT_RN8209].RxLen=0; //
return(err);
}
/*****************************************************************************
** Function name: fnDl645_ComInitRN8209(void)
**
** Description: <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RN8209<30>Ĵ<EFBFBD><C4B4><EFBFBD>
**
** Parameters: NONE
**
** Returned value: NONE
**
******************************************************************************/
void fnDl645_ComInitRN8209(void)
{
Dl645FirmPara.HFConst = 0x1000;
Dl645FirmPara.PStart = 0x0060;
Dl645FirmPara.QStart = 0x0120;
Dl645FirmPara.GPQA = 0x0000;
Dl645FirmPara.GPQB = 0x0000;
Dl645FirmPara.PhsA= 0x0000;
Dl645FirmPara.PhsB= 0x0000;
Dl645FirmPara.QPhsCal = 0x0000;
Dl645FirmPara.APOSA = 0x0000;
Dl645FirmPara.APOSB = 0x0000;
Dl645FirmPara.RPOSA = 0x0000;
Dl645FirmPara.RPOSB = 0x0000;
Dl645FirmPara.IARMSOS = 0x0000;
Dl645FirmPara.IBRMSOS = 0x0000;
Dl645FirmPara.IBGain = 0x0000;
//Dl645FirmPara.KUrms= 0x00000000;
//Dl645FirmPara.KIArms= 0x00000000;
//Dl645FirmPara.KIBrms= 0x00000000;
Dl645FirmPara.KPrms= 0x00000000;
Dl645RN8209DataComm.ucTemp8 =0XE5;
//if(fnRN8209_Write( 0xEA , Dl645RN8209DataComm.ucTempBuf , 1 ) == ERROR) return ; //дʹ<D0B4><CAB9>
fnRN8209_Write( 0xEA , Dl645RN8209DataComm.ucTempBuf , 1 );
//if(fnRN8209_Write( 0x00 , (u8 *)&Dl645FirmPara.SYSCON , 2 ) == ERROR) return ; //дϵͳ<CFB5><CDB3><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
//if(fnRN8209_Write( 0x01 , (u8 *)&Dl645FirmPara.EMUCON , 2 ) == ERROR) return ; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
if(fnRN8209_Write( ADHFConst , (u8 *)&Dl645FirmPara.HFConst , 2 ) == ERROR) return ;
if(fnRN8209_Write( ADPStart , (u8 *)&Dl645FirmPara.PStart , 2 ) == ERROR) return ;
if(fnRN8209_Write( ADDStart , (u8 *)&Dl645FirmPara.QStart , 2 ) == ERROR) return ;
if(fnRN8209_Write( ADGPQA , (u8 *)&Dl645FirmPara.GPQA , 2 ) == ERROR) return; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADGPQB , (u8 *)&Dl645FirmPara.GPQB , 2 ) == ERROR) return; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADPhsA , (u8 *)&Dl645FirmPara.PhsA , 1 ) == ERROR) return; //д<><D0B4>λУ<CEBB><D0A3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADPhsB , (u8 *)&Dl645FirmPara.PhsB , 1 ) == ERROR) return; //д<><D0B4>λУ<CEBB><D0A3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADQPHSCAL , (u8 *)&Dl645FirmPara.QPhsCal , 2 ) == ERROR) return;
if(fnRN8209_Write( ADAPOSA , (u8 *)&Dl645FirmPara.APOSA , 2 ) == ERROR) return;
if(fnRN8209_Write( ADAPOSB , (u8 *)&Dl645FirmPara.APOSB , 2 ) == ERROR) return;
if(fnRN8209_Write( ADRPOSA , (u8 *)&Dl645FirmPara.RPOSA , 2 ) == ERROR) return;
if(fnRN8209_Write( ADRPOSB , (u8 *)&Dl645FirmPara.RPOSB , 2 ) == ERROR) return;
if(fnRN8209_Write( ADIARMSOS , (u8 *)&Dl645FirmPara.IARMSOS , 2 ) == ERROR) return;
if(fnRN8209_Write( ADIBRMSOS , (u8 *)&Dl645FirmPara.IBRMSOS , 2 ) == ERROR) return;
if(fnRN8209_Write( ADIBGain , (u8 *)&Dl645FirmPara.IBGain , 2 ) == ERROR) return;
if(fnRN8209_Write( ADEMUCON2 , (u8 *)&Dl645FirmPara.EMUCON2 , 2 ) == ERROR) return;
fnWDT_Restart();
Dl645RN8209DataComm.ucTemp8 =0XDC;
fnRN8209_Write( 0xEA , Dl645RN8209DataComm.ucTempBuf , 1 ) ;
fnDl645File_Write(Dl645FileId_FirmPara,Dl645FileItemInfoOffAddr_FirmPara_HFConst,(u8 *)&Dl645FirmPara.HFConst,42);
}
/*****************************************************************************
** Function name: fnEMU_Init(void)
**
** Description: <09><><EFBFBD><EFBFBD>EMU<4D><55>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>RN8209<30>Ĵ<EFBFBD><C4B4><EFBFBD>
**
** Parameters: NONE
**
** Returned value: NONE
**
******************************************************************************/
void fnEMU_Init(void)
{
//д<><D0B4><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dl645FirmPara.EMUCON2 = 0x300;
Dl645RN8209DataComm.ucTemp8 =0XE5;
//if(fnRN8209_Write( 0xEA , Dl645RN8209DataComm.ucTempBuf , 1 ) == ERROR) return ; //дʹ<D0B4><CAB9>
fnRN8209_Write( 0xEA , Dl645RN8209DataComm.ucTempBuf , 1 );
//if(fnRN8209_Write( ADSYSCON , (u8 *)&Dl645FirmPara.SYSCON , 2 ) == ERROR) return ; //дϵͳ<CFB5><CDB3><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
//if(fnRN8209_Write( ADEMUCON , (u8 *)&Dl645FirmPara.EMUCON , 2 ) == ERROR) return ; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
if(fnRN8209_Write( ADHFConst , (u8 *)&Dl645FirmPara.HFConst , 2 ) == ERROR) return ;
if(fnRN8209_Write( ADPStart , (u8 *)&Dl645FirmPara.PStart , 2 ) == ERROR) return ;
if(fnRN8209_Write( ADDStart , (u8 *)&Dl645FirmPara.QStart , 2 ) == ERROR) return ;
if(fnRN8209_Write( ADGPQA , (u8 *)&Dl645FirmPara.GPQA , 2 ) == ERROR) return; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADGPQB , (u8 *)&Dl645FirmPara.GPQB , 2 ) == ERROR) return; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADPhsA , (u8 *)&Dl645FirmPara.PhsA , 1 ) == ERROR) return; //д<><D0B4>λУ<CEBB><D0A3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADPhsB , (u8 *)&Dl645FirmPara.PhsB , 1 ) == ERROR) return; //д<><D0B4>λУ<CEBB><D0A3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if(fnRN8209_Write( ADQPHSCAL , (u8 *)&Dl645FirmPara.QPhsCal , 2 ) == ERROR) return;
if(fnRN8209_Write( ADAPOSA , (u8 *)&Dl645FirmPara.APOSA , 2 ) == ERROR) return;
if(fnRN8209_Write( ADAPOSB , (u8 *)&Dl645FirmPara.APOSB , 2 ) == ERROR) return;
if(fnRN8209_Write( ADRPOSA , (u8 *)&Dl645FirmPara.RPOSA , 2 ) == ERROR) return;
if(fnRN8209_Write( ADRPOSB , (u8 *)&Dl645FirmPara.RPOSB , 2 ) == ERROR) return;
if(fnRN8209_Write( ADIARMSOS , (u8 *)&Dl645FirmPara.IARMSOS , 2 ) == ERROR) return;
if(fnRN8209_Write( ADIBRMSOS , (u8 *)&Dl645FirmPara.IBRMSOS , 2 ) == ERROR) return;
if(fnRN8209_Write( ADIBGain , (u8 *)&Dl645FirmPara.IBGain , 2 ) == ERROR) return;
if(fnRN8209_Write( ADEMUCON2 , (u8 *)&Dl645FirmPara.EMUCON2 , 2 ) == ERROR) return;
fnWDT_Restart();
Dl645RN8209DataComm.ucTemp8 =0XDC;
fnRN8209_Write( 0xEA , Dl645RN8209DataComm.ucTempBuf , 1 ) ; //<2F>ر<EFBFBD>дʹ<D0B4><CAB9>
}
/*****************************************************************************
** Function name: fnDl645Front_Init(void)
**
** Description: <09><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>RAM<41><4D><EFBFBD>ݽ<EFBFBD><DDBD>г<EFBFBD>ʼ<EFBFBD><CABC>
**
** Parameters: NONE
**
** Returned value: NONE
**
******************************************************************************/
void fnDl645Front_Init(void)
{
u8 i,j;
u32 ChkSum;
Dl645Front.PriData.Flag |= FRONT_FLAG_RN8209RST;//<2F><>RN8209<30><39>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʶλ
memset(&Dl645FrontTmp , 0 , sizeof(sDl645FrontTmp_TypeDef) );//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>RAM<41><4D><EFBFBD><EFBFBD>
memset(&Dl645Front , 0 , sizeof(sDl645Front_TypeDef) );//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>RAM<41><4D><EFBFBD><EFBFBD>
//д<><D0B4>У<EFBFBD><D0A3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ȷ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>ٴ<EFBFBD>д<EFBFBD><EFBFBD><EBA1A3><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD>Ρ<EFBFBD>
fnDl645File_Read(Dl645FileId_FirmPara , 0 , (u8 *)&Dl645FirmPara , sizeof(sDl645FirmParaFile_TypeDef) );//<2F><>E2<45>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dl645FrontTmp.ChkSum1 = Dl645FirmPara.ChkSum;
for(i=0;i<5;i++)
{
fnEMU_Init();
SystemDelay(10);
ChkSum = 0;
for(j=0;j<5;j++)
{
fnRN8209_Read( ADEMUStatus , (u8 *)&ChkSum , 3 ) ;
if(!(ChkSum & 0x010000)) break;
SystemDelay(10);
}
fnWDT_Restart();
ChkSum = ChkSum & 0x0000ffff;
if(Dl645FrontTmp.ChkSum1 == ChkSum)
{
Dl645Front.PriData.Flag &= ~FRONT_FLAG_RN8209RST;
break;
}
}
if(i>=5)
{//<2F><>У<EFBFBD><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>5<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>У<EFBFBD><D0A3>ֵ
Dl645FirmPara.ChkSum = 0;
SystemDelay(1);
Dl645FirmPara.ChkSum = ChkSum & 0x0000ffff;
Dl645FrontTmp.ChkSum1 = Dl645FirmPara.ChkSum;
fnDl645File_Write(Dl645FileId_FirmPara,Dl645FileItemInfoOffAddr_FirmPara_ChkSum,(u8 *)&Dl645FirmPara.ChkSum,4);
}
}
/*****************************************************************************
** Function name: fnDl645Front_Exec(void)
**
** Description: <09>Ӽ<EFBFBD><D3BC><EFBFBD>оƬ<D0BE><C6AC>ȡ<EFBFBD><C8A1><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʡ<EFBFBD><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
**
** Parameters: NONE
**
** Returned value: NONE
**
******************************************************************************/
void fnDl645Front_Exec(void)
{
u8 i;
u32 TempU,TempI,TempIn;
u32 TempStatus;
u16 TempAngle;
u8 PFlag;
if(Dl645Front.PriData.Flag & FRONT_FLAG_RN8209RST)//RN8209<30><39>λ
{
fnDl645Front_Init();
Dl645Front.PriData.Flag &= ~FRONT_FLAG_RN8209RST;
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
TempStatus = 0;
fnRN8209_Read( 0x2d , (u8 *)&TempStatus , 3 ) ;
if(!(TempStatus & 0x010000))
{//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>У<EFBFBD><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
if(Dl645FrontTmp.ChkSum1 == (TempStatus&0x0000ffff))
{//У<><D0A3>ֵ<EFBFBD><D6B5>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dl645FrontTmp.ChkErrCnt = 0 ;
}
else
{
Dl645FrontTmp.ChkErrCnt++;
if(Dl645FrontTmp.ChkErrCnt > 3)
{//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>κ󣬸<CEBA>λRN8209
Dl645Front.PriData.Flag |= FRONT_FLAG_RN8209RST;
Dl645FrontTmp.ChkErrCnt = 0 ;
}
return;
}
}
//<2F>жϹ<D0B6><CFB9>ʷ<EFBFBD><CAB7><EFBFBD>
if(TempStatus & 0x020000)
{
Dl645Front.PubData.PDirect = INVERSION ;
} //<2F>жϹ<D0B6><CFB9>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ġ<EFBFBD>
else
{
Dl645Front.PubData.PDirect = POSITIVE ;
}
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
for(i = 0 ; i < 3 ; i++)
{
Dl645FrontTmp.UI[i] = 0;//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fnRN8209_Read( 0x22+i , (u8 *)&Dl645FrontTmp.UI[i] , 3 ) ;
if(Dl645FrontTmp.UI[i]&0x00800000) Dl645FrontTmp.UI[i]=0;
}
//<2F><>Ƶ<EFBFBD><C6B5>
fnRN8209_Read( 0x25 , (u8 *)&Dl645FrontTmp.Frequency , 2 ) ;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
fnRN8209_Read( 0x26 , (u8 *)&Dl645FrontTmp.Pw[0] , 4 ) ;
fnRN8209_Read( 0x27 , (u8 *)&Dl645FrontTmp.Pw[1] , 4 ) ;
if(Dl645FrontTmp.Pw[0]&0x80000000)
{
Dl645FrontTmp.Pw[0]=(~Dl645FrontTmp.Pw[0])+1;PFlag = 1;
}
else PFlag = 0;
//<2F><><EFBFBD><EFBFBD><E3B9A6>
Dl645Front.PubData.Pw = fnDFConver_Hex32ToDF09((s32)((Dl645FrontTmp.Pw[0])*((Dl645FirmPara.KPrms))));
if(PFlag) Dl645Front.PubData.Pw.S = 1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
Dl645Front.PubData.U = 0x7fff&(fnDFConver_Bcd16To16((s16)(Dl645FrontTmp.UI[2]/(10*(Dl645FirmPara.KUrms))))); //<2F><>ѹ
TempI = (s32)(Dl645FrontTmp.UI[0]/(Dl645FirmPara.KIArms));
TempIn = (s32)(Dl645FrontTmp.UI[1]/(Dl645FirmPara.KIBrms));
Dl645Front.PubData.Ia = fnDFConver_Bcd32To32(TempI);
Dl645Front.PubData.In = fnDFConver_Bcd32To32(TempIn);
if(PFlag) Dl645Front.PubData.Ia |= 0x80000000;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ<D0A7><D6B5><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><E3B9A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TempU &=0x00ffffff;
if(TempU&0x00800000) TempU=((~TempU)&0x00ffffff)+1;
Dl645Front.PubData.Pf = fnHexToBcd_u16((u16)((float)TempU/8388.608));
Dl645Front.PubData.Angle= fnHexToBcd_u16(TempAngle*3600/32768);
//<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>0.0030<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0.999
if(((Dl645Front.PubData.Pw.Dat2&0x7f)==0)&&(Dl645Front.PubData.Pw.Dat1==0)&&(Dl645Front.PubData.Pw.Dat0<0x30))
{
Dl645Front.PubData.Pw.Dat0 = 0;
Dl645Front.PubData.Pw.Dat1 = 0;
Dl645Front.PubData.Pw.Dat2 = 0;
}
//<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>𶯵<EFBFBD><F0B6AFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((Dl645Front.PubData.Ia&0x7fffffff) < 0x00000150) {Dl645Front.PubData.Ia = 0;Dl645Front.PubData.Pf = 0x0999;}
if((Dl645Front.PubData.In&0x7fffffff) < 0x00000150) Dl645Front.PubData.In = 0;
//<2F><>ѹƵ<D1B9>ʼ<EFBFBD><CABC><EFBFBD>
Dl645Front.PubData.Frequency = fnHexToBcd_u16((u16)(((u32)357954500)/((u32)8*Dl645FrontTmp.Frequency)));
if((Dl645Front.PubData.Ia&0x7fffffff) > 0x00550000)
{
if(Dl645Front.PubData.tMaxI < 2405) Dl645Front.PubData.tMaxI++;
}
else Dl645Front.PubData.tMaxI = 0;
if(Dl645Front.PubData.Pw.S) Dl645Front.PubData.Pf |=0x8000;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dl645FrontTmp.Pulse = 0;
fnRN8209_Read( 0x2a , (u8 *)&Dl645FrontTmp.Pulse , 3 ) ;
if(Dl645FrontTmp.Pulse > 100) Dl645FrontTmp.Pulse = 0; //<2F>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dl645FrontTmp.Pulse_Eg+=Dl645FrontTmp.Pulse;
#if DL645SOFT_DEBUG
Dl645FrontTmp.Pulse_Eg+=1;
#endif
}