|
这是CCS 工具编写的DSP程序,可以实现TMS320C54XX DSP的串行口试验
************************************************ * FileName: ex3.asm * * Descriptiion: 异步串行口与PC机的接口实验 * * Copyright(C) SanZhi Electronic, Author Zpin * ************************************************
.title "ex3" .global _c_int00 .mmregs .def _c_int00
UART_BASE .set 0x0000
THR .set UART_BASE+0x00 RBR .set UART_BASE+0x00 IIR .set UART_BASE+0x20 IER .set UART_BASE+0x10 FCR .set UART_BASE+0x20 LCR .set UART_BASE+0x30 MCR .set UART_BASE+0x40 LSR .set UART_BASE+0x50 MSR .set UART_BASE+0x60 SCR .set UART_BASE+0x70 DLL .set UART_BASE+0x00 DLM .set UART_BASE+0x10
BAUDLOW .set 60h BAUDHIGH .set 61h BAUDCTL .set 62h RDDLM .set 63h RDDLL .set 64h RDTEMP .set 65h IER_ADDR .set 66h FCR_ADDR .set 67h UART_STATUS .set 68h REV_ADDR .set 69h SEND_ADDR .set 6ah
THRE .set 0x0020 DR .set 0x0001
LEN .set 48
.data SENDBUF: .string "Welcome to use SanZhi DSPxperiment Instruments!" .sect ".vectors" rst: B _c_int00 NOP NOP .space 15*4*16 int0: B _comm ;ST16550C中断信号连到外部中断0 NOP NOP int1: B _comm NOP NOP 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 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 ;8 BIT, 1 STOP, NO PARITY STL A,BAUDCTL PORTW BAUDCTL,LCR
STM #SENDBUF,AR0 ;发送字符串 STM #LEN,BRC ;设置字符串长度 RPTB LOOP READY: PORTR LSR,UART_STATUS BITF UART_STATUS,THRE BC READY,NTC ;等待发送完成 PORTW *AR0+,THR LOOP: NOP NOP ST #01H,IER_ADDR ;打开接受中断 PORTW IER_ADDR,IER STM #0ffffh,IFR STM #IMR,AR0 ORM #0007H,*AR0 RSBX INTM
susp: ;IDLE 1 NOP NOP B 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 end_comm: POPM ST0 POPM 0Ah POPM 09h POPM 08h RETE
|