📄 demo.lst
字号:
*** CODE SEGMENT '?PR?tc0_isr?A?demo':
73: void tc0_isr (void) __irq {
00000000 E92D501F STMDB R13!,{R0-R4,R12,LR}
00000004 ---- Variable 'val' assigned to Register 'R4' ----
00000004 ; SCOPE-START
77: if (DataRun) { /* Data Stream is running */
00000004 E5100000 LDR R0,=DataRun ; DataRun
00000008 E5D00000 LDRB R0,[R0,#0x0] ; DataRun
0000000C E3500000 CMP R0,#0x0000
00000010 0A000035 BEQ L_5 ; Targ=0xEC
78: val = DataBuf[DataOut]; /* Get Audio Sample */
00000014 E5100000 LDR R0,=DataOut ; DataOut
00000018 E1D020B0 LDRH R2,[R0,#0x0] ; DataOut
0000001C E1A01002 MOV R1,R2
00000020 E1A01081 MOV R1,R1,LSL #1
00000024 E5100000 LDR R0,=DataBuf ; DataBuf
00000028 E19000B1 LDRH R0,[R0,R1]
0000002C E1A00800 MOV R0,R0,LSL #16
00000030 E1A00840 MOV R0,R0,ASR #16
00000034 E1A04000 MOV R4,R0
79: cnt = (DataIn - DataOut) & (B_S - 1); /* Buffer Data Count */
00000038 E1A00002 MOV R0,R2
0000003C E5101000 LDR R1,=DataIn ; DataIn
00000040 E1D110B0 LDRH R1,[R1,#0x0] ; DataIn
00000044 E0411000 SUB R1,R1,R0
00000048 E20110FF AND R1,R1,#0x00FF
0000004C ---- Variable 'cnt' assigned to Register 'R1' ----
80: if (cnt == (B_S - P_C*P_S)) { /* Too much Data in Buffer */
0000004C E1A00001 MOV R0,R1 ; cnt
00000050 E35000E0 CMP R0,#0x00E0 ; cnt
00000054 1A000002 BNE L_6 ; Targ=0x64
81: DataOut++; /* Skip one Sample */
00000058 E5100000 LDR R0,=DataOut ; DataOut
0000005C E2822001 ADD R2,R2,#0x0001
00000060 E1C020B0 STRH R2,[R0,#0x0] ; DataOut
82: }
00000064 L_6:
83: if (cnt > (P_C*P_S)) { /* Still enough Data in Buffer */
00000064 E1A00001 MOV R0,R1 ; cnt
00000068 E3500020 CMP R0,#0x0020 ; cnt
0000006C 9A000003 BLS L_7 ; Targ=0x80
84: DataOut++; /* Update Data Out Index */
00000070 E5100000 LDR R0,=DataOut ; DataOut
00000074 E1D010B0 LDRH R1,[R0,#0x0] ; DataOut
ARM COMPILER V2.53, demo 05/09/06 14:20:50 PAGE 6
00000078 E2811001 ADD R1,R1,#0x0001
0000007C E1C010B0 STRH R1,[R0,#0x0] ; DataOut
85: }
00000080 L_7:
86: DataOut &= B_S - 1; /* Adjust Buffer Out Index */
00000080 E5100000 LDR R0,=DataOut ; DataOut
00000084 E1D010B0 LDRH R1,[R0,#0x0] ; DataOut
00000088 E20110FF AND R1,R1,#0x00FF
0000008C E5100000 LDR R0,=DataOut ; DataOut
00000090 E1C010B0 STRH R1,[R0,#0x0] ; DataOut
87: if (val < 0) VUM -= val; /* Accumulate Neg Value */
00000094 E1A00004 MOV R0,R4 ; val
00000098 E3500000 CMP R0,#0x0000 ; val
0000009C AA000005 BGE L_8 ; Targ=0xB8
000000A0 E1A02004 MOV R2,R4 ; val
000000A4 E5100000 LDR R0,=VUM ; VUM
000000A8 E5901000 LDR R1,[R0,#0x0] ; VUM
000000AC E0411002 SUB R1,R1,R2 ; val
000000B0 E5801000 STR R1,[R0,#0x0] ; VUM
000000B4 EA000004 B L_9 ; Targ=0xCC
000000B8 L_8:
88: else VUM += val; /* Accumulate Pos Value */
000000B8 E1A02004 MOV R2,R4 ; val
000000BC E5100000 LDR R0,=VUM ; VUM
000000C0 E5901000 LDR R1,[R0,#0x0] ; VUM
000000C4 E0811002 ADD R1,R1,R2 ; val
000000C8 E5801000 STR R1,[R0,#0x0] ; VUM
000000CC L_9:
89: val *= Volume; /* Apply Volume Level */
000000CC E5100000 LDR R0,=Volume ; Volume
000000D0 E5900000 LDR R0,[R0,#0x0] ; Volume
000000D4 E0040490 MUL R4,R0,R4
90: val >>= 16; /* Adjust Value */
000000D8 E1A04844 MOV R4,R4,ASR #16 ; val
91: val += 0x8000; /* Add Bias */
000000DC E2844902 ADD R4,R4,#0x8000 ; val
92: val &= 0xFFFF; /* Mask Value */
000000E0 E5100000 LDR R0,=0xFFFF
000000E4 E0044000 AND R4,R4,R0 ; val
93: } else {
000000E8 EA000000 B L_10 ; Targ=0xF0
000000EC L_5:
94: val = 0x8000; /* DAC Middle Point */
000000EC E3A04902 MOV R4,#0x8000
95: }
000000F0 L_10:
97: if (Mute) {
000000F0 E5100000 LDR R0,=Mute ; Mute
000000F4 E5D00000 LDRB R0,[R0,#0x0] ; Mute
000000F8 E3500000 CMP R0,#0x0000
000000FC 0A000000 BEQ L_11 ; Targ=0x104
98: val = 0x8000; /* DAC Middle Point */
00000100 E3A04902 MOV R4,#0x8000
99: }
00000104 L_11:
101: DACR = val & 0xFFC0; /* Set Speaker Output */
00000104 E1A01004 MOV R1,R4 ; val
00000108 E5100000 LDR R0,=0xFFC0
0000010C E0011000 AND R1,R1,R0 ; val
00000110 E5100000 LDR R0,=0xE006C000
00000114 E5801000 STR R1,[R0,#0x0]
103: if ((Tick++ & 0x03FF) == 0) { /* On every 1024th Tick */
00000118 E5101000 LDR R1,=Tick ; Tick
0000011C E5910000 LDR R0,[R1,#0x0] ; Tick
00000120 E2802001 ADD R2,R0,#0x0001
00000124 E5812000 STR R2,[R1,#0x0] ; Tick
ARM COMPILER V2.53, demo 05/09/06 14:20:50 PAGE 7
00000128 E5101000 LDR R1,=0x3FF
0000012C E1100001 TST R0,R1
00000130 1A000022 BNE L_12 ; Targ=0x1C0
104: get_potval(); /* Get Potenciometer Value */
00000134 EBFFFFB1 BL get_potval?A ; Targ=0x0
105: if (VolCur == 0x8000) { /* Check for Minimum Level */
00000138 E5100000 LDR R0,=VolCur ; VolCur
0000013C E1D000B0 LDRH R0,[R0,#0x0] ; VolCur
00000140 E1A01000 MOV R1,R0
00000144 E3510902 CMP R1,#0x8000
00000148 1A000003 BNE L_13 ; Targ=0x15C
106: Volume = 0; /* No Sound */
0000014C E3A02000 MOV R2,#0x0
00000150 E5100000 LDR R0,=Volume ; Volume
00000154 E5802000 STR R2,[R0,#0x0] ; Volume
107: } else {
00000158 EA000004 B L_14 ; Targ=0x170
0000015C L_13:
108: Volume = VolCur * PotVal; /* Chained Volume Level */
0000015C E5100000 LDR R0,=PotVal ; PotVal
00000160 E1D000B0 LDRH R0,[R0,#0x0] ; PotVal
00000164 E0010190 MUL R1,R0,R1
00000168 E5100000 LDR R0,=Volume ; Volume
0000016C E5801000 STR R1,[R0,#0x0] ; Volume
109: }
00000170 L_14:
110: val = VUM >> 20; /* Scale Accumulated Value */
00000170 E5100000 LDR R0,=VUM ; VUM
00000174 E5904000 LDR R4,[R0,#0x0] ; VUM
00000178 E1A04A24 MOV R4,R4,LSR #20
111: VUM = 0; /* Clear VUM */
0000017C E3A01000 MOV R1,#0x0
00000180 E5100000 LDR R0,=VUM ; VUM
00000184 E5801000 STR R1,[R0,#0x0] ; VUM
112: if (val > 7) val = 7; /* Limit Value */
00000188 E1A00004 MOV R0,R4 ; val
0000018C E3500007 CMP R0,#0x0007 ; val
00000190 DA000000 BLE L_15 ; Targ=0x198
00000194 E3A04007 MOV R4,#0x7
00000198 L_15:
113: IOCLR1 = LEDMSK; /* Turn Off all LEDs */
00000198 E3A018FF MOV R1,#0xFF0000
0000019C E5100000 LDR R0,=0xE002801C
000001A0 E5801000 STR R1,[R0,#0x0]
114: IOSET1 = LEDMSK >> (7 - val); /* LEDs show VU Meter */
000001A4 E1A01004 MOV R1,R4 ; val
000001A8 E3A00007 MOV R0,#0x7
000001AC E0400001 SUB R0,R0,R1 ; val
000001B0 E3A018FF MOV R1,#0xFF0000
000001B4 E1A01051 MOV R1,R1,ASR R0
000001B8 E5100000 LDR R0,=0xE0028014
000001BC E5801000 STR R1,[R0,#0x0]
115: }
000001C0 L_12:
117: T0IR = 1; /* Clear Interrupt Flag */
000001C0 E3A01001 MOV R1,#0x1
000001C4 E5100000 LDR R0,=0xE0004000
000001C8 E5801000 STR R1,[R0,#0x0]
118: VICVectAddr = 0; /* Acknowledge Interrupt */
000001CC E3A01000 MOV R1,#0x0
000001D0 E5100000 LDR R0,=0xFFFFF030
000001D4 E5801000 STR R1,[R0,#0x0]
000001D8 ; SCOPE-END
119: }
000001D8 E8BD501F LDMIA R13!,{R0-R4,R12,LR}
000001DC E25EF004 SUBS R15,R14,#0x0004
ARM COMPILER V2.53, demo 05/09/06 14:20:50 PAGE 8
000001E0 ENDP ; 'tc0_isr?A'
*** CODE SEGMENT '?PR?main?demo':
124: int main (void) {
00000000 B500 PUSH {LR}
126: PINSEL1 = 0x01080000; /* Select AOUT,AIN1 */
00000002 4800 LDR R1,=0x1080000
00000004 4800 LDR R0,=0xE002C004
00000006 6001 STR R1,[R0,#0x0]
127: IODIR1 = LEDMSK; /* LED's defined as Outputs */
00000008 4800 LDR R1,=0xFF0000
0000000A 4800 LDR R0,=0xE0028018
0000000C 6001 STR R1,[R0,#0x0]
129: AD0CR = 0x00200E02; /* ADC: 10-bit AIN1 @ 4MHz */
0000000E 4800 LDR R1,=0x200E02
00000010 4800 LDR R0,=0xE0034000
00000012 6001 STR R1,[R0,#0x0]
130: DACR = 0x00008000; /* DAC Output set to Middle Point */
00000014 4800 LDR R1,=0x8000
00000016 4800 LDR R0,=0xE006C000
00000018 6001 STR R1,[R0,#0x0]
133: T0MR0 = VPB_CLOCK/DATA_FREQ - 1; /* TC0 Match Value 0 */
0000001A 4800 LDR R1,=0x752
0000001C 4800 LDR R0,=0xE0004018
0000001E 6001 STR R1,[R0,#0x0]
134: T0MCR = 3; /* TCO Interrupt and Reset on MR0 */
00000020 2103 MOV R1,#0x3
00000022 4800 LDR R0,=0xE0004014
00000024 6001 STR R1,[R0,#0x0]
135: T0TCR = 1; /* TC0 Enable */
00000026 2101 MOV R1,#0x1
00000028 4800 LDR R0,=0xE0004004
0000002A 6001 STR R1,[R0,#0x0]
138: VICVectAddr1 = (unsigned long)tc0_isr; /* TC0 Interrupt -> Vector 1 */
0000002C 4900 LDR R1,=tc0_isr?A ; tc0_isr?A
0000002E 4800 LDR R0,=0xFFFFF104
00000030 6001 STR R1,[R0,#0x0]
139: VICVectCntl1 = 0x20 | 4; /* TC0 Interrupt -> IRQ Slot 1 */
00000032 2124 MOV R1,#0x24
00000034 4800 LDR R0,=0xFFFFF204
00000036 6001 STR R1,[R0,#0x0]
140: VICIntEnable = 1 << 4; /* Enable TC0 Interrupt */
00000038 2110 MOV R1,#0x10
0000003A 4800 LDR R0,=0xFFFFF010
0000003C 6001 STR R1,[R0,#0x0]
142: USB_Init(); /* USB Initialization */
0000003E F7FF BL USB_Init?T ; T=0x0001 (1)
00000040 FFDF BL USB_Init?T ; T=0x0001 (2)
143: USB_Connect(TRUE); /* USB Connect */
00000042 2001 MOV R0,#0x1
00000044 F7FF BL USB_Connect?T ; T=0x0001 (1)
00000046 FFDC BL USB_Connect?T ; T=0x0001 (2)
145: while (1); /* Loop forever */
00000048 L_16:
00000048 E7FE B L_16 ; T=0x00000048
146: }
0000004A BC08 POP {R3}
0000004C 4718 BX R3
0000004E ENDP ; 'main'
Module Information Static
----------------------------------
code size = ------
data size = 532
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 + -