📄 dl_device_serial.cod
字号:
; 106 : {
; 107 : case SOH: /* 128-byte incoming packet */
; 108 : *len = 128;
00064 e3a03080 mov r3, #0x80
00068 |$L43067|
; 109 : if(GetPacketData(buf, len, blocknum) == FALSE)
00068 e1a02005 mov r2, r5
0006c e1a01004 mov r1, r4
00070 e1a00006 mov r0, r6
00074 e5843000 str r3, [r4]
00078 eb000000 bl GetPacketData
0007c e3500000 cmp r0, #0
; 110 : return FALSE;
00080 0afffff0 beq |$L43066|
00084 |$L42926|
; 125 : break;
; 126 : default:
; 127 : return FALSE;
; 128 : break;
; 129 : }
; 130 : return TRUE;
00084 e3a00001 mov r0, #1
00088 |$L42918|
; 131 : }
00088 e28dd004 add sp, sp, #4
0008c e8bd4070 ldmia sp!, {r4 - r6, lr}
00090 e12fff1e bx lr
00094 |$M43069|
ENDP ; |GetPacket|
EXPORT |serial_preinit|
IMPORT |OEMWriteDebugLED|
IMPORT |msWait|
00000 AREA |.text| { |serial_preinit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$serial_preinit|, PDATA, SELECTION=5, ASSOC=|.text| { |serial_preinit| } ; comdat associative
|$T43094| DCD |$L43093|
DCD 0x40001a01
; Function compile flags: /Ogsy
00000 AREA |.text| { |serial_preinit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |serial_preinit| PROC
; 134 : {
00000 |$L43093|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M43091|
00004 e59f5058 ldr r5, [pc, #0x58]
00008 |$L42938|
; 135 : int timeout;
; 136 :
; 137 : // send boot requests indefinitely
; 138 : while(1)
; 139 : {
; 140 : //We do not use crc check.
; 141 : OEMWriteDebugByte(NAK);
00008 e3a00015 mov r0, #0x15
0000c eb000000 bl OEMWriteDebugByte
; 142 : for(timeout = 0;timeout < 500; timeout++)
00010 e3a04000 mov r4, #0
00014 |$L42940|
; 143 : {
; 144 : msWait(1);
00014 e3a00001 mov r0, #1
00018 eb000000 bl msWait
; 145 : OEMWriteDebugLED(0, 2);
0001c e3a01002 mov r1, #2
00020 e3a00000 mov r0, #0
00024 eb000000 bl OEMWriteDebugLED
; 146 : if(GetCharReady())
00028 e5953000 ldr r3, [r5]
; 147 : return TRUE;
; 148 : msWait(1);
0002c e3a00001 mov r0, #1
00030 e5933014 ldr r3, [r3, #0x14]
00034 e3130001 tst r3, #1
00038 1a000007 bne |$L43086|
0003c eb000000 bl msWait
; 149 : OEMWriteDebugLED(0, 4);
00040 e3a01004 mov r1, #4
00044 e3a00000 mov r0, #0
00048 eb000000 bl OEMWriteDebugLED
0004c e2844001 add r4, r4, #1
00050 e3540f7d cmp r4, #0x7D, 30
00054 baffffee blt |$L42940|
; 150 : }
; 151 : }
00058 eaffffea b |$L42938|
0005c |$L43086|
; 152 : }
0005c e8bd4030 ldmia sp!, {r4, r5, lr}
00060 e12fff1e bx lr
00064 |$L43096|
00064 00000000 DCD |g_pUARTReg|
00068 |$M43092|
ENDP ; |serial_preinit|
EXPORT |Serial_Init|
EXPORT |??_C@_0BH@NEHCIJDN@Serial?5Init?5success?$CB?$AN?6?$AA@| [ DATA ] ; `string'
IMPORT |OALPAtoVA|
IMPORT |EdbgOutputDebugString|
00000 AREA |.text| { |Serial_Init| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Serial_Init|, PDATA, SELECTION=5, ASSOC=|.text| { |Serial_Init| } ; comdat associative
|$T43104| DCD |$L43103|
DCD 0x40000f01
00000 AREA |.rdata| { |??_C@_0BH@NEHCIJDN@Serial?5Init?5success?$CB?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BH@NEHCIJDN@Serial?5Init?5success?$CB?$AN?6?$AA@| DCB "Serial Ini"
DCB "t success!", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |Serial_Init| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Serial_Init| PROC
; 156 : {
00000 |$L43103|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M43101|
; 157 : g_pUARTReg = (volatile BULVERDE_UART_REG *) OALPAtoVA(BULVERDE_BASE_REG_PA_BTUART, FALSE);
00004 e3a00101 mov r0, #1, 2
00008 e3800602 orr r0, r0, #2, 12
0000c e3a01000 mov r1, #0
00010 eb000000 bl OALPAtoVA
00014 e59f301c ldr r3, [pc, #0x1C]
00018 e1a02000 mov r2, r0
; 158 : EdbgOutputDebugString("Serial Init success!\r\n");
0001c e59f0010 ldr r0, [pc, #0x10]
00020 e5832000 str r2, [r3]
00024 eb000000 bl EdbgOutputDebugString
; 159 : return TRUE;
00028 e3a00001 mov r0, #1
; 160 : }
0002c e49de004 ldr lr, [sp], #4
00030 e12fff1e bx lr
00034 |$L43106|
00034 00000000 DCD |??_C@_0BH@NEHCIJDN@Serial?5Init?5success?$CB?$AN?6?$AA@|
00038 00000000 DCD |g_pUARTReg|
0003c |$M43102|
ENDP ; |Serial_Init|
EXPORT |Serial_Deinit|
00000 AREA |.text| { |Serial_Deinit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Serial_Deinit|, PDATA, SELECTION=5, ASSOC=|.text| { |Serial_Deinit| } ; comdat associative
|$T43114| DCD |$L43113|
DCD 0x40001602
; Function compile flags: /Ogsy
00000 AREA |.text| { |Serial_Deinit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Serial_Deinit| PROC
; 163 : {
00000 |$L43113|
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd004 sub sp, sp, #4
00008 |$M43111|
; 164 : char c;
; 165 :
; 166 : //通知主机下载已完成
; 167 : OEMWriteDebugByte(ACK);
00008 e3a00006 mov r0, #6
0000c eb000000 bl OEMWriteDebugByte
; 168 : GetBytes(&c, 1);
00010 e3a01001 mov r1, #1
00014 e28d0000 add r0, sp, #0
00018 eb000000 bl GetBytes
; 169 : if(c == EOT)
0001c e5dd3000 ldrb r3, [sp]
00020 e3530004 cmp r3, #4
00024 1a000006 bne |$L42951|
; 170 : {
; 171 : OEMWriteDebugByte(ACK);
00028 e3a00006 mov r0, #6
0002c eb000000 bl OEMWriteDebugByte
; 176 : }
; 177 : g_SerialInitialized = FALSE;
00030 e59f301c ldr r3, [pc, #0x1C]
00034 e3a02000 mov r2, #0
; 178 : return TRUE;
00038 e3a00001 mov r0, #1
0003c e5832000 str r2, [r3]
00040 ea000000 b |$L42949|
00044 |$L42951|
; 172 : }
; 173 : else
; 174 : {
; 175 : return FALSE;
00044 e3a00000 mov r0, #0
00048 |$L42949|
; 179 : }
00048 e28dd004 add sp, sp, #4
0004c e49de004 ldr lr, [sp], #4
00050 e12fff1e bx lr
00054 |$L43116|
00054 00000000 DCD |g_SerialInitialized|
00058 |$M43112|
ENDP ; |Serial_Deinit|
EXPORT |Serial_ReadData|
IMPORT |memcpy|
00008 AREA |.bss|, NOINIT
|?buf@?1??Serial_ReadData@@9@9| % 0x400 ; `Serial_ReadData'::`2'::buf
00000 AREA |.text| { |Serial_ReadData| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Serial_ReadData|, PDATA, SELECTION=5, ASSOC=|.text| { |Serial_ReadData| } ; comdat associative
|$T43131| DCD |$L43130|
DCD 0x40004201
; Function compile flags: /Ogsy
00000 AREA |.text| { |Serial_ReadData| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Serial_ReadData| PROC
; 182 : {
00000 |$L43130|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 |$M43128|
00004 e1a08001 mov r8, r1
00008 e1b07000 movs r7, r0
; 183 : static unsigned char buf[PKTLEN_1K]; //using 1024 bytes buffer for data read
; 184 : static int Front =- 1,Tail = 0;
; 185 : static unsigned char BlockNum = 1;
; 186 : LPBYTE pOutBuffer = pbData;
; 187 :
; 188 : while(cbData)
0000c 0a000030 beq |$L42969|
00010 e59f40ec ldr r4, [pc, #0xEC]
00014 e59f50e4 ldr r5, [pc, #0xE4]
00018 e3e09000 mvn r9, #0
0001c e5940400 ldr r0, [r4, #0x400]
00020 e5956004 ldr r6, [r5, #4]
00024 e3a0a000 mov r10, #0
00028 e3a0b001 mov r11, #1
0002c |$L42968|
; 189 : {
; 190 : if(Front == -1)
0002c e3760001 cmn r6, #1
00030 1a000019 bne |$L42974|
; 191 : {
; 192 : if(g_SerialInitialized == TRUE)
00034 e5943404 ldr r3, [r4, #0x404]
00038 e3530001 cmp r3, #1
0003c 1a000003 bne |$L42971|
; 193 : {
; 194 : OEMWriteDebugByte(ACK); //return ACK to server for new packet
00040 e3a00006 mov r0, #6
00044 eb000000 bl OEMWriteDebugByte
; 195 : }
; 196 : else
00048 e5d52000 ldrb r2, [r5]
0004c ea000008 b |$L42972|
00050 |$L42971|
; 197 : {
; 198 : serial_preinit(); //when receive first packet, we must init serial
00050 eb000000 bl serial_preinit
; 199 : OEMWriteDebugLED(0, 1);
00054 e3a01001 mov r1, #1
00058 e3a00000 mov r0, #0
0005c eb000000 bl OEMWriteDebugLED
; 200 : Front = -1;
; 201 : Tail = 0;
; 202 : BlockNum = 1;
00060 e3a02001 mov r2, #1
00064 e5c52000 strb r2, [r5]
00068 e5859004 str r9, [r5, #4]
0006c e584a400 str r10, [r4, #0x400]
; 203 : g_SerialInitialized = TRUE;
00070 e584b404 str r11, [r4, #0x404]
00074 |$L42972|
; 204 : }
; 205 :
; 206 : if(GetPacket(buf, &Tail, BlockNum) == TRUE)
00074 e2841b01 add r1, r4, #1, 22
00078 e1a00004 mov r0, r4
0007c eb000000 bl GetPacket
00080 e3500001 cmp r0, #1
00084 1a00001a bne |$L42973|
; 207 : {
; 208 : Front = 0;
; 209 : BlockNum++;
00088 e5d53000 ldrb r3, [r5]
0008c e5940400 ldr r0, [r4, #0x400]
00090 e3a06000 mov r6, #0
00094 e2833001 add r3, r3, #1
00098 e5c53000 strb r3, [r5]
0009c |$L42974|
; 214 : }
; 215 : }
; 216 : if((Tail - Front) > (int)cbData)
0009c e0402006 sub r2, r0, r6
000a0 e1520007 cmp r2, r7
; 220 : cbData = 0;
; 221 : }
; 222 : else
; 223 : {
; 224 : memcpy((char *)pOutBuffer, (buf+Front), Tail - Front);
000a4 e0861004 add r1, r6, r4
000a8 e1a00008 mov r0, r8
000ac ca00000b bgt |$L43121|
000b0 eb000000 bl memcpy
; 225 : pOutBuffer += Tail - Front;
000b4 e5940400 ldr r0, [r4, #0x400]
000b8 e0403006 sub r3, r0, r6
; 226 : cbData -= Tail - Front;
000bc e0462000 sub r2, r6, r0
; 227 : Front =- 1;
000c0 e3e06000 mvn r6, #0
000c4 e5856004 str r6, [r5, #4]
000c8 e0888003 add r8, r8, r3
000cc e0977002 adds r7, r7, r2
000d0 1affffd5 bne |$L42968|
000d4 |$L42969|
; 228 : }
; 229 : }
; 230 : return TRUE;
000d4 e3a00001 mov r0, #1
; 231 : }
000d8 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
000dc e12fff1e bx lr
000e0 |$L43121|
; 217 : {
; 218 : memcpy((char *)pOutBuffer, (buf+Front), cbData);
000e0 e1a02007 mov r2, r7
000e4 eb000000 bl memcpy
; 219 : Front += cbData;
000e8 e0863007 add r3, r6, r7
000ec e5853004 str r3, [r5, #4]
000f0 eafffff7 b |$L42969|
000f4 |$L42973|
; 210 : }
; 211 : else
; 212 : {
; 213 : return FALSE;
000f4 e3a00000 mov r0, #0
; 231 : }
000f8 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
000fc e12fff1e bx lr
00100 |$L43133|
00100 00000000 DCD |?BlockNum@?1??Serial_ReadData@@9@9|
00104 00000000 DCD |?buf@?1??Serial_ReadData@@9@9|
00108 |$M43129|
ENDP ; |Serial_ReadData|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -