📄 communication_lib.s
字号:
.module Communication_LIB.c
.area text(rom, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\Communication_LIB.c
.dbfunc e MSG_Map_LocateModuleShell_INIT _MSG_Map_LocateModuleShell_INIT fV
.dbstruct 0 3 MsgMapItem
.dbfield 0 cCMD c
.dbfield 1 pMsgFunc pfc
.dbend
.dbstruct 0 3 MsgMap
.dbfield 0 cItemCount c
.dbfield 1 pMsgItems pS[MsgMapItem]
.dbend
; pMsgMap -> R18,R19
; Reg2 -> R10,R11
; Reg14 -> R16,R17
; n3 -> R16
; n1 -> R16
.even
_MSG_Map_LocateModuleShell_INIT::
st -y,R10
st -y,R11
.dbline -1
.dbline 79
; /***********************************************************
; * 函数库说明:模块通讯函数库 *
; * 版本: *
; * 作者: *
; * 创建日期: *
; * -------------------------------------------------------- *
; * [硬件说明] *
; * 处理器: *
; * 系统时钟: *
; * -------------------------------------------------------- *
; * [支 持 库] *
; * 库名称: *
; * 需要版本: *
; * 支持库说明: *
; * -------------------------------------------------------- *
; * [版本更新] *
; * 修改: *
; * 修改日期: *
; * 版本: *
; * -------------------------------------------------------- *
; * [版本历史] *
; * -------------------------------------------------------- *
; * [使用说明] *
; ***********************************************************/
;
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "RD_MacroAndConst.h"
; # include "LIB_Config.h"
; # include "PF_Config.h"
; # include "RD_ADT_Queue.h"
; # include "RD_ADT_MSGMap.h"
; # include "RD_UseSerialFrame_PROC.h"
; # include "Communication_LIB.h"
; # include "math.h"
;
; /********************
; * 系 统 宏 定 义 *
; ********************/
;
; /*------------------*
; * 常 数 宏 定 义 *
; *------------------*/
;
;
; /*------------------*
; * 动 作 宏 定 义 *
; *------------------*/
;
; /********************
; * 模块结构体定义区 *
; ********************/
;
; /********************
; * 函 数 声 明 区 *
; ********************/
; void Communication_INIT(void);
; BOOL PROC_Shell(void);
; BOOL Send_MSG(uint8 cCMD,uint8 *pData,uint8 Length);
; /********************
; * 模块函数声明区 *
; ********************/
; static BOOL MSGMap_Set(MSG_ITEM *pMsgItem);
; static BOOL MSGMap_Acknowledge(MSG_ITEM *pMsgItem);
; static BOOL MSGMap_OptionSet(MSG_ITEM *pMsgItem);
; /********************
; * 模块变量声明区 *
; ********************/
;
; /********************
; * 全局变量声明区 *
; ********************/
;
;
; /********************
; * 自定义数据类型区 *
; ********************/
; START_DEFINE_MSG_MAP(LocateModuleShell,2)
.dbline 79
.dbline 79
ldi R18,<_MSGMapLocateModuleShell
ldi R19,>_MSGMapLocateModuleShell
.dbline 79
ldi R24,<_MSGMapLocateModuleShellItemArray
ldi R25,>_MSGMapLocateModuleShellItemArray
movw R30,R18
std z+2,R25
std z+1,R24
.dbline 79
ldi R24,2
std z+0,R24
.dbline 79
clr R16
rjmp L5
L2:
.dbline 79
.dbline 79
ldi R24,3
mul R24,R16
movw R10,R0
ldi R24,<_MSGMapLocateModuleShellItemArray
ldi R25,>_MSGMapLocateModuleShellItemArray
movw R30,R10
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 79
ldi R24,<_MSGMapLocateModuleShellItemArray+1
ldi R25,>_MSGMapLocateModuleShellItemArray+1
movw R30,R10
add R30,R24
adc R31,R25
ldi R24,<PL_MSG_NULL_PROC
ldi R25,>PL_MSG_NULL_PROC
std z+1,R25
std z+0,R24
.dbline 79
L3:
.dbline 79
inc R16
L5:
.dbline 79
cpi R16,2
brlo L2
X0:
.dbline 79
clr R16
.dbline 80
; ADD_NEW_MSG_MAP_ITEM(COM_CMD_SET,MSGMap_Set)
movw R30,R18
ldd R2,z+0
cp R16,R2
brsh L7
X1:
.dbline 80
.dbline 80
clr R4
clr R5
ldd R2,z+1
ldd R3,z+2
movw R30,R4
add R30,R2
adc R31,R3
ldi R24,161
std z+0,R24
.dbline 80
movw R30,R18
ldd R2,z+1
ldd R3,z+2
movw R30,R4
add R30,R2
adc R31,R3
ldi R24,<PL_MSGMap_Set
ldi R25,>PL_MSGMap_Set
std z+2,R25
std z+1,R24
.dbline 80
ldi R16,1
.dbline 80
L7:
.dbline 81
; ADD_NEW_MSG_MAP_ITEM(COM_CMD_ACK,MSGMap_Acknowledge)
movw R30,R18
ldd R2,z+0
cp R16,R2
brsh L9
X2:
.dbline 81
.dbline 81
ldi R24,3
mul R24,R16
movw R16,R0
ldd R2,z+1
ldd R3,z+2
movw R30,R16
add R30,R2
adc R31,R3
ldi R24,172
std z+0,R24
.dbline 81
movw R30,R18
ldd R2,z+1
ldd R3,z+2
movw R30,R16
add R30,R2
adc R31,R3
ldi R24,<PL_MSGMap_Acknowledge
ldi R25,>PL_MSGMap_Acknowledge
std z+2,R25
std z+1,R24
.dbline 81
.dbline 81
L9:
.dbline -2
L1:
.dbline 0 ; func end
ld R11,y+
ld R10,y+
ret
.dbsym r pMsgMap 18 pS[MsgMap]
.dbsym r Reg2 10 S
.dbsym r Reg14 16 S
.dbsym r n3 16 c
.dbsym r n1 16 c
.dbend
.dbfunc e SFP_LocateModuleShell_INIT _SFP_LocateModuleShell_INIT fV
.dbstruct 0 18 AbstructDataTypeQueue
.dbfield 0 pBuffer pc
.dbfield 2 nSize i
.dbfield 4 nHead i
.dbfield 6 nTail i
.dbfield 8 nCount i
.dbfield 10 fnAddToBuffer pfc
.dbfield 12 fnGetFromBuffer pfc
.dbfield 14 fnCheckEmpty pfc
.dbfield 16 fnPeekFromBuffer pfc
.dbend
.dbstruct 0 4 MsgItem
.dbfield 0 cCMD c
.dbfield 1 cDataLength c
.dbfield 2 pData pc
.dbend
.dbstruct 0 37 SerialFrameProcess
.dbfield 0 FrameBuffer S[AbstructDataTypeQueue]
.dbfield 18 pMsgMap pS[MsgMap]
.dbfield 20 MsgItem S[MsgItem]
.dbfield 24 cHeadByte c
.dbfield 25 cEndByte c
.dbfield 26 cFixLength c
.dbfield 27 cAddress c
.dbfield 28 InputDataFunc pfc
.dbfield 30 OutputDataFunc pfc
.dbfield 32 PeekDataFunc pfc
.dbfield 34 cActionFlag c
.dbfield 35 cXORCheck c
.dbfield 36 cFrameSize c
.dbend
; pSFP -> R16,R17
.even
_SFP_LocateModuleShell_INIT::
.dbline -1
.dbline 84
; END_DEFINE_MSG_MAP
;
; START_DEFINE_SERIAL_FRAME_PROCESS(LocateModuleShell,32,MSG_MAP(LocateModuleShell))
.dbline 84
ldi R16,<_SFPLocateModuleShell
ldi R17,>_SFPLocateModuleShell
.dbline 84
ldi R24,<_MSGMapLocateModuleShell
ldi R25,>_MSGMapLocateModuleShell
movw R30,R16
std z+19,R25
std z+18,R24
.dbline 84
.dbline 84
ldi R24,<_SFPLocateModuleShellBuffer
ldi R25,>_SFPLocateModuleShellBuffer
sts _SFPLocateModuleShell+1,R25
sts _SFPLocateModuleShell,R24
.dbline 84
ldi R24,32
ldi R25,0
sts _SFPLocateModuleShell+2+1,R25
sts _SFPLocateModuleShell+2,R24
.dbline 84
clr R2
clr R3
sts _SFPLocateModuleShell+4+1,R3
sts _SFPLocateModuleShell+4,R2
.dbline 84
sts _SFPLocateModuleShell+6+1,R3
sts _SFPLocateModuleShell+6,R2
.dbline 84
sts _SFPLocateModuleShell+8+1,R3
sts _SFPLocateModuleShell+8,R2
.dbline 84
ldi R24,<PL_ADT_Queue_Add_To_Buffer
ldi R25,>PL_ADT_Queue_Add_To_Buffer
sts _SFPLocateModuleShell+10+1,R25
sts _SFPLocateModuleShell+10,R24
.dbline 84
ldi R24,<PL_ADT_Queue_Get_From_Buffer
ldi R25,>PL_ADT_Queue_Get_From_Buffer
sts _SFPLocateModuleShell+12+1,R25
sts _SFPLocateModuleShell+12,R24
.dbline 84
ldi R24,<PL_ADT_Queue_Check_Empty
ldi R25,>PL_ADT_Queue_Check_Empty
sts _SFPLocateModuleShell+14+1,R25
sts _SFPLocateModuleShell+14,R24
.dbline 84
ldi R24,<PL_ADT_Queue_Peek_From_Buffer
ldi R25,>PL_ADT_Queue_Peek_From_Buffer
sts _SFPLocateModuleShell+16+1,R25
sts _SFPLocateModuleShell+16,R24
.dbline 84
.dbline 84
ldi R24,<_SFPLocateModuleShellMsgItem
ldi R25,>_SFPLocateModuleShellMsgItem
std z+23,R25
std z+22,R24
.dbline 84
ldi R24,170
std z+24,R24
.dbline 84
ldi R24,85
std z+25,R24
.dbline 84
std z+26,R2
.dbline 84
std z+27,R2
.dbline 84
std z+34,R2
.dbline 84
std z+35,R2
.dbline 84
std z+36,R2
.dbline 84
ldi R24,<PL_SFP_NULL_Input_Data_Function
ldi R25,>PL_SFP_NULL_Input_Data_Function
std z+29,R25
std z+28,R24
.dbline 84
ldi R24,<PL_SFP_NULL_Output_Data_Function
ldi R25,>PL_SFP_NULL_Output_Data_Function
std z+31,R25
std z+30,R24
.dbline 84
ldi R24,<PL_SFP_NULL_Peek_Data_Function
ldi R25,>PL_SFP_NULL_Peek_Data_Function
std z+33,R25
std z+32,R24
.dbline 85
; SET_INPUT_DATA_FUNCTION(UARTgetDataFromRxBuff)
ldi R24,<PL_UARTgetDataFromRxBuff
ldi R25,>PL_UARTgetDataFromRxBuff
std z+29,R25
std z+28,R24
.dbline 86
; SET_OUTPUT_DATA_FUNCTION(UARTaddDataToTxBuff)
ldi R24,<PL_UARTaddDataToTxBuff
ldi R25,>PL_UARTaddDataToTxBuff
std z+31,R25
std z+30,R24
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbsym r pSFP 16 pS[SerialFrameProcess]
.dbend
.dbfunc e Send_MSG _Send_MSG fc
; Length -> y+7
; pData -> R12,R13
; cCMD -> R10
.even
_Send_MSG::
rcall push_xgset003C
movw R12,R18
mov R10,R16
sbiw R28,3
.dbline -1
.dbline 96
; END_DEFINE_SERIAL_FRAME_PROCESS
;
; /***********************************************************
; * 函数说明:消息发送函数 *
; * 输入: 指令,要发送的数据,数据的长度 *
; * 输出: 指令是否发送成功 *
; * 调用函数:SPF_Send_MSG() *
; ***********************************************************/
; BOOL Send_MSG(uint8 cCMD,uint8 *pData,uint8 Length)
; {
.dbline 97
; return SPF_Send_MSG
ldd R0,y+7
std y+2,R0
std y+1,R13
std y+0,R12
mov R18,R10
ldi R16,<_SFPLocateModuleShell
ldi R17,>_SFPLocateModuleShell
rcall _SPF_Send_MSG
.dbline -2
L20:
.dbline 0 ; func end
adiw R28,3
rjmp pop_xgset003C
.dbsym l Length 7 c
.dbsym r pData 12 pc
.dbsym r cCMD 10 c
.dbend
.dbfunc e Communication_INIT _Communication_INIT fV
.even
_Communication_INIT::
.dbline -1
.dbline 113
; (
; &SERIAL_FRAME_PROC(LocateModuleShell),
; cCMD,
; pData,
; Length
; );
; }
;
; /***********************************************************
; * 函数说明:通讯层初始化函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:无 *
; ***********************************************************/
; void Communication_INIT(void)
; {
.dbline 114
; INIT_MSG_MAP(LocateModuleShell);
rcall _MSG_Map_LocateModuleShell_INIT
.dbline 114
.dbline 115
; INIT_SERIAL_FRAME_PROCESS(LocateModuleShell);
.dbline 115
.dbline -2
L21:
.dbline 0 ; func end
rjmp _SFP_LocateModuleShell_INIT
.dbend
.dbfunc e PROC_Shell _PROC_Shell fc
.even
_PROC_Shell::
.dbline -1
.dbline 125
; }
;
; /***********************************************************
; * 函数说明:指令解析进程 *
; * 输入: 无 *
; * 输出: 是否继续运行 *
; * 调用函数:SERIAL_FRAME_PROCESS() *
; ***********************************************************/
; BOOL PROC_Shell(void)
; {
.dbline 126
; SERIAL_FRAME_PROCESS(LocateModuleShell);
ldi R16,<_SFPLocateModuleShell
ldi R17,>_SFPLocateModuleShell
rcall _Serial_Frame_Process
.dbline 128
;
; return TRUE;
ldi R16,1
.dbline -2
L22:
.dbline 0 ; func end
ret
.dbend
.area lit(rom, con, rel)
L24:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -