📄 data_log2.asm
字号:
;=====================================================================================
; File name: DATA_LOG2.ASM
;
; Originator: Digital Control Systems Group
; Texas Instruments
;
; Description:
; Data logging for two graph displays in code composer
;=====================================================================================
; History:
;-------------------------------------------------------------------------------------
; 9-15-2000 Release Rev 1.0
;================================================================================
; Applicability: F240,F241,C242,F243,F24xx. (Peripheral Independent).
;================================================================================
; Routine Name: data_log_update Type: C Callable
;
; C prototype : void data_log_update(struct DATALOG *p);
;
; The struct object is defined in the header file "data_log.h" as follows:
;
; typedef struct { int *dlog_iptr1; /* Input: First input pointer (Q15) */
; int *dlog_iptr2; /* Input: Second input pointer (Q15) */
; int trig_value; /* Input: Trigger point (Q15) */
; int graph_ptr1; /* Variable: First graph address pointer */
; int graph_ptr2; /* Variable: Second graph address pointer */
; int dlog_skip_cntr; /* Variable: Data log skip counter */
; int dlog_cntr; /* Variable: Data log counter */
; int task_ptr; /* Variable: Task address pointer */
; int dlog_prescale; /* Parameter: Data log prescale */
; int dlog_cntr_max; /* Parameter: Maximum data buffer */
; int dl_buffer1_adr; /* Parameter: Buffer starting address 1 */
; int dl_buffer2_adr; /* Parameter: Buffer starting address 2 */
; int (*init)(); /* Pointer to init function */
; int (*update)(); /* Pointer to update function */
; } DATALOG;
;
;
; Frame Usage Details:
; step | a | b | c | d |
;____________|___________|___________|_________|_________|
; AR0 |dlog_iptr1 | | | |
;
; NOTE: The AR0 here is keeping the pointer dlog_iptr1 rather than the
; frame pointer address, FR0, as usual.
;================================================================================
.def _data_log_update
;================================================================================
__data_log_update_framesize .set 0000h
;================================================================================
_data_log_update:
; Assume now ARP=AR1
POPD *+ ; Keep return address
SAR AR0,*+ ; Keep old frame pointer (FP)
SAR AR1,* ; Keep old stack pointer (SP)
LARK AR0,__data_log_update_framesize ; Load AR0 with frame size
LAR AR0,*0+,AR0 ; AR0->FP0 (new FP), ARP=AR0
;================================================================================
SBRK #3 ; ARP=AR0, AR0->FR0-3 (1st argument)
;----------------------------------------------------------------------------------
LAR AR2,* ; ARP=AR0, AR0->dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
ADRK #3 ; ARP=AR0, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
SETC SXM ; Turn sign extension mode on
; ARP=AR0, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
SETC OVM ; Set overflow mode
; ARP=AR0, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
SPM 0 ; Reset product mode
; ARP=AR0, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
MAR *,AR2 ; ARP=AR2, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
LAR AR0,* ; ARP=AR2, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
ADRK #7 ; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
LACC * ; ACC = task_ptr
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
BACC ; PC = ACC
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
POS_TRIG_S1: ; Positive trigger, detect Negative signal
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
SBRK #7 ; ARP=AR2, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
MAR *,AR0 ; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
LACC *,1,AR2 ; ACC = *dlog_iptr1
; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1, ARP=AR2
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value
;----------------------------------------------------------------------------------
SUB *,1 ; ACC = *dlog_iptr1 - trig_value
; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value
;----------------------------------------------------------------------------------
ADRK #5 ; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
BCND DL_EXIT, GEQ ; Branch to DL_EXIT if ACC >= 0
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
SPLK #POS_TRIG_S2,* ; task_ptr = #POS_TRIG_S2
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
B DL_EXIT ; Branch to DL_EXIT
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
POS_TRIG_S2: ; Positive trigger, detect Positive signal
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
SBRK #7 ; ARP=AR2, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
MAR *,AR0 ; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
LACC *,1,AR2 ; ACC = *dlog_iptr1
; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1, ARP=AR2
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value
;----------------------------------------------------------------------------------
SUB *,1 ; ACC = *dlog_iptr1 - trig_value
; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value
;----------------------------------------------------------------------------------
ADRK #5 ; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
BCND PTS2_1,LT ; Branch to PTS2_1 if ACC < 0
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
SPLK #DL_TRIGGERED,* ; task_ptr = #DL_TRIGGERED
; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
B DL_EXIT ; Branch to DL_EXIT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -