📄 rd_useserialbuff.s
字号:
.module RD_UseSerialBuff.c
.area text(rom, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTRxBuffHead:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTRxBuffTail:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTRxBuffCounter:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTTxBuffHead:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTTxBuffTail:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTTxBuffCounter:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_g_bIfSerialTransmitCompleted::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
.area text(rom, con, rel)
.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
.dbfunc e UARTgetDataFromRxBuff _UARTgetDataFromRxBuff fc
; cflags0 -> R10
; Data -> R16,R17
.even
_UARTgetDataFromRxBuff::
st -y,R10
.dbline -1
.dbline 139
; /***********************************************************
; * 函数库说明:串行通讯缓冲区处理函数库 *
; * 版本: v1.00 *
; * 作者: 王卓然 *
; * 创建日期: 2006年4月24日 *
; * -------------------------------------------------------- *
; * [支 持 库] *
; * 支持库名称:RD_MacroAndConst.h *
; * 需要版本: v0.01 &abv *
; * 函数库说明:系统常用宏定义库 *
; * *
; * 支持库名称:RD_UseSerialBuff.h *
; * 需要版本: ----- *
; * 声明库说明:串行通讯缓冲区处理声明库 *
; * -------------------------------------------------------- *
; * [版本更新] *
; * 修改: 王卓然 *
; * 修改日期: 2006年5月20日 *
; * 版本: v0.31 *
; * *
; * 修改: 王卓然 *
; * 修改日期: 2007年3月1日 *
; * 版本: v0.40 *
; * *
; * 修改: 王卓然 *
; * 修改日期: 2007年3月2日 *
; * 版本: v1.00 *
; * -------------------------------------------------------- *
; * [版本历史] *
; * v0.30 该版本提供了最基本的环形队列缓冲区操作函数。*
; * v0.31 增加了调用该函数时候的宏说明,可以选择需要 *
; * 提供的缓冲区功能。 *
; * v0.40 增加了串口发送进程。增加了原子操作。 *
; * v1.00 针对新规范进行了修改,增加自动收发进程。 *
; * -------------------------------------------------------- *
; * [使用说明] *
; * 1、通过SERIAL_RX_BUFF_SIZE来设定接收缓冲区的大 *
; * 小;通过SERIAL_TX_BUFF_SIZE来设定发送缓冲区 *
; * 的大小。 *
; * 2、通过定义_USE_SERIAL_RX_BUFF来选择添加一个接 *
; * 收缓冲区;通过定义_USE_SERIAL_TX_BUFF来添加 *
; * 一个发送缓冲区。 *
; * 3、在取数的时候,有时候要考虑屏蔽中断,否则会 *
; * 出现不可预知的后果。 *
; * 4、可以通过宏_USE_SERIAL_TX_TRANSMITTER_PROC在 *
; * 使用发送缓冲时,使用自动发送进程。并需要定 *
; * 义宏UDR_PORT来指定发送端口、也需要将宏 *
; * SERIAL_INSERT_USART_TX_ISR_CODE插入到发送完 *
; * 成中断处理程序中。 *
; * 5、使用宏SERIAL_ENABLE_WRITE定义额外的发送使能 *
; * 代码。例如485总线的发送使能等。 *
; * 6、使用宏SERIAL_DISABLE_WRITE定义额外的发送使 *
; * 能关闭代码。例如485总线发送使能的关闭。 *
; ***********************************************************/
;
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "LIB_Config.h"
; # include "RD_MacroAndConst.h"
; # include "RD_UseSerialBuff.h"
;
; /********************
; * 系 统 宏 定 义 *
; ********************/
;
; /*------------------*
; * 常 数 宏 定 义 *
; *------------------*/
; #ifndef SERIAL_RX_BUFF_SIZE
; # define SERIAL_RX_BUFF_SIZE 32
; #endif
; #ifndef SERIAL_TX_BUFF_SIZE
; # define SERIAL_TX_BUFF_SIZE 32
; #endif
; #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
; #ifndef UDR_PORT
; # error Need for UDR_PORT!
; #endif
;
; #ifndef SERIAL_ENABLE_WRITE
; # define SERIAL_ENABLE_WRITE
; #endif
;
; #ifndef SERIAL_DISABLE_WRITE
; # define SERIAL_DISABLE_WRITE
; #endif
; #endif
; /********************
; * 函 数 声 明 区 *
; ********************/
; #ifdef _USE_SERIAL_RX_BUFF
; BOOL UARTaddDataToRxBuff(uint8 Data);
; BOOL UARTgetDataFromRxBuff(uint8 *Data);
; #endif
;
; #ifdef _USE_SERIAL_TX_BUFF
; BOOL UARTaddDataToTxBuff(uint8 Data);
; BOOL UARTgetDataFromTxBuff(uint8 *Data);
; #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
; BOOL PROC_Serial_Transmitter(void);
; #endif
; #endif
;
; /********************
; * 模块变量定义区 *
; ********************/
; #ifdef _USE_SERIAL_RX_BUFF
; static uint8 UARTRxBuff[SERIAL_RX_BUFF_SIZE];
; static unsigned int UARTRxBuffHead = 0;
; static unsigned int UARTRxBuffTail = 0;
; static unsigned int UARTRxBuffCounter = 0;
; #endif
;
; #ifdef _USE_SERIAL_TX_BUFF
; static uint8 UARTTxBuff[SERIAL_TX_BUFF_SIZE];
; static unsigned int UARTTxBuffHead = 0;
; static unsigned int UARTTxBuffTail = 0;
; static unsigned int UARTTxBuffCounter = 0;
; #endif
;
; /********************
; * 全局变量定义区 *
; ********************/
; #ifdef _USE_SERIAL_TX_BUFF
; #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
; BOOL g_bIfSerialTransmitCompleted = TRUE;
; #endif
; #endif
;
; /***********************************************************
; * 函数说明:接收缓冲区取值函数 *
; * 输入: 存储取出数据地址的指针 *
; * 输出: 取值是否成功 *
; * 调用函数:无 *
; ***********************************************************/
; #ifdef _USE_SERIAL_RX_BUFF
; BOOL UARTgetDataFromRxBuff(uint8 *Data)
; {
.dbline 140
; SAFE_CODE_PERFORMANCE
.dbline 140
in R10,0x3f
.dbline 140
cli
.dbline 140
lds R2,_UARTRxBuffTail
lds R3,_UARTRxBuffTail+1
lds R4,_UARTRxBuffHead
lds R5,_UARTRxBuffHead+1
cp R4,R2
cpc R5,R3
brne L2
X0:
lds R2,_UARTRxBuffCounter
lds R3,_UARTRxBuffCounter+1
tst R2
brne L2
tst R3
brne L2
X1:
.dbline 140
.dbline 140
sei
.dbline 140
clr R16
rjmp L1
L2:
.dbline 140
lds R2,_UARTRxBuffHead
lds R3,_UARTRxBuffHead+1
movw R24,R2
adiw R24,1
sts _UARTRxBuffHead+1,R25
sts _UARTRxBuffHead,R24
ldi R24,<_UARTRxBuff
ldi R25,>_UARTRxBuff
movw R30,R2
add R30,R24
adc R31,R25
ldd R2,z+0
movw R30,R16
std z+0,R2
.dbline 140
lds R24,_UARTRxBuffCounter
lds R25,_UARTRxBuffCounter+1
sbiw R24,1
sts _UARTRxBuffCounter+1,R25
sts _UARTRxBuffCounter,R24
.dbline 140
lds R24,_UARTRxBuffHead
lds R25,_UARTRxBuffHead+1
cpi R24,32
ldi R30,0
cpc R25,R30
brne L4
X2:
.dbline 140
.dbline 140
clr R2
clr R3
sts _UARTRxBuffHead+1,R3
sts _UARTRxBuffHead,R2
.dbline 140
L4:
.dbline 140
.dbline 140
out 0x3f,R10
.dbline 140
.dbline 157
; (
; if ((UARTRxBuffHead == UARTRxBuffTail)
; && (UARTRxBuffCounter == 0))
; {
; SEI();
; return FALSE;
; }
; (*Data) = UARTRxBuff[UARTRxBuffHead++];
;
; UARTRxBuffCounter--;
;
; if (UARTRxBuffHead == SERIAL_RX_BUFF_SIZE)
; {
; UARTRxBuffHead = 0;
; }
; )
; return TRUE;
ldi R16,1
.dbline -2
L1:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r cflags0 10 c
.dbsym r Data 16 pc
.dbend
.dbfunc e UARTPeekDataFromRxBuff _UARTPeekDataFromRxBuff fc
; cflags0 -> R10
; pData -> R16,R17
.even
_UARTPeekDataFromRxBuff::
st -y,R10
.dbline -1
.dbline 167
; }
;
; /***********************************************************
; * 函数说明:接收缓冲区首数据察看函数 *
; * 输入: 存储取出数据地址的指针 *
; * 输出: 取值是否成功 *
; * 调用函数:无 *
; ***********************************************************/
; BOOL UARTPeekDataFromRxBuff(uint8 *pData)
; {
.dbline 168
; SAFE_CODE_PERFORMANCE
.dbline 168
in R10,0x3f
.dbline 168
cli
.dbline 168
lds R2,_UARTRxBuffTail
lds R3,_UARTRxBuffTail+1
lds R4,_UARTRxBuffHead
lds R5,_UARTRxBuffHead+1
cp R4,R2
cpc R5,R3
brne L7
X3:
lds R2,_UARTRxBuffCounter
lds R3,_UARTRxBuffCounter+1
tst R2
brne L7
tst R3
brne L7
X4:
.dbline 168
.dbline 168
sei
.dbline 168
clr R16
rjmp L6
L7:
.dbline 168
ldi R24,<_UARTRxBuff
ldi R25,>_UARTRxBuff
lds R30,_UARTRxBuffHead
lds R31,_UARTRxBuffHead+1
add R30,R24
adc R31,R25
ldd R2,z+0
movw R30,R16
std z+0,R2
.dbline 168
.dbline 168
out 0x3f,R10
.dbline 168
.dbline 178
; (
; if ((UARTRxBuffHead == UARTRxBuffTail)
; && (UARTRxBuffCounter == 0))
; {
; SEI();
; return FALSE;
; }
; (*pData) = UARTRxBuff[UARTRxBuffHead];
; )
; return TRUE;
ldi R16,1
.dbline -2
L6:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r cflags0 10 c
.dbsym r pData 16 pc
.dbend
.dbfunc e UARTaddDataToRxBuff _UARTaddDataToRxBuff fc
; cflags0 -> R10
; Data -> R16
.even
_UARTaddDataToRxBuff::
st -y,R10
.dbline -1
.dbline 188
; }
;
; /***********************************************************
; * 函数说明:向通讯输入缓冲区添加数据函数 *
; * 输入: 收到的数据 *
; * 输出: 无 *
; * 调用函数:无 *
; ***********************************************************/
; BOOL UARTaddDataToRxBuff(uint8 Data)
; {
.dbline 189
; SAFE_CODE_PERFORMANCE
.dbline 189
in R10,0x3f
.dbline 189
cli
.dbline 189
lds R2,_UARTRxBuffTail
lds R3,_UARTRxBuffTail+1
lds R4,_UARTRxBuffHead
lds R5,_UARTRxBuffHead+1
cp R4,R2
cpc R5,R3
brne L10
X5:
lds R24,_UARTRxBuffCounter
lds R25,_UARTRxBuffCounter+1
cpi R24,32
ldi R30,0
cpc R25,R30
brne L10
X6:
.dbline 189
.dbline 189
sei
.dbline 189
clr R16
rjmp L9
L10:
.dbline 189
lds R2,_UARTRxBuffTail
lds R3,_UARTRxBuffTail+1
movw R24,R2
adiw R24,1
sts _UARTRxBuffTail+1,R25
sts _UARTRxBuffTail,R24
ldi R24,<_UARTRxBuff
ldi R25,>_UARTRxBuff
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R16
.dbline 189
lds R24,_UARTRxBuffCounter
lds R25,_UARTRxBuffCounter+1
adiw R24,1
sts _UARTRxBuffCounter+1,R25
sts _UARTRxBuffCounter,R24
.dbline 189
lds R24,_UARTRxBuffTail
lds R25,_UARTRxBuffTail+1
cpi R24,32
ldi R30,0
cpc R25,R30
brne L12
X7:
.dbline 189
.dbline 189
clr R2
clr R3
sts _UARTRxBuffTail+1,R3
sts _UARTRxBuffTail,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -