TMS320LF2407事件管理器定时器1中断系统实验

单片机实验

28人已加入

描述

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 —

  .title "ev test routine"

  .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 #0004H,SCSR1 ;使能EVA模块时钟

  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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • 热点推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分