?? uart.asm
字號:
*********************************************************************************
* UART.ASM v1.00 *
* 版權(quán)(c) 2003- 北京合眾達電子技術(shù)有限責(zé)任公司 *
* 設(shè)計者: 段立鋒 *
*********************************************************************************
.file "uart.asm"
.c_mode
.mmregs
.copy "vc54x.inc" ; VC5402 Memory-Mapped Register Declaration
.copy "dec5416.inc" ; SEED DEC5416 Memory-Mapped Register Declaratio
.def _uart_read_reg
.def _uart_write_reg
.def _uart_int1
.ref _uarta_recbuff
.ref _uartb_recbuff
.ref _sys_statbuff
*串口接收緩沖區(qū)
*_uart_rec: .usect "uarta_rbuff",128,0,0
*串口發(fā)送緩沖區(qū)
*_uart_tra: .usect "uarta_tbuff",128,0,0
*系統(tǒng)狀態(tài)緩沖區(qū)
*_sys_statbuff: .usect "sys_buffer",32,0,0
.text
*********************************************************************************
*UART操作函數(shù) *
*********************************************************************************
*********************************************************************************
* *
* 函數(shù)定義:uint _uart_read_reg(uint channel, uint reg) *
* 功 能:串口初始化 *
* *
* 入口參數(shù):A ---- channel:串口A或是串口B *
* (SP+n) ---- 寄存器reg,如果是.far_mode模式則n為2,否則n為1 *
* 出口參數(shù):A ---- 讀回寄存器數(shù)據(jù) *
* 資源使用:AR0 *
* *
*********************************************************************************
_uart_read_reg: STM #0,AH
STM #_sys_statbuff,AR0
BC channel_b,ANEQ ;判斷是A通路還是B通路
.if __far_mode
LD 2H,A ; reg -> (addr)獲取寄存器的偏移量
.else
LD 1H,A
.endif
STL A,*AR0(UARTA3) ;寄存器的偏移量
rega0: LD *AR0(UARTA3),A
SUB #0,A
BC rega1,ANEQ
PORTR uart_a+0,*AR0(UARTA0);讀第一個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
rega1: LD *AR0(UARTA3),A
SUB #1,A
Bc rega2,ANEQ
PORTR uart_a+1,*AR0(UARTA0);讀第二個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
rega2: LD *AR0(UARTA3),A
SUB #2,A
BC rega3,ANEQ
PORTR uart_a+2,*AR0(UARTA0);讀第三個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
rega3: LD *AR0(UARTA3),A
SUB #3,A
BC rega4,ANEQ
PORTR uart_a+3,*AR0(UARTA0);讀第四個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
rega4: LD *AR0(UARTA3),A
SUB #4,A
BC rega5,ANEQ
PORTR uart_a+4,*AR0(UARTA0);讀第五個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
rega5: LD *AR0(UARTA3),A
SUB #5,A
BC rega6,ANEQ
PORTR uart_a+5,*AR0(UARTA0);讀第六個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
rega6: LD *AR0(UARTA3),A
SUB #6,A
BC rega7,ANEQ
PORTR uart_a+6,*AR0(UARTA0);讀第七個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
rega7: LD *AR0(UARTA3),A
SUB #7,A
BC regerr,ANEQ
PORTR uart_a+7,*AR0(UARTA0);讀第八個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
channel_b: .if __far_mode
LD 2H,A ; reg -> (addr)獲取寄存器的偏移量
.else
LD 1H,A
.endif
STM #0,AH
STL A,*AR0(UARTA3) ;寄存器的偏移量
regb0: LD *AR0(UARTA3),A
SUB #0,A
BC regb1,ANEQ
PORTR uart_b+0,*AR0(UARTA0);讀第一個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regb1: LD *AR0(UARTA3),A
SUB #1,A
BC regb2,ANEQ
PORTR uart_b+1,*AR0(UARTA0);讀第二個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regb2: LD *AR0(UARTA3),A
SUB #2,A
BC regb3,ANEQ
PORTR uart_b+2,*AR0(UARTA0);讀第三個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regb3: LD *AR0(UARTA3),A
SUB #3,A
BC regb4,ANEQ
PORTR uart_b+3,*AR0(UARTA0);讀第四個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regb4: LD *AR0(UARTA3),A
SUB #4,A
BC regb5,ANEQ
PORTR uart_b+4,*AR0(UARTA0);讀第五個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regb5: LD *AR0(UARTA3),A
SUB #5,A
BC regb6,ANEQ
PORTR uart_b+5,*AR0(UARTA0);讀第六個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regb6: LD *AR0(UARTA3),A
SUB #6,A
BC regb7,ANEQ
PORTR uart_b+6,*AR0(UARTA0);讀第七個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regb7: LD *AR0(UARTA3),A
SUB #7,A
BC regerr,ANEQ
PORTR uart_b+7,*AR0(UARTA0);讀第八個寄存器
LD *AR0(UARTA0),A ;讀回值寫入寄存器A,做為返回值
B regrexit
regerr: LD #0FFFFH,A ;送錯誤標志
regrexit: .if __far_mode
FRET
.else
RET
.endif
*********************************************************************************
* *
* 函數(shù)定義:uint _uart_write_reg(uint channel, uint reg,uint regdata) *
* 功 能:串口初始化 *
* *
* 入口參數(shù):A ---- channel:串口A或是串口B *
* (SP+n) ---- 寄存器reg,如果是.far_mode模式則n為2,否則n為1 *
* ---- 要寫入的數(shù)據(jù)regdata *
* 出口參數(shù):A ---- 讀回寄存器數(shù)據(jù) *
* 資源使用:AR0
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -