📄 main.s54
字号:
;******************************************************************************
; SJTU DSP Tech. Center
; Copyright (c) 2003 SJTU DSP Tech. Center. All Rights Reserved.
;
; Description:
; TMS320C54x Program for Students Experiment
;
; History:
; Date Authors
; 2003/08/07 Zheng Yigang
;******************************************************************************
.mmregs
.include "uartasm.h54"
.bss databuffer, 100
.bss dataready, 1
.bss numberofdata, 1
.bss temp, 1
;==============================================================================
;==============================================================================
; begin of text ===
;==============================================================================
;==============================================================================
.text
main:
stm #STACK_ADDR, SP
;initialtion of dsp and rs232
call DSP_Init
call UART_Init
rsbx INTM ;open interrupt
st #0, *(dataready)
dead_loop:
stm #dataready, AR2
bitf *AR2, #1
bc continue, NTC ;判断是否有数据在缓冲区
st #0, *(dataready);先恢复标志位
call light_led ;亮指示灯
call write_out ;将缓冲区的数据全部读出
continue:
b dead_loop
;===================================================================
;===================================================================
; to light leds for a few seconds =
;===================================================================
;===================================================================
light_led:
;when begin to read data, light led once
stm #temp, AR3
portr ADDR_CNTL1, *AR3
orm #0x07, *AR3
portw *AR3, ADDR_CNTL1
;delay some time,then disable led;
stm #500, AR2
delay2_out_loop:
stm #1000, BRC
rptb delay2_inner_loop-1
rpt #100-1
nop
delay2_inner_loop:
banz delay2_out_loop, *AR2-
;end of delay
portr ADDR_CNTL1, *AR3
andm #0xF8, *AR3
portw *AR3, ADDR_CNTL1
ret
;end of light_led
;===================================================================
;===================================================================
; to write out all data in FIFO ====
;===================================================================
;===================================================================
write_out:
stm #databuffer, AR2
rpt *(numberofdata)
portw *AR2+, ADDR_THR
ret
;end of write_out
;===========================================================
;===========================================================
; RS232_ISR ====
;===========================================================
;===========================================================
RS232_ISR:
pshm AR2
pshm AR3
pshm AR4
stm #temp, AR3
portr ADDR_IIR, *AR3
bitf *AR3, #0x04 ;判断寄存器IIR的第二位是否为1
bc outint, NTC
bitf *AR3, #0x02 ;判断寄存器IIR的第1位是否为0
bc fifoarrive, NTC ;IIR_bit2=1,bit1=0,表明是接受数据就绪中断,开始读数据
portr ADDR_LSR, *AR3 ;否则,是线路状态中断,不读数据,读LSR,然后退出中断
b outint
fifoarrive:
st #0x01, *(dataready)
stm #databuffer, AR2
stm #0, AR4
read_all:
portr ADDR_RBR, *AR2+
portr ADDR_LSR, *AR3
mar *AR4+ ;记下读取数据的个数
bitf *AR3, #0x01
bc read_all, TC ;判断数据有没有读完
mar *AR4-
mvmd AR4, numberofdata ;存放的值比实际个数少1
outint:
popm AR4
popm AR3
popm AR2
popm ST1
popm ST0
rete
;===================================================================
;===================================================================
;vector table ====
;===================================================================
;===================================================================
.sect "vectors"
int_reset:
b main
nop
nop
.space 64*16
int_int1:
bd RS232_ISR ;进入中断程序
pshm ST0
pshm ST1
.space 56*16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -