TMS320LF2407捕获单元CAP实验

单片机实验

27人已加入

描述

TMS320LF2407捕获单元CAP实验实验目的:

1、掌握TMS320LF2407捕获单元CAP的工作原理

2、掌握TMS320LF2407捕获单元CAP程序设计

TMS320LF2407事件管理器共有6个捕获单元,事件管理器A的捕获单元有CAP1、CAP2、CAP3,事件管理器B的捕获单元有CAP4、CAP5、CAP6,当捕获输入引脚上检测到所选的跳变时,所选的GP定时器的计数值被捕获并存入到一个2级深的FIFO堆栈中,下面的实验程序给出了对6个捕获单元的测试,硬件部分将T1CMP连接到CAP1、CAP2,作为捕获单元1、2的输入,分别捕获上升沿和下降沿。T2CMP至连接到CAP3,作为捕获单元3输入,捕获上升下降沿。同样,T3CMP连接到CAP4、CAP5,作为捕获单元4、5的输入,分别捕获上升沿和下降沿。T4CMP至连接到CAP6,作为捕获单元6输入,捕获上升下降沿。对EVA,正常情况下,在351H,352H,353H(DM)单元内的值分别为5100,5200,5300,错误代码分别为5101H、5102H、5103H。对EVB,正常情况下,在361H,362H,363H(DM)单元内的值分别为6100,6200,6300,错误代码分别为6101H、6102H、6103H。

;=====================================================

;File name :CAP TEST

;======================================================

;两个定时器计数为连续上升(CONTINUOUS-UP)模式

; CAP1检测上升沿(T1 CMP低有效)

; CAP2检测下降沿(T1 CMP低有效)

; CAP3检测上升下降沿(T2 CMP高有效)

;对事件管理器A(EVA)

;CAP1&CAP2 使用定时器1

;CAP3使用定时器2

;对事件管理器B(EVB)

;CAP4&CAP5 使用定时器3

;CAP6使用定时器4

;注意:连接T1CMP至CAP1,2;T2CMP至CAP3输入

;连接T3CMP至CAP4,5;T4CMP至CAP6输入

;外设代码:5(EVA)和6(EVB)

;测试代码:CAP1,2,3,4,5,6-1,2,3,1,2,3(分别对应)

.title "EV capture test"

.include "F2407REGS.H "

.include "vectors.h"

.def _c_int0

DEL .set 0fffh

.text

_c_int0: LDP #0H

SETC INTM ;关中断

SPLK #000H,IMR

LACC IFR ;读中断标志

SACL IFR ;清所有中断标志

LDP #WDKEY>>7H

SPLK 006FH,WDCR ;关看门狗

LDP #SCSR1>>7

SPLK #00CH,SCSR1 ;开EVA&EVB时钟

LDP #EVAIMRA>>7

SPLK #0FFFFH,EVAIFRA ;清所有EVA中断标志

SPLK #0FFFFH,EVAIFRB

SPLK #0FFFFH,EVAIFRC

LDP #EVBIMRA>>7

SPLK #0FFFFH,EVBIFRA ;清所有EVB中断标志

SPLK #0FFFFH,EVBIFRB

SPLK #0FFFFH,EVBIFRC

LAR AR7,#DEL ;装载延时值

MAR *,AR7 ;设当前ARP指针

LDP #0E1H

SPLK #1111111111111111b,MCRA ;开所有EV信号

SPLK #1111111111111111b,MCRC

;===========================================;EVA Capture test

;外设代码:5,测试代码:1,2,3,正常情况下,在351H,352H,353H(DM)单元

;内的值分别为5100,5200,5300

;错误代码:CAP1-5101H, CAP2-5102H, CAP3-5103H

;========================================

LDP #GPTCONA>>7H

SPLK #0000000001001001B,GPTCONA

;0000 0000 0

;1-使能比较输出

;00-保留

;10-T2CMP高有效

;01-T1CMP低有效

SPLK #0000000000000000B,T1CNT;设置计数寄存器

SPLK #0000000000000000B,T2CNT

SPLK #0001011101000010B,T1CON

;000 10 -连续增计数模式

;111 -预分频为128

;1 -定时器1计数使能

;00- 内部时钟

;00- 当计数值是0时重装

;1-使能定时器比较

;0-使用自身的周期寄存器

SPLK #0001011111000011B,T2CON

;TSWT1=1:使用定时器1使能位

;SELT1PR=1:使用定时器1周期寄存器

SPLK #1111111111111111B,T1PR

SPLK #0011111100000000B,T1CMPR

SPLK #0011111100000000B,T2CMPR

SPLK #0000000000000000B,EVAIMRA ;关A、B中断

SPLK #0000000000000000B,EVAIMRB

;装载捕获寄存器

SPLK #0011001001101100B,CAPCONA

;0- 清捕获寄存器

;01- 使能捕获单元1和2

;1- 使能捕获单元3

;0- 保留

;0-选择定时器2(CAP3)

;1-选择定时器1(CAP1、2)

;0-无操作

;01-检测上升沿(CAP1)

;10-检测下降沿(CAP2)

;11-检测两个边沿(CAP3)

;00-保留

SPLK #0000000000000111B,EVAIMRC

;0000 0000 0000 0

;111-使能捕获单元CAP1、CAP2、CAP3中断

LDP #6H ;写错误码

SPLK #5101H,51H ;如测试通过错误码将被覆盖

SPLK #5201H,52H

SPLK #5301H,53H

LDP #0H

SPLK #0000000000001000B,IMR ;使能中断4

CLRC INTM ;开中断

CALL CAPDLY

;===========================================

;EVB Capture test

;外设代码:6,测试代码:1,2,3,正常情况下,在361H,362H,363H(DM)单元

;内的值分别为;100,6200,6300

;错误代码:CAP1-6101H, CAP2-6102H, CAP3-6103H

;==========================================

SETC INTM

LDP #GPTCONB>>7H

SPLK #0000000001001001B,GPTCONB

;0000 0000 0

;1-使能比较输出

;00-保留

;10-T2CMP高有效

;01-T1CMP低有效

SPLK #0000000000000000B,T3CNT;设置计数寄存器

SPLK #0000000000000000B,T4CNT

SPLK #0001011101000010B,T3CON

;000 10 -连续增计数模式

;111 -预分频为128

;1 -定时器3计数使能

;00- 内部时钟

;00- 当计数值是0时重装

;1-使能定时器比较

;0-使用自身的周期寄存器

SPLK #0001011111000011B,T4CON

;TSWT3=1:使用定时器3使能位

;SELT3PR=1:使用定时器3周期寄存器

SPLK #1111111111111111B,T3PR

SPLK #0011111100000000B,T3CMPR

SPLK #0011111100000000B,T4CMPR

SPLK #0000000000000000B,EVBIMRA ;关A、B中断

SPLK #0000000000000000B,EVBIMRB

SPLK #0011001001101100B,CAPCONB

;0- 清捕获寄存器

;01- 使能捕获单元4和5

;1- 使能捕获单元6

;0- 保留

;0-选择定时器4(CAP6)

;1-选择定时器3(CAP4、5)

;0-无操作

;01-检测上升沿(CAP4)

;10-检测下降沿(CAP5)

;11-检测两个边沿(CAP6)

;00-保留

SPLK #0000000000000111B,EVBIMRC

;0000 0000 0000 0

;111-使能捕获单元CAP4、CAP5、CAP6中断

LDP #6H ;写错误码

SPLK #6101H,61H ;如测试通过错误码将被覆盖

SPLK #6201H,62H

SPLK #6301H,63H

CLRC INTM ;开中断

CALL CAPDLY

;===================================

;退出测试程序

;======================================

LDP #0h

SPLK #0H,IMR ;关中断

LACC IFR ;读中断标志

SACL IFR ;清所有中断标志

SETC INTM

LDP #EVAIMRA>>7

SPLK #0H,EVAIMRA ;禁止所有EVA中断

SPLK #0H,EVAIMRB

SPLK #0H,EVAIMRC

SPLK #0FFFFH,EVAIFRA ;清所有EVA中断标志

SPLK #0FFFFH,EVAIFRB

SPLK #0FFFFH,EVAIFRC

LDP #EVBIMRA>>7

SPLK #0H,EVBIMRA ;禁止所有EVB中断

SPLK #0H,EVBIMRB

SPLK #0H,EVBIMRC

SPLK #0FFFFH,EVBIFRA ;清所有EVB中断标志

SPLK #0FFFFH,EVBIFRB

SPLK #0FFFFH,EVBIFRC

LDP #SCSR1>>7

SPLK #0000H,SCSR1 ;关EVA&EVB时钟

LDP #GPTCONA>>7

SPLK #0H,T1CON

SPLK #0H,T2CON

LDP #GPTCONB>>7

SPLK #0H,T3CON

SPLK #0H,T4CON

DONE: B DONE ;测试结束

;====================================

;中断服务子程序

;==========================================

GISR4: ;INT4 中断服务子程序

NOP

LDP #PIVR>>7H

LACL PIVR ;装载中断向量值

XOR #033H

BCND SISR33,EQ ;CAP1中断

LACL PIVR

XOR #034H

BCND SISR34,EQ ;CAP2中断

LACL PIVR

XOR #035H

BCND SISR35,EQ ;CAP3中断

LACL PIVR

XOR #036H

BCND SISR36,EQ ;CAP4中断

LACL PIVR

XOR #037H

BCND SISR37,EQ ;CAP5中断

LACL PIVR

XOR #038H

BCND SISR38,EQ ;CAP6中断

RET

SISR33: ;CAP1 SISR

LDP #GPTCONA>>7H

SPLK #01H,EVAIFRC ;清CAP1中断标志

LDP #0H

BLDD #CAP1FIFO,70H

BLDD #CAP1FIFO,71H

LACL 70H ;检查FIFO的值

XOR #0H

BCND CAP1FAIL,NEQ

LACL 71H

XOR #0H

BCND CAP1PASS,EQ

CAP1FAIL: ;CAP1错误报告

LDP #6H

SPLK #5101H,51H

B END_INT

CAP1PASS:

LDP #6H

SPLK #5100H,51H

END_INT: CLRC INTM

RET

SISR34: ;CAP2 SISR

LDP #GPTCONA>>7H

SPLK #02H,EVAIFRC ;清CAP2中断标志

LDP #0H

BLDD #CAP2FIFO,72H

BLDD #CAP2FIFO,73H

LACL 72H ;检查FIFO的值

XOR #3F00H

BCND CAP2FAIL,NEQ

LACL 73H

XOR #3F00H

BCND CAP2PASS,EQ

CAP2FAIL: ;CAP2错误报告

LDP #6H

SPLK #5201H,52H

B END_INT

CAP2PASS:

LDP #6H

SPLK #5200H,52H

CLRC INTM

RET

SISR35: ;CAP3 SISR

LDP #GPTCONA>>7H

SPLK #04H,EVAIFRC ;清CAP3中断标志

LDP #0H

BLDD #CAP3FIFO,74H

BLDD #CAP3FIFO,75H

LACL 74H ;检查FIFO的值

XOR #0H

BCND CAP3FAIL,NEQ

LACL 75H

XOR #3F00H

BCND CAP3PASS,EQ

CAP3FAIL: ;CAP3错误报告

LDP #6H

SPLK #5301H,53H

B END_INT

CAP3PASS:

LDP #6H

SPLK #5300H,53H

CLRC INTM

RET

SISR36: ;CAP4 SISR

LDP #GPTCONB>>7H

SPLK #01H,EVBIFRC ;清CAP4中断标志

LDP #0H

BLDD #CAP4FIFO,76H

BLDD #CAP4FIFO,77H

LACL 76H ;检查FIFO的值

XOR #0H

BCND CAP4FAIL,NEQ

LACL 77H

XOR #0H

BCND CAP4PASS,EQ

CAP4FAIL: ;CAP4错误报告

LDP #6H

SPLK #6101H,61H

B END_INT

CAP4PASS:

LDP #6H

SPLK #6100H,61H

CLRC INTM

RET

SISR37: ;CAP5 SISR

LDP #GPTCONB>>7H

SPLK #02H,EVBIFRC ;清CAP5中断标志

LDP #0H

BLDD #CAP5FIFO,78H

BLDD #CAP5FIFO,79H

LACL 78H ;检查FIFO的值

XOR #3F00H

BCND CAP5FAIL,NEQ

LACL 79H

XOR #3F00H

BCND CAP5PASS,EQ

CAP5FAIL: ;CAP5错误报告

LDP #6H

SPLK #6201H,62H

B END_INT

CAP5PASS:

LDP #6H

SPLK #6200H,62H

CLRC INTM

RET

SISR38: ;CAP6 SISR

LDP #GPTCONB>>7H

SPLK #04H,EVBIFRC ;清CAP6中断标志

LDP #0H

BLDD #CAP6FIFO,7AH

BLDD #CAP6FIFO,7BH

LACL 7AH ;检查FIFO的值

XOR #0H

BCND CAP6FAIL,NEQ

LACL 7BH

XOR #3F00H

BCND CAP6PASS,EQ

CAP6FAIL: ;CAP6错误报告

LDP #6H

SPLK #6301H,63H

B END_INT

CAP6PASS:

LDP #6H

SPLK #6300H,63H

CLRC INTM

RET

;====================================

;延时子程序

;==========================================

CAPDLY:

MAR *,AR0

LAR AR0,#0FFFFH

CAPDLP2:

RPT #0FFH

NOP

BANZ CAPDLP2

RET

PHANTOM: RET

.end

实验步骤:

1、 硬件部分将T1CMP连接到CAP1、CAP2,作为捕获单元1、2的输入,T2CMP至连接到CAP3,作为捕获单元3输入。同样,T3CMP连接到CAP4、CAP5,作为捕获单元4、5的输入,T4CMP至连接到CAP6,作为捕获单元6输入。

2、 将生成的*.OUT文件装载到CC,分别在GISR4及SISR33、SISR34、SISR35、SISR36、SISR37、SISR38中断服务子程序中设置断点,可改变比较寄存器的值,观察FIFO的变化。

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

全部0条评论

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

×
20
完善资料,
赚取积分