第7章 TMS320LF2407事件管理器模块

更新时间:2023-08-20 03:59:01 阅读量: 高等教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第7章事件管理器模块(EV)

例给出了通用定时器1在连续增计数模式下的初始化例程。

例连续增计数模式的初始化例程

LDP #DP_EVA ;指向7400h~7480h单元

SPLK #41H,GPTCONA ;TCOMPOE=1 允许定时器比较输出

SPLK #5H,T1PR ;设置周期寄存器

SPLK #3H,T1CMPR ;设置比较寄存器

SPLK #0H,T1CNT ;设置计数寄存器

SPLK #0174EH,T1CON ;TMODE=10 连续增计数模式,TPS=111 预分频为128

;TENABLE=1 定时器计数使能,TCLKS=00 内部时钟

;TECMPR=1 定时器1比较使能,SELT1PR=0

3 定向增/减计数模式

例定向增/减计数模式的初始化例程

LDP #DP_EVA ;指向7400h~7480h单元

SPLK #41H,GPTCONA ;TCOMPOE=1 允许定时器比较输出

SPLK #5H,T1PR ;设置周期寄存器

SPLK #3H,T1CMPR ;设置比较寄存器

SPLK #0H,T1CNT ;设置计数寄存器

SPLK #01F4EH,T1CON ;TMODE=11 定向增/减计数模式,TPS=111

;预分频为128

;TENABLE=1 定时器计数使能,TCLKS=0 内部时钟

;TECMPR=1 定时器1比较使能,SELT1PR=0

4 连续增/减计数模式

例连续增/减计数模式的初始化例程

LDP #DP_EVA ;指向7400h~7480h单元

SPLK #41H,GPTCONA ;TCOMPOE=1 允许定时器比较输出

SPLK #5H,T1PR ;设置周期寄存器

SPLK #3H,T1CMPR ;设置比较寄存器

SPLK #0H,T1CNT ;设置计数寄存器

SPLK #0F4EH,T1CON ;TMODE=01 连续增/减计数模式,TPS=111

;预分频为128

;TENABLE=1 定时器计数使能,TCLKS=00 内部时钟

;TECMPR=1 定时器1比较使能,SELT1PR=0

通用定时器的中断实现

.include "" ;引用头部文件

.def _c_int0

(1)建立中断向量表

.sect ".vectors" ;定义主向量段

RSVECT B _c_int0 ;PM 0 复位向量1 INT1 B PHANTOM ;PM 2 中断优先级1 4

INT2 B GISR2 ;PM 4 中断优先级2 5 INT3 B PHANTOM ;PM 6 中断优先级3 6

INT4 B PHANTOM ;PM 8 中断优先级4 7

INT5 B PHANTOM ;PM A 中断优先级5 8

INT6 B PHANTOM ;PM C 中断优先级6 9 RESERVED B PHANTOM ;PM E 模拟量输入中断(保留) 10

SW_INT8 B PHANTOM ;PM 10 用户定义软件中断—

SW_INT31 B PHANTOM ;PM 3E 用户定义软件中断—

;中断子向量入口定义pvecs

.sect ".pvecs" ;定义子向量段

PVECTORS B PHANTOM ;保留向量地址偏移量-0000h

B PHANTOM ;保留向量地址偏移量-0001h

B PHANTOM ;保留向量地址偏移量-0026h

B T1PINT_ISR ;保留向量地址偏移量-0027h T1PINT中断

B PHANTOM ;保留向量地址偏移量-0028h

B PHANTOM ;保留向量地址偏移量-0041h

(2)主程序

.text

_c_int0

SETC INTM

CLRC SXM

CLRC OVM

CLRC CNF ;B0区被配置为数据空间

LDP #0E0H ;指向7000h~7080h区

SPLK #81FEH,SCSR1 ;时钟4倍频,CLKIN=6 M,CLKOUT=24 M

SPLK #0E8H,WDCR ;不使能WDT

LDP #0

SPLK #02H,IMR ;使能中断优先级INT2

SPLK #0FFFFh,IFR ;清中断标志

LDP #DP_EVA ;指向7400h~7480h区

SPLK #80H,EVAIMRA ;使能T1PINT 中断

SPLK #0FFFFh,EVAIFRA ;清EVA中断标志

SPLK #0,GPTCONA

SPLK #177H,T1PR ;使定时器每1ms产生一次中断

SPLK #0,T1CNT

SPLK #0164CH,T1CON ;TMODE=10 连续增计数模式,TPS=110 预分频为64

;TENABLE=1 定时器计数使能, TCLKS=00

;内部时钟

;TECMPR=1 定时器1比较使能, SELT1PR=0 CLRC INTM ;开总中断

WAIT:NOP

B WAIT

(3)中断程序

GISR2:;优先级INT2中断入口

保护现场

LDP #0E0H

LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位

ADD #PVECTORS ;加上外设中断入口地址

BACC ;跳到相应的中断服务子程序

T1PINT_ISR:;通用定时器1中断入口

LDP #DP_EVA

SPLK #0,T1CNT

GISR2_RET:;中断返回

恢复现场

CLRC INTM ;开总中断,因为一进中断就自动关闭总中断

RET

(3)假中断程序

PHANTOM

KICK_DOG ;复位看门狗

RET

END

PWM波形产生举例

.include "" ;引用头部文件

.def _c_int0

;(1)建立中断向量表

.sect ".vectors" ;定义主向量段

RSVECT B _c_int0 ;PM 0 复位向量 1

INT1 B PHANTOM ;PM 2 中断优先级1 4

INT2 B GISR2 ;PM 4 中断优先级2 5

INT3 B PHANTOM ;PM 6 中断优先级3 6

INT4 B PHANTOM ;PM 8 中断优先级4 7

INT5 B PHANTOM ;PM A 中断优先级 5 8

INT6 B PHANTOM ;PM C 中断优先级 6 9

RESERVED B PHANTOM ;PM E (保留位) 10

SW_INT8 B PHANTOM ;PM 10 用户定义软件中断—

SW_INT31 B PHANTOM ;PM 3E 用户定义软件中断—

;中断子向量入口定义pvecs

.sect ".pvecs" ;定义子向量段

PVECTORS B PHANTOM ;保留向量地址偏移量–0000h

B PHANTOM ;保留向量地址偏移量–0001h

B PHANTOM ;保留向量地址偏移量 -002Eh

B T3GP_ISR ;保留向量地址偏移量 -002Fh T3PINT中断

B PHANTOM ;保留向量地址偏移量–0030h

B PHANTOM ;保留向量地址偏移量–0041h

;(2)主程序

.text

_c_int0

CALL SYSINIT ;系统初始化程序

CALL PWM_INIT ;EVB模块PWM初始化程序

WAIT

NOP

B WAIT

;(3)系统初始化程序

SYSINIT:

SETC I NTM

CLRC S XM

CLRC OVM

CLRC CNF ;B0区被配置为数据空间

LDP #0E0H ;指向7000h~7080h区

SPLK #81FEH,SCSR1 ;时钟4倍频,CLKIN=6 M,CLKOUT=24 M

SPLK #0E8H,WDCR ;不使能WDT

LDP #0

SPLK #0002H,IMR ;使能中断第2级INT2

SPLK #0FFFFH,IFR ;清全部中断标志

RET

;(4)EVB模块的PWM初始化程序

PWM_INIT:

LDP #DP_PF2 ;指向7080h~7100h区

LACL MCRC

OR #007EH ;IOPE[1~6]被配置为基本功能方式:PWM[7~12]

SACL MCRC

LDP #DP_EVB ;指向7500h~7580h区

SPLK #0FFFFH,EVBIFRA ;清EVB 全部中断标志

SPLK #0666H,ACTRB ;PWM12,10,8 低有效,PWM11,9,7 高有效

SPLK #00H,DBTCONB ;不使能死区控制

SPLK #10H,CMPR4 ;设置比较初值 PWM7高电平占50/60,

;低电平占10/60

SPLK #20H,CMPR5 ;设置PWM9,10的比较寄存器

SPLK #30H,CMPR6 ;设置PWM11,12的比较寄存器

SPLK #60H,T3PR ;设置定时器3周期寄存器,

;即PWM周期为60个CPU时钟周期

SPLK #0A600H,COMCONB ;使能比较操作

SPLK #0,T3CNT

SPLK #41H,GPTCONB ;TCOMPOE=1,T3PIN=01

SPLK #080H,EVBIMRA ;通用定时器3使能

SPLK #0174EH,T3CON ;TMODE=10 连续增计数模式,TPS=111 预分频为128

;TENABLE=1 定时器计数使能, TCLKS=00

;内部时钟

;TECMPR=1 定时器3比较使能, SELT3PR=0 CLRC INTM ;开总中断

RET

;(5)定时器3中断程序

GISR2:;优先级INT2中断入口

保护现场

LDP #0E0H

LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位

ADD #PVECTORS ;加上外设中断入口地址

BACC ;跳到相应的中断服务子程序

T3GP_ISR:;通用定时器3中断入口

LDP #DP_EVB

SPLK #0,T3CNT

GISR2_RET:;中断返回

恢复现场

CLRC INTM ;开总中断,因为一进中断就自动关闭总中断

RET

;(6)假中断程序

PHANTOM

KICK_DOG ;复位看门狗

RET

END

捕获单元应用举例

CAP4TEMP .usect ".data0",1 ;CAP4 临时寄存器

.include "" ;引用头部文件

.def _c_int0

;(1)建立中断向量表

.sect ".vectors" ;定义主向量段

RSVECT B _c_int0 ;PM 0 复位向量 1

INT1 B PHANTOM ;PM 2 中断优先级 1 4

INT2 B PHANTOM ;PM 4 中断优先级2 5

INT3 B PHANTOM ;PM 6 中断优先级 3 6

INT4 B GISR4 ;PM 8 中断优先级4 7

INT5 B PHANTOM ;PM A 中断优先级 5 8

INT6 B PHANTOM ;PM C 中断优先级 6 9 RESERVED B PHANTOM ;PM E (保留位) 10

SW_INT8 B PHANTOM ;PM 10 用户定义软件中断—

SW_INT31 B PHANTOM ;PM 3E 用户定义软件中断—

;中断子向量入口定义pvecs

.sect ".pvecs" ;定义子向量段

PVECTORS B PHANTOM ;保留向量地址偏移量-0000h

B PHANTOM ;保留向量地址偏移量-0001h

B PHANTOM ;保留向量地址偏移量-0035h

B CAP4_ISR ;保留向量地址偏移量-0036h CAP4中断

B PHANTOM ;保留向量地址偏移量-0037h

B PHANTOM ;保留向量地址偏移量-0041h

;(2)主程序

.text

_c_int0

LDP #5

SPLK #00H,CAP4TEMP

CALL SYSINIT

CALL CAP_INIT ;调CAP4初始化程序

WAIT

NOP

B LOOP

;(3)系统初始化程序

SYSINIT:

SETC I NTM

CLRC S XM

CLRC OVM

CLRC CNF ;B0区被配置为数据空间

LDP #0E0H ;指向7000h~7080h区

SPLK #81FEH,SCSR1 ;时钟4倍频,CLKIN=6 M,CLKOUT=24 M SPLK #0E8H,WDCR ;不使能WDT

LDP #0

SPLK #0008H,IMR ;使能中断第4级INT4

SPLK #0FFFFH,IFR ;清全部中断标志

RET

;(4)捕获单元初始化程序

CAP_INIT:

LDP #DP_PF2 ;指向7090h~7100h

LACL MCRC

OR #0380H ;IOPE7, IOPF0, IOPF1 被配置为

;特殊功能方式:CAP[4~6]

SACL MCRC

SETC INTM

LDP #DP_EVB

SPLK #049H,GPTCONB ;TCOMPOE=1,T4PIN=10,T3PIN=01

SPLK #0,T3CNT

SPLK #01742H,T3CON ;TMODE=10 连续向上计数模式,TPS=111

;预分频为128

;TENABLE=1 定时器计数使能, TCLKS=00

;内部时钟

;TCLD=00, TECMPR=1 定时器3比较

;使能, SELT3PR=0

SPLK #0FFFFH,T3PR ;定时器周期比较寄存器设为最大

SPLK #00H,EVBIMRA

SPLK #00H,EVBIMRB

SPLK #22C0H,CAPCONB ;CAP4 捕获允许,捕获上升沿

SPLK #01H,EVBIMRC ;CAP4 中断使能

SPLK #0FFFFh,EVBIFRA ;清 EVB 全部中断标志

SPLK #0FFFFh,EVBIFRB

SPLK #0FFFFh,EVBIFRC

CLRC INTM ;开总中断

RET

;(5)中断程序程序

GISR4:;优先级INT4中断人口

;保护现场

LDP #0E0H

LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位

ADD #PVECTORS ;加上外设中断人口地址

BACC ;跳到相应的中断服务子程序

CAP4_ISR:;捕获单元4中断程序入口

LDP #DP_EVB

LACL CAP4FIFO

LDP #5

SACL CAP4TEMP ;读出捕获的值

LDP #DP_EVB

SPLK #0,T3CNT ;清 T3 计数值,使其重新计数

GISR2_RET:;中断返回

恢复现场

CLRC INTM ;开总中断,因为一进中断就自动关闭总中断

RET

;(6)假中断程序

PHANTOM

KICK_DOG ;复位看门狗

RET

END

本文来源:https://www.bwwdw.com/article/u86j.html

Top