separating HYP mode pi2 examples from switch to SVC mode pi2 examples

This commit is contained in:
dwelch
2016-03-26 09:25:37 -04:00
parent 2e70b6d71b
commit c5373ad9b3
56 changed files with 253 additions and 486 deletions

View File

@@ -30,6 +30,8 @@ extern unsigned int timer_tick ( void );
extern void timer_init ( void );
extern unsigned int timer_tick ( void );
extern void leds_off ( void );
//------------------------------------------------------------------------
int notmain ( void )
{
@@ -42,6 +44,7 @@ int notmain ( void )
unsigned int sum;
unsigned int ra;
leds_off();
uart_init();
hexstring(0x12345678);
hexstring(GETPC());

Binary file not shown.

View File

@@ -129055,7 +129055,7 @@
:10FFE0000000000000000000000000000000000011
:10FFF0000000000000000000000000000000000001
:020000040020DA
:1000000002D3A0E3A60000EBFEFFFFEA001080E5AC
:1000000002D3A0E3C00000EBFEFFFFEA001080E592
:100010001EFF2FE1B010C0E11EFF2FE10010C0E570
:100020001EFF2FE1000090E51EFF2FE10E00A0E172
:100030001EFF2FE110FF2FE11EFF2FE110402DE9E1
@@ -129097,43 +129097,50 @@
:100270000400A0E10C109FE563FFFFEB1040BDE818
:100280001EFF2FE108B4003F0002F90010402DE9E5
:1002900008009FE562FFFFEB1040BDE81EFF2FE165
:1002A00020B4003FF0472DE90080A0E3A6FFFFEB5C
:1002B00040029FE59DFFFFEB5BFFFFEB9BFFFFEB2A
:1002C0004900A0E375FFFFEB4800A0E373FFFFEBDD
:1002D0004500A0E371FFFFEB5800A0E36FFFFFEBC9
:1002E0000D00A0E36DFFFFEB0A00A0E30890A0E182
:1002F0000860A0E10850A0E10870A0E10840A0E17A
:1003000066FFFFEB52FFFFEB3A0050E32B00000AC1
:100310000D0050E30A00501301A0A00300A0A01399
:100320002900000A2030C0E3470053E35000000AD0
:10033000013044E2140053E303F19F97F0FFFFEA1A
:10034000B0032000B003200050042000500420001F
:10035000500420005004200030042000F803200046
:10036000D4032000D4032000D4032000D4032000B1
:10037000C80320009403200094032000940320006D
:100380009403200094032000940320009403200091
:1003900094032000390050E3070040820992A0E155
:1003A0000F0000E2150054E3099080E14500000AC7
:1003B00027FFFFEB3A0050E3014084E2D3FFFF1A2E
:1003C0000140A0E3CEFFFFEA0662A0E10040A0E307
:1003D000CBFFFFEA390050E3070040820662A0E14C
:1003E0000F0000E2066080E10668A0E12668A0E157
:1003F000014084E2C2FFFFEA390050E30700408277
:100400000552A0E10F0000E2055080E1FF5005E237
:10041000010055E32700000A0E40A033B8FFFF3A61
:10042000020055E30940A0030040A013B4FFFFEA17
:10043000390050E3070040820552A0E10F0000E2BE
:10044000055080E1FF5005E20840A0E3ACFFFFEA61
:10045000390050E3070040820772A0E10F0000E27C
:10046000077080E10778A0E1277886E1014084E207
:10047000A3FFFFEA0D00A0E308FFFFEB2D00A0E3C0
:1004800006FFFFEB2D00A0E304FFFFEB0D00A0E350
:1004900002FFFFEB0A00A0E300FFFFEB0A00A0E36E
:1004A000FEFEFFEB0209A0E3E1FEFFEB0A00A0E184
:1004B000F047BDE81EFF2FE10800A0E11BFFFFEBA6
:1004C0000040A0E38EFFFFEA693829E02334A0E171
:1004D000FF3CC3E3699423E00700A0E1088087E0C4
:1004E0000910A0E1C8FEFFEB088089E0047087E2F4
:0C04F0000E40A0E382FFFFEA78563412B1
:1002A00020B4003F70402DE954409FE50400A0E1D8
:1002B0005BFFFFEB4C509FE50E16C0E3021681E397
:1002C0000400A0E150FFFFEB0500A0E154FFFFEBAD
:1002D0000E19C0E31C4084E20500A0E1021981E38D
:1002E00049FFFFEB0400A0E10219A0E346FFFFEB8A
:1002F0000400A0E10810A0E343FFFFEB7040BDE85D
:100300001EFF2FE11000203F0C00203FF0472DE999
:100310000080A0E3E2FFFFEB8BFFFFEB40029FE5D5
:1003200082FFFFEB40FFFFEB80FFFFEB4900A0E304
:100330005AFFFFEB4800A0E358FFFFEB4500A0E3A6
:1003400056FFFFEB5800A0E354FFFFEB0D00A0E3C6
:1003500052FFFFEB0A00A0E30890A0E10860A0E1D3
:100360000850A0E10870A0E10840A0E14BFFFFEBBE
:1003700037FFFFEB3A0050E32B00000A0D0050E37B
:100380000A00501301A0A00300A0A0132900000A36
:100390002030C0E3470053E35000000A013044E23C
:1003A000140053E303F19F97F0FFFFEA1C042000C1
:1003B0001C042000BC042000BC042000BC0420005D
:1003C000BC0420009C0420006404200040042000A1
:1003D0004004200040042000400420003404200099
:1003E000000420000004200000042000000420007D
:1003F000000420000004200000042000000420006D
:10040000390050E3070040820992A0E10F0000E2AA
:10041000150054E3099080E14500000A0CFFFFEB52
:100420003A0050E3014084E2D3FFFF1A0140A0E309
:10043000CEFFFFEA0662A0E10040A0E3CBFFFFEAA7
:10044000390050E3070040820662A0E10F0000E29D
:10045000066080E10668A0E12668A0E1014084E230
:10046000C2FFFFEA390050E3070040820552A0E1D5
:100470000F0000E2055080E1FF5005E2010055E366
:100480002700000A0E40A033B8FFFF3A020055E3F0
:100490000940A0030040A013B4FFFFEA390050E375
:1004A000070040820552A0E10F0000E2055080E104
:1004B000FF5005E20840A0E3ACFFFFEA390050E33B
:1004C000070040820772A0E10F0000E2077080E1A0
:1004D0000778A0E1277886E1014084E2A3FFFFEAE4
:1004E0000D00A0E3EDFEFFEB2D00A0E3EBFEFFEB24
:1004F0002D00A0E3E9FEFFEB0D00A0E3E7FEFFEB1C
:100500000A00A0E3E5FEFFEB0A00A0E3E3FEFFEB39
:100510000209A0E3C6FEFFEB0A00A0E1F047BDE838
:100520001EFF2FE10800A0E100FFFFEB0040A0E369
:100530008EFFFFEA693829E02334A0E1FF3CC3E3E2
:10054000699423E00700A0E1088087E00910A0E19A
:10055000ADFEFFEB088089E0047087E20E40A0E367
:0805600082FFFFEA7856341215
:040000030000800079
:00000001FF

View File

@@ -10,7 +10,7 @@ Disassembly of section .text:
00200000 <skip>:
200000: e3a0d302 mov sp, #134217728 ; 0x8000000
200004: eb0000a6 bl 2002a4 <notmain>
200004: eb0000c0 bl 20030c <notmain>
00200008 <hang>:
200008: eafffffe b 200008 <hang>
@@ -215,157 +215,186 @@ Disassembly of section .text:
20029c: e12fff1e bx lr
2002a0: 3f00b420 svccc 0x0000b420
002002a4 <notmain>:
2002a4: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
2002a8: e3a08000 mov r8, #0
2002ac: ebffffa6 bl 20014c <uart_init>
2002b0: e59f0240 ldr r0, [pc, #576] ; 2004f8 <notmain+0x254>
2002b4: ebffff9d bl 200130 <hexstring>
2002b8: ebffff5b bl 20002c <GETPC>
2002bc: ebffff9b bl 200130 <hexstring>
2002c0: e3a00049 mov r0, #73 ; 0x49
2002c4: ebffff75 bl 2000a0 <uart_send>
2002c8: e3a00048 mov r0, #72 ; 0x48
2002cc: ebffff73 bl 2000a0 <uart_send>
2002d0: e3a00045 mov r0, #69 ; 0x45
2002d4: ebffff71 bl 2000a0 <uart_send>
2002d8: e3a00058 mov r0, #88 ; 0x58
2002dc: ebffff6f bl 2000a0 <uart_send>
2002e0: e3a0000d mov r0, #13
2002e4: ebffff6d bl 2000a0 <uart_send>
2002e8: e3a0000a mov r0, #10
2002ec: e1a09008 mov r9, r8
2002f0: e1a06008 mov r6, r8
2002f4: e1a05008 mov r5, r8
2002f8: e1a07008 mov r7, r8
2002fc: e1a04008 mov r4, r8
200300: ebffff66 bl 2000a0 <uart_send>
200304: ebffff52 bl 200054 <uart_recv>
200308: e350003a cmp r0, #58 ; 0x3a
20030c: 0a00002b beq 2003c0 <notmain+0x11c>
200310: e350000d cmp r0, #13
200314: 1350000a cmpne r0, #10
200318: 03a0a001 moveq sl, #1
20031c: 13a0a000 movne sl, #0
200320: 0a000029 beq 2003cc <notmain+0x128>
200324: e3c03020 bic r3, r0, #32
200328: e3530047 cmp r3, #71 ; 0x47
20032c: 0a000050 beq 200474 <notmain+0x1d0>
200330: e2443001 sub r3, r4, #1
200334: e3530014 cmp r3, #20
200338: 979ff103 ldrls pc, [pc, r3, lsl #2]
20033c: eafffff0 b 200304 <notmain+0x60>
200340: 002003b0 strhteq r0, [r0], -r0
200344: 002003b0 strhteq r0, [r0], -r0
200348: 00200450 eoreq r0, r0, r0, asr r4
20034c: 00200450 eoreq r0, r0, r0, asr r4
200350: 00200450 eoreq r0, r0, r0, asr r4
200354: 00200450 eoreq r0, r0, r0, asr r4
200358: 00200430 eoreq r0, r0, r0, lsr r4
20035c: 002003f8 strdeq r0, [r0], -r8 ; <UNPREDICTABLE>
200360: 002003d4 ldrdeq r0, [r0], -r4 ; <UNPREDICTABLE>
200364: 002003d4 ldrdeq r0, [r0], -r4 ; <UNPREDICTABLE>
200368: 002003d4 ldrdeq r0, [r0], -r4 ; <UNPREDICTABLE>
20036c: 002003d4 ldrdeq r0, [r0], -r4 ; <UNPREDICTABLE>
200370: 002003c8 eoreq r0, r0, r8, asr #7
200374: 00200394 mlaeq r0, r4, r3, r0
200378: 00200394 mlaeq r0, r4, r3, r0
20037c: 00200394 mlaeq r0, r4, r3, r0
200380: 00200394 mlaeq r0, r4, r3, r0
200384: 00200394 mlaeq r0, r4, r3, r0
200388: 00200394 mlaeq r0, r4, r3, r0
20038c: 00200394 mlaeq r0, r4, r3, r0
200390: 00200394 mlaeq r0, r4, r3, r0
200394: e3500039 cmp r0, #57 ; 0x39
200398: 82400007 subhi r0, r0, #7
20039c: e1a09209 lsl r9, r9, #4
2003a0: e200000f and r0, r0, #15
2003a4: e3540015 cmp r4, #21
2003a8: e1809009 orr r9, r0, r9
2003ac: 0a000045 beq 2004c8 <notmain+0x224>
2003b0: ebffff27 bl 200054 <uart_recv>
2003b4: e350003a cmp r0, #58 ; 0x3a
2003b8: e2844001 add r4, r4, #1
2003bc: 1affffd3 bne 200310 <notmain+0x6c>
2003c0: e3a04001 mov r4, #1
2003c4: eaffffce b 200304 <notmain+0x60>
2003c8: e1a06206 lsl r6, r6, #4
2003cc: e3a04000 mov r4, #0
2003d0: eaffffcb b 200304 <notmain+0x60>
2003d4: e3500039 cmp r0, #57 ; 0x39
2003d8: 82400007 subhi r0, r0, #7
2003dc: e1a06206 lsl r6, r6, #4
2003e0: e200000f and r0, r0, #15
2003e4: e1806006 orr r6, r0, r6
2003e8: e1a06806 lsl r6, r6, #16
2003ec: e1a06826 lsr r6, r6, #16
2003f0: e2844001 add r4, r4, #1
2003f4: eaffffc2 b 200304 <notmain+0x60>
2003f8: e3500039 cmp r0, #57 ; 0x39
2003fc: 82400007 subhi r0, r0, #7
200400: e1a05205 lsl r5, r5, #4
200404: e200000f and r0, r0, #15
200408: e1805005 orr r5, r0, r5
20040c: e20550ff and r5, r5, #255 ; 0xff
200410: e3550001 cmp r5, #1
200414: 0a000027 beq 2004b8 <notmain+0x214>
200418: 33a0400e movcc r4, #14
20041c: 3affffb8 bcc 200304 <notmain+0x60>
200420: e3550002 cmp r5, #2
200424: 03a04009 moveq r4, #9
200428: 13a04000 movne r4, #0
20042c: eaffffb4 b 200304 <notmain+0x60>
200430: e3500039 cmp r0, #57 ; 0x39
200434: 82400007 subhi r0, r0, #7
200438: e1a05205 lsl r5, r5, #4
20043c: e200000f and r0, r0, #15
200440: e1805005 orr r5, r0, r5
200444: e20550ff and r5, r5, #255 ; 0xff
200448: e3a04008 mov r4, #8
20044c: eaffffac b 200304 <notmain+0x60>
200450: e3500039 cmp r0, #57 ; 0x39
200454: 82400007 subhi r0, r0, #7
200458: e1a07207 lsl r7, r7, #4
20045c: e200000f and r0, r0, #15
200460: e1807007 orr r7, r0, r7
200464: e1a07807 lsl r7, r7, #16
200468: e1867827 orr r7, r6, r7, lsr #16
20046c: e2844001 add r4, r4, #1
200470: eaffffa3 b 200304 <notmain+0x60>
200474: e3a0000d mov r0, #13
200478: ebffff08 bl 2000a0 <uart_send>
20047c: e3a0002d mov r0, #45 ; 0x2d
200480: ebffff06 bl 2000a0 <uart_send>
200484: e3a0002d mov r0, #45 ; 0x2d
200488: ebffff04 bl 2000a0 <uart_send>
20048c: e3a0000d mov r0, #13
200490: ebffff02 bl 2000a0 <uart_send>
200494: e3a0000a mov r0, #10
200498: ebffff00 bl 2000a0 <uart_send>
20049c: e3a0000a mov r0, #10
2004a0: ebfffefe bl 2000a0 <uart_send>
2004a4: e3a00902 mov r0, #32768 ; 0x8000
2004a8: ebfffee1 bl 200034 <BRANCHTO>
2004ac: e1a0000a mov r0, sl
2004b0: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr}
2004b4: e12fff1e bx lr
2004b8: e1a00008 mov r0, r8
2004bc: ebffff1b bl 200130 <hexstring>
2004c0: e3a04000 mov r4, #0
2004c4: eaffff8e b 200304 <notmain+0x60>
2004c8: e0293869 eor r3, r9, r9, ror #16
2004cc: e1a03423 lsr r3, r3, #8
2004d0: e3c33cff bic r3, r3, #65280 ; 0xff00
2004d4: e0239469 eor r9, r3, r9, ror #8
2004d8: e1a00007 mov r0, r7
2004dc: e0878008 add r8, r7, r8
2004e0: e1a01009 mov r1, r9
2004e4: ebfffec8 bl 20000c <PUT32>
2004e8: e0898008 add r8, r9, r8
2004ec: e2877004 add r7, r7, #4
2004f0: e3a0400e mov r4, #14
2004f4: eaffff82 b 200304 <notmain+0x60>
2004f8: 12345678 eorsne r5, r4, #120, 12 ; 0x7800000
002002a4 <leds_off>:
2002a4: e92d4070 push {r4, r5, r6, lr}
2002a8: e59f4054 ldr r4, [pc, #84] ; 200304 <leds_off+0x60>
2002ac: e1a00004 mov r0, r4
2002b0: ebffff5b bl 200024 <GET32>
2002b4: e59f504c ldr r5, [pc, #76] ; 200308 <leds_off+0x64>
2002b8: e3c0160e bic r1, r0, #14680064 ; 0xe00000
2002bc: e3811602 orr r1, r1, #2097152 ; 0x200000
2002c0: e1a00004 mov r0, r4
2002c4: ebffff50 bl 20000c <PUT32>
2002c8: e1a00005 mov r0, r5
2002cc: ebffff54 bl 200024 <GET32>
2002d0: e3c0190e bic r1, r0, #229376 ; 0x38000
2002d4: e284401c add r4, r4, #28
2002d8: e1a00005 mov r0, r5
2002dc: e3811902 orr r1, r1, #32768 ; 0x8000
2002e0: ebffff49 bl 20000c <PUT32>
2002e4: e1a00004 mov r0, r4
2002e8: e3a01902 mov r1, #32768 ; 0x8000
2002ec: ebffff46 bl 20000c <PUT32>
2002f0: e1a00004 mov r0, r4
2002f4: e3a01008 mov r1, #8
2002f8: ebffff43 bl 20000c <PUT32>
2002fc: e8bd4070 pop {r4, r5, r6, lr}
200300: e12fff1e bx lr
200304: 3f200010 svccc 0x00200010
200308: 3f20000c svccc 0x0020000c
0020030c <notmain>:
20030c: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
200310: e3a08000 mov r8, #0
200314: ebffffe2 bl 2002a4 <leds_off>
200318: ebffff8b bl 20014c <uart_init>
20031c: e59f0240 ldr r0, [pc, #576] ; 200564 <notmain+0x258>
200320: ebffff82 bl 200130 <hexstring>
200324: ebffff40 bl 20002c <GETPC>
200328: ebffff80 bl 200130 <hexstring>
20032c: e3a00049 mov r0, #73 ; 0x49
200330: ebffff5a bl 2000a0 <uart_send>
200334: e3a00048 mov r0, #72 ; 0x48
200338: ebffff58 bl 2000a0 <uart_send>
20033c: e3a00045 mov r0, #69 ; 0x45
200340: ebffff56 bl 2000a0 <uart_send>
200344: e3a00058 mov r0, #88 ; 0x58
200348: ebffff54 bl 2000a0 <uart_send>
20034c: e3a0000d mov r0, #13
200350: ebffff52 bl 2000a0 <uart_send>
200354: e3a0000a mov r0, #10
200358: e1a09008 mov r9, r8
20035c: e1a06008 mov r6, r8
200360: e1a05008 mov r5, r8
200364: e1a07008 mov r7, r8
200368: e1a04008 mov r4, r8
20036c: ebffff4b bl 2000a0 <uart_send>
200370: ebffff37 bl 200054 <uart_recv>
200374: e350003a cmp r0, #58 ; 0x3a
200378: 0a00002b beq 20042c <notmain+0x120>
20037c: e350000d cmp r0, #13
200380: 1350000a cmpne r0, #10
200384: 03a0a001 moveq sl, #1
200388: 13a0a000 movne sl, #0
20038c: 0a000029 beq 200438 <notmain+0x12c>
200390: e3c03020 bic r3, r0, #32
200394: e3530047 cmp r3, #71 ; 0x47
200398: 0a000050 beq 2004e0 <notmain+0x1d4>
20039c: e2443001 sub r3, r4, #1
2003a0: e3530014 cmp r3, #20
2003a4: 979ff103 ldrls pc, [pc, r3, lsl #2]
2003a8: eafffff0 b 200370 <notmain+0x64>
2003ac: 0020041c eoreq r0, r0, ip, lsl r4
2003b0: 0020041c eoreq r0, r0, ip, lsl r4
2003b4: 002004bc strhteq r0, [r0], -ip
2003b8: 002004bc strhteq r0, [r0], -ip
2003bc: 002004bc strhteq r0, [r0], -ip
2003c0: 002004bc strhteq r0, [r0], -ip
2003c4: 0020049c mlaeq r0, ip, r4, r0
2003c8: 00200464 eoreq r0, r0, r4, ror #8
2003cc: 00200440 eoreq r0, r0, r0, asr #8
2003d0: 00200440 eoreq r0, r0, r0, asr #8
2003d4: 00200440 eoreq r0, r0, r0, asr #8
2003d8: 00200440 eoreq r0, r0, r0, asr #8
2003dc: 00200434 eoreq r0, r0, r4, lsr r4
2003e0: 00200400 eoreq r0, r0, r0, lsl #8
2003e4: 00200400 eoreq r0, r0, r0, lsl #8
2003e8: 00200400 eoreq r0, r0, r0, lsl #8
2003ec: 00200400 eoreq r0, r0, r0, lsl #8
2003f0: 00200400 eoreq r0, r0, r0, lsl #8
2003f4: 00200400 eoreq r0, r0, r0, lsl #8
2003f8: 00200400 eoreq r0, r0, r0, lsl #8
2003fc: 00200400 eoreq r0, r0, r0, lsl #8
200400: e3500039 cmp r0, #57 ; 0x39
200404: 82400007 subhi r0, r0, #7
200408: e1a09209 lsl r9, r9, #4
20040c: e200000f and r0, r0, #15
200410: e3540015 cmp r4, #21
200414: e1809009 orr r9, r0, r9
200418: 0a000045 beq 200534 <notmain+0x228>
20041c: ebffff0c bl 200054 <uart_recv>
200420: e350003a cmp r0, #58 ; 0x3a
200424: e2844001 add r4, r4, #1
200428: 1affffd3 bne 20037c <notmain+0x70>
20042c: e3a04001 mov r4, #1
200430: eaffffce b 200370 <notmain+0x64>
200434: e1a06206 lsl r6, r6, #4
200438: e3a04000 mov r4, #0
20043c: eaffffcb b 200370 <notmain+0x64>
200440: e3500039 cmp r0, #57 ; 0x39
200444: 82400007 subhi r0, r0, #7
200448: e1a06206 lsl r6, r6, #4
20044c: e200000f and r0, r0, #15
200450: e1806006 orr r6, r0, r6
200454: e1a06806 lsl r6, r6, #16
200458: e1a06826 lsr r6, r6, #16
20045c: e2844001 add r4, r4, #1
200460: eaffffc2 b 200370 <notmain+0x64>
200464: e3500039 cmp r0, #57 ; 0x39
200468: 82400007 subhi r0, r0, #7
20046c: e1a05205 lsl r5, r5, #4
200470: e200000f and r0, r0, #15
200474: e1805005 orr r5, r0, r5
200478: e20550ff and r5, r5, #255 ; 0xff
20047c: e3550001 cmp r5, #1
200480: 0a000027 beq 200524 <notmain+0x218>
200484: 33a0400e movcc r4, #14
200488: 3affffb8 bcc 200370 <notmain+0x64>
20048c: e3550002 cmp r5, #2
200490: 03a04009 moveq r4, #9
200494: 13a04000 movne r4, #0
200498: eaffffb4 b 200370 <notmain+0x64>
20049c: e3500039 cmp r0, #57 ; 0x39
2004a0: 82400007 subhi r0, r0, #7
2004a4: e1a05205 lsl r5, r5, #4
2004a8: e200000f and r0, r0, #15
2004ac: e1805005 orr r5, r0, r5
2004b0: e20550ff and r5, r5, #255 ; 0xff
2004b4: e3a04008 mov r4, #8
2004b8: eaffffac b 200370 <notmain+0x64>
2004bc: e3500039 cmp r0, #57 ; 0x39
2004c0: 82400007 subhi r0, r0, #7
2004c4: e1a07207 lsl r7, r7, #4
2004c8: e200000f and r0, r0, #15
2004cc: e1807007 orr r7, r0, r7
2004d0: e1a07807 lsl r7, r7, #16
2004d4: e1867827 orr r7, r6, r7, lsr #16
2004d8: e2844001 add r4, r4, #1
2004dc: eaffffa3 b 200370 <notmain+0x64>
2004e0: e3a0000d mov r0, #13
2004e4: ebfffeed bl 2000a0 <uart_send>
2004e8: e3a0002d mov r0, #45 ; 0x2d
2004ec: ebfffeeb bl 2000a0 <uart_send>
2004f0: e3a0002d mov r0, #45 ; 0x2d
2004f4: ebfffee9 bl 2000a0 <uart_send>
2004f8: e3a0000d mov r0, #13
2004fc: ebfffee7 bl 2000a0 <uart_send>
200500: e3a0000a mov r0, #10
200504: ebfffee5 bl 2000a0 <uart_send>
200508: e3a0000a mov r0, #10
20050c: ebfffee3 bl 2000a0 <uart_send>
200510: e3a00902 mov r0, #32768 ; 0x8000
200514: ebfffec6 bl 200034 <BRANCHTO>
200518: e1a0000a mov r0, sl
20051c: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr}
200520: e12fff1e bx lr
200524: e1a00008 mov r0, r8
200528: ebffff00 bl 200130 <hexstring>
20052c: e3a04000 mov r4, #0
200530: eaffff8e b 200370 <notmain+0x64>
200534: e0293869 eor r3, r9, r9, ror #16
200538: e1a03423 lsr r3, r3, #8
20053c: e3c33cff bic r3, r3, #65280 ; 0xff00
200540: e0239469 eor r9, r3, r9, ror #8
200544: e1a00007 mov r0, r7
200548: e0878008 add r8, r7, r8
20054c: e1a01009 mov r1, r9
200550: ebfffead bl 20000c <PUT32>
200554: e0898008 add r8, r9, r8
200558: e2877004 add r7, r7, #4
20055c: e3a0400e mov r4, #14
200560: eaffff82 b 200370 <notmain+0x64>
200564: 12345678 eorsne r5, r4, #120, 12 ; 0x7800000
Disassembly of section .ARM.attributes:
@@ -386,7 +415,7 @@ Disassembly of section .ARM.attributes:
Disassembly of section .comment:
00000000 <.comment>:
0: 3a434347 bcc 10d0d24 <notmain+0xed0a80>
0: 3a434347 bcc 10d0d24 <notmain+0xed0a18>
4: 4e472820 cdpmi 8, 4, cr2, cr7, cr0, {1}
8: 35202955 strcc r2, [r0, #-2389]! ; 0xfffff6ab
c: 302e332e eorcc r3, lr, lr, lsr #6

View File

@@ -136,6 +136,28 @@ unsigned int timer_tick ( void )
return(GET32(ARM_TIMER_CNT));
}
//-------------------------------------------------------------------------
void leds_off ( void )
{
#define GPFSEL3 0x3F20000C
#define GPFSEL4 0x3F200010
#define GPSET1 0x3F200020
#define GPCLR1 0x3F20002C
unsigned int ra;
ra=GET32(GPFSEL4);
ra&=~(7<<21);
ra|=1<<21;
PUT32(GPFSEL4,ra);
ra=GET32(GPFSEL3);
ra&=~(7<<15);
ra|=1<<15;
PUT32(GPFSEL3,ra);
PUT32(GPCLR1,1<<(47-32));
PUT32(GPCLR1,1<<(35-32));
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------

Binary file not shown.

Binary file not shown.

View File

@@ -1,294 +0,0 @@
What is a pit opi? It is actually pi to pi as in a Raspberry Pi running
Linux used as a host and a second Raspberry Pi used as a bare metal
platform. I will call one the Linux pi and the other the bare metal pi.
If you look at the top level README there is talk of buying a $15 or
so usb to serial (usb to uart) and some wires for connecting your host
pc to your bare metal pi for bare metal development, using the
bootloader, etc. Well that puts you into a problem of where do I get
the tools, I need a toolchain and I need a terminal program with xmodem
(to use one of my bootloaders) as well as the usb to uart thing. Well
for a little more you can get another Raspberry Pi if you dont already
have a second one. You can get Linux up and running on that Linux pi
and it has a working arm gnu toolchain compiler as part of the distro.
With a little more work (mostly just downloading a few things) and
three wires (still need the wires)(maybe two, depends on your comfort
level) you gain a development environment where the tools are trivial
to come by, and a dumb terminal program with xmodem.
I am doing this from memory, so hopefully I cover all the steps
I downloaded Raspian wheezy
http://www.raspberrypi.org/downloads
And put it on an sd card
http://elinux.org/RPi_Easy_SD_Card_Setup
Plugged in a monitor, keyboard, mouse, and network and the powered
that Linux pi from a computer. You want to power both Raspberry Pis
from the same power source for example a powered usb hub or the same
computer. In theory this way you dont put a large delta between
the ground planes on the two boards which could fry something. The
odds of this are quite low, but if you happened to get lucky and
cross phases, that is about like taking bare wires from wall power and
touching those wires on metal parts around the board, some smoke will
be released from something. So the Linux pi boots, I get this text
menu thing that asks things like do you want ssh enabled do you want
to push the filesystem to fill the sd card, stuff like that. After this
first bring up I actually dont use the keyboard, mouse, and monitor on
the Linux pi I used ssh and/or vnc, personal preference, not going to
explain the steps, I assume you are using the Linux pi as a computer
with keyboard, mouse and monitor.
The Linux pi reboots with these settings and I am in I have a Linux
based computer.
Next I made sure I had a few tools:
apt-get install build-essential
apt-get install minicom lrzsz
You have to be a programmer to be doing or learning bare metal
programming so I dont need to tell you about text editors you have
one or ones you like and know how to use it or them.
Now the uart on the Linux pi is by default enabled to be used as the
console, it spits out messages on boot, and provides a login prompt.
Well I want to use it as a generic uart/serial port and not have it
used for that purpose so looking at this page
http://elinux.org/RPi_Serial_Connection
I backed up inittab
cd /etc
sudo cp inittab inittab.orig
Now edit inittab (using sudo if you are not logged in as root)
comment out the T0:23... line they mention which has the ttyAMA0 thing
in it, and save
backup cmdline.txt
cd /boot
sudo cp cmdline.txt cmdline.orig
Now edit cmdline.orig I think there were two places where ttyAMA0 were
called out. DONT KILL THE WHOLE LINE, just remove the two chunks
of non-whitespace that include AMA0.
save.
Now reboot
sudo reboot
As mentioned
cat /proc/cmdline
and make sure there is no reference to AMA0
and then
ps aux | grep ttyAMA0
You should only see the ps command in the output and no other commands
Once you have reached this point. Glance at the top level README for
this repo. The corner of the board with two rows of pins, about 26 or
so pins total. The outer corner pin is pin 2 starting at that pin and
counting toward the rca and audio plugs it goes by 2s, 2,4,6,8,10.
pin 6 is ground
pin 8 is TX
pin 10 is RX
For now take one of your wires and connect pin 8 to pin 10 on the Linux
pi (we are doing a test, we will connect between the boards later this
is connecting two pins on the same board).
Open a command line/terminal on the Linux pi
We need to setup minicom one time before we use it (must use sudo or
run as root)
sudo minicom -s
Now the user interface to minicom is a bit dated and likely very strange
in this point and click or touch screen world.
Using the arrow keys down arrow to Serial port setup and hit enter.
Along the left side is A B C D E F G, press the A key (does not have
to be capital just press a one time) the cursor moves to the end
of the A line, the Serial Device. Edit that line using backspace or
delete and you want it to have
/dev/ttyAMA0
Then press enter one time
Now press F one time, Hardware Flow Control should change from Yes to NO
Now press enter one time, this takes you back to the top menu
Down arrow to Modem and Dialing and press enter one time
Press A one time
Press space and I think that will erase the line and put a space then
backspace to have nothing on that line (faster than a bunch of backspaces
or deletes to erase the line)
Press enter one time
Press K one time
same deal we want to delete that line, then press enter one time
Press enter one more time to go to the top level menu
(you can re-enter these submenus as needed to make these changes and can
make these changes in any order)
Down arrow twice to Save setup as dfl (default).
And then down arrow and select Exit from Minicom. For whatever reason
to disable hardware flow control you have to exit minicom then come
back for it to actually work. At least on x86 based pcs that is the case.
So minicom is now ready to use, if all of the above went well you wont
need to do that again. With a jumper wire connecting pin 8 to pin 10
run minicom (without any options)
sudo minicom
Whatever you type you should be able to see on the terminal. If this
doesnt work you cannot continue. What is going in is the character
is going out the uart (TX) and through the wire then that is looped
back into the input (RX) and we can see it. A return here is simply
a carriage return without a line feed so when you hit enter it only
goes to the beginning of the same line, it does not advance a line
like you are used to. Unplug one end of the wire and the echoing of
characters should no longer work. Replace the wire and it should work
again. I repeat if this doesnt work for you you cannot continue...
Now very carefully not to short other parts of the boards together, you
might want to power off the Linux pi safely and have both of them turned
off. Depends on your comfort level. Connect pin 6 on one board to
pin 6 on the other board. Connect pin 8 on one board to pin 10 on the
other and vice versa so both boards have their pin 8 connected to pin 10
on the other board.
Get my bootloader (bootloader05 for example) and follow the instructions
there or in the top level README for putting the files you need including
that kernel.img file on A SECOND SD CARD, NOT ON THE LINUX PI SD CARD,
THIS GOES ON THE BARE METAL PI SD CARD. You need two sd cards to go
with two Raspberry Pis.
Power on the Linux pi, let it come up completely, open a terminal
then run minicom. A trick to save yourself time is to run minicom
wherever you have the .bin files you want to load to the bare metal pi
this way you dont have to navigate through the directory structure using
a confusing and painful text based thing in minicom. The other
alternative is to run minicom in some simple place like your home
directory then when you build a .bin file to try, copy it to your home
directory (putting the .bin file in the same place as minicom was launched)
sudo minicom
Now power on the bare metal pi. Sometimes I have to try more than once
to get it to come up. DexOS has a config.txt solution for this I simply
just try again.
Once you see some characters then see it every so many seconds send
something that looks kind of like garbage, you are ready to download
a program.
Grab blinker01 or something simple like that. Edit the makefile
and replace $(ARMGNU)- with nothing
Such that lines like these:
blinker01.elf : memmap vectors.o blinker01.o
$(ARMGNU)-ld vectors.o blinker01.o -T memmap -o blinker01.elf
$(ARMGNU)-objdump -D blinker01.elf > blinker01.list
Change to this:
blinker01.elf : memmap vectors.o blinker01.o
ld vectors.o blinker01.o -T memmap -o blinker01.elf
objdump -D blinker01.elf > blinker01.list
Save the makefile and run make from a Linux pi command line.
If you are actually on an arm based Linux (which the linux pi is) it should
build just fine. If you try this on your x86 it should fail the asm code
in particular will fail to assemble, game over.
So now you have a .bin file to try, as mentioned above you want it
wherever you launched minicom to save yourself some trouble. I am
going to assume the filename in question is hello.bin
Back to the minicom window, it should be getting those weird characters
once every so many seconds.
Press Ctrl-A then press S
this should pop up one of those minicom menus with a few upload choices,
down arrow twice to xmodem and hit enter one time
Now you have the file selection window of pain. If you took my advice
the just hit enter one time It should pop up another thing that says
No file selected - enter filename:
Now type in
hello.bin
and press enter one time
it should then do the download to the bare metal pi, and the
program should load and run on the bare metal pi.
When you want to run another program, pull the usb cable for the
bare metal pi (LEAVE THE LINUX PI POWERED). and plug it back in, I find
the fat plug on the computer side is easier to pull and replug than
the micro-b connector on the rasberry pi itself, YMMV.
Note that once you have typed in the filename one time in minicom,
so long as you dont exit minicom it will be there the next time you
run, if you use the same filename for a while the download key sequence
becomes
ctrl-a
s
down arrow
down arrow
enter
enter
enter
Modify your program
compile
copy to whever
mouse over to minicom
power cycle the bare metal pi
do the key sequence
repeat
To exit minicom:
Ctrl-A then Q and press enter to select the default of exiting without
reset.
If your bare metal pi program spits out stuff (the uart## examples)
and the text goes off the right side of the minicom window then
use Ctrl-a then w to swich to wrap mode, and the text will wrap so you
can see all of it.
Minicom may be clunky but like vi it is available for so many Linux/unix
platforms that you can rely on it as a tool in your toolbox, you may
not like it but it is always there. Like hyperterm used to be for
Windows, but geez, they screwed that up didnt they? Like minicom
hyperterm was not the best tool, but for a good many years/versions it
was always there.