TMS320LF2407捕獲單元CAP實驗實驗目的:
1、掌握TMS320LF2407捕獲單元CAP的工作原理
2、掌握TMS320LF2407捕獲單元CAP程序設計
TMS320LF2407事件管理器共有6個捕獲單元,事件管理器A的捕獲單元有CAP1、CAP2、CAP3,事件管理器B的捕獲單元有CAP4、CAP5、CAP6,當捕獲輸入引腳上檢測到所選的跳變時,所選的GP定時器的計數(shù)值被捕獲并存入到一個2級深的FIFO堆棧中,下面的實驗程序給出了對6個捕獲單元的測試,硬件部分將T1CMP連接到CAP1、CAP2,作為捕獲單元1、2的輸入,分別捕獲上升沿和下降沿。T2CMP至連接到CAP3,作為捕獲單元3輸入,捕獲上升下降沿。同樣,T3CMP連接到CAP4、CAP5,作為捕獲單元4、5的輸入,分別捕獲上升沿和下降沿。T4CMP至連接到CAP6,作為捕獲單元6輸入,捕獲上升下降沿。對EVA,正常情況下,在351H,352H,353H(DM)單元內(nèi)的值分別為5100,5200,5300,錯誤代碼分別為5101H、5102H、5103H。對EVB,正常情況下,在361H,362H,363H(DM)單元內(nèi)的值分別為6100,6200,6300,錯誤代碼分別為6101H、6102H、6103H。
;=====================================================
;File name :CAP TEST
;======================================================
;兩個定時器計數(shù)為連續(xù)上升(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
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)單元
;內(nèi)的值分別為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;設置計數(shù)寄存器
SPLK #0000000000000000B,T2CNT
SPLK #0001011101000010B,T1CON
;000 10 -連續(xù)增計數(shù)模式
;111 -預分頻為128
;1 -定時器1計數(shù)使能
;00- 內(nèi)部時鐘
;00- 當計數(shù)值是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)單元
;內(nèi)的值分別為;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;設置計數(shù)寄存器
SPLK #0000000000000000B,T4CNT
SPLK #0001011101000010B,T3CON
;000 10 -連續(xù)增計數(shù)模式
;111 -預分頻為128
;1 -定時器3計數(shù)使能
;00- 內(nèi)部時鐘
;00- 當計數(shù)值是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
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的變化。
評論