;*******************************************************
;单    位:深圳市波领电子有限公司     (2022)            * 
;                                                      *
;文件名称:	BL08P150							   	   *
;摘    要:  CAR                            			   *
;                                                      *
;当期版本:	V1.0                                       *
;作    者:  XUXL                           		       *
;开始日期:  2022.9.22                                  *
;完成日期:                                             *
;                                                      *
;先前版本:                                             *	
;作    者:                                             *
;创始日期:                                             *
;*******************************************************

;*******************************************************
;files include
#include "BL08P150.inc"

;***************************************************

A       EQU     00H
R       EQU     01H
; BL08P150 DEFINE	REG
BANK0_20H			EQU		40H
STATUS_BUF			EQU		41H
ACC_BUF				EQU		42H
Rf_buf				EQU		43H
Tmp_buf				EQU		44H
Rf_data				EQU		45H
Rf_lenth			EQU		46H
Init_rf_count		EQU		47H
delay_us_data		EQU		48H
delay_ms_data		EQU		49H
;/*******key*****
key_debounce		EQU		4aH
key_cnt				EQU		4bH
key_buffer			EQU		4cH
key_code			EQU		4dH
key_temp			EQU		4eH
;/*******key*****
rf_mode				EQU		4fH

flag				EQU		50H
#define		b_key_flag	flag,0

sleep_cnt			EQU		51H
TC0_Mode			EQU		52H
delay_1ms			EQU		53H
delay_100ms			EQU		54H
no_key_delay		EQU		55H
channel_cnt			EQU		56H
rf_change_chn_delay	EQU		57H
rf_sleep_cnt		EQU		58H
rf_reset_cnt		EQU		59H




;DELAY_US			EQU		73H
Rf_data_buf1		EQU		70H
Rf_data_buf2		EQU		71H
Rf_data_buf3		EQU		72H
Rf_data_buf4		EQU		73H
Rf_data_buf5		EQU		74H
Rf_data_buf6		EQU		75H
Rf_data_buf7		EQU		76H
Rf_data_buf8		EQU		77H



rf_rollcode1		EQU		7dH
rf_rollcode2		EQU		7eH
rf_rollcode3		EQU		7fH

csn_low		macro
			bcr		PB5
			endm

csn_high	macro
			bsr		PB5
			endm

sck_low		macro
			bcr		PB0
			endm

sck_high	macro
			bsr		PB0
			endm
			
mosi_low	macro
			bcr		PB4
			endm
			
mosi_high	macro
			bsr		PB4
			endm
			
into_bank1	macro			
			bsr		STATUS,5
			endm

into_bank0	macro			
			bcr		STATUS,5
			endm
			
mosi_output	macro
			bcr		TRISB,4
			endm
			
mosi_input	macro
			bsr		TRISB,4
			endm
			
			
#define		READMOSI	PORTB,4

#define		rf_rx_mode			1
#define		rf_tx_mode			2
#define		rf_carrier_mode		3

#define		KEY1		PB.1
#define		KEY2		PB.2
#define		KEY3		PB.3
#define		KEY4		PB.4


;***************************************************
;/函数入口地址
	ORG		00H
	GOTO	INITIAL
	
;/中断入口地址
	ORG		04H
	GOTO 	INT_PRO
	
;***********************************************************
	ORG		010H	;滚动码ROM起始地址
;***********************************************************
ADDR_ROLLING_L:
	RETIA	010H		
ADDR_ROLLING_M:
	RETIA	011H
ADDR_ROLLING_H:
	RETIA	012H		
	
INT_PRO:	
	MOVAR	ACC_BUF		;保存ACC
	SWAPR	STATUS,0
	MOVAR	STATUS_BUF	;保存STATUS
	
//************user code ***************	
	BTRSS	FTC0IF
	GOTO	INT_BACK
	BCR		FTC0IF   //1MS

 	movr    delay_1ms,0	
	btrsc 	z	
	goto	int_next
	
	decr 	delay_1ms,1	
int_next:

 	movr    no_key_delay,0	
	btrsc 	z	
	goto	int_next1
	
	decr 	no_key_delay,1	
int_next1:

	movr    rf_sleep_cnt,0	
	btrsc 	z	
	goto	int_next2
	
	decr 	rf_sleep_cnt,1	
int_next2:

 	movr    rf_reset_cnt,0	
	btrsc 	z	
	goto	int_next3	
	decr 	rf_reset_cnt,1	
int_next3:
	
	DECRSZ	delay_100ms,1	
	GOTO	INT_BACK	
	;;100ms
	movia	100
	movar 	delay_100ms
	
	decr 	sleep_cnt,1
	
	
INT_BACK:	
	SWAPR	STATUS_BUF,0
	MOVAR	STATUS
	SWAPR	ACC_BUF,1
	SWAPR	ACC_BUF,0
	RETFIE		
	

	
;/程序开始
;***************************************************
;函数名：GPIO_init
;***************************************************
GPIO_init:
	BSR		STATUS,5	;转到bank1
	
	;OPTION_REG(BANK1)		
	MOVIA	0000H
	MOVAR	OPTION_REG	;/00-- -000	
						;/bit0~2:  	 PS2~PS0 预分频比率选择位
									;PS2~PS0 	WDT比率 
									;0 0 0		1:1
									;0 0 1		1:2 
									;0 1 0		1:4 
									;0 1 1		1:8 
									;1 0 0		1:16 
									;1 0 1		1:32 
									;1 1 0		1:64
									;1 1 1		1:128
						;/bit6:	INTEDG：外部中断触发方式选择位（PB0）
						;/bit7:	INT1EDG：外部中断 1 触发方式选择位（PB1）
						
	;/PCON(BANK1)(芯片控制寄存器)
	MOVIA	0A0H		;/101- ----
	MOVAR	PCON		;0-DIS 1-EN
					    ;/5bit:WDT	看门狗定时器使能位
						;/6bit:EIS: IOB0/INT引脚定义位
						;/7bit:LVDT	低电压复位使能位
	
	;TRISB(BANK1)(I/O口PB控制寄存器)
	MOVIA	0eH			;--00 0000 	
//	MOVIA	00H			;--00 0000 		
	MOVAR	TRISB		;0-OUT, 1-IN
	
	;PBIC0(BANK1)(PB口驱动选择寄存器)		
	MOVIA	00H			;--00 0000
	MOVAR	PBIC0		;0-DIS, 1-EN
	
	;WUCON(BANK1)(PORB输入状态变化中断/唤醒控制寄存器)
	MOVIA	1eH			;--00 0000
	MOVAR	WUCON		;0-DIS, 1-EN
	
	BCR		STATUS,5	;转到bank0
		
	;PDCON(BANK0)(内部下拉控制寄存器)
	MOVIA	0e1H		;1111 ----
	MOVAR	PDCON		;0-EN, 1-DIS	
	
	;ODCON(BANK0)(PB漏极开路控制寄存器)
	MOVIA	00H			;--00 0000
	MOVAR	ODCON		;0-DIS, 1-EN
	
	;PHCON(BANK0)(PB 内部上拉控制寄存器)
	MOVIA	0e1H		;--11 1111
	MOVAR	PHCON		;0-EN, 1-DIS
	
	RETURN
;***********************************************************
;函数名：TMR0_INIT
;TMR0：定时器没有启动位一直运行中，分频可选，无自动装载
;***********************************************************
TC0_INIT:	
	MOVR	TC0_Mode,A	
	ANDIA	0x03
	ADDAR	PCL,R
	GOTO	TC0_Mode_8bit_Time
	GOTO	TC0_insideLow_8bit_Time
	GOTO	TC0_IRC_RTC
	GOTO	TC0_Mode_8bit_Time

;***********************************************************
;IRC&RTC
;若TC0使用RTC模式精准定时，则需将OSCM.2、OSCM.4置1，TC0M.3置0，
;并且配置字时钟选择: IRC&RTC。
;此时TC0时钟参与分频，Fcpu频率为32.768K/2，如选择Fcpu/2，则TC0时钟频率为（32.768K/2）/2。
TC0_IRC_RTC:
	MOVIA	00H
	MOVAR	TC0L	;定时器初值
	 	
	MOVIA	0A0H	;1010 0000
	MOVAR	TC0M	;Bit7：TC0TR:TC0 启动控制位。
					;Bit6~Bit4：TC0S[2:0]:TC0 分频选择位
					;Bit3：TCCKS:TC0 时钟信号控制位	
		
	BSR		STATUS,5	;转到bank1
	MOVIA	0x14	;//-001 0100
	MOVAR	OSCM	
					//;Bit6：WAKEMODE：睡眠唤醒后系统时钟选择位;0=InsideLowRC,1=HighRC
					//;Bit5：GREENEN：绿色模式使能位		;0=GeneralMode，1=GreenMode
					//;Bit4：SLT0CON：TC0低速时钟控制位(用于唤醒睡眠、绿色);0=HighRC,1=LowRC
					//;Bit3：SLCON：内外低速时钟控制位	;0=OpenLowRC,1=CloseLowRC
					//;Bit2：XTSEL：内外低速选择位		;0=InsideLowRC,1=OutSideLowRC
					//;Bit1：STPHX：内部高速振荡器控制位	;0=Work,1=Stop
					//;Bit0：CLKMD：系统时钟模式控制位	;0=GeneralMode，1=LowMode
	BCR		STATUS,5	;转到bank1
	
	BCR		FTC0IF
	BSR		FTC0IE
	BSR		FGIE	
	
	RETURN
;***********************************************************
;TC0时钟源选择内部低速RC
TC0_insideLow_8bit_Time:
	MOVIA	00H
	MOVAR	TC0L	;定时器初值
	 	
	MOVIA	0F0H	;1111 0000
	MOVAR	TC0M	;Bit7：TC0TR:TC0 启动控制位。
					;Bit6~Bit4：TC0S[2:0]:TC0 分频选择位
					;Bit3：TCCKS:TC0 时钟信号控制位	
		
	BSR		STATUS,5	;转到bank1
	MOVIA	0x10	;//-001 0000
	MOVAR	OSCM	
					//;Bit6：WAKEMODE：睡眠唤醒后系统时钟选择位;0=InsideLowRC,1=HighRC
					//;Bit5：GREENEN：绿色模式使能位		;0=GeneralMode，1=GreenMode
					//;Bit4：SLT0CON：TC0低速时钟控制位(用于唤醒睡眠、绿色);0=HighRC,1=LowRC
					//;Bit3：SLCON：内外低速时钟控制位	;0=OpenLowRC,1=CloseLowRC
					//;Bit2：XTSEL：内外低速选择位		;0=InsideLowRC,1=OutSideLowRC
					//;Bit1：STPHX：内部高速振荡器控制位	;0=Work,1=Stop
					//;Bit0：CLKMD：系统时钟模式控制位	;0=GeneralMode，1=LowMode
	BCR		STATUS,5	;转到bank1
	
	BCR		FTC0IF
	BSR		FTC0IE
	BSR		FGIE	
	RETURN	
	
;***********************************************************
;8bit-MODE 无自动装载功能
;中断处理 需要重新赋初值
;config:Fcpu 16M 8'
;示例程序：100us
TC0_Mode_8bit_Time:	
	MOVIA	00H
	MOVAR	TC0L		;定时器初值

	MOVIA	0B0H		;1111 0000
	MOVAR	TC0M		;Bit7：TC0TR:TC0 启动控制位。
						;Bit6~Bit4：TC0S[2:0]:TC0 分频选择位
						;Bit3：TCCKS:TC0 时钟信号控制位	
	
	BCR		FTC0IF
	BSR		FTC0IE
	BSR		FGIE	
	RETURN
	
;=============================================
;初始化
;配置芯片各io口的输入输出状态
;配置初始状态的io口高低电平
;清寄存器
;=============================================	
INITIAL:
	CALL	BANK0_RAM_CLR		;/清BANK0的RAM
	
	CALL	GPIO_init	
	MOVIA	0x00
;	MOVIA	0x01
;	MOVIA	0x02
	MOVAR	TC0_Mode	
	CALL	TC0_INIT
	CALL	init_rf  			;/RF 初始化
	
	call	ADDR_ROLLING_H
	movar	rf_rollcode3	
	call	ADDR_ROLLING_M
	movar	rf_rollcode2
	call	ADDR_ROLLING_L
	movar	rf_rollcode1	
	
//	CALL	hs6220_carrier_mode ;/载波模式

    movia 	rf_tx_mode  ;1为rf_rx_mode;  2为rf_tx_mode;  4为rf_carrier_mode   ;set rf mode
    movar	rf_mode
    
    btrss 	KEY1			
  	clrr	rf_mode 
	
	btrsc 	rf_mode,1
	goto 	tx_mode_handle
;	btrsc 	rf_mode,0
;	goto 	rx_mode_handle  
 carrier_mode_handle:
 
 	CALL	hs6220_carrier_mode ;/载波模式
 	
 carrier_mode_handle_loop:
 
	CLRWDT					;/清看门狗
	
 	goto 	carrier_mode_handle_loop
 	     
;	GOTO MAIN
;***************************************************
;函数名：MAIN：
;***************************************************
MAIN:
	CLRWDT					;/清看门狗
	
LOOP:

	INCR		PB,1		
	MOVIA		10
	CALL		DELAY_MS		;/延时2500个指令周期
	GOTO		MAIN
	
;***************************************************
;函数名：tx_mode_handle
;功能：发射模式
;*************************************************** 	
tx_mode_handle:
pair_mode:
	call 	rf_ce_low	
	call	rf_rx_set
	call 	rf_ce_high
	call	set_sleep_data
	movia	200
	movar	sleep_cnt	 //对码模式20S收不到数据进入休眠模式
	
pair_mode_loop:
 	CLRWDT					;/清看门狗
	call 	key_scan
	call 	sleep_handle	
	
  	movr    delay_1ms,a	
	btrss 	z	
	goto	pair_mode_loop_next
	
	movia	0x01
	movar 	delay_1ms
	call	pair_change_chn
	call	reciverPack
	
  	movr    Rf_data_buf1,a	
  	subia	0xbb
	btrss 	z	
	goto	pair_mode_loop_next
	
  	movr    Rf_data_buf5,a	
  	subia	0xcc
	btrss 	z	
	goto	pair_mode_loop_next	
	//收到对码数据
	
	movr	Rf_data_buf2,a
	movar	rf_rollcode1
	
	movr	Rf_data_buf3,a
	movar	rf_rollcode2	
	
	movr	Rf_data_buf4,a
	movar	rf_rollcode3
	
	movia	250
	movar   no_key_delay		//无按键按下发送250ms零码	
	goto 	tx_mode_handle_loop1
pair_mode_loop_next:	
	movr    rf_sleep_cnt,a	
	btrss 	z	
	goto	rx_reset_check
	
	call 	rf_ce_low	
	call	flush_rx_fifo		
	call	clear_rf_status
	

	movia	0xae
	movar	Rf_data
	movia	0x23
	call	rf_write_onebyte                     	
	movia   0x02   
	call	DELAY_MS ;wait 2 ms  	
	
	movia	0xac
	movar	Rf_data
	movia	0x23
	call	rf_write_onebyte    
	movia   0x02   
	call	DELAY_MS ;wait 2 ms  	  //每20ms收不到数据休眠唤醒一次

	movia 	20
	movar	rf_sleep_cnt
	
rx_reset_check:		
	movr    rf_reset_cnt,a	
	btrss 	z	
	goto	pair_mode_loop
	
	call	init_rf    ;2.4G初始化  //每300ms收不到数据重新初始化一次
	
	call 	rf_ce_low	
	call	rf_rx_set
	call 	rf_ce_high	
	
	movia 	20
	movar	rf_sleep_cnt
	
	movia 	255
	movar	rf_reset_cnt
	
	goto	pair_mode_loop
		
	
tx_mode_handle_loop1:
	call 	rf_ce_low	
	call	rf_tx_set
	call 	rf_ce_high
	call	set_sleep_data
 tx_mode_handle_loop: 	
 	CLRWDT					;/清看门狗
	call 	key_scan
	call 	sleep_handle	
	
	
  	movr    delay_1ms,a	
	btrss 	z	
	goto	tx_mode_handle_exit
	
	movia	0x01
	movar 	delay_1ms

;	movia	0x05
;	movar 	key_code
	
 	movr    key_code,a	
	btrss 	z	
	goto	tx_send_data
	
 	movr    no_key_delay,a	
	btrsc 	z	
	goto	tx_mode_handle_exit	
		
tx_send_data:	
	call	rf_ce_low	
	call	rf_change_chn
	
	call	clear_rf_status
	call	flush_rx_fifo
	call	flush_tx_fifo
	
	csn_low
	movia	0xb0							
	call	spi_write_abyte	
	
	movia	0xaa
	movar	Rf_data_buf1
	
	movr	rf_rollcode1,a
	movar	Rf_data_buf2
	
	movr	rf_rollcode2,a
	movar	Rf_data_buf3
	
	movr	rf_rollcode3,a
	movar	Rf_data_buf4	
	
	movr	key_code,a
	movar	Rf_data_buf5
	
	movr	key_code,a
	movar	Rf_data_buf6		    
	movia	RF_LENGTH		;长度	
	movar	Rf_lenth
	call	write_rf_data_buf
	csn_high	
	call	rf_ce_high
	
tx_mode_handle_exit:	
 	goto	tx_mode_handle_loop
;***************************************************
;函数名：rf_change_chn
;功能：跳频 遥控器正常发码的时候每4ms跳频一次
;*************************************************** 	 	
rf_change_chn: 	
	incr	rf_change_chn_delay,1
	movr 	rf_change_chn_delay,a
	subia	0x04
	btrss	z
	goto 	rf_change_chn_exit
	clrr	rf_change_chn_delay
rf_change_chn1:	
	incr	channel_cnt,1
	movr 	channel_cnt,a
	subia	0x01
	btrsc	z
	goto 	RF_channel_1
	movr 	channel_cnt,a	
	subia	0x02
	btrsc	z
	goto 	RF_channel_2
	clrr	channel_cnt
;	subia	0x03
;	btrss	z
;	goto 	RF_channel_3
RF_channel_3:
	movia	75
	goto	rf_change_chn_set
RF_channel_1:
	movia	05
	goto	rf_change_chn_set	
RF_channel_2:
	movia	45
	goto	rf_change_chn_set	
rf_change_chn_set:
;	movia	75
	movar	Rf_data
	movia	0x25                             
	call	rf_write_onebyte
		
		
rf_change_chn_exit:
	return
	
;***************************************************
;函数名：rf_change_chn
;功能：跳频 每13MS跳频一次
;*************************************************** 	 	
pair_change_chn: 	
	incr	rf_change_chn_delay,1
	movr 	rf_change_chn_delay,a
	subia	0x13
	btrss	z
	goto 	pair_change_chn_exit
	clrr	rf_change_chn_delay
	
	call 	rf_ce_low		
	call	rf_change_chn1		
	call 	rf_ce_high		
pair_change_chn_exit:
	return	
;***************************************************
;函数名：key_scan
;功能：按键扫描
;*************************************************** 	
 key_scan:
 

 ;	movr	pb,a
 ;	andia	0x1e
 ;	xoria	0x1e 	
 ;	movar 	key_temp
 	clrr	key_temp
    btrss 	KEY1			
  	bsr		key_temp,0
	nop			
    btrss 	KEY2			
  	bsr		key_temp,1
	nop		
	btrss 	KEY3			
  	bsr		key_temp,2
	

	

;	call 	rf_ce_low	
	
;	movia	0x27
;	movar	Rf_data
;	movia	0x3c									
;	call	rf_write_onebyte
;	call 	rf_ce_high	
;	call	rf_ce_low
;;;	call	rf_power_down	
	
	into_bank1
	mosi_input
	into_bank0
	nop		
	btrss 	KEY4			
  	bsr		key_temp,3
	nop				
 	
	movr	key_temp,a
	xorar	key_buffer,a
	btrss 	z	
	goto	updata_key_data 
	
	btrsc 	b_key_flag			
	goto 	exit_key_scan	
	
	decr	key_cnt,1
	movr	key_cnt,a
	btrss 	z	
	goto	exit_key_scan	
	bsr		b_key_flag
	
	movr	key_buffer,a
	movar	key_code
	
	movia	250
	movar   no_key_delay		//无按键按下发送250ms零码
exit_key_scan:		
	return
	
updata_key_data:
	movr    key_temp,a
	movar	key_buffer
	bcr		b_key_flag
	movia	0x0a
	movar   key_cnt	
 	return
;***************************************************
;函数名：sleep_handle
;功能：休眠
;*************************************************** 	
 sleep_handle:
	movr    key_code,a	
	btrss 	z	
	goto	set_sleep_data
		
	movr    sleep_cnt,a	
	btrss 	z	
	goto	exit_sleep_handle
	
	call	rf_ce_low
	call	rf_power_down	
	
	MOVIA	0x51
	MOVAR	TC0L	;TC0低8bit
		
	MOVIA	0x64
	;MOVIA	0x60
	MOVAR	TC0M	;Bit7：TC0TR:TC0 启动控制位。
					;Bit6~Bit4：TC0S[2:0]:TC0 分频选择位
					;Bit3：TCCKS:TC0 时钟信号控制位
					;Bit2：T16SEL:8/16 位溢出位选择。仅当所有 PWMEN = 0 且 BUZ=0 时有效
					;Bit1：BUZ:BUZ 输出使能位
					;Bit0：PWM0:PWM0 使能位
	
	CLRWDT	
	
	BCR		FTC0IF
	BSR		FTC0IE	;需要 使能
	BSR		FTC0TR	;TC0 定时器使能
	BCR		FGIE
	
	BSR		RP0
	BCR		FWDTE	;bank1
	
	MOVIA	0X53
	MOVAR	OSCM	;Bit6：WAKEMODE：睡眠唤醒后系统时钟选择位;0=InsideLowRC,1=HighRC
					;Bit5：GREENEN：绿色模式使能位		;0=GeneralMode，1=GreenMode
					;Bit4：SLT0CON：TC0低速时钟控制位(用于唤醒睡眠、绿色);0=HighRC,1=LowRC
					;Bit3：SLCON：内外低速时钟控制位	;0=OpenLowRC,1=CloseLowRC
					;Bit2：XTSEL：内外低速选择位		;0=InsideLowRC,1=OutSideLowRC
					;Bit1：STPHX：内部高速振荡器控制位	;0=Work,1=Stop
					;Bit0：CLKMD：系统时钟模式控制位	;0=GeneralMode，1=LowMode
	BCR		RP0
	
	NOP
	SLEEP
	NOP
	
Wait_TC0_Weak:	
	CLRWDT
	BTRSS	FTC0IF
	GOTO	Wait_TC0_Weak
	BCR		FTC0IF
	
	CLRWDT
	BCR		FTC0IE
	BCR		FTC0TR
	
	BSR		RP0
	BSR		FWDTE	;bank1
	
	MOVIA	0X40
	MOVAR	OSCM	;Bit6：WAKEMODE：睡眠唤醒后系统时钟选择位;0=InsideLowRC,1=HighRC
					;Bit5：GREENEN：绿色模式使能位		;0=GeneralMode，1=GreenMode
					;Bit4：SLT0CON：TC0低速时钟控制位(用于唤醒睡眠、绿色);0=HighRC,1=LowRC
					;Bit3：SLCON：内外低速时钟控制位	;0=OpenLowRC,1=CloseLowRC
					;Bit2：XTSEL：内外低速选择位		;0=InsideLowRC,1=OutSideLowRC
					;Bit1：STPHX：内部高速振荡器控制位	;0=Work,1=Stop
					;Bit0：CLKMD：系统时钟模式控制位	;0=GeneralMode，1=LowMode
	BCR		RP0
	call 	GPIO_init
	CALL	TC0_INIT	
	call	rf_power_up	
	call	rf_ce_high	
	movia	30
	movar	sleep_cnt		
exit_sleep_handle:        
 	return 	
set_sleep_data:
	movia	30
	movar	sleep_cnt	
 	return 	 	
;***************************************************
;函数名：reciverPack
;功能：接收RF数据
;***************************************************	
reciverPack:

 	clrr	Rf_data_buf1
	movia	0x07                                    		
	call	rf_read_onebyte	
	btrss	Rf_buf,6	
	return
reciverPack_a:
	call 	rf_ce_low	
 	csn_low
	movia	0x60                                    		
	call	rf_read_onebyte	
	movr	Rf_buf,a
    xoria   RF_LENGTH;7h  //数据长度
    btrss   z;status,cc
    goto    reciverPack_exit
    
 	csn_low
	movia	0x61							
	call	spi_write_abyte	
	
	movia	RF_LENGTH		;长度	
	movar	Rf_lenth
	call	read_rf_data_buf

        

 reciverPack_exit:
 	call	clear_rf_status
	call	flush_rx_fifo
	call	flush_tx_fifo
	csn_high	
	call 	rf_ce_high			
 	return  	
;***************************************************
;函数名：BANK0_RAM_CLR
;功能：清bank0
;***************************************************
BANK0_RAM_CLR:
	MOVIA	0X3F
	MOVAR	40H
	MOVIA	0X7F
	MOVAR	FSR
	
BANK0_RAM_CLR_LOOP:	
	CLRR	INDF
	DECR	FSR,1
	DECRSZ	40H,1
	GOTO	BANK0_RAM_CLR_LOOP	
	RETURN


	
;***************************************************
;函数名：DELAY_US
;传参：循环体调用次数
;返回值：
;功能：延时10个指令周期
;引脚：
;备注：
;***************************************************	
DELAY_US:		;		
	MOVAR	delay_us_data
	
DELAY_US_LOOP:	
	CLRWDT				;1;/清看门狗
;	NOP					;1
	GOTO	$+1			;2
	GOTO	$+1			;2
	GOTO	$+1			;2
	DECRSZ	delay_us_data,1	;1/(2)
	GOTO	DELAY_US_LOOP	;2
	
	RETURN				;2
	
	
DELAY_MS:
	MOVAR	delay_ms_data
	
DELAY_MS_LOOP:	
	CLRWDT				;1;/清看门狗
	
	MOVIA		200
	CALL		DELAY_US	;/
	MOVIA		200
	CALL		DELAY_US    ;/
	MOVIA		200
	CALL		DELAY_US	;/
	MOVIA		200
	CALL		DELAY_US    ;/	
	DECRSZ	delay_ms_data,1	
	GOTO	DELAY_MS_LOOP	
	
	RETURN			





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
;init spi		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
spi_init:		
		
		return		
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;func_name spi_write_abyte		
;function: write a byte
;inputparameter: ACC put acc in Rf_buf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
spi_write_abyte:
		movar	Rf_buf                  //  
		movia	8
		movar	Tmp_buf	
		
		into_bank1
		mosi_output
		into_bank0
		
wrt8_loop:		
		sck_low
		btrsc	Rf_buf,7                //if Rf_buf.7==0 skip next 
		mosi_high
		btrss	Rf_buf,7				//if Rf_buf.7==1 skip next 
		mosi_low
		sck_high	
		nop
		rlr		Rf_buf,1
		decrsz	Tmp_buf,1
		goto	wrt8_loop
	
		sck_low
		mosi_low
		nop
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;func_name spi_read_abyte	
;function: read a byte
;output parameter:Rf_buf	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
spi_read_abyte:
		movia	8
		movar	Tmp_buf	
		
		into_bank1
		mosi_input
		into_bank0
		
rad8_loop:		
		bcr		STATUS,0                     //clear C bit
		rlr		Rf_buf,1
		sck_high
		btrsc	READMOSI                	 //if mosi in is low skip next
		bsr		Rf_buf,0					 //read is high
		sck_low
		
		decrsz	Tmp_buf,1
		goto	rad8_loop
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;func wirte data into reg 	
;input parameter: ACC set reg  Rf_data set value	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
rf_write_onebyte:
		csn_low
		
		call	spi_write_abyte
		movr	Rf_data,a
		call	spi_write_abyte 
		
		csn_high
		
		return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
;func: read one data from register
;input parameteer:ACC set register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rf_read_onebyte:
		csn_low
		
		call	spi_write_abyte
		clrr	Rf_buf
		call	spi_read_abyte
		
		csn_high
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;func name:flush_tx_fifo
;func: flush TX fifo,used in TX mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
flush_tx_fifo:
		csn_low
		
		movia	HS6220_FLUSH_TX
		call	spi_write_abyte
		
		csn_high
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;func name:flush_rx_fifo
;func: flush rx fifo,uesd in RX mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
flush_rx_fifo:
		csn_low
		
		movia	HS6220_FLUSH_RX
		call	spi_write_abyte
		
		csn_high
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;func name:clear_rf_status
;func:clear rf status flag
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	
clear_rf_status:
		csn_low
		
		movia	0x27                   //BANK0_STATUS
		call	spi_write_abyte
		movia 	0x70
		call	spi_write_abyte
		
		csn_high
		
		return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;function name:get_rf_status_flag
;func: get rf status
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
get_rf_status_flag:
		csn_low
		
		movia	0x07                   //HS6220_BANK0_STATUS
		call	spi_write_abyte
		call	spi_read_abyte
		
		csn_high
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;function name: rf_tx_set
;func: set tx mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
rf_tx_set:
		csn_low
		
		movia	0x20				  //HS6220_BANK0_CONFIG
		call	spi_write_abyte
		movia	0xfa
		call	spi_write_abyte
		
		csn_high
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
;function name: rf_rx_set
;func: set rx mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rf_rx_set:
		csn_low
		
		movia	0x20				  //HS6220_BANK0_CONFIG
		call	spi_write_abyte
		movia	0xfb
		call	spi_write_abyte
		
		csn_high

		return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
;function name: rf_ce_low
;func: enable ce low	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
rf_ce_low:
		csn_low
		
		movia	HS6220_CMD_CE_LOW
		call	spi_write_abyte
		
		csn_high
	
		return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
;function name rf_ce_high
;func: enable ce high	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rf_ce_high:
		csn_low
		
		movia	HS6220_CMD_CE_HIGH
		call	spi_write_abyte

		csn_high

		return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
;function name rf_power_up
;func:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
rf_power_up:
       ;HS6220_BANK0_CONFIG  00h,fah  
 		movia	0xfa
		movar	Rf_data
		movia	0x20
		call	rf_write_onebyte    
		
		movia	1
		call	DELAY_MS ; 	这个1ms的时间是必须的，等待晶体起振和RF芯片的一系列动作	
		
 		movia	0xac
		movar	Rf_data
		movia	0x23
		call	rf_write_onebyte 
		
		return		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
;function name rf_power_down
;func:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;			
rf_power_down:
       ;HS6220_BANK0_CONFIG  00h,fah  
 		movia	0xa9
		movar	Rf_data
		movia	0x23
		call	rf_write_onebyte    
		
		movia	1
		call	DELAY_MS ; 	 这个1ms时间是必须要的，要等待RF完成一系列动作
		
 		movia	0xf8
		movar	Rf_data
		movia	0x20
		call	rf_write_onebyte 
		
		return		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;functioname write_rf_data_buf
;input parameter: ACC set data length
;				  Rf_data_buf needed send data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
write_rf_data_buf:
		movar	Rf_lenth
		
		movia	RFDATAADDRESS                     //0X70
		movar	FSR
wr_data_loop:
		movr	INDF,A		
		call	spi_write_abyte
		incr	FSR,1
		decrsz	Rf_lenth,1
		goto	wr_data_loop
		
		return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;function name read_rf_data_buf
;input parameter: acc set data length
;output parameter: Rf_data_buf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
read_rf_data_buf:
		movar	Rf_lenth

		movia	RFDATAADDRESS
		movar	FSR
rd_data_loop:
		call	spi_read_abyte	
		movr	Rf_buf,a
		movar	INDF
		incr	FSR,1
		decrsz	Rf_lenth,1
		goto	rd_data_loop
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
;write tx or rx address		
;input parameter ACC
;0x30 BANK0 TX_ARRD   0x2a BANK0 RX_ADDR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
write_tx_or_rx_address:
		csn_low
		
		call	spi_write_abyte
		movia	0x05						//address length
		call	write_rf_data_buf
		
		csn_high
		
		return
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;func name:rf_bank_switch
;input parameter:ACC   RF_BANK1 or RF_BANK0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rf_bank_switch:
		movar	Rf_data									
		
		call	get_rf_status_flag
		movia	RF_BANK1
		xorar	Rf_data,1                       //xor Rf_lenth = RF_BANK1 result=0 z=1
		btrss	Z                                 //Z=1 skip next 
		goto	rf_set_bank0
		btrsc	Rf_buf,7						  //if Rf_buf.7==1 means in BANK1 =0 skip next
		goto	bank_switch_end

rf_change_bank:		
		movia	HS6220_ACTIVATE_DATA
		movar	Rf_data
		movia	HS6220_ACTIVATE
		call	rf_write_onebyte
		goto	bank_switch_end

rf_set_bank0:
		btrss	Rf_buf,7						  //					
		goto	bank_switch_end
		goto    rf_change_bank
		
bank_switch_end:
		return		
		
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
;init RF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
init_rf:
		call	spi_init		
reinit_rf:		
		movia	SOFT_RST
		movar	Rf_data
		movia	0x3d                                    //BANK0 FEATURE soft reset
		call	rf_write_onebyte
		
		movia	0x00
		movar	Rf_data
		movia	0x3c
		call	rf_write_onebyte                        //BANK0 DYNPD   三线通信
		
		call 	rf_ce_low
		
		movia	0x8b
		movar	Rf_data
		movia	0x20									//BANK0 CONFIG  power up
		call	rf_write_onebyte
		movia	20
		call	DELAY_MS                             //delay 20ms
		
		movia	0xac
		movar	Rf_data
		movia	0x23                                    //BANK0 PMU_CTL   active mode
		call	rf_write_onebyte
		movia	2
		call	DELAY_MS                             //delay 2ms
		
		//movia	0x10
		//movar	Rf_data
		//movia	0x3d									//BANK0 FEATURE BG_APU
		//call	rf_write_onebyte
		
		movia	RF_BANK1
		call 	rf_bank_switch                          //change to BANK1
		
		movia	0x0c
		movar	Rf_data
		movia	0x33                                    //BANK1 FAGC_CTRL  set VCO
		call	rf_write_onebyte
		
		movia	RF_BANK0
		call 	rf_bank_switch                          //change to BANK0
		
		call 	rf_ce_high
		movia	100
		call	DELAY_US
		call	rf_ce_low
		
		movia	200
		movar	Init_rf_count
get_rf_loop:		
		clrwdt  
		movia	200
		call	DELAY_US
		
		movia	0x06                                    //BANK0 RF SETUP  		
		call	rf_read_onebyte
		btrsc	Rf_buf,5								//
		goto	rf_setup_end
		
		DECRSZ	Init_rf_count,1	
		GOTO	get_rf_loop	
		goto	reinit_rf	
		
rf_setup_end:		
		movia	0x40
		movar	Rf_data
		movia	0x26                                    //BANK0 RF_SETUP
		call	rf_write_onebyte	
		
		movia	RF_BANK1
		call 	rf_bank_switch                          //change to BANK1
		
		csn_low
		movia	0x23									//BANK1 CAL_CTL
		call	spi_write_abyte	
		movia	0x20
		movar	Rf_data_buf1
		movia	0x98
		movar	Rf_data_buf2
		movia	0x75
		movar	Rf_data_buf3
		movia	0x03
		movar	Rf_lenth		
		call	write_rf_data_buf
		csn_high
		
		movia	RF_BANK0
		call	rf_bank_switch
		
HS6220_BANK0_TX_ADDR: 		
		csn_low
		movia	0x2a									//BANK0_RX_ADDR_P0
		call	spi_write_abyte
		movia	0x46
		movar	Rf_data_buf1
		movia	0x0b
		movar	Rf_data_buf2
		movia	0xaf
		movar	Rf_data_buf3
		movia	0x43
		movar	Rf_data_buf4
		movia	0x98
		movar	Rf_data_buf5
		movia	0x05
		movar	Rf_lenth
		call	write_rf_data_buf
		csn_high
HS6220_BANK0_RX_ADDR_P0: 		
		csn_low
		movia	0x30									//BANK0_TX_ADDR
		call	spi_write_abyte
		movia	0x46
		movar	Rf_data_buf1
		movia	0x0b
		movar	Rf_data_buf2
		movia	0xaf
		movar	Rf_data_buf3
		movia	0x43
		movar	Rf_data_buf4
		movia	0x98
		movar	Rf_data_buf5
		movia	0x05
		movar	Rf_lenth
		call	write_rf_data_buf
		csn_high
		
		;HS6220_BANK0_FEATURE  1dh,10h 
		movia	0x10
		movar	Rf_data
		movia	0x3d									//BANK0_FEATURE
		call	rf_write_onebyte
		
		;HS6220_BANK0_EN_AA  01h,00h 
		movia	0x00
		movar	Rf_data
		movia	0x21									//BANK0_EN_AA
		call	rf_write_onebyte
		
		 ;HS6220_BANK0_CONFIG  00h,fah  
		movia	0xfa
		movar	Rf_data
		movia	0x20									//BANK0_CONFIG
		call	rf_write_onebyte
		
		;HS6220_BANK0_RX_PW_P0  11h,h 
		movia	RF_LENGTH
		movar	Rf_data
		movia	0x31									//BANK0_RX_PW_P0 
		call	rf_write_onebyte
		
		;HS6220_BANK0_RF_CH  
		movia	45
		movar	Rf_data
		movia	0x25                                    //BANK0_RF_CH
		call	rf_write_onebyte	
		
		;HS6220_BANK0_EN_RXADDR 
		movia	0x03
		movar	Rf_data
		movia	0x22									//BANK0_EN_RXADDR
		call	rf_write_onebyte
		
		 ;HS6220_BANK0_RF_SETUP 
		movia	0x47									//PA_PWR output 8db
		movar	Rf_data										
		movia	0x26                                    //BANK0 RF_SETUP
		call	rf_write_onebyte
		
		;HS6220_BANK0_DYNPD  
		movia	0x27
		movar	Rf_data
		movia	0x3c									//BANK0_DYNPD
		call	rf_write_onebyte
		
		call	clear_rf_status
		call	flush_rx_fifo
		call	flush_tx_fifo		
;		call	rf_tx_set
		
		call	rf_ce_high
		
		return	
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
;carrier mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
hs6220_carrier_mode:
		call	rf_ce_low
		
		csn_low
		movia	0x25                                    //RF_CH
		call	spi_write_abyte
		movia	45
		call	spi_write_abyte
		csn_high
		
		
		csn_low
		movia	0x26
		call	spi_write_abyte                         //RF_SETUP
		movia	0xc7
		call	spi_write_abyte
		csn_high
		

		call	rf_ce_high
		
		return
		
		
		
		
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;function name: rf_power_up
;func:rf power on
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
/*
rf_power_up:
		csn_low
		
		movia 	0x20                  //HS6220_BANK0_CONFIG
		movar	Rf_reg
		movia	0xfa
		movar	Rf_data
		call	rf_write_onebyte
		
		movia	0x0a
		movar	Delay_time
		call	Delay_100us
		
		movia	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rf_power_down:
		return
*/		

		






//-------------RF command---------------------
#define HS6220_R_REGISTER				0x00 // Define read command to register
#define HS6220_W_REGISTER				0x20 // Define write command to register
#define HS6220_R_RX_PAYLOAD				0x61 // Define RX payload register address
#define HS6220_W_TX_PAYLOAD				0xA0 // Define TX payload register address
#define HS6220_FLUSH_TX					0xE1 // Define flush TX register command
#define HS6220_FLUSH_RX					0xE2 // Define flush RX register command
#define HS6220_REUSE_TX_PL				0xE3 // Define reuse TX payload register command
#define HS6220_ACTIVATE					0x50 // Define ACTIVATE features register command
#define HS6220_R_RX_PL_WID				0x60 // Define read RX payload width register command
#define HS6220_W_ACK_PAYLOAD			0xA8 // Define write ACK payload register command
#define HS6220_W_TX_PAYLOAD_NOACK		0xB0 // Define disable TX ACK for one time register command
#define HS6220_NOP						0xFF // Define No Operation, might be used to read status register
#define HS6220_READ_STATUS				0xFF

#define HS6220_ACTIVATE_DATA			0x53

#define HS6220_CMD_CE_HIGH				0xD5
#define HS6220_CMD_CE_LOW				0xD6



#define HS6220_STATUS_RX_DR				0x40
#define HS6220_STATUS_TX_DS				0x20
#define HS6220_STATUS_MAX_RT			0x10
#define HS6220_STATUS_TX_FULL			0x01



#define			RF_LENGTH				6

#define			RFDATAADDRESS			0x70
#define			RF_BANK0				0      
#define			RF_BANK1				1
#define			SOFT_RST				0x20

