📄 linkdmai.asm
字号:
/*_______________________________________________________________
ADSP-2106x DMA-Driven LINK Loopback Example
This example shows an internally looped-back link port transfer.
Two DMA channels are used. Link buffer 3 (LBUF3) and corresponding
DMA channel 5 is used for transmit. Link buffer 2 (LBUF2) and
corresponding DMA channel 5 is used for receive. The LBUF2 interrupt
will occur when the DMA transfer is complete. Loopback is achieved
by assigning the transmit and receive link buffers to the
same port (Port 0).
_______________________________________________________________*/
#define N 8
#include "def21060.h"
.section/dm seg_dmda; /* Data segment name described in arch. file.*/
.var source[N] = 0x11111111, 0x22222222, 0x33333333, 0x44444444,
0x55555555, 0x66666666, 0x77777777, 0x88888888;
.var destination[N];
/* Interrupt Vector Table */
.SECTION/PM seg_rth;
/* The reset vector resides in this space */
NOP;NOP;NOP;NOP; /* Reserved interrupt */
___lib_RSTI: IDLE; /* Implicit IDLE instruction */
JUMP start (DB); /* Begin loader */
NOP; /* Pad to next interrupt */
NOP; /* Pad to next interrupt */
NOP;NOP;NOP;NOP; /* Reserved interrupt */
/* Vector for status stack/loop stack overflow or PC stack full: */
___lib_SOVFI: RTI;RTI;RTI;RTI;
/* Vector for high priority timer interrupt: */
___lib_TMZHI: bit tgl astat ASTAT_FLG0;
RTI;RTI;RTI;
/* Vectors for external interrupts: */
___lib_VIRPTI: RTI;RTI;RTI;RTI;
___lib_IRQ2I: RTI;RTI;RTI;RTI;
___lib_IRQ1I: RTI;RTI;RTI;RTI;
___lib_IRQ0I: RTI;RTI;RTI;RTI;
NOP;NOP;NOP;NOP; /* Reserved interrupt */
/* Vectors for Serial port DMA channels: */
___lib_SPR0I: RTI;RTI;RTI;RTI;
___lib_SPR1I: RTI;RTI;RTI;RTI;
___lib_SPT0I: RTI;RTI;RTI;RTI;
___lib_SPT1I: RTI;RTI;RTI;RTI;
/* Vectors for link port DMA channels: */
___lib_LP2I: RTI;RTI;RTI;RTI;
___lib_LP3I: RTI;RTI;RTI;RTI;
/* Vectors for External port DMA channels: */
___lib_EP0I: bit clr IMASK EP0I;
RTI;RTI;RTI;
___lib_EP1I: RTI;RTI;RTI;RTI;
___lib_EP2I: RTI;RTI;RTI;RTI;
___lib_EP3I: RTI;RTI;RTI;RTI;
/* Vector for Link service request */
___lib_LSRQ: RTI;RTI;RTI;RTI;
/* Vector for DAG1 buffer 7 circular buffer overflow */
___lib_CB7I: RTI;RTI;RTI;RTI;
/* Vector for DAG2 buffer 15 circular buffer overflow */
___lib_CB15I: RTI;RTI;RTI;RTI;
/* Vector for lower priority timer interrupt */
___lib_TMZLI: RTI;RTI;RTI;RTI;
/*____________________main routine____________________*/
.section/pm seg_pmco; /* Main code segment from arch. file.*/
start:
r0=source;
dm(II5)=r0; /* Set DMA tx index to start of source buffer.*/
r0=destination;
dm(II4)=r0; /* Set DMA rx index to start of destination buffer.*/
r0=1;
dm(IM5)=r0; /* Set DMA modify (stride) to 1.*/
dm(IM4)=r0;
r0=N;
dm(C5)=r0; /* Set DMA count to length of data buffer.*/
dm(C4)=r0;
r0=0x0000c000; /* LCOM Register: 2x rate */
dm(LCOM)=r0;
r0=0x0003f03f; /* LAR Register: LBUF2->Port0, LBUF3->Port0 */
dm(LAR)=r0; /* All others inactive. */
r0=0x0000b300; /* LCTL Register: 32-bit data, LBUF2=rx, LBUF3=tx */
dm(LCTL)=r0; /* Enable DMA on LBUF2 and LBUF3. */
/* This will start off the DMA transfer. */
/* Always write LCTL after LAR. */
bit set imask LP2I; /* Enable link buffer 2 interrupt. */
bit set mode1 IRPTEN; /* Global interrupt enable. */
wait: idle; /* Wait for link buffer 2 interrupt.*/
jump wait; /* Will end up here after entire DMA completes.*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -