📄 t0int.lst
字号:
50: DA_val = ((sample >> 15) + 0x8000) & 0xFFFF;
00000088 E1A02001 MOV R2,R1 ; sample
0000008C E1A027C2 MOV R2,R2,ASR #15 ; sample
00000090 E2822902 ADD R2,R2,#0x8000
00000094 E5101000 LDR R1,=0xFFFF
00000098 E0022001 AND R2,R2,R1
0000009C E1A02802 MOV R2,R2,LSL #16
000000A0 E1A02822 MOV R2,R2,LSR #16
000000A4 E5101000 LDR R1,=DA_val ; DA_val
000000A8 E1C120B0 STRH R2,[R1,#0x0] ; DA_val
52: DACR = DA_val;
000000AC E5101000 LDR R1,=DA_val ; DA_val
000000B0 E1D110B0 LDRH R1,[R1,#0x0] ; DA_val
000000B4 E1A02001 MOV R2,R1
000000B8 E5101000 LDR R1,=0xE006C000
000000BC E5812000 STR R2,[R1,#0x0]
53: if (p_record >= eot) {
000000C0 E5101000 LDR R1,=p_record ; p_record
000000C4 E5911000 LDR R1,[R1,#0x0] ; p_record
000000C8 E5102000 LDR R2,=eot ; eot
000000CC E5922000 LDR R2,[R2,#0x0] ; eot
000000D0 E1510002 CMP R1,R2
000000D4 3A00005A BCC L_2 ; Targ=0x244
54: IOCLR1 = 0x00FF0000; /* Turn off LEDs */
000000D8 E3A028FF MOV R2,#0xFF0000
000000DC E5101000 LDR R1,=0xE002801C
000000E0 E5812000 STR R2,[R1,#0x0]
55: IOSET1 = (0x01 << 16) & 0xFF0000; /* Turn on LED */
000000E4 E3A02801 MOV R2,#0x10000
000000E8 E5101000 LDR R1,=0xE0028014
000000EC E5812000 STR R2,[R1,#0x0]
56: mode = PAUSE; /* Next time the tc0 routine is entered, it playing is pau
-sed */
000000F0 E3A02001 MOV R2,#0x1
000000F4 E5101000 LDR R1,=mode ; mode
000000F8 E5812000 STR R2,[R1,#0x0] ; mode
58: break;
000000FC EA000050 B L_2 ; Targ=0x244
60: case PAUSE:
ARM COMPILER V2.50a, T0Int 23/09/08 18:04:45 PAGE 5
00000100 L_4:
61: if (timeval == 0)
00000100 E5101000 LDR R1,=timeval ; timeval
00000104 E5911000 LDR R1,[R1,#0x0] ; timeval
00000108 E3510000 CMP R1,#0x0000
0000010C 1A00004C BNE L_2 ; Targ=0x244
62: mode = NEXT; /* After 10 seconds are up, switch to next record block */
00000110 E3A02002 MOV R2,#0x2
00000114 E5101000 LDR R1,=mode ; mode
00000118 E5812000 STR R2,[R1,#0x0] ; mode
63: break;
0000011C EA000048 B L_2 ; Targ=0x244
65: case NEXT:
00000120 L_5:
66: if (blockindex < LASTBLOCK) { blockindex++; } else { blockindex = FIRSTBLOCK; } /* goto first block when la
-st was played */
00000120 E5101000 LDR R1,=blockindex ; blockindex
00000124 E5912000 LDR R2,[R1,#0x0] ; blockindex
00000128 E3520002 CMP R2,#0x0002
0000012C 2A000003 BCS L_9 ; Targ=0x140
00000130 E5101000 LDR R1,=blockindex ; blockindex
00000134 E2822001 ADD R2,R2,#0x0001
00000138 E5812000 STR R2,[R1,#0x0] ; blockindex
0000013C EA000002 B L_6 ; Targ=0x14C
00000140 L_9:
00000140 E3A02001 MOV R2,#0x1
00000144 E5101000 LDR R1,=blockindex ; blockindex
00000148 E5812000 STR R2,[R1,#0x0] ; blockindex
68: case PREV:
0000014C L_6:
69: if (mode != NEXT)
0000014C E3500002 CMP R0,#0x0002
00000150 0A00000A BEQ L_11 ; Targ=0x180
70: if (blockindex > FIRSTBLOCK) { blockindex--; } else { blockindex = LASTBLOCK; } /* goto last block when
-first was played */
00000154 E5100000 LDR R0,=blockindex ; blockindex
00000158 E5901000 LDR R1,[R0,#0x0] ; blockindex
0000015C E3510001 CMP R1,#0x0001
00000160 9A000003 BLS L_12 ; Targ=0x174
00000164 E5100000 LDR R0,=blockindex ; blockindex
00000168 E2411001 SUB R1,R1,#0x0001
0000016C E5801000 STR R1,[R0,#0x0] ; blockindex
00000170 EA000002 B L_11 ; Targ=0x180
00000174 L_12:
00000174 E3A01002 MOV R1,#0x2
00000178 E5100000 LDR R0,=blockindex ; blockindex
0000017C E5801000 STR R1,[R0,#0x0] ; blockindex
00000180 L_11:
72: {
00000180 ; SCOPE-START
73: unsigned int blockaddress = (blockindex * BLOCKSIZE); /* calculate the absolut
-e memory address of the block*/
00000180 E5100000 LDR R0,=blockindex ; blockindex
00000184 E5900000 LDR R0,[R0,#0x0] ; blockindex
00000188 E1A01000 MOV R1,R0
0000018C E1A01781 MOV R1,R1,LSL #15
00000190 ---- Variable 'blockaddress' assigned to Register 'R1' ----
74: p_wav_hdr = (void*) blockaddress; /* point the Wave/RIFF s
-tructure to the new block */
00000190 E1A03001 MOV R3,R1 ; blockaddress
00000194 E5102000 LDR R2,=p_wav_hdr ; p_wav_hdr
00000198 E5823000 STR R3,[R2,#0x0] ; p_wav_hdr
75: p_record = (signed short*)(void*) blockaddress + 0x24; /* Set the sample pointe
-r after the wave file header */
0000019C E1A03001 MOV R3,R1 ; blockaddress
000001A0 E2833048 ADD R3,R3,#0x0048
ARM COMPILER V2.50a, T0Int 23/09/08 18:04:45 PAGE 6
000001A4 E5102000 LDR R2,=p_record ; p_record
000001A8 E5823000 STR R3,[R2,#0x0] ; p_record
77: if (p_wav_hdr->length < BLOCKSIZE){
000001AC E5102000 LDR R2,=p_wav_hdr ; p_wav_hdr
000001B0 E5924000 LDR R4,[R2,#0x0] ; p_wav_hdr
000001B4 E5942004 LDR R2,[R4,#0x4]
000001B8 E1A03002 MOV R3,R2
000001BC E3530902 CMP R3,#0x8000
000001C0 2A000004 BCS L_14 ; Targ=0x1D8
78: eot = (unsigned int)(blockaddress + p_wav_hdr->length); /* Get the end of the fi
-le from either the header or */
000001C4 E1A03001 MOV R3,R1 ; blockaddress
000001C8 E0833002 ADD R3,R3,R2 ; blockaddress
000001CC E5102000 LDR R2,=eot ; eot
000001D0 E5823000 STR R3,[R2,#0x0] ; eot
79: } else {
000001D4 EA000004 B L_15 ; Targ=0x1EC
000001D8 L_14:
80: eot = (unsigned int)(blockaddress + BLOCKSIZE) -1; /* set to the maximum (bl
-ock boundary) */
000001D8 E1A02001 MOV R2,R1 ; blockaddress
000001DC E2822902 ADD R2,R2,#0x8000
000001E0 E2422001 SUB R2,R2,#0x0001
000001E4 E5101000 LDR R1,=eot ; eot
000001E8 E5812000 STR R2,[R1,#0x0] ; eot
81: }
000001EC L_15:
82: if (blockindex == LASTBLOCK) /* don't play the content
- of the bootloader */
000001EC E3500002 CMP R0,#0x0002
000001F0 1A000004 BNE L_16 ; Targ=0x208
83: eot -= SIZE_OF_BOOTLOADER;
000001F4 E5101000 LDR R1,=eot ; eot
000001F8 E5912000 LDR R2,[R1,#0x0] ; eot
000001FC E2422A03 SUB R2,R2,#0x3000
00000200 E5101000 LDR R1,=eot ; eot
00000204 E5812000 STR R2,[R1,#0x0] ; eot
00000208 L_16:
00000208 ; SCOPE-END
86: IOCLR1 = 0x00FF0000; /* Turn off LEDs */
00000208 E3A028FF MOV R2,#0xFF0000
0000020C E5101000 LDR R1,=0xE002801C
00000210 E5812000 STR R2,[R1,#0x0]
87: IOSET1 = (0x01 << (blockindex + 16)) & 0xFF0000; /* Turn on LED */
00000214 E2800010 ADD R0,R0,#0x0010
00000218 E3A01001 MOV R1,#0x1
0000021C E1A01011 MOV R1,R1,LSL R0
00000220 E20118FF AND R1,R1,#0xFF0000
00000224 E5100000 LDR R0,=0xE0028014
00000228 E5801000 STR R1,[R0,#0x0]
89: print_info = 1; /* indicate that track information is printed in
-the main loop */
0000022C E3A01001 MOV R1,#0x1
00000230 E5100000 LDR R0,=print_info ; print_info
00000234 E5C01000 STRB R1,[R0,#0x0] ; print_info
90: mode = PLAY; /* Next time the tc0 routine is entered, it start
-s playing */
00000238 E3A01000 MOV R1,#0x0
0000023C E5100000 LDR R0,=mode ; mode
00000240 E5801000 STR R1,[R0,#0x0] ; mode
92: }
00000244 L_2:
93: T0IR = 1; // Clear interrupt flag
00000244 E3A01001 MOV R1,#0x1
00000248 E5100000 LDR R0,=0xE0004000
0000024C E5801000 STR R1,[R0,#0x0]
ARM COMPILER V2.50a, T0Int 23/09/08 18:04:45 PAGE 7
94: VICVectAddr = 0; // Acknowledge Interrupt
00000250 E3A01000 MOV R1,#0x0
00000254 E5100000 LDR R0,=0xFFFFF030
00000258 E5801000 STR R1,[R0,#0x0]
0000025C ; SCOPE-END
96: }
0000025C E8BD001F LDMIA R13!,{R0-R4}
00000260 E25EF004 SUBS R15,R14,#0x0004
00000264 ENDP ; 'tc0?A'
*** CODE SEGMENT '?PR?init_timer?A?T0Int':
101: T0MR0 = T0_RlFreq; // 0.125uSec = 1875-1 counts
00000000 E5101000 LDR R1,=0x752
00000004 E5100000 LDR R0,=0xE0004018
00000008 E5801000 STR R1,[R0,#0x0]
102: T0MCR = 3; // Interrupt and Reset on MR0
0000000C E3A01003 MOV R1,#0x3
00000010 E5100000 LDR R0,=0xE0004014
00000014 E5801000 STR R1,[R0,#0x0]
103: T0TCR = 1; // Timer0 Enable
00000018 E3A01001 MOV R1,#0x1
0000001C E5100000 LDR R0,=0xE0004004
00000020 E5801000 STR R1,[R0,#0x0]
104: VICVectAddr0 = (unsigned long)tc0; // set interrupt vector in 0
00000024 E5101000 LDR R1,=tc0?A ; tc0?A
00000028 E5100000 LDR R0,=0xFFFFF100
0000002C E5801000 STR R1,[R0,#0x0]
105: VICVectCntl0 = 0x20 | 4; // use it for Timer 0 Interrupt
00000030 E3A01024 MOV R1,#0x24
00000034 E5100000 LDR R0,=0xFFFFF200
00000038 E5801000 STR R1,[R0,#0x0]
106: VICIntEnable = 0x00000010; // Enable Timer0 Interrupt
0000003C E3A01010 MOV R1,#0x10
00000040 E5100000 LDR R0,=0xFFFFF010
00000044 E5801000 STR R1,[R0,#0x0]
107: mode = NEXT;
00000048 E3A01002 MOV R1,#0x2
0000004C E5100000 LDR R0,=mode ; mode
00000050 E5801000 STR R1,[R0,#0x0] ; mode
108: blockindex = FIRSTBLOCK - 1l;
00000054 E3A01000 MOV R1,#0x0
00000058 E5100000 LDR R0,=blockindex ; blockindex
0000005C E5801000 STR R1,[R0,#0x0] ; blockindex
109: }
00000060 E12FFF1E BX R14
00000064 ENDP ; 'init_timer?A'
Module Information Static
----------------------------------
code size = ------
data size = 29
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -