
#include	"extern.h"
 #include "HS6220.H"
#include	"key.h"

.ramadr 0							//地址定义为0
word 	gw_Point;
.ramadr system						//以后变量地址由系统自行决定

extern void	SysInit(void);
extern void	io_init(void);

extern void  key_data_deal(void);

byte sleep_cnt;
word rf_reset_cnt;
//BYTE Sys_mode;
byte int_2ms;
word point;
word point1;
word gw_T16Cnt;

byte t_delay_4ms;
byte mode_cnt;
 
byte test_mode_fg;
extern byte rf_channel;
byte rf_sleep_cnt;

void	FPPA0 (void)
{
//	.ADJUST_IC	SYSCLK=IHRC/2		//	SYSCLK=IHRC/2

    .ADJUST_IC SYSCLK=IHRC/8,IHRC=16MHz,VDD=3.0V; 
	clkmd.En_WatchDog	=	0;		//	WatchDog Enable
	io_init();
	//清除RAM
	gw_Point = _SYS(RAM_SIZE)-1;
	a = 0;
	do 
	{
		*gw_Point = a;
	}while(--gw_Point$0);


	SysInit();
	mode_cnt=tx_mode;  //rf 模式设定
	init_rf();
//	hs6200_carrier_mode();
/*
	test_mode_fg=0;
	if(!key_F) //载波模式
	{
		test_mode_fg=1;
		test_mode();
	}
	else
	if(!key_B)//数据模式
	{
		test_mode_fg=2;
		test_mode();
	}
	else
	if(!key_L)//RX模式
	{
		test_mode_fg=3;
		test_mode();
	}
*/

//	enable_recive();
//	rf_reset_cnt=rf_reset_time;
//	rf_channel=0x03; //2405
	sleep_cnt=200;
	
	while (1)
	{
	  //	wdreset;
		
		if(!int_2ms)
		{
			int_2ms=2;
			if(mode_cnt==rx_mode)
			{
				rf_RecivePack();
			}
			else
			{

				rf_data_buf[0]=8;
				rf_data_buf[1]=1;
				rf_data_buf[2]=1;
				rf_data_buf[3]=0xaa;
				rf_data_buf[4]=0xaa;
				rf_data_buf[5]=0xa5;
				rf_data_buf[6]=0xa8;
				rf_tx_data();
			}

		}


	}
}

void	Interrupt (void)  //2ms
{
	pushaf;

	if (Intrq.T16)
	{	//	T16 Trig
		//	User can add code
		stt16 gw_T16Cnt;
		Intrq.T16	=	0;
		//...

		if(int_2ms) int_2ms--;

		if(rf_reset_cnt)  rf_reset_cnt--;
		if(sleep_cnt)  sleep_cnt--;

	}
 
	popaf;
}

void	io_init(void)
{
	pac     = 0b_1111_1111;   //0->输入， 1->输出
	paph 	= 0b_0000_0000;	  //1->开上拉
	padier  = 0b_0000_0000;	  //PA0,PA3,PA4配置为唤醒脚, 1->使能唤醒
	pa      = 0b_0000_0000;
//	pa=0;	

	PBC    = 0B1111_0111;       //输出-[ CLK SS MOSI], 0->输入，1->输出
  	PBPH   = 0B0000_1100;       //上拉-[MISO R3 R2]	0->禁用， 1->启用
	PBDIER = 0B0001_1100;	  //PB2配置为唤醒脚， 1->使能唤醒
	PB     = 0B0101_0100;      //拉高-[SS]			拉低-[CLK CE]
//	PB=0;

}
/*******************************************************************************
* 名称: SysInit
* 功能: 系统初始化
* 形参:       
* 返回: 无
* 说明: 
*******************************************************************************/
void	SysInit(void)
{

	io_init();
//--------------------pwm init------------------------------
/*	pwmg0c = 0b1001_0110;     //bit7 0/1->停用/启用  bit3-1 001->pb5 011->pa0 100->pb4  bit0 时钟源 0->SYSclk 1->ihrc*2
	pwmg0s = 0b0000_0001;   //bit6-5 预分频 00->%1 00->%4 00->%16 00->%64  bit4-0 分频 
	pwmg0cubh =0xff; 	//计数器高八位
	pwmg0cubl =0xff;	//计数器低2位

	pwmg0dtl =0x00;  //占空比低三位
	pwmg0dth =0x00;  //占空比高八位


	pwmg1c = 0b1001_0110;     //bit7 0/1->停用/启用  bit3-1 001->pb6 011->pa4 100->pb7  bit0 时钟源 0->clk*2 1->ihrc*2
	pwmg1s = 0b0000_0001;   //bit6-5 预分频 00->%1 01->%4 10->%16 11->%64  bit4-0 分频 
	pwmg1cubh =0xFF; 	//计数器高八位
	pwmg1cubl =0xff;	//计数器低2位


	pwmg1dtl =0x00;  //占空比低三位
	pwmg1dth =0x00;  //占空比高八位

    pwmg0c = 0b1001_0000; 
 	pwmg1c = 0b1001_0000;
	pa=0;
	PB=0;

	pwmg2c = 0b1001_1000;     //bit7 0/1->停用/启用  bit3-1 001->pb3 011->pa3 100->pb2 101->pa5  bit0 时钟源 0->clk*2 1->ihrc*2
	pwmg2s = 0b0000_0001;   //bit6-5 预分频 00->%1 01->%4 10->%16 11->%64  bit4-0 分频 
	pwmg2cubh =0xFF; 	//计数器高八位
	pwmg2cubl =0xff;	//计数器低2位

	pwmg2dtl =0x00;  //占空比低三位
	pwmg2dth =0x00;  //占空比高八位
*/	
//--------------------------------------------------

	//定时2MS/2us = 2*1000 = 2000
//	gw_T16Cnt = 8192 - 500;	
	gw_T16Cnt = 8192 - 500;	
	stt16 gw_T16Cnt;
	$ t16m SYSCLK,/4,bit13;

	intrq = 0;
	inten.2 = 1;
	engint;
}
//====================================================================
void  suspend(void)
{
//	inten.2 = 0;
//	rf_ce_low();
    rf_power_down();
    //lcd_off();
//	io_init();
/*	pac     = 0b_1111_1111;   //0->输入， 1->输出
	paph 	= 0b_0000_0000;	  //1->开上拉
	pa      = 0b_0000_0000;
	padier  = 0b_0000_0000;	  //PA0,PA3,PA4配置为唤醒脚, 1->使能唤醒
	
	
	PBC    = 0B0111_0111;       //输出-[ CLK SS MOSI], 0->输入，1->输出
  	PBPH   = 0B1000_0010;       //上拉-[MISO R3 R2]	0->禁用， 1->启用
	PB     = 0B0100_0000;      //拉高-[SS]			拉低-[CLK CE]
	PBDIER = 0B1000_0000;	  //PB2配置为唤醒脚， 1->使能唤醒
*/
//	Enter_Sleep();
	io_led=0;
/*
	pac     = 0b_1110_0110;   //0->输入， 1->输出
	paph 	= 0b_0001_1001;	  //1->开上拉
	pa      = 0b_0001_1001;
	padier  = 0b_0001_0001;	  //PA0,PA3,PA4配置为唤醒脚, 1->使能唤醒
	
	
	PBC    = 0B1101_0011;       //输出-[ CLK SS MOSI], 0->输入，1->输出
  	PBPH   = 0B0010_0100;       //上拉-[MISO R3 R2]	0->禁用， 1->启用
	PB     = 0B0000_0000;      //拉高-[SS]			拉低-[CLK CE]
	PBDIER = 0B0010_0100;	  //PB2配置为唤醒脚， 1->使能唤醒
*/



//    pwmg0c = 0b1001_0000; 
// 	pwmg1c = 0b1001_0000;
//	pa=0x11;
//	PB=0x28;
//	.delay  200
//	clkmd =0xf4; //系统时钟从IHRC变为ILRC 关闭看门狗时钟
//	clkmd.4=0;   //IHRC停用
 //	 while(1)
  	 {  	 
   //    .delay  200
 	   stopsys;
//	   wdreset;
	 }
//	 clkmd =0xf4; //系统时钟从ILRC变为IHRC/2 
//	.delay 200
//	.delay 200
	 io_init();
//	 rf_io_init();
//	rf_Init();
	io_led=1;
 /*          pwmg0c = 0b1001_0000; 
//		   pwmg2dtl=0;//white_current_val;
		   pwmg0dth=white_current_val;
		   io_pwm1=0;
		   pwmg1c = 0b1001_0000;
		   pwmg1dtl=yellow_current_val;
		   pwmg1dth=yellow_current_val;
		   io_pwm2=0;
*/
	 rf_power_up();
//	 rf_ce_high();
//	inten.2 = 1;

}