TMS320LF2407捕获单元CAP实验

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的变化。

5G商用会带来那些方面的影响和工业互联网的应用说明
萤石2016压轴之作 两款指纹锁正式上市
浅谈蓝牙耳机防护方案
2018国际智慧教育展,不出国门看尽全球教育科技爆品!
2020年增强了uCPE的优势,将在2021年开始大规模部
TMS320LF2407捕获单元CAP实验
自制电动滑板diy图解
“Vision”3D打印汽车轮胎:利用生物可降解原料,为自动驾驶汽车研制
诺基亚再次回归!诺基亚9曝光:双曲面屏+蔡司双摄+骁龙835,价格感人
华为2020年Q4手机出货量同比暴降近五成
整流滤波电路图及仿真结果
法国总统预测未来人工智能将危机到法国的民主?
Classic Autosar下的以太网通信架构概览
航顺性价比最高的爆款产品:0.1美金-HK32F030M/0301M家族
Linux牛X简史:Linux是如何开发出来的?
常见的液体冷却方式有哪些 数据中心浸没式液冷技术优势分析
5G赋能的价值逐步显现
获小米追投,“禾赛科技”宣布D轮超过3.7亿美元融资;国内存储芯片崛起,给封装厂商带来重大机会……
模拟开关充当dc/dc转换器
二氧化碳传感器在粮食储存中的应用介绍