;********************************************************************* ; includes ;********************************************************************* .incdir "F:\git\goldmomo_endlos\assembler_files\ucore\" .include "include\ucore_ctrl.i" ;********************************************************************* ; sd header is placed here ;********************************************************************* .include "boot_level_sdHeader.s" ;********************************************************************* ;* start at address 32 here ;********************************************************************* start ;setup irq vector movei r0,irq nop moveih r0,>irq nop setssr r0,2 ;setup video (720x450) gpci r7,2 ;next 4 + X br setupVideo nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;clear screen movei r2,$00 ;destination movei r3,$00 moveih r2,$00 moveih r3,$f0 ;p(0,0) = f000 0000 gpci r7,2 ;next 4 + X br memset movei r1,$33 ; count delay slot movei r0,$00 ; value delay slot moveih r1,$9e ; count delay slot nop ; delay slot ;draw header gpci r7,2 ;next 4 + X br drawTextFormated movei r0,textHeader ;delay slot movei r1,0 ;delay slot moveih r0,>textHeader ;delay slot movei r2,0 ;delay slot ;setup audio gpci r7,2 ;next 4 + X br initAudio nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;draw result push r0 gpci r7,2 ;next 4 + X br drawTextFormated movei r0,audioSetupResult ;delay slot movei r1,0 ;delay slot moveih r0,>audioSetupResult ;delay slot movei r2,1 ;delay slot rqpop nop nop nop ;setup audio irq movei r0,UcIrqMsk movei r1,$4 ;enable audio irq moveih r0,>UcIrqMsk nop st r0,r1 ; ;enable irqs sei ; end ;push leds off movei r0,UcRSwichtWLedG movei r1,$0 moveih r0,>UcRSwichtWLedG nop st r0,r1 br end nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;*********************************************************************** ;* irq code start ;*********************************************************************** irq cli ;save all register push r0 push r1 push r2 push r3 push r4 push r5 push r6 push r7 ;clear irq memory movei r7,UcIrqMemory movei r0,0 ; moveih r7,>UcIrqMemory nop st r7,r0 ;irq begin ;push leds on movei r0,UcRSwichtWLedG movei r1,$ff moveih r0,>UcRSwichtWLedG moveih r1,$ff nop st r0,r1 ;push dac data movei r3,0 ;sintable offset movei r4,sinTable32 movei r6,UcAudioDACBase moveih r4,>sinTable32 movei r5,127 ;128 push ins moveih r6,>UcAudioDACBase fillDACBuffer ;get sin value add r0,r4,r3 nop rqldi r0,0 nop movei r0,0 ld r1 nop or r7,r6,r6 nop st r7,r1 ;dac left high = sin addi r7,1 nop st r7,r0 ;dac left low = 0 addi r7,1 nop st r7,r1 ;dac right high = sin addi r7,1 nop st r7,r0 ;dac right low = 0 addi r7,1 nop movei r1,$1 nop moveih r1,$1 nop st r7,r1 ;dac address/ctrl = $0101 ;ctrl = enable audio addi r7,1 nop ;next sin address & $1f addi r3,1 movei r0,$1f nop and r3,r3,r0 ; subi r5,1 brts fillDACBuffer nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;restore all used register and go back rqpop rqpop rqpop pop r7 pop r6 pop r5 rqpop rqpop rqpop pop r4 pop r3 pop r2 rqpop rqpop rti pop r1 ;delay slot pop r0 ;delay slot nop ;delay slot sei ;delay slot sinTable32 ;ramp ; word -32768 ; word -30720 ; word -28672 ; word -26624 ; word -24576 ; word -22528 ; word -20480 ; word -18432 ; word -16384 ; word -14336 ; word -12288 ; word -10240 ; word -8192 ; word -6144 ; word -4096 ; word -2048 ; word -1 ; word 2047 ; word 4095 ; word 6143 ; word 8191 ; word 10239 ; word 12287 ; word 14335 ; word 16383 ; word 18431 ; word 20479 ; word 22527 ; word 24575 ; word 26623 ; word 28671 ; word 30719 ;sin word 0 word 6392 word 12539 word 18204 word 23170 word 27245 word 30273 word 32138 word 32767 word 32138 word 30274 word 27246 word 23172 word 18207 word 12542 word 6395 word 3 word -6389 word -12536 word -18202 word -23167 word -27243 word -30272 word -32137 word -32767 word -32139 word -30275 word -27248 word -23174 word -18209 word -12545 word -6398 ;********************************************************************* ;* functions ;********************************************************************* .include "components\i2c.s" .include "components\drawText.s" ;****************************** ;* ;* initAudio ;* ;* return ;* ;* r0 = 0 (PASS) ;* initAudio push r7 movei r6,audioDefault movei r1,8 ;9 address moveih r6,>audioDefault movei r2,0 ;start address initAudioI2CWriteLoop rqldi r6,0 nop nop ld r3 ;data gpci r7,2 ;next 4 + X br i2cWM8731WriteWord nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 ;0 = PASS brtc initAudioFail nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot subi r1,1 brts initAudioI2CWriteLoop addi r6,1 ;next lut address delay slot addi r2,1 ;next i2c address delay slot nop ;delay slot nop ;delay slot movei r0,0 initAudioFail rqpop nop nop pop r7 nop jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* i2cWM8731WriteWord ;* ;* r2 = address ;* r3 = data ;* ;* return: ;* ;* r0 = result ;* i2cWM8731WriteWord push r1 push r6 push r7 ;start gpci r7,2 ;next 4 + X br i2cSendStart movei r6,UcI2CSoftPortBCtrl ;delay slot nop ;delay slot moveih r6,>UcI2CSoftPortBCtrl ;I2C ports b ;delay slot nop ;delay slot ;write id gpci r7,2 ;next 4 + X br i2cSend8WACK movei r1,$34 ;WRITE ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFailsWr movei r0,$ff ;delay slot nop ;delay slot moveih r0,$01 ;delay slot nop ;delay slot ;write address add r1,r2,r2 ;adr*2 extri r3,8 addtqi r1,r1,0 ;+ bit8 of data gpci r7,2 ;next 4 + X br i2cSend8WACK nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFailsWr movei r0,$ff ;delay slot nop ;delay slot moveih r0,$02 ;delay slot nop ;delay slot ;write data low gpci r7,2 ;next 4 + X br i2cSend8WACK or r1,r3,r3 ;WRITE ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFailsWr movei r0,$ff ;delay slot nop ;delay slot moveih r0,$04 ;delay slot nop ;delay slot ;finished without fail movei r0,0 ;all fine ;stop i2cSend8WACKFailsWr gpci r7,2 ;next 4 + X br i2cSendStop nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot rqpop rqpop rqpop pop r7 pop r6 pop r1 jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* drawChar ;* ;* r0 value ;* r1 x ;* r2 y ;* ;* trash r0 drawChar push r1 push r2 push r3 push r4 push r5 push r6 ;destination base (sram base 0) muli r1,8 movei r4,$00 ;destination movei r5,$00 moveih r4,$00 moveih r5,$f0 ;p(0,0) = f000 0000 add r4,r4,r1 addtqi r5,r5,0 movei r1,$00 nop moveih r1,$2d ;720*16 nop mul r1,r1,r2;*y gmulhi r2 add r4,r4,r1 addt r5,r5,r2 ;font source movei r2,$68 ;source movei r3,$01 moveih r2,$50 moveih r3,$e0 ;p(0,0) = e001 5068 muli r0,8 ;value * 8 nop add r2,r2,r0 ;source addtqi r3,r3,0 ; ; movei r0,15 ;16 [y] dcYloop movei r1,7 ;8 [x] dcXloop esadr r3,r2 erqldi 0 eld r6 nop extri r6,15 brts dcNoTransp nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot movei r6,0 dcNoTransp esadr r5,r4 est r6,0 subi r1,1 ;x- brts dcXloop addi r4,1 ;delay slot addtqi r5,r5,0 ;delay slot addi r2,1 ;delay slot addtqi r3,r3,0 ;delay slot ; movei r1,$c8 nop moveih r1,$2 ;r1 = 720-8 nop add r4,r4,r1 ;dest + 720-8 addtqi r5,r5,0 ; movei r1,$e8 nop moveih r1,$2 ;r1 = 752-8 nop subi r0,1 ;y- brts dcYloop add r2,r2,r1 ;source + 752-8 delay slot addtqi r3,r3,0 ; delay slot nop ;delay slot nop ;delay slot ; rqpop rqpop rqpop pop r6 pop r5 pop r4 rqpop nop nop pop r3 rqpop rqpop jmpi r7,0 pop r2 ;delay slot pop r1 ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* r0 value ;* r1 count-1 (8 words)) ;* r3:r2 dest ; memset clearLoop esadr r3,r2 est r0,0 est r0,1 est r0,2 est r0,3 est r0,4 est r0,5 est r0,6 est r0,7 subi r1,1 brts clearLoop addi r2,8 ;delay slot addtqi r3,r3,0 ;delay slot nop ;delay slot nop ;delay slot jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* setupVideo ;* setupVideo movei r0,videoDefault ;source movei r1,$0f ;dest-1 moveih r0,>videoDefault moveih r1,$20 movei r2,26 ;27-1 setupVideoLoop rqldi r0,0 addi r0,1 addi r1,1 ld r3 subi r2,1 brts setupVideoLoop st r1,r3 ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;********************************************************************* ;* data ;********************************************************************* videoDefault ;AD NAME NEW DEFAULT word $0001 ;10 VIDEO_ON 1 1 (ON) word $0097 ;11 HSYNC (D = 11 .. 0) 152-1 152-1 word $017f ;12 HSTART (D = 11 .. 0) 384-1 384-1 word $017d ;13 HMEMSTART (D = 11 .. 0) 382-1 382-1 word $071f ;14 HSTOP (D = 11 .. 0) 1824-1 1824-1 word $076f ;15 HTOTAL (D = 11 .. 0) 1904-1 1904-1 word $0002 ;16 VSYNC (D = 10 .. 0) 3-1 3-1 word $001e ;17 VSTART (D = 10 .. 0) 31-1 31-1 word $03a2 ;18 VSTOP (D = 10 .. 0) 931-1 931-1 word $03a3 ;19 VTOTAL (D = 10 .. 0) 932-1 932-1 word $0000 ;1a LC ADDER LOW $0000 $0000 word $0080 ;1b LC ADDER HIGH $0080 $0040 word $0000 ;1c LC ADDER LATCH X X word $0000 ;1d LC START (10 .. 0) Pixeloffset $0000 $0000 word $0000 ;1e X X word $0000 ;1f X X word $0008 ;20 HLOADSTART 8 8 word $0170 ;21 HLOADSTOP 360+8 180+8 word $001e ;22 VLOADSTART 31-1 31-1 word $03a2 ;23 VLOADSTOP 931-1 931-1 word $0002 ;24 VLOADNEXT 2 4 word $0000 ;25 MEM_STARTADR_store low $0000 $0000 word $f000 ;26 MEM_STARTADR_store high $f000 $f000 word $0000 ;27 MEM_LINEOFFSET_store low $0000 $0000 word $0000 ;28 MEM_LINEOFFSET_store high $0000 $0000 word $0002 ;29 MEM_MODE_store 2 2 (X1R5G5B5X1R5G5B5) word $0000 ;2a LATCH MEM_STARTADR/LINEOFFSET/MODE X X audioDefault ; 8 7654 3210 word $0097 ;0 = $0097 = 0 1001 0111 word $0097 ;1 = $0097 = 0 1001 0111 word $0079 ;2 = $0079 = 0 0111 1001 word $0079 ;3 = $0079 = 0 0111 1001 word $0010 ;4 = $0010 = 0 0001 0000 (DAC to line out) word $0000 ;5 = $0100 = 0 0000 0000 (DAC soft Mute off) word $0067 ;6 = $0067 = 0 0110 0111 (DAC Power, Output Power, Device Power on) word $000f ;7 = $000f = 0 0000 1111 (format = DSP (11), data bit length = 32, lrp = 0 (first clk,data), slave mode, no swap) word $001e ;8 = $001e = 0 0001 1110 (BOSR = 1 SR = 0111 Normal Mode) fs = 96/96KHz clk = 18.432MHz fs = 192 filter = 2 word $0001 ;9 = $0001 = 0 000000001 (activate interface) textHeader .string "I2C Sound push sinus test" word 0 audioSetupResult .string "Result = %x" word 0 textReaded .space 32