单片机实验
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的变化。
全部0条评论
快来发表一下你的评论吧 !