/*________________________________________________________________________ ADSP-2106x Interrupt-driven SPORT Transmit Example: This example uses interrupts to notify the core when new data is required for serial port 0 transmit. The buffer "source" is transmitted. ________________________________________________________________________*/ #define N 8 #include "def21060.h" .segment/dm dm32_b1; /* Data segment name described in arch. file.*/ .var source[N]= 0x11111111, 0x22222222, 0x33333333, 0x44444444, 0x55555555, 0x66666666, 0x77777777, 0x88888888; .endseg; .segment/pm rst_svc; /* Reset vector from arch. file. first location*/ nop; /* is used for booting.*/ jump start; .endseg; .segment/pm spt0_svc; /* Sport 0 tx interrupt vector.*/ jump s0tx; .endseg; /*__________________Main routine__________________*/ .segment/pm pm48_1b0; /* Main code segment from arch file.*/ start: r0=0x00270007; /* TDIV0 Register:TCLKDIV=7, TFSDIV=39*/ dm(TDIV0)=r0; /* sclock=CLKIN/8, framerate=sclock/20.*/ r0=0x000065f1; /* STCTL0 Register:*/ dm(STCTL0)=r0; /* SPEN=1,(SPORT enabled)*/ /* SLEN=31 (32-bit word)*/ /* ICLK=1, (internal tx clock)*/ /* TFSR=1, (require TFS)*/ /* ITFS=1, (internal TFS)*/ /* DITFS=0,(data dependent FS), all other bits=0*/ b0=source; /* Pointer to source. i0=b0 automatically.*/ l0=@source; bit set imask SPT0I; /* Enable sport 0 tx interrupt.*/ bit set mode1 IRPTEN; /* Global interrupt enable.*/ r0=dm(i0,1); /* Write first value into tx to kick off sport.*/ dm(TX0)=r0; wait: idle; /* Wait for SPORT0 TX interrupts.*/ jump wait; /*_________________SPORT 0 Transmit Interrupt Routine___________________*/ s0tx: rti (db); r0=dm(i0,1); /* Get data from source buffer*/ dm(TX0)=r0; /* Write transmit register*/ .endseg;