?? rd_useserialbuff.s
字號:
.module RD_UseSerialBuff.c
.area text(rom, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
_UARTRxBuffHead:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
_UARTRxBuffTail:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
_UARTRxBuffCounter:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
_UARTTxBuffHead:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
_UARTTxBuffTail:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
_UARTTxBuffCounter:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
_g_bIfSerialTransmitCompleted::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
.area text(rom, con, rel)
.dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_UseSerialBuff.c
.dbfunc e UARTgetDataFromRxBuff _UARTgetDataFromRxBuff fc
; Data -> R16,R17
.even
_UARTgetDataFromRxBuff::
.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
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
xjmp 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
sei
.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
ret
.dbsym r Data 16 pc
.dbend
.dbfunc e UARTPeekDataFromRxBuff _UARTPeekDataFromRxBuff fc
; pData -> R16,R17
.even
_UARTPeekDataFromRxBuff::
.dbline -1
.dbline 167
; }
;
; /***********************************************************
; * 函數說明:接收緩沖區首數據察看函數 *
; * 輸入: 存儲取出數據地址的指針 *
; * 輸出: 取值是否成功 *
; * 調用函數:無 *
; ***********************************************************/
; BOOL UARTPeekDataFromRxBuff(uint8 *pData)
; {
.dbline 168
; SAFE_CODE_PERFORMANCE
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
xjmp 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
sei
.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
ret
.dbsym r pData 16 pc
.dbend
.dbfunc e UARTaddDataToRxBuff _UARTaddDataToRxBuff fc
; Data -> R16
.even
_UARTaddDataToRxBuff::
.dbline -1
.dbline 188
; }
;
; /***********************************************************
; * 函數說明:向通訊輸入緩沖區添加數據函數 *
; * 輸入: 收到的數據 *
; * 輸出: 無 *
; * 調用函數:無 *
; ***********************************************************/
; BOOL UARTaddDataToRxBuff(uint8 Data)
; {
.dbline 189
; SAFE_CODE_PERFORMANCE
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
xjmp 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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -