📄 cap_drv.asm
字号:
;===========================================================================
; 文件名: Cap_drv.asm
;
; 模块名: CAP_EVENT_DRV
;
; 初始化程序: CAP_EVENT_DRV_INIT
;
; 公司: 达盛科技
;
; 功能描述: 获得在捕获事件发生时基于预设时基的通用定时计数器的瞬时计数值。
; 捕获事件可以是任意发生在 24x/24xx器件捕获输入管脚上的制定跳变。
;
; |~~~~~~~~~~~~~~~|
; CAPn (EV H/W pin) o---->| |----->o FIFOn
; |CAP_EVENT_DRV |
; | |
; |---------------|
;
;
; 目标cpu: x240/243/2407
; 选择目标器件和捕获输入引脚可参阅 x24x_app.h文件中的设置.
;=====================================================================================
; 修改记录:
;-------------------------------------------------------------------------------------
; 2005.08.23 版本号 Ver 1.0
;===========================================================================
;(To use this Module, copy this section to main system file)
; .ref CAP_EVENT_DRV, CAP_EVENT_DRV_INIT ;function call
; .ref CAP_EVENT_DRV_CLKPS_INIT ;function call
; .ref CLK_prescaler_bits ;Parameter
;===========================================================================
;外部变量声明
.def CAP_EVENT_DRV, CAP_EVENT_DRV_INIT ;函数调用
.def CAP_EVENT_DRV_CLKPS_INIT ;函数调用
.def CLK_prescaler_bits ;参数
;===========================================================================
.include x24x_app.h
.bss CLK_prescaler_bits, 1
;选择捕获输入
CAP1 .set 1
CAP2 .set 0
CAP3 .set 0
CAP4 .set 0
;===========================================================================
CAP_EVENT_DRV_INIT:
;===========================================================================
;---引脚设置目标板选择--------
POINT_PF2
.if (x240)
;选择 x240 引脚捕获功能
.if (CAP4)
LACC OCRB
OR #00010000000b ;设置CAP4捕获功能.
SACL OCRB
.endif
.if (CAP3)
LACC OCRB
OR #01000000b ;设置CAP3捕获功能.
SACL OCRB
.endif
.if (CAP2)
LACC OCRB
OR #00100000b ;设置CAP2捕获功能.
SACL OCRB
.endif
.if (CAP1)
LACC OCRB
OR #00010000b ;设置CAP1捕获功能.
SACL OCRB
.endif
.endif
;------------------------------------------------------------------------
.if (x243)
;选择 x243 引脚捕获功能
.if (CAP3)
LACC OCRA
OR #00100000b
SACL OCRA ;设置CAP3捕获功能.
.endif
.if (CAP2)
LACC OCRA
OR #00010000b
SACL OCRA ;设置CAP2捕获功能.
.endif
.if (CAP1)
LACC OCRA
OR #00001000b
SACL OCRA ;设置CAP1捕获功能.
.endif
.endif
;-------------------------------------------------------------------------
.if (x2407)
;选择 x2407 引脚捕获功能
.if (CAP3)
LACC MCRA
OR #00100000b
SACL MCRA ;设置CAP3捕获功能.
.endif
.if (CAP2)
LACC MCRA
OR #00010000b
SACL MCRA ;设置CAP2捕获功能.
.endif
.if (CAP1)
LACC MCRA
OR #0001000b
SACL MCRA ;设置CAP1捕获功能.
.endif
.endif
;----------------------------------------------------------------------------
;---时基设置目标板选择--------------------------------------------------------
.if (x240 | x243)
;Use Timer T2 as time base with default clock prescaler
POINT_B0
SPLK #2, CLK_prescaler_bits ;Default prescaler set to x/4
CLRC SXM
LACC CLK_prescaler_bits,8
AND #0700h
; 5432109876543210 ;寄存器位号
; ||||!!!!||||!!!!
OR #1001000001000010b
POINT_EV
SACL T2CON ;Cont Up mode
SPLK #0FFFFh, T2PER
; 设置捕获寄存器.[使能 CAP1, CAP2, CAP3, CAP4 捕获功能]
.if (CAP1 | CAP2)
; 5432109876543210
; ||||!!!!||||!!!!
SPLK #1010000001010000b,CAPCON ;CAP1/2 En, TMR2, +ve edge
.endif
.if (CAP3)
; 5432109876543210
; ||||!!!!||||!!!!
SPLK #1001000000000100b,CAPCON ;CAP3 En, TMR2, +ve edge
.endif
.if (CAP4)
; 5432109876543210
; ||||!!!!||||!!!!
SPLK #1000100000000001b,CAPCON ;CAP4 En, TMR2, +ve edge
.endif
.endif
;----------------------------------------------------------------------------
;---target dependancy--------------------------------------------------------
.if (x2407)
;Use Timer T2 as time base with default clock prescaler
POINT_B0
SPLK #2, CLK_prescaler_bits ;Default prescaler set to x/4
CLRC SXM
LACC CLK_prescaler_bits,8
AND #0700h
; 5432109876543210
; ||||!!!!||||!!!!
OR #1001000001000010b
POINT_EV
SACL T2CON ;Cont Up mode
SPLK #0FFFFh, T2PER
; 设置捕获寄存器[使能 CAP1, CAP2, CAP3]
; 捕获通道选择
.if (CAP1 | CAP2)
; 5432109876543210
; ||||!!!!||||!!!!
SPLK #1010000001010000b,CAPCONA ;CAP1/2 En, TMR2, +ve edge
.endif
.if (CAP3)
; 5432109876543210
; ||||!!!!||||!!!!
SPLK #1001000000000100b,CAPCONA ;CAP3 En, TMR2, +ve edge
.endif
.endif
RET
;============================================================================
CAP_EVENT_DRV_CLKPS_INIT:
;============================================================================
;---目标板选择--------------------------------------------------------
.if (x240 | x243)
;Use Timer T2 as time base with selectable clock prescaler
POINT_B0
CLRC SXM
LACC CLK_prescaler_bits,8 ;Input user selected prescaler
AND #0700h
; 5432109876543210
; ||||!!!!||||!!!!
OR #1001000001000010b
POINT_EV
SACL T2CON ;Cont Up mode
.endif
;---target dependancy--------------------------------------------------------
.if (x2407)
;Use Timer T2 as time base with selectable clock prescaler
POINT_B0
CLRC SXM
LACC CLK_prescaler_bits,8 ;Input user selected prescaler
AND #0700h
; 5432109876543210
; ||||!!!!||||!!!!
OR #1001000001000010b
POINT_EV
SACL T2CON ;Cont Up mode
.endif
RET
;===========================================================================
CAP_EVENT_DRV
;===========================================================================
;这里无需执行软件代码。
;硬件功能在初始化中已经被设置完成。
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -