DSP与计算机的异步串行通信
RDTEMP .set 65h IER_ADDR .set 66h FCR_ADDR .set 67h UART_STATUS .set 68h REV_ADDR .set 69h SEND_ADDR .set 6ah THRE DR LEN
.set 0x0020 .set 0x0001
.set 48 .data
SENDBUF: .string \ .sect \rst: B _c_int00
NOP NOP
;ST16550C中断信号连到外部中断0
.space 15*4*16 int0: B _comm
NOP NOP NOP NOP
int1: B _comm
int2: B _comm NOP
NOP
.space 13*4*16 .text
_c_int00: LD #0h,DP
STM #3000h,SP
STM #07FFFh,SWWSR STM #28h,AR1 ST #0001h,*AR1 SSBX INTM
STM #0000h,CLKMD
;5MHz工作
;设置外部等待时间倍数
tst BITF CLKMD,#1h BC tst,TC
uart_init: ST #00H,IER_ADDR
PORTW IER_ADDR,IER ST #00H,FCR_ADDR
;禁止所有中断 ;禁止FIFO
PORTW FCR_ADDR,FCR PORTR LCR,RDTEMP ;设置波特率为9600bps ORM #0080H,RDTEMP PORTW RDTEMP,LCR
共 16页 第 15 页
DSP与计算机的异步串行通信
LD #0018H,A AND #00FFH,A STL A,BAUDLOW
;置波特率低位
PORTW BAUDLOW,DLL LD #00H,A
STL A,BAUDHIGH
PORTW BAUDHIGH,DLM ANDM #0FF7FH,RDTEMP PORTW RDTEMP,LCR LD #03H,A STL A,BAUDCTL
PORTW BAUDCTL,LCR STM #SENDBUF,AR0 STM #LEN,BRC
;8 BIT, 1 STOP, NO PARITY
;置波特率高位
;发送字符串
;设置字符串长度
RPTB LOOP
READY: PORTR LSR,UART_STATUS
BITF UART_STATUS,THRE BC READY,NTC ;等待发送完成 PORTW *AR0+,THR NOP
ST #01H,IER_ADDR PORTW IER_ADDR,IER STM #0ffffh,IFR STM #IMR,AR0 ORM #0007H,*AR0 RSBX INTM NOP NOP B susp
;等待接收中断
LOOP: NOP
;打开接受中断
susp:
_comm: PSHM 08h
PSHM 09h PSHM 0ah PSHM ST0
;接收中断服务程序
PORTR LSR,UART_STATUS BITF UART_STATUS,DR BC end_comm,NTC
PORTR RBR,REV_ADDR PORTW REV_ADDR,THR POPM ST0 POPM 0Ah POPM 09h POPM 08h RETE
共 16页 第 16 页
;把接收到的字符再发送出去
end_comm:
DSP与计算机的异步串行通信
共 16页 第 17 页