📄 exchange.s
字号:
.module exchange.c
.area data(ram, con, rel)
_tx_index::
.blkb 1
.area idata
.byte 254
.area data(ram, con, rel)
.dbfile ./exchange.c
.dbsym e tx_index _tx_index X
_tx_count::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile ./exchange.c
.dbsym e tx_count _tx_count c
.area lit(rom, con, rel)
_hex_table::
.byte 48,49
.byte 50,51
.byte 52,53
.byte 54,55
.byte 56,57
.byte 'A,'B
.byte 'C,'D
.byte 'E,'F
.dbsym e hex_table _hex_table A[16:16]c
.area text(rom, con, rel)
.dbfile ./exchange.c
.dbfunc e Echange_Stop _Echange_Stop fV
_Echange_Stop::
.dbline -1
.dbline 28
; #include "PSoCApi.h"
; #include <m8c.h>
; #include "exchange.h"
; #include "stdlib.h"
; #include "utils.h"
;
; #define BIM_CONTROL_PORT PRT1DR
; #define BIM_TX_SEL_BIT 3
; #define BIM_RX_SEL_BIT 2
;
; #define TX_FUNCTION_REG_MODE1_BIT 4
;
; #define START_BYTE 'S'
; #define STOP_BYTE 'P'
; #define XOR_MASK 0x00
; #define INDEX_START_BYTE -1
; #define INDEX_COMPLETE -2
;
; volatile CHAR tx_index = INDEX_COMPLETE;
; BYTE tx_count = 0;
; BYTE *tx_buffer;
;
; const char hex_table [] =
; {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
;
;
; void Echange_Stop(void)
; {
.dbline 29
; TX_SERIAL_Stop();
push X
xcall _TX_SERIAL_Stop
.dbline 30
; Baud_Start();
xcall _Baud_Start
pop X
.dbline -2
.dbline 31
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Exchange_SendBuf _Exchange_SendBuf fV
; count -> X-6
; p_tx -> X-5
_Exchange_SendBuf::
.dbline -1
push X
mov X,SP
.dbline 34
;
; void Exchange_SendBuf(char *p_tx, BYTE count)
; {
L3:
.dbline 35
L4:
.dbline 35
; while (INDEX_COMPLETE != tx_index);
cmp [_tx_index],-2
jnz L3
.dbline 37
;
; tx_count = count << 1;
mov A,[X-6]
mov [__r0],A
asl [__r0]
mov [_tx_count],[__r0]
.dbline 39
;
; tx_buffer = p_tx;
mov A,[X-4]
mov [_tx_buffer+1],A
mov A,[X-5]
mov [_tx_buffer],A
.dbline 40
; tx_index = INDEX_START_BYTE;
mov [_tx_index],-1
.dbline -2
.dbline 41
; }
L2:
pop X
.dbline 0 ; func end
ret
.dbsym l count 0 I
.dbsym l count -6 c
.dbsym l p_tx -5 pc
.dbend
.dbfunc e Exchange_Start _Exchange_Start fV
_Exchange_Start::
.dbline -1
.dbline 44
;
; void Exchange_Start(void)
; {
.dbline 45
; Baud_Start();
push X
xcall _Baud_Start
pop X
.dbline 46
; CLEARBIT(TX_SERIAL_FUNC_REG, TX_FUNCTION_REG_MODE1_BIT); //set TX reg empty interrupt
or F,0x10 ; iopage = 1
and REG[56],-17
and F,0xEF ; iopage = 0
.dbline 47
; TX_SERIAL_Start(TX8_PARITY_NONE);
push X
mov A,0
xcall _TX_SERIAL_Start
pop X
.dbline 49
;
; tx_index = INDEX_COMPLETE;
mov [_tx_index],-2
.dbline 50
; TX_SERIAL_EnableInt();
push X
xcall _TX_SERIAL_EnableInt
pop X
.dbline 51
; TX_SERIAL_TX_BUFFER_REG = XOR_MASK;
mov REG[57],0
.dbline -2
.dbline 52
; }
L6:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Exchange_Stop _Exchange_Stop fV
_Exchange_Stop::
.dbline -1
.dbline 55
;
; void Exchange_Stop(void)
; {
.dbline 56
; TX_SERIAL_DisableInt();
push X
xcall _TX_SERIAL_DisableInt
.dbline 57
; TX_SERIAL_Stop();
xcall _TX_SERIAL_Stop
pop X
.dbline -2
.dbline 58
; }
L7:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TX_SERIAL_handler _TX_SERIAL_handler fV
_TX_SERIAL_handler::
.dbline -1
push A
mov A,[__r0]
push A
mov A,[__r1]
push A
push X
mov X,SP
add SP,2
.dbline 62
;
; #pragma interrupt_handler TX_SERIAL_handler;
; void TX_SERIAL_handler (void)
; {
.dbline 63
; if (INDEX_COMPLETE == tx_index)
cmp [_tx_index],-2
jnz L9
.dbline 64
; {
.dbline 65
; TX_SERIAL_TX_BUFFER_REG = XOR_MASK;
mov REG[57],0
.dbline 66
; }
xjmp L10
L9:
.dbline 68
; else
; if (INDEX_START_BYTE == tx_index)
cmp [_tx_index],-1
jnz L11
.dbline 69
; {
.dbline 70
; TX_SERIAL_TX_BUFFER_REG = XOR_MASK ^ START_BYTE;
mov REG[57],83
.dbline 71
; tx_index++;
inc [_tx_index]
.dbline 72
; }
xjmp L12
L11:
.dbline 74
; else
; if (tx_index < tx_count)
mov A,[_tx_index]
cmp A,[_tx_count]
jnc L13
X0:
.dbline 75
; {
.dbline 76
; TX_SERIAL_TX_BUFFER_REG = XOR_MASK ^((tx_index & 0x01) ?
tst [_tx_index],1
jz L16
mov [__r1],[_tx_index]
mov [__r0],0
tst [__r1],-128
jz X1
mov [__r0],-1
X1:
asr [__r0]
rrc [__r1]
mov A,[_tx_buffer+1]
add [__r1],A
mov A,[_tx_buffer]
adc [__r0],A
mvi A,[__r1]
mov [__r1],A
mov [__r0],0
and [__r1],15
and [__r0],0
add [__r1],<_hex_table
adc [__r0],>_hex_table
mov A,[__r0]
push X
mov X,[__r1]
romx
pop X
mov [X+1],A
mov [X+0],0
xjmp L17
L16:
mov [__r1],[_tx_index]
mov [__r0],0
tst [__r1],-128
jz X2
mov [__r0],-1
X2:
asr [__r0]
rrc [__r1]
mov A,[_tx_buffer+1]
add [__r1],A
mov A,[_tx_buffer]
adc [__r0],A
mvi A,[__r1]
mov [__r1],A
mov [__r0],0
asr [__r0]
rrc [__r1]
asr [__r0]
rrc [__r1]
asr [__r0]
rrc [__r1]
asr [__r0]
rrc [__r1]
add [__r1],<_hex_table
adc [__r0],>_hex_table
mov A,[__r0]
push X
mov X,[__r1]
romx
pop X
mov [X+1],A
mov [X+0],0
L17:
mov A,[X+1]
mov REG[57],A
.dbline 79
; (hex_table[tx_buffer[tx_index >> 1] & 0x0F]):((hex_table[tx_buffer[tx_index >>1] >> 4])));
;
; tx_index++;
inc [_tx_index]
.dbline 80
; }
xjmp L14
L13:
.dbline 82
; else
; if (tx_index == tx_count)
mov A,[_tx_index]
cmp A,[_tx_count]
jnz L18
.dbline 83
; {
.dbline 84
; TX_SERIAL_TX_BUFFER_REG = XOR_MASK ^ STOP_BYTE;
mov REG[57],80
.dbline 85
; tx_index++;
inc [_tx_index]
.dbline 86
; }
xjmp L19
L18:
.dbline 88
; else
; if (tx_index == (tx_count+1))
mov A,[_tx_count]
add A,1
mov [__r0],A
mov A,[_tx_index]
cmp A,[__r0]
jnz L20
.dbline 89
; {
.dbline 90
; tx_index = INDEX_COMPLETE;
mov [_tx_index],-2
.dbline 91
; TX_SERIAL_TX_BUFFER_REG = XOR_MASK;
mov REG[57],0
.dbline 92
; }
L20:
L19:
L14:
L12:
L10:
.dbline -2
.dbline 93
; }
L8:
add SP,-2
pop X
pop A
mov [__r1],A
pop A
mov [__r0],A
pop A
.dbline 0 ; func end
reti
.dbend
.area bss(ram, con, rel)
.dbfile ./exchange.c
_tx_buffer::
.blkb 2
.dbsym e tx_buffer _tx_buffer pc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -