📄 rf收发汇编参考代码.asm
字号:
RETURN
//*********************************************************************
Init_FrameReg:
CLRR Table_Index
Set_FrameReg:
MOVR Table_Index, A
CALL FRAME_TABLE
MOVAR SPI_Addr
XORIA 0FFH
BTRSC Status,Z_B
GOTO Set_Framereg_End
INCR Table_Index, R
MOVR Table_Index, A
CALL FRAME_TABLE
MOVAR SPI_Data_High
INCR Table_Index, R
MOVR Table_Index, A
CALL FRAME_TABLE
MOVAR SPI_Data_Low
CALL Write_SPI_Reg
INCR Table_Index, R
GOTO Set_FrameReg
Set_Framereg_End:
RETURN
/*********************************************************************
* test RF Register, if read==write test pass
*********************************************************************/
TEST_Initial_RF:
CLRR Table_Index
Check_Digit_Reg:
MOVR Table_Index,A
CALL FRAME_TABLE
MOVAR SPI_Addr
XORIA 0FFH
BTRSC STATUS,Z_B
GOTO RF_Test_Ret
CALL Read_SPI_Reg
INCR Table_Index, R
MOVR Table_Index,A
CALL FRAME_TABLE
XORAR SPI_Data_High, A
BTRSS STATUS,Z_B
GOTO RF_Init_ERROR
INCR Table_Index, R
MOVR Table_Index,A
CALL FRAME_TABLE
XORAR SPI_Data_LOW, A
BTRSS STATUS,Z_B
GOTO RF_Init_ERROR
RF_Table_Inc:
INCR Table_Index, R
GOTO Check_Digit_Reg
RF_Init_ERROR:
BSR Test_Error_B
GOTO RF_Test_Ret
RF_Test_Ret:
RETURN
/*********************************************************************
* Function: Set Default Communicate SyncWord
* Input: Default_Addr_High, Default_Addr_Low
* Output: None
*********************************************************************/
RF_Set_Default_SyncWord:
MOVIA Default_Sync_Word1
MOVAR SPI_Data_High
MOVIA Default_Sync_Word2
MOVAR SPI_Data_Low
MOVIA Sync_Word_1stAddr
MOVAR SPI_Addr
CALL Write_SPI_Reg
NOP
MOVIA Default_Sync_Word3
MOVAR SPI_Data_High
MOVIA Default_Sync_Word4
MOVAR SPI_Data_Low
MOVIA Sync_Word_2ndAddr
MOVAR SPI_Addr
CALL Write_SPI_Reg
RETURN
/*********************************************************************
* Function: Rewrite Communicate SyncWord
* Input: Commun_SyncWord1, Commun_SyncWord2,
Commun_SyncWord3, Commun_SyncWord4
* Output: None
*********************************************************************/
RF_Set_Commun_SyncWord:
CLRR Table_Index
MOVR Table_Index, A
CALL ID_TABLE
MOVAR SPI_Data_High
INCR Table_Index, R
MOVR Table_Index, A
CALL ID_TABLE
MOVAR SPI_Data_Low
MOVIA Sync_Word_1stAddr
MOVAR SPI_Addr
CALL Write_SPI_Reg
INCR Table_Index, R
MOVR Table_Index, A
CALL ID_TABLE
MOVAR SPI_Data_High
INCR Table_Index, R
MOVR Table_Index, A
CALL ID_TABLE
MOVAR SPI_Data_Low
MOVIA Sync_Word_2ndAddr
MOVAR SPI_Addr
CALL Write_SPI_Reg
RETURN
/*********************************************************************
* Function: Enter TX State
* Input: SPI_Addr,SPI_Data_High,SPI_Data_Low
* Output: None
*********************************************************************/
RF_Enter_TX_State:
MOVIA 007H
MOVAR SPI_Addr
MOVIA 001H
MOVAR SPI_Data_High
BTRSS Device_Select_B
GOTO Key_TX_Channel
Mouse_TX_Channel:
BTRSC Mouse_Code_B
GOTO Mouse_Code_TXChannel
MOVR Channel_Index, A
CALL Mouse_Normal_Channle_Table
GOTO Set_TX_Channel
Key_TX_Channel:
BTRSC Key_Code_B
GOTO Key_Code_TXChannel
MOVR Channel_Index, A
CALL Key_Normal_Channle_Table
GOTO Set_TX_Channel
Mouse_Code_TXChannel:
MOVR Special_Index, A
CALL Mouse_Code_Channle_Table
GOTO Set_TX_Channel
Key_Code_TXChannel:
MOVR Special_Index, A
CALL Key_Code_Channle_Table
GOTO Set_TX_Channel
Set_TX_Channel:
MOVAR SPI_Data_Low
CALL Write_SPI_Reg
RETURN
/*********************************************************************
* Function: Enter RX State
* Input: SPI_Addr,SPI_Data_High,SPI_Data_Low
* Output: None
*********************************************************************/
RF_Enter_RX_State:
MOVIA 007H
MOVAR SPI_Addr
CLRR SPI_Data_High
BTRSS Device_Select_B
GOTO Key_RX_Channel
Mouse_RX_Channel:
BTRSC Mouse_Code_B
GOTO Mouse_Code_RXChannel
MOVR Channel_Index, A
CALL Mouse_Normal_Channle_Table
GOTO Set_RX_Channel
Key_RX_Channel:
BTRSC Key_Code_B
GOTO Key_Code_RXChannel
MOVR Channel_Index, A
CALL Key_Normal_Channle_Table
GOTO Set_RX_Channel
Mouse_Code_RXChannel:
MOVR Special_Index, A
CALL Mouse_Code_Channle_Table
GOTO Set_RX_Channel
Key_Code_RXChannel:
MOVR Special_Index, A
CALL Key_Code_Channle_Table
GOTO Set_RX_Channel
Set_RX_Channel:
IORIA 080H
MOVAR SPI_Data_Low
CALL Write_SPI_Reg
RETURN
/*********************************************************************
* Function: RF Enter Idle State
* Input: SPI_Addr,SPI_Data_High,SPI_Data_Low
* Output: None
*********************************************************************/
RF_Enter_Idle_State:
MOVIA 007H
MOVAR SPI_Addr
CLRR SPI_Data_High
CLRR SPI_Data_Low
CALL Write_SPI_Reg
RETURN
/*********************************************************************
* Function: RF Enter Sleep State
* Input: SPI_Addr,SPI_Data_High,SPI_Data_Low
* Output: None
*********************************************************************/
/*
RF_Enter_Sleep_State:
MOVIA 023H // Reg35
MOVAR SPI_Addr
CALL Read_SPI_Reg
MOVIA 040H // Bit14 = 1; Sleep
IORAR SPI_Data_High, R
CALL Write_SPI_Reg
RETURN
*/
/*********************************************************************
* Function: RF Enter Power Down State
* Input: SPI_Addr,SPI_Data_High,SPI_Data_Low
* Output: None
*********************************************************************/
/*
RF_Enter_Power_Down:
MOVIA 023H // Reg35
MOVAR SPI_Addr
CALL Read_SPI_Reg
MOVIA 080H // Bit15 = 1; Power Down
IORAR SPI_Data_High, R
CALL Write_SPI_Reg
RETURN
*/
/*********************************************************************
* Function: RF Wake Up
* Input: SPI_Addr,SPI_Data_High,SPI_Data_Low
* Output: None
*********************************************************************/
/*
RF_Wakeup:
MOVIA iTMR0_T1
MOVAR TMR0
; BCR RF_CSn // /SS拉低2ms wakeup RF
;{
MOVIA BCR_RF_CSn
ANDAR PORTA, R
;}
BTRSS Time0_Out_B
GOTO $-1
BCR Time0_Out_B
MOVIA iTMR0_T2
MOVAR TMR0
BSR RF_CSn
MOVIA 023H // Reg35
MOVAR SPI_Addr
CALL Read_SPI_Reg
MOVIA 0BFH
ANDAR SPI_Data_High, R
CALL Write_SPI_Reg
NOP
CALL RF_Enter_Idle_State
RETURN
*/
/*********************************************************************
* Function: Read FIFO RAM
* Input: None
* Output: RX_BUF , Receive_Error
* Software SPI
*********************************************************************/
RF_Read_FIFO_RAM:
MOVIA 048D // Reg48 State Regsiter
MOVAR SPI_Addr
CALL Read_SPI_Reg
MOVR SPI_Data_High, A
ANDIA 0C0H
BTRSS STATUS, Z_B
GOTO Receive_Data_Error // receive error
CLRR Fre_Lost_Count
BCR Key_Commun_Flag,Lose_Frame_B
BCR Mouse_Commun_Flag,Lose_Frame_B
; BCR RF_CSn // /SS=0
;{
MOVIA BCR_RF_CSn
ANDAR PORTA, R
;}
MOVIA 0B2H // Reg50 0X32|0X80
CALL WriteSPI
NOP
CALL ReadSPI
MOVAR RX_Data_Length
XORIA NORMAL_DATA_LENGTH
BTRSS STATUS,Z_B
GOTO Receive_Data_Error
Save_Data_Length:
MOVR RX_Data_Length, A
MOVAR TempCnt
MOVIA RX_BUF+1
MOVAR FSR
Read_FIFO_Loop:
CALL ReadSPI
MOVAR INDF
INCR FSR, R
DECRSZ TempCnt, R
GOTO Read_FIFO_Loop
Disable_RF_Commun:
; BSR RF_CSn // /SS =1
;{
MOVIA BSR_RF_CSn
IORAR PORTA, R
;}
RETURN
Receive_Data_Error:
BSR Key_Commun_Flag, Receive_error_B
BSR Mouse_Commun_Flag,Receive_error_B
INCR Fre_Lost_Count, R
GOTO Disable_RF_Commun
/*********************************************************************
* Function: Write FIFO RAM
* Input: SPI_Addr,TX_BUF
* Output: None
* Software SPI
*********************************************************************/
RF_Write_FIFO_RAM:
; BCR RF_CSn // /SS=1
;{
MOVIA BCR_RF_CSn
ANDAR PORTA, R
;}
MOVIA 032H // Reg50
CALL WriteSPI
MOVR TX_Data_Length, A
ADDIA 001H
MOVAR TEMPCNT
MOVIA TX_BUF // Write DATA START Address
MOVAR FSR
Write_FIFO_Loop:
MOVR INDF, A
CALL WriteSPI
INCR FSR, R
DECRSZ TEMPCNT, R
GOTO Write_FIFO_Loop
; BSR RF_CSn // /SS =1
;{
MOVIA BSR_RF_CSn
IORAR PORTA, R
;}
RETURN
/*********************************************************************
* Function: Reset TX/RX FIFO
* Input: SPI_Addr,SPI_Data_High,SPI_Data_Low
* Output: None
*********************************************************************/
RF_Reset_TX_FIFO:
RF_Reset_RX_FIFO:
MOVIA 034H // Reg52
MOVAR SPI_Addr
MOVIA 080H
MOVAR SPI_Data_High
MOVAR SPI_Data_Low
CALL Write_SPI_Reg
RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -