TMS320LF2407事件管理器定时器1中断系统实验
实验目的:1、掌握TMS320LF2407事件管理器定时器1中断系统的工作原理
2、掌握TMS320LF2407事件管理器定时器1的程序设计
TMS320LF2407有6个可屏蔽的中断级,为了正确地响应中断,可以分两步来完成中断服务子程序。例如,当优先级INT2上的一个中断请求被响应时,CPU转移至GISR2且执行,一进入GISR2就执行保护现场操作,再读取被锁存在外设中断向量寄存器(PIVR)中的该中断事件的向量地址偏移量,根据向量地址偏移量在跳到响应的中断服务子程序(SISR)。
下面的实验程序是定时器1产生上溢、下溢、比较和周期中断,在中断服务子程序中分别点亮IOPB0、IOPB1、IOPB2和IOPB3输出的指示灯。
;(1)建立中断向量表
.sect ".vectors" ;定义主向量段
RSVECT B _c_int0 ;PM 0 Reset Vector 1
INT1 B PHANTOM ;PM 2 Int level 1 4
INT2 B GISR2 ;PM 4 Int level 2 5
INT3 B PHANTOM ;PM 6 Int level 3 6
INT4 B PHANTOM ;PM 8 Int level 4 7
INT5 B PHANTOM ;PM A Int level 5 8
INT6 B PHANTOM ;PM C Int level 6 9
RESERVED B PHANTOM ;PM E (Analysis Int) 10
SW_INT8 B PHANTOM ;PM 10 User S/W int —
SW_INT9 B PHANTOM ;PM 12 User S/W int —
SW_INT10 B PHANTOM ;PM 14 User S/W int —
SW_INT11 B PHANTOM ;PM 16 User S/W int —
SW_INT12 B PHANTOM ;PM 18 User S/W int —
SW_INT13 B PHANTOM ;PM 1A User S/W int —
SW_INT14 B PHANTOM ;PM 1C User S/W int —
SW_INT15 B PHANTOM ;PM 1E User S/W int —
SW_INT16 B PHANTOM ;PM 20 User S/W int —
TRAP B PHANTOM ;PM 22 Trap vector —
NMI B PHANTOM ;PM 24 Non maskable Int 3
EMU_TRAP B PHANTOM ;PM 26 Emulator Trap 2
SW_INT20 B PHANTOM ;PM 28 User S/W int —
SW_INT21 B PHANTOM ;PM 2A User S/W int —
SW_INT22 B PHANTOM ;PM 2C User S/W int —
SW_INT23 B PHANTOM ;PM 2E User S/W int —
SW_INT24 B PHANTOM ;PM 30 User S/W int —
SW_INT25 B PHANTOM ;PM 32 User S/W int —
SW_INT26 B PHANTOM ;PM 34 User S/W int —
SW_INT27 B PHANTOM ;PM 36 User S/W int —
SW_INT28 B PHANTOM ;PM 38 User S/W int —
SW_INT29 B PHANTOM ;PM 3A User S/W int —
SW_INT30 B PHANTOM ;PM 3C User S/W int —
SW_INT31 B PHANTOM ;PM 3E User S/W int —
.include "F2407REGS.H "
.include "vectors.h"
.def _c_int0
.sect ".text"
.text
_c_int0: LDP #0H
SETC INTM ;关中断
SPLK #0000H,IMR ;屏蔽所有中断
LACC IFR ;读中断标志
SACL IFR ;清中断标志
LDP #0E0H
SPLK #00E8H, WDCR ;禁止 WD
MAR *, AR0
LDP #0E1H
SPLK #00H,MCRA
SPLK #0FF00H,PBDATDIR ;设置IOPBN为输出 ,0
LDP #0E8H
SPLK #0000H,GPTCONA
SPLK #0000H,T1CNT ;定时器计数为0
SPLK #0F4EH,T1CON ;000 01 连续增减计数模式
;110 X/64
;01 定时器1计数器使能
;00 内部时钟
;00 当计数值为0时重装
;1 定时器1比较使能
;0 使用自身的周期寄存器
SPLK #0FFFFH,T1PR
SPLK #8000H,T1CMPR
SPLK #0780H,EVAIMRA ;使能OV,U,C,P 中断位
SPLK #0780H,EVAIFRA ;清中断标志
LDP #0H
SPLK #0002H,IMR
CLRC INTM ;开INT2中断
WAIT: NOP ;等中断
NOP
B WAIT
GISR2: NOP ;INT2 GISR
LDP #PIVR>>7H
LACL PIVR ;读PIVR 值
XOR #002AH ;T1 上溢中断
BCND SISR2A,eq
LACL PIVR
XOR #0029H ;T1 下溢中断
BCND SISR29,eq
LACL PIVR
XOR #0028H ;T1 比较中断
BCND SISR28,eq
LACL PIVR
XOR #0027H ;T1 周期中断
BCND SISR27,eq
RET
SISR2A:
LDP #0E1H
SPLK #0FFFEH,PBDATDIR ;置低IOPBO
CALL DELAY
LDP #GPTCONA >>7h
LACC #0400H ;清上溢中断标志
SACL EVAIFRA
CLRC INTM ;开中断
RET
SISR29:
LDP #0E1H
SPLK #0FFFDH,PBDATDIR ;置低IOPB1
CALL DELAY
LDP #GPTCONA >>7h
LACC #0200H ;清下溢中断标志
SACL EVAIFRA
CLRC INTM ;开中断
RET
SISR28:
LDP #0E1H
SPLK #0FFFBH,PBDATDIR ;置低IOPB2
CALL DELAY
LDP #GPTCONA >>7h
LACC #0100H ;清比较中断标志
SACL EVAIFRA
CLRC INTM ;开中断
RET
SISR27:
LDP #0E1H
SPLK #0FFF7H,PBDATDIR ;置低IOPB3
CALL DELAY
LDP #GPTCONA >>7h
LACC #0080H ;清周期中断标志
SACL EVAIFRA
CLRC INTM ;开中断
RET
PHANTOM:
RET
DELAY:
LAR AR0,#0F000H ;延时子程序
D_LOOP:
RPT #05H
NOP
BANZ D_LOOP
RET
.end
评论
查看更多