📄 pkt.asm
字号:
;*******************************************************************************************************
;* *
;* ********** *
;* ************ *
;* *** *** *
;* *** +++ *** *
;* *** + + *** *
;* *** + Packet module *
;* *** + + *** *
;* *** +++ *** *
;* *** *** *
;* ************ *
;* ********** *
;* *
;*******************************************************************************************************
;* Packet handling module. *
;* The location and boundaries of rxBuffer, txBuffers, audioIn and audioOut are built *
;* directly in to the pointer operations. *
;*******************************************************************************************************
;* Assembler: Keil A51 *
;* Target platform: 8051F005 *
;*******************************************************************************************************
;* Revision history: *
;* Initial release, HKI, 01.08.2004 *
;******************************************************************************************************/
NAME PKT
#include <ASMinclude.h>
?PR?packetize?PKT SEGMENT CODE ?PR?dePacketize?PKT SEGMENT CODE
PUBLIC packetizePUBLIC dePacketize
EXTRN CODE (_compress)
;******************************************************************************************************
;* Functions *
;******************************************************************************************************
; Note: tx/rx buffers are inverted (fisrt entry at 0xxx00)
; as DJNZ(2/3) will give faster code than INC/ADDC + CJNE(1+3/4)
; Create packet header or,
; read one sample pair from audioIn and packetise to txBuffer
RSEG ?PR?packetize?PKTpacketize:
PUSH PSW
PUSH ACC
MOV PSW, #0x08 ; Register bank 1
MOV PAGEREG, audioInReadPage ; Set source page
; Check if we are at the beginning of a new packet
MOV A, txBufferWriteLowB
JZ MAKE_HEADER
; Read audio data from audioIn
MOVX A, @audioInReadLowB
MOV RegBank0R4ptr, A
INC audioInReadLowB
MOVX A, @audioInReadLowB
MOV RegBank0R5ptr, A
INC audioInReadLowB
MOVX A, @audioInReadLowB
MOV RegBank0R6ptr, A
INC audioInReadLowB
MOVX A, @audioInReadLowB
MOV RegBank0R7ptr, A
INC audioInReadLowB
CLR RS0 ; Goto Register Bank 0
LCALL _compress
SETB RS0
MOV R5, RegBank0R7ptr
MOV R4, RegBank0R6ptr
CJNE audioInReadLowB, #0x00, STILL_ON_IN_PAGE
INC PAGEREG
ORL PAGEREG, #0x04 ; Make sure we stay within the 1024 byte buffer
ANL PAGEREG, #0x07
MOV audioInReadPage, PAGEREG
STILL_ON_IN_PAGE:
MOV PAGEREG, txBufferWritePage ; Set destination page
MOV A, R4 ; Move the 4 bytes to txBuffer
MOVX @txBufferWriteLowB, A
DEC txBufferWriteLowB
MOV A, R5
MOVX @txBufferWriteLowB, A
DJNZ txBufferWriteLowB, EXIT_PKT
DEC PAGEREG ; Make sure we stay within the 1024 byte buffer
ANL PAGEREG, #0x03
MOV txBufferWritePage, PAGEREG
EXIT_PKT:
POP ACC
POP PSW
RET
MAKE_HEADER:
MOV PAGEREG, txBufferWritePage
MOV A, seqNo ; Sequence number
INC seqNo
MOVX @txBufferWriteLowB, A
DEC txBufferWriteLowB
MOV A, #SYS_ID ; System ID
MOVX @txBufferWriteLowB, A
DEC txBufferWriteLowB
MOV A, #0xFF ; Packet length - not currently in use
MOVX @txBufferWriteLowB, A
DEC txBufferWriteLowB
MOV A, #0xFF ; Parameters - not currently in use
MOVX @txBufferWriteLowB, A
DEC txBufferWriteLowB
DEC txBufferWriteLowB
DEC txBufferWriteLowB
DEC txBufferWriteLowB
DEC txBufferWriteLowB
POP ACC
POP PSW
RET
;*******************************************************************************************************
; Read header or,
; de-packetise to audioOut
RSEG ?PR?dePacketize?PKTdePacketize:
PUSH PSW
PUSH ACC
MOV PSW, #0x08 ; Register bank 1
MOV PAGEREG, rxBufferReadPage ; Set source page
MOV A, rxBufferReadLowB
JZ READ_HEADER
; Read from rxBuffer
MOVX A, @rxBufferReadLowB
MOV R4, A
DEC rxBufferReadLowB
MOVX A, @rxBufferReadLowB
MOV R5, A
DJNZ rxBufferReadLowB, STILL_ON_RX_PAGE
DEC PAGEREG
ANL PAGEREG, #0x03 ; Make sure we stay within the 1024 byte buffer
MOV rxBufferReadPage, PAGEREG
STILL_ON_RX_PAGE:
MOV PAGEREG, audioOutWritePage ; Set destination page
MOV A, R4
MOVX @audioOutWriteLowB, A
INC audioOutWriteLowB
INC audioOutWriteLowB
MOVX @audioOutWriteLowB, A
DEC audioOutWriteLowB
MOV A, R5
MOVX @audioOutWriteLowB, A
INC audioOutWriteLowB
INC audioOutWriteLowB
MOVX @audioOutWriteLowB, A
INC audioOutWriteLowB
CJNE audioOutWriteLowB, #0x00, EXIT_DEPKT
INC PAGEREG ; Make sure we stay within the 1024 byte buffer
ORL PAGEREG, #0x04
ANL PAGEREG, #0x07
MOV audioOutWritePage, PAGEREG
EXIT_DEPKT:
POP ACC
POP PSW
RET
READ_HEADER:
DEC rxBufferReadLowB ; Sequence number - processed by readFIFO()
DEC rxBufferReadLowB ; System ID - processed by readFIFO()
DEC rxBufferReadLowB ; Packet length - not currently in use
DEC rxBufferReadLowB ; Parameters - not currently in use
DEC rxBufferReadLowB
DEC rxBufferReadLowB
DEC rxBufferReadLowB
DEC rxBufferReadLowB
POP ACC
POP PSW
RET
;*******************************************************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -