From 511b2eb4de3fd46439e12e8121e3d89506eb8c25 Mon Sep 17 00:00:00 2001 From: Frank Voorburg Date: Wed, 16 Aug 2017 14:45:26 +0000 Subject: [PATCH] Refs #311. Reworked compiler specific parts in the LPC2000 port. git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@340 5dc33758-31d5-4daf-9ae8-b24bf3d40d73 --- .../bin/openblt_olimex_lpc_l2294_20mhz.elf | Bin 98613 -> 98477 bytes .../bin/openblt_olimex_lpc_l2294_20mhz.hex | 678 ++++++++-------- .../bin/openblt_olimex_lpc_l2294_20mhz.map | 136 ++-- .../Boot}/cstart.s | 4 +- .../Boot/makefile | 12 +- .../Boot}/memory.x | 0 .../Boot}/vectors.c | 4 +- .../Source/ARM7_LPC2000/Crossworks/cpu_comp.c | 91 --- .../Source/ARM7_LPC2000/Crossworks/cstart.s | 419 ---------- Target/Source/ARM7_LPC2000/Crossworks/flash.c | 760 ------------------ Target/Source/ARM7_LPC2000/Crossworks/flash.h | 45 -- .../Source/ARM7_LPC2000/Crossworks/memory.x | 356 -------- Target/Source/ARM7_LPC2000/{GCC => }/flash.c | 0 Target/Source/ARM7_LPC2000/{GCC => }/flash.h | 0 14 files changed, 416 insertions(+), 2089 deletions(-) rename Target/{Source/ARM7_LPC2000/GCC => Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot}/cstart.s (96%) rename Target/{Source/ARM7_LPC2000/GCC => Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot}/memory.x (100%) rename Target/{Source/ARM7_LPC2000/GCC => Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot}/vectors.c (94%) delete mode 100644 Target/Source/ARM7_LPC2000/Crossworks/cpu_comp.c delete mode 100644 Target/Source/ARM7_LPC2000/Crossworks/cstart.s delete mode 100644 Target/Source/ARM7_LPC2000/Crossworks/flash.c delete mode 100644 Target/Source/ARM7_LPC2000/Crossworks/flash.h delete mode 100644 Target/Source/ARM7_LPC2000/Crossworks/memory.x rename Target/Source/ARM7_LPC2000/{GCC => }/flash.c (100%) rename Target/Source/ARM7_LPC2000/{GCC => }/flash.h (100%) diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.elf index 61d41201cab3d9a2d392ee40dd649b7963df9341..9731f86dcdeb95439ad232eecd3c8436de06002d 100644 GIT binary patch delta 11643 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 x(lP(UNAQ@5QIiRz-na)Dk=z> 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 diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.hex b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.hex index 9b785c82..55f097fc 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.hex +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.hex @@ -1,7 +1,7 @@ :1000000018F09FE518F09FE514F09FE514F09FE5C8 :1000100014F09FE50000A0E114F09FE50CF09FE5CF -:100020003C000000CC150000CC150000CC150000F1 -:1000300094150000B01500000000000080009FE54E +:100020003C000000B8010000B8010000B801000069 +:10003000800100009C0100000000000080009FE59E :10004000DBF021E300D0A0E1040040E2D7F021E39F :1000500000D0A0E1040040E2D1F021E300D0A0E113 :10006000040040E2D2F021E300D0A0E1040040E22D @@ -10,7 +10,7 @@ :1000900034209FE534309FE5030052E104009134A1 :1000A00004008234FBFFFF3A0000A0E320109FE52C :1000B00020209FE5020051E104008134FCFFFF3A5B -:1000C0001EFF2FE1DC1E0040B018000000020040BF +:1000C0001EFF2FE1DC1E00409018000000020040DF :1000D0000102004004020040F806004008402DE9FB :1000E00094309FE52220A0E38420C3E55510E0E38F :1000F0008C10C3E55520A0E38C20C3E50100A0E3EC @@ -21,334 +21,334 @@ :100140000420C3E50220A0E30020C3E50120A0E3D2 :100150000021C3E51D3843E2002093E5052082E33A :10016000002083E5042093E5012782E3042083E552 -:10017000020000EB0A0000EBFDFFFFEA00C01FE0F9 -:1001800008402DE9F50100EBEF0100EB5F0300EB08 -:100190003D0300EB090000EBE10100EB0840BDE886 -:1001A0001EFF2FE108402DE9E80100EB6F0300EB93 -:1001B0000E0000EBC60100EB0840BDE81EFF2FE17A -:1001C00010402DE95D0000EB0C0200EB18409FE5AC -:1001D0000130A0E30030C4E5B80200EB0030A0E33A -:1001E0000030C4E51040BDE81EFF2FE100020040D2 -:1001F00008402DE948009FE56F0200EB010050E345 -:100200000400001A0120A0E338309FE50020C3E578 -:100210002C009FE55E0000EB24009FE5D80200EB78 -:10022000010050E30400001A0020A0E314309FE511 -:100230000020C3E508009FE5550000EB0840BDE83D -:100240001EFF2FE104020040000200401EFF2FE1CC -:1002500038402DE90040A0E10150A0E130309FE599 -:100260000030D3E5010053E3FF1001022302000B2D -:100270001C309FE50030D3E5000053E3FF1005027A -:100280000400A0019D02000B3C0000EB3840BDE8DB -:100290001EFF2FE10002004030309FE50000D3E553 -:1002A000020050E30500000A030050E30500000AC5 -:1002B000010050E30800A0034000A0131EFF2FE13F -:1002C0000000A0E31EFF2FE10000A0E31EFF2FE1CE -:1002D0000002004030309FE50000D3E5020050E30B -:1002E0000500000A030050E30500000A010050E386 -:1002F0000800A0034000A0131EFF2FE10000A0E3B0 -:100300001EFF2FE10000A0E31EFF2FE100020040CE -:1003100008402DE9130000EB0840BDE81EFF2FE167 -:1003200014309FE50120E0E30320C3E50400C3E5AA -:100330000220A0E3B424C3E11EFF2FE144020040E9 -:100340001C309FE50020A0E30020C3E5482083E5A2 -:100350004320C3E5B424C3E10220C3E50120C3E583 -:100360001EFF2FE1440200400C309FE50000D3E562 -:10037000000090E20100A0131EFF2FE144020040A4 -:100380000020A0E304309FE54320C3E51EFF2FE1DA -:100390004402004038402DE90040A0E10030D0E5A3 -:1003A000FF0053E31600001A1C459FE50030A0E350 -:1003B0000130C4E50150A0E30050C4E50020E0E3B3 -:1003C0000320C4E51020A0E30420C4E50530C4E503 -:1003D000B0FFFFEB0600C4E5BDFFFFEB0700C4E57F -:1003E000BBFFFFEB2004A0E10800C4E50950C4E511 -:1003F0000A50C4E50830A0E3B434C4E1A20200EB23 -:10040000200100EAC0249FE50020D2E5010052E36C -:100410002B01001AC93043E2350053E303F19F97E3 -:10042000160100EAF40600008008000080080000C1 -:1004300074080000800800008008000058080000D0 -:10044000500700001C080000E407000080080000BE -:10045000800800008008000080080000800800007C -:10046000800800008008000080080000800800006C -:10047000800800008008000080080000800800005C -:10048000800800008008000080080000800800004C -:10049000800800008008000080080000800800003C -:1004A000800800008008000080080000800800002C -:1004B000800800008008000080080000800800001C -:1004C000800800008008000080080000D8050000B7 -:1004D00058050000FC040000B8050000800800007A -:1004E00080080000800800004C0600008008000022 -:1004F000900600009C060000D00600000150D0E5E8 -:1005000064FFFFEB010040E2000055E1020000DA69 -:100510002200A0E381FFFFEBDA0000EAA8539FE589 -:10052000040085E2481095E50120D4E50F0100EBB9 -:100530000030E0E30330C5E50120D4E5483095E51F -:10054000033082E0483085E50130D4E5013083E2B4 -:10055000B434C5E1CB0000EA0150D0E54DFFFFEB1C -:10056000010040E2000055E1020000DA2200A0E3B1 -:100570006AFFFFEBC30000EA041094E548539FE5CF -:10058000481085E5040085E20120D4E5F70000EB82 -:100590000030E0E30330C5E50120D4E5483095E5BF -:1005A000033082E0483085E50130D4E5013083E254 -:1005B000B434C5E1B30000EA0C339FE50020E0E36A -:1005C0000320C3E5042090E5482083E50120A0E353 -:1005D000B424C3E1AB0000EAEC329FE50020E0E385 -:1005E0000320C3E5483093E5040090E5000050E3A4 -:1005F0000700000A030080E00020A0E30110D3E41C -:10060000012082E0FF2002E2000053E1FAFFFF1A1E -:10061000000000EA0020A0E3AC329FE50010A0E358 -:100620000720C3E50810C3E50910C3E50A10C3E5B8 -:100630000120A0E30420C3E50510C3E50610C3E5CF -:100640000820A0E3B424C3E18E0000EA78329FE5DD -:100650000020E0E30320C3E570229FE5482083E506 -:100660000020A0E30420C3E50520C3E50620C3E580 -:100670000710A0E30710C3E50820C3E50920C3E580 -:100680000A20C3E50820A0E3B424C3E17D0000EA0A -:100690000000A0E321FFFFEB7A0000EA28329FE58B -:1006A0000020E0E30320C3E50020A0E30420C3E52D -:1006B0000110D3E50510C3E50620C3E50720C3E517 -:1006C0000820C3E50620A0E3B424C3E16D0000EADE -:1006D000F4319FE50020A0E30020C3E50120C3E53D -:1006E0000020E0E30320C3E50120A0E3B424C3E13C -:1006F000640000EAD0319FE5485093E5E5FEFFEB4A -:10070000011040E20500A0E1012084E2E60100EBD7 -:10071000000050E30200001A3100A0E3FFFEFFEBEF -:10072000580000EAA0419FE50030E0E30330C4E553 -:10073000485094E5D7FEFFEB015045E2000085E00C -:10074000480084E50130A0E3B434C4E14D0000EA80 -:100750000150D0E5CFFEFFEB020040E2000055E182 -:10076000020000DA2200A0E3ECFEFFEB450000EA05 -:1007700054319FE50020E0E30320C3E50120A0E31E -:10078000B424C3E10110D4E5000051E30500001AD0 -:10079000D50100EB000050E33A00001A3100A0E35D -:1007A000DEFEFFEB370000EA1C319FE5480093E5D1 -:1007B000022084E2BC0100EB000050E30200001ABA -:1007C0003100A0E3D5FEFFEB2E0000EAF8309FE5F4 -:1007D0000110D4E5482093E5022081E0482083E51C -:1007E000280000EAE0409FE50030E0E30330C4E584 -:1007F0000050A0E30450C4E50550C4E5A5FEFFEB9E -:100800000600C4E50750C4E50850C4E50950C4E536 -:100810000730A0E3B434C4E11A0000EAA8309FE531 -:10082000480093E5041094E5A30100EB000050E3B9 -:100830000200001A3100A0E3B8FEFFEB110000EA4D -:1008400084309FE50020E0E30320C3E50120A0E31E -:10085000B424C3E10B0000EA540000EB68309FE5CC -:100860000020E0E30320C3E50120A0E3B424C3E1BA -:10087000040000EA3100A0E3A8FEFFEB010000EA5B -:100880002000A0E3A5FEFFEB3C309FE54330D3E51D -:10089000010053E31000A003A0FEFF0B28309FE5EA -:1008A000B414D3E10138A0E1000053E3040000DAFE -:1008B00014009FE50130A0E34330C0E5030080E26F -:1008C00062FEFFEB3840BDE81EFF2FE1440200400E -:1008D0005017000008402DE98CFEFFEB010050E3AB -:1008E0000C00000A34309FE50030D3E5010053E3EB -:1008F0000800001AA90100EB20309FE5043093E5C1 -:100900007D3F83E2030050E10020A0230C309F25AF -:100910000020C3252500002B0840BDE81EFF2FE165 -:100920009002004010402DE918409FE50130A0E3FF -:100930000030C4E5990100EB040084E5E4FFFFEB1F -:100940001040BDE81EFF2FE1900200401EFF2FE186 -:100950001EFF2FE108402DE9FCFFFFEBFDFFFFEA42 -:1009600008402DE91E0300EB0840BDE81EFF2FE103 -:1009700070402DE9016042E20668A0E12668A0E12E -:10098000000052E30700000A014041E2016086E0F6 -:10099000005061E00130F4E50430C5E7EBFFFFEB08 -:1009A000060054E1FAFFFF1A7040BDE81EFF2FE178 -:1009B00008402DE9440100EB000050E30C00000A60 -:1009C00021FEFFEB610100EB430100EB0010A0E111 -:1009D0000101A0E34020A0E3E4FFFFEB0220A0E33D -:1009E00014309FE5402083E50131A0E30FE0A0E152 -:1009F00013FF2FE10840BDE81EFF2FE100C01FE0FC -:100A0000F0472DE90220A0E3D8309FE50020C3E5A0 -:100A1000023983E20120A0E3002083E50040A0E347 -:100A2000104083E5084083E5BC809FE5BC709FE5EE -:100A3000BC909FE50830A0E10460F3E701A0D3E596 -:100A40000A3086E0013083E2835263E0053183E0BF -:100A50000351A0E10700A0E10510A0E1320300EB83 -:100A6000000051E30F00001A0700A0E10510A0E10B -:100A7000E30200EB013040E20338A0E1230859E132 -:100A80000800003A0038A0E12338A0E1013043E239 -:100A9000012046E201A04AE20AAAA0E102288AE176 -:100AA000032082E1030000EA024084E2240054E3D0 -:100AB000DFFFFF1A040000EA38309FE5142083E5C9 -:100AC0000020A0E3002083E5040000EA28009FE561 -:100AD000C410A0E39EFFFFEB0020A0E3F5FFFFEAB8 -:100AE000F047BDE81EFF2FE100C003E058170000EB -:100AF00060EA0000FF030000004004E03C18000032 -:100B000038402DE90040A0E10150A0E19C309FE574 -:100B10001C3093E5040013E394009F05D610A00356 -:100B20008BFFFF0B0558A0E180309FE5305083E537 -:100B300080209FE5342083E50310D4E50220D4E52E -:100B40000228A0E1012C82E00110D4E5012482E01A -:100B50000010D4E5012082E0382083E50710D4E5B9 -:100B60000620D4E50228A0E1012C82E00510D4E59E -:100B7000012482E00410D4E5012082E03C2083E5DA -:100B80002120A0E3042083E51C3093E5080013E353 -:100B90000400001A14409FE56CFFFFEB1C3094E545 -:100BA000080013E3FBFFFF0A3840BDE81EFF2FE1FA -:100BB000004004E03C180000E107000098309FE589 -:100BC0001C3093E5010013E31F00000A88309FE505 -:100BD000242093E584309FE5030052E11C00001AB5 -:100BE00074309FE5282093E50020C0E5282093E598 -:100BF0002224A0E10120C0E5282093E52228A0E1DD -:100C00000220C0E5282093E5222CA0E10320C0E5C6 -:100C10002C2093E50420C0E52C2093E52224A0E1BC -:100C20000520C0E52C2093E52228A0E10620C0E5A0 -:100C30002C2093E5222CA0E10720C0E50420A0E3AE -:100C4000042083E50100A0E31EFF2FE10000A0E3E4 -:100C50001EFF2FE10000A0E31EFF2FE1004004E093 -:100C60006706000010402DE94C309FE51430D3E5B5 -:100C7000200013E30000A0030D00000A38309FE5B8 -:100C80000000C3E51430D3E5200013E30500001A8B -:100C900024409FE52DFFFFEB1430D4E5200013E343 -:100CA000FBFFFF0A010000EA0100A0E3000000EAE8 -:100CB0000100A0E31040BDE81EFF2FE100C000E0EE -:100CC00034309FE50020A0E30420C3E50820C3E5FD -:100CD0001420C3E57F10E0E30C10C3E54110A0E34E -:100CE0000010C3E50420C3E50320A0E30C20C3E506 -:100CF0000720A0E30820C3E51EFF2FE100C000E0AD -:100D0000F0412DE90060A0E10140A0E1400051E385 -:100D100068009F859310A0830DFFFF8B0400A0E166 -:100D2000CFFFFFEB010050E350009F159710A01379 -:100D300007FFFF1B0450A0E1000054E30D00000A70 -:100D40000040A0E334809FE5A070A0E3FFFEFFEB2E -:100D50000400D6E7C2FFFFEB010050E30800A0113A -:100D60000710A011FAFEFF1B014084E20438A0E145 -:100D7000230855E1F4FFFF8AF041BDE81EFF2FE193 -:100D80006018000010402DE9F4309FE50030D3E5F5 -:100D9000000053E31400001AE8309FE51430D3E557 -:100DA000010013E30000A0033300000AD4309FE5E4 -:100DB0000030D3E5FF3003E2C4209FE50430C2E5F4 -:100DC000000053E30000A0032B00000A730000EBB7 -:100DD000AC309FE5480083E50000A0E34C00C3E58C -:100DE0000120A0E30020C3E5230000EA90309FE546 -:100DF0004C20D3E58C309FE51430D3E5010013E39C -:100E00001600000A7C309FE500C0D3E570309FE5F6 -:100E1000021083E005C0C1E5012082E2FF2002E26A -:100E20004C20C3E50430D3E5020053E10000A013D9 -:100E30001100001A48409FE5051084E2CBFEFFEB4D -:100E40000030A0E30030C4E50100A0E30A0000EA9E -:100E50000000A0E328309FE50000C3E5060000EA9B -:100E60004E0000EB18309FE5483093E5643083E294 -:100E7000030050E1F5FFFF8A0000A0E31040BDE849 -:100E80001EFF2FE19802004000C000E008402DE95D -:100E9000FE0000EB0840BDE81EFF2FE108402DE9F1 -:100EA000000100EB0840BDE81EFF2FE108402DE9DE -:100EB000020100EB0840BDE81EFF2FE108402DE9CC -:100EC000190100EB0840BDE81EFF2FE108402DE9A5 -:100ED000830100EB0840BDE81EFF2FE108402DE92B -:100EE000A90100EB0840BDE81EFF2FE108402DE9F5 -:100EF0005A0100EB000050E30000A0030100000ACB -:100F0000890100EBFFFFFFEA0840BDE81EFF2FE16B -:100F10002C309FE50020A0E3142083E5282083E502 -:100F200020109FE50C1083E50110A0E3041083E579 -:100F3000081093E510309FE5001083E5042083E559 -:100F40001EFF2FE1004000E05FEA0000E8020040E1 -:100F500014309FE50020A0E3042083E50C2083E506 -:100F6000082083E5102083E51EFF2FE1004000E00C -:100F700020309FE5082093E51C309FE5041093E5A1 -:100F8000011082E0000093E5011060E0041083E5A9 -:100F9000002083E51EFF2FE1004000E0E802004052 -:100FA00008402DE9F1FFFFEB08309FE5040093E5D1 -:100FB0000840BDE81EFF2FE1E8020040F8402DE99F -:100FC0000070A0E10040A0E30450A0E150609FE564 -:100FD0005EFEFFEB063094E7070053E10900008A4C -:100FE000041086E0041091E5013083E0030057E12E -:100FF0000400002A852085E024309FE5022183E05B -:101000000800D2E5040000EA015085E20C4084E2C9 -:10101000C00054E3EDFFFF1AFF00A0E3F840BDE875 -:101020001EFF2FE17C17000030402DE924D04DE257 -:101030000040A0E1000090E5DFFFFFEBFF0050E380 -:101040000000A0033800000A3220A0E30C208DE548 -:1010500010008DE514008DE50130A0E300308DE532 -:101060003AFEFFEB0C008DE20D10A0E13A31E0E317 -:101070000FE0A0E113FF2FE100309DE5000053E3F6 -:101080000000A0132800001A3330A0E30C308DE5D7 -:101090000450A0E1043095E410308DE514508DE546 -:1010A000023CA0E318308DE588309FE51C308DE5CB -:1010B0000130A0E300308DE524FEFFEB0C008DE253 -:1010C0000D10A0E13A31E0E30FE0A0E113FF2FE1C2 -:1010D00000309DE5000053E30000A0131200001A49 -:1010E0003830A0E30C308DE5003094E510308DE50C -:1010F00014508DE5023CA0E318308DE50130A0E3EB -:1011000000308DE511FEFFEB0C008DE20D10A0E12B -:101110003A31E0E30FE0A0E113FF2FE100009DE58D -:10112000010070E20000A033FFFFFFEA24D08DE24F -:101130003040BDE81EFF2FE160EA000038402DE995 -:101140000040A0E10150A0E16C309FE5030050E1B8 -:101150000500000A020A51E30800000AB1FFFFEB94 -:10116000000050E30100001A0E0000EA4C409FE529 -:10117000853BB0E10000A0130D00001A000000EA5A -:1011800034409FE5003094E5030055E10700000A74 -:101190000400A0E1045080E40510A0E1022CA0E3CB -:1011A000F2FDFFEB010000EA0000A0E3000000EA0E -:1011B0000400A0E13840BDE81EFF2FE1F404004028 -:1011C000F0020040F8432DE90060A0E10140A0E1F9 -:1011D0000270A0E10350A0E1A194A0E18994A0E1F4 -:1011E000003090E5010073E3049080040910A00131 -:1011F000022CA003DDFDFF0B003096E5090053E152 -:101200000400000A0600A0E10910A0E1CAFFFFEBFC -:10121000006050E21500000A003096E5044063E0EB -:10122000044086E0044084E25C809FE5029C89E201 -:10123000C6FDFFEB043086E2043063E0080053E1B2 -:101240000500009A0600A0E10910A0E1BAFFFFEB3B -:10125000006050E20700000A044086E20130D7E453 -:101260000130C4E4015055E2F0FFFF1A030000EA28 -:101270000000A0E3020000EA0000A0E3000000EA92 -:101280000100A0E3F843BDE81EFF2FE1FF010000CD -:101290000C309FE50020E0E3002083E5042283E595 -:1012A0001EFF2FE1F00200400C309FE50020E0E33C -:1012B000002083E5042283E51EFF2FE1F0020040B9 -:1012C00070402DE90040A0E10150A0E10260A0E1E2 -:1012D00039FFFFEBFF0050E30000A0030E00000AFF -:1012E000010045E2040080E033FFFFEBFF0050E324 -:1012F0000000A0030800000AA434A0E1100053E39A -:101300001C009F051C009F150410A0E10620A0E111 -:101310000530A0E1AAFFFFEBFFFFFFEA7040BDE848 -:101320001EFF2FE1F4040040F002004070402DE960 -:1013300020D04DE20050A0E10160A0E11EFFFFEBD4 -:101340000040A0E1010046E2050080E01AFFFFEB4B -:101350000050A0E1FF0054E3FF0050130000A00381 -:101360003A00000A050054E10000A0833700008A1B -:10137000000054E30000A0033400000A100055E30D -:101380000000A0833100008A3230A0E30C308DE5EC -:1013900010408DE514508DE50130A0E300308DE55F -:1013A0006AFDFFEB0C008DE20D10A0E13A31E0E3A5 -:1013B0000FE0A0E113FF2FE100309DE5000053E3B3 -:1013C0000000A0132100001A3430A0E30C308DE59A -:1013D00010408DE514508DE57C309FE518308DE58B -:1013E0000130A0E300308DE558FDFFEB0C008DE2ED -:1013F0000D10A0E13A31E0E30FE0A0E113FF2FE18F -:1014000000309DE5000053E30000A0130F00001A18 -:101410003530A0E30C308DE510408DE514508DE59E -:101420000130A0E300308DE548FDFFEB0C008DE2BC -:101430000D10A0E13A31E0E30FE0A0E113FF2FE14E -:1014400000009DE5010070E20000A033FFFFFFEA0D -:1014500020D08DE27040BDE81EFF2FE160EA000061 -:1014600004E02DE50CD04DE26C309FE5043293E5AD -:10147000010073E30100A0031400000A58309FE547 -:10148000832F83E2060012E8011082E0102293E528 -:10149000021081E0142293E5021081E0182293E506 -:1014A000021081E0202293E5021081E0242293E5DE -:1014B000023081E0003063E208208DE2043022E552 -:1014C00018009FE50410A0E37CFFFFEBFFFFFFEA9D -:1014D0000CD08DE204E09DE41EFF2FE1F0020040FD -:1014E00014200000023AA0E3050093E8000082E027 -:1014F000082093E5020080E00C2093E5020080E0E4 -:10150000102093E5020080E0142093E5020080E0C3 -:10151000182093E5020080E01C3093E5030080E092 -:10152000010070E20000A0331EFF2FE108402DE90A -:101530004C309FE5043293E5010073E30400000A98 -:1015400040009FE5B7FEFFEB000050E30000A00362 -:101550000900000A28309FE5003093E5010073E39D -:101560000100A0030400000A14009FE5ADFEFFEB9C -:10157000000090E20100A013FFFFFFEA0840BDE871 -:101580001EFF2FE1F0020040F4040040020AA0E335 -:101590001EFF2FE104E04EE21F402DE908009FE509 -:1015A0003410A0E3EAFCFFEB1F80FDE88418000084 -:1015B00004E04EE20F502DE908009FE54010A0E343 -:1015C000E3FCFFEB0F90FDE8841800000F502DE9BD -:1015D00008009FE54C10A0E3DDFCFFEB0F90FDE859 -:1015E0008418000000300FE1803083E303F029E12C +:10017000160000EB1E0000EBFDFFFFEA00C01FE0D1 +:1001800004E04EE21F402DE908009FE53410A0E393 +:10019000030200EB1F80FDE83C18000004E04EE283 +:1001A0000F502DE908009FE54010A0E3FC0100EB93 +:1001B0000F90FDE83C1800000F502DE908009FE566 +:1001C0004C10A0E3F60100EB0F90FDE83C18000096 +:1001D00008402DE9F50100EBEF0100EB5F0300EBB8 +:1001E0003D0300EB090000EBE10100EB0840BDE836 +:1001F0001EFF2FE108402DE9E80100EB6F0300EB43 +:100200000E0000EBC60100EB0840BDE81EFF2FE129 +:1002100010402DE95D0000EB0C0200EB18409FE55B +:100220000130A0E30030C4E5B80200EB0030A0E3E9 +:100230000030C4E51040BDE81EFF2FE10002004081 +:1002400008402DE948009FE56F0200EB010050E3F4 +:100250000400001A0120A0E338309FE50020C3E528 +:100260002C009FE55E0000EB24009FE5D80200EB28 +:10027000010050E30400001A0020A0E314309FE5C1 +:100280000020C3E508009FE5550000EB0840BDE8ED +:100290001EFF2FE104020040000200401EFF2FE17C +:1002A00038402DE90040A0E10150A0E130309FE549 +:1002B0000030D3E5010053E3FF1001022302000BDD +:1002C0001C309FE50030D3E5000053E3FF1005022A +:1002D0000400A0019D02000B3C0000EB3840BDE88B +:1002E0001EFF2FE10002004030309FE50000D3E503 +:1002F000020050E30500000A030050E30500000A75 +:10030000010050E30800A0034000A0131EFF2FE1EE +:100310000000A0E31EFF2FE10000A0E31EFF2FE17D +:100320000002004030309FE50000D3E5020050E3BA +:100330000500000A030050E30500000A010050E335 +:100340000800A0034000A0131EFF2FE10000A0E35F +:100350001EFF2FE10000A0E31EFF2FE1000200407E +:1003600008402DE9130000EB0840BDE81EFF2FE117 +:1003700014309FE50120E0E30320C3E50400C3E55A +:100380000220A0E3B424C3E11EFF2FE14402004099 +:100390001C309FE50020A0E30020C3E5482083E552 +:1003A0004320C3E5B424C3E10220C3E50120C3E533 +:1003B0001EFF2FE1440200400C309FE50000D3E512 +:1003C000000090E20100A0131EFF2FE14402004054 +:1003D0000020A0E304309FE54320C3E51EFF2FE18A +:1003E0004402004038402DE90040A0E10030D0E553 +:1003F000FF0053E31600001A1C459FE50030A0E300 +:100400000130C4E50150A0E30050C4E50020E0E362 +:100410000320C4E51020A0E30420C4E50530C4E5B2 +:10042000B0FFFFEB0600C4E5BDFFFFEB0700C4E52E +:10043000BBFFFFEB2004A0E10800C4E50950C4E5C0 +:100440000A50C4E50830A0E3B434C4E1A20200EBD2 +:10045000200100EAC0249FE50020D2E5010052E31C +:100460002B01001AC93043E2350053E303F19F9793 +:10047000160100EA44070000D0080000D008000080 +:10048000C4080000D0080000D0080000A808000040 +:10049000A00700006C08000034080000D00800002D +:1004A000D0080000D0080000D0080000D0080000EC +:1004B000D0080000D0080000D0080000D0080000DC +:1004C000D0080000D0080000D0080000D0080000CC +:1004D000D0080000D0080000D0080000D0080000BC +:1004E000D0080000D0080000D0080000D0080000AC +:1004F000D0080000D0080000D0080000D00800009C +:10050000D0080000D0080000D0080000D00800008B +:10051000D0080000D0080000D00800002806000025 +:10052000A80500004C05000008060000D0080000E7 +:10053000D0080000D00800009C060000D008000091 +:10054000E0060000EC060000200700000150D0E5A6 +:1005500064FFFFEB010040E2000055E1020000DA19 +:100560002200A0E381FFFFEBDA0000EAA8539FE539 +:10057000040085E2481095E50120D4E50F0100EB69 +:100580000030E0E30330C5E50120D4E5483095E5CF +:10059000033082E0483085E50130D4E5013083E264 +:1005A000B434C5E1CB0000EA0150D0E54DFFFFEBCC +:1005B000010040E2000055E1020000DA2200A0E361 +:1005C0006AFFFFEBC30000EA041094E548539FE57F +:1005D000481085E5040085E20120D4E5F70000EB32 +:1005E0000030E0E30330C5E50120D4E5483095E56F +:1005F000033082E0483085E50130D4E5013083E204 +:10060000B434C5E1B30000EA0C339FE50020E0E319 +:100610000320C3E5042090E5482083E50120A0E302 +:10062000B424C3E1AB0000EAEC329FE50020E0E334 +:100630000320C3E5483093E5040090E5000050E353 +:100640000700000A030080E00020A0E30110D3E4CB +:10065000012082E0FF2002E2000053E1FAFFFF1ACE +:10066000000000EA0020A0E3AC329FE50010A0E308 +:100670000720C3E50810C3E50910C3E50A10C3E568 +:100680000120A0E30420C3E50510C3E50610C3E57F +:100690000820A0E3B424C3E18E0000EA78329FE58D +:1006A0000020E0E30320C3E570229FE5482083E5B6 +:1006B0000020A0E30420C3E50520C3E50620C3E530 +:1006C0000710A0E30710C3E50820C3E50920C3E530 +:1006D0000A20C3E50820A0E3B424C3E17D0000EABA +:1006E0000000A0E321FFFFEB7A0000EA28329FE53B +:1006F0000020E0E30320C3E50020A0E30420C3E5DD +:100700000110D3E50510C3E50620C3E50720C3E5C6 +:100710000820C3E50620A0E3B424C3E16D0000EA8D +:10072000F4319FE50020A0E30020C3E50120C3E5EC +:100730000020E0E30320C3E50120A0E3B424C3E1EB +:10074000640000EAD0319FE5485093E5E5FEFFEBF9 +:10075000011040E20500A0E1012084E2E60100EB87 +:10076000000050E30200001A3100A0E3FFFEFFEB9F +:10077000580000EAA0419FE50030E0E30330C4E503 +:10078000485094E5D7FEFFEB015045E2000085E0BC +:10079000480084E50130A0E3B434C4E14D0000EA30 +:1007A0000150D0E5CFFEFFEB020040E2000055E132 +:1007B000020000DA2200A0E3ECFEFFEB450000EAB5 +:1007C00054319FE50020E0E30320C3E50120A0E3CE +:1007D000B424C3E10110D4E5000051E30500001A80 +:1007E000D50100EB000050E33A00001A3100A0E30D +:1007F000DEFEFFEB370000EA1C319FE5480093E581 +:10080000022084E2BC0100EB000050E30200001A69 +:100810003100A0E3D5FEFFEB2E0000EAF8309FE5A3 +:100820000110D4E5482093E5022081E0482083E5CB +:10083000280000EAE0409FE50030E0E30330C4E533 +:100840000050A0E30450C4E50550C4E5A5FEFFEB4D +:100850000600C4E50750C4E50850C4E50950C4E5E6 +:100860000730A0E3B434C4E11A0000EAA8309FE5E1 +:10087000480093E5041094E5A30100EB000050E369 +:100880000200001A3100A0E3B8FEFFEB110000EAFD +:1008900084309FE50020E0E30320C3E50120A0E3CE +:1008A000B424C3E10B0000EA540000EB68309FE57C +:1008B0000020E0E30320C3E50120A0E3B424C3E16A +:1008C000040000EA3100A0E3A8FEFFEB010000EA0B +:1008D0002000A0E3A5FEFFEB3C309FE54330D3E5CD +:1008E000010053E31000A003A0FEFF0B28309FE59A +:1008F000B414D3E10138A0E1000053E3040000DAAE +:1009000014009FE50130A0E34330C0E5030080E21E +:1009100062FEFFEB3840BDE81EFF2FE144020040BD +:100920005017000008402DE98CFEFFEB010050E35A +:100930000C00000A34309FE50030D3E5010053E39A +:100940000800001AA90100EB20309FE5043093E570 +:100950007D3F83E2030050E10020A0230C309F255F +:100960000020C3252500002B0840BDE81EFF2FE115 +:100970009002004010402DE918409FE50130A0E3AF +:100980000030C4E5990100EB040084E5E4FFFFEBCF +:100990001040BDE81EFF2FE1900200401EFF2FE136 +:1009A0001EFF2FE108402DE9FCFFFFEBFDFFFFEAF2 +:1009B00008402DE90A0300EB0840BDE81EFF2FE1C7 +:1009C00070402DE9016042E20668A0E12668A0E1DE +:1009D000000052E30700000A014041E2016086E0A6 +:1009E000005061E00130F4E50430C5E7EBFFFFEBB8 +:1009F000060054E1FAFFFF1A7040BDE81EFF2FE128 +:100A000008402DE9440100EB000050E30C00000A0F +:100A100021FEFFEB610100EB430100EB0010A0E1C0 +:100A20000101A0E34020A0E3E4FFFFEB0220A0E3EC +:100A300014309FE5402083E50131A0E30FE0A0E101 +:100A400013FF2FE10840BDE81EFF2FE100C01FE0AB +:100A5000F0472DE90220A0E3D8309FE50020C3E550 +:100A6000023983E20120A0E3002083E50040A0E3F7 +:100A7000104083E5084083E5BC809FE5BC709FE59E +:100A8000BC909FE50830A0E10460F3E701A0D3E546 +:100A90000A3086E0013083E2835263E0053183E06F +:100AA0000351A0E10700A0E10510A0E11E0300EB47 +:100AB000000051E30F00001A0700A0E10510A0E1BB +:100AC000CF0200EB013040E20338A0E1230859E1F6 +:100AD0000800003A0038A0E12338A0E1013043E2E9 +:100AE000012046E201A04AE20AAAA0E102288AE126 +:100AF000032082E1030000EA024084E2240054E380 +:100B0000DFFFFF1A040000EA38309FE5142083E578 +:100B10000020A0E3002083E5040000EA28009FE510 +:100B2000C410A0E39EFFFFEB0020A0E3F5FFFFEA67 +:100B3000F047BDE81EFF2FE100C003E0581700009A +:100B400060EA0000FF030000004004E048180000D5 +:100B500038402DE90040A0E10150A0E19C309FE524 +:100B60001C3093E5040013E394009F05D610A00306 +:100B70008BFFFF0B0558A0E180309FE5305083E5E7 +:100B800080209FE5342083E50310D4E50220D4E5DE +:100B90000228A0E1012C82E00110D4E5012482E0CA +:100BA0000010D4E5012082E0382083E50710D4E569 +:100BB0000620D4E50228A0E1012C82E00510D4E54E +:100BC000012482E00410D4E5012082E03C2083E58A +:100BD0002120A0E3042083E51C3093E5080013E303 +:100BE0000400001A14409FE56CFFFFEB1C3094E5F5 +:100BF000080013E3FBFFFF0A3840BDE81EFF2FE1AA +:100C0000004004E048180000E107000098309FE52C +:100C10001C3093E5010013E31F00000A88309FE5B4 +:100C2000242093E584309FE5030052E11C00001A64 +:100C300074309FE5282093E50020C0E5282093E547 +:100C40002224A0E10120C0E5282093E52228A0E18C +:100C50000220C0E5282093E5222CA0E10320C0E576 +:100C60002C2093E50420C0E52C2093E52224A0E16C +:100C70000520C0E52C2093E52228A0E10620C0E550 +:100C80002C2093E5222CA0E10720C0E50420A0E35E +:100C9000042083E50100A0E31EFF2FE10000A0E394 +:100CA0001EFF2FE10000A0E31EFF2FE1004004E043 +:100CB0006706000010402DE94C309FE51430D3E565 +:100CC000200013E30000A0030D00000A38309FE568 +:100CD0000000C3E51430D3E5200013E30500001A3B +:100CE00024409FE52DFFFFEB1430D4E5200013E3F3 +:100CF000FBFFFF0A010000EA0100A0E3000000EA98 +:100D00000100A0E31040BDE81EFF2FE100C000E09D +:100D100034309FE50020A0E30420C3E50820C3E5AC +:100D20001420C3E57F10E0E30C10C3E54110A0E3FD +:100D30000010C3E50420C3E50320A0E30C20C3E5B5 +:100D40000720A0E30820C3E51EFF2FE100C000E05C +:100D5000F0412DE90060A0E10140A0E1400051E335 +:100D600068009F859310A0830DFFFF8B0400A0E116 +:100D7000CFFFFFEB010050E350009F159710A01329 +:100D800007FFFF1B0450A0E1000054E30D00000A20 +:100D90000040A0E334809FE5A070A0E3FFFEFFEBDE +:100DA0000400D6E7C2FFFFEB010050E30800A011EA +:100DB0000710A011FAFEFF1B014084E20438A0E1F5 +:100DC000230855E1F4FFFF8AF041BDE81EFF2FE143 +:100DD0006C18000010402DE9F4309FE50030D3E599 +:100DE000000053E31400001AE8309FE51430D3E507 +:100DF000010013E30000A0033300000AD4309FE594 +:100E00000030D3E5FF3003E2C4209FE50430C2E5A3 +:100E1000000053E30000A0032B00000A730000EB66 +:100E2000AC309FE5480083E50000A0E34C00C3E53B +:100E30000120A0E30020C3E5230000EA90309FE5F5 +:100E40004C20D3E58C309FE51430D3E5010013E34B +:100E50001600000A7C309FE500C0D3E570309FE5A6 +:100E6000021083E005C0C1E5012082E2FF2002E21A +:100E70004C20C3E50430D3E5020053E10000A01389 +:100E80001100001A48409FE5051084E2CBFEFFEBFD +:100E90000030A0E30030C4E50100A0E30A0000EA4E +:100EA0000000A0E328309FE50000C3E5060000EA4B +:100EB0004E0000EB18309FE5483093E5643083E244 +:100EC000030050E1F5FFFF8A0000A0E31040BDE8F9 +:100ED0001EFF2FE19802004000C000E008402DE90D +:100EE000FE0000EB0840BDE81EFF2FE108402DE9A1 +:100EF000000100EB0840BDE81EFF2FE108402DE98E +:100F0000020100EB0840BDE81EFF2FE108402DE97B +:100F1000190100EB0840BDE81EFF2FE108402DE954 +:100F2000830100EB0840BDE81EFF2FE108402DE9DA +:100F3000A90100EB0840BDE81EFF2FE108402DE9A4 +:100F40005A0100EB000050E30000A0030100000A7A +:100F5000890100EBFFFFFFEA0840BDE81EFF2FE11B +:100F60002C309FE50020A0E3142083E5282083E5B2 +:100F700020109FE50C1083E50110A0E3041083E529 +:100F8000081093E510309FE5001083E5042083E509 +:100F90001EFF2FE1004000E05FEA0000E802004091 +:100FA00014309FE50020A0E3042083E50C2083E5B6 +:100FB000082083E5102083E51EFF2FE1004000E0BC +:100FC00020309FE5082093E51C309FE5041093E551 +:100FD000011082E0000093E5011060E0041083E559 +:100FE000002083E51EFF2FE1004000E0E802004002 +:100FF00008402DE9F1FFFFEB08309FE5040093E581 +:101000000840BDE81EFF2FE1E8020040F8402DE94E +:101010000070A0E10040A0E30450A0E150609FE513 +:101020005EFEFFEB063094E7070053E10900008AFB +:10103000041086E0041091E5013083E0030057E1DD +:101040000400002A852085E024309FE5022183E00A +:101050000800D2E5040000EA015085E20C4084E279 +:10106000C00054E3EDFFFF1AFF00A0E3F840BDE825 +:101070001EFF2FE17C17000030402DE924D04DE207 +:101080000040A0E1000090E5DFFFFFEBFF0050E330 +:101090000000A0033800000A3220A0E30C208DE5F8 +:1010A00010008DE514008DE50130A0E300308DE5E2 +:1010B0003AFEFFEB0C008DE20D10A0E13A31E0E3C7 +:1010C0000FE0A0E113FF2FE100309DE5000053E3A6 +:1010D0000000A0132800001A3330A0E30C308DE587 +:1010E0000450A0E1043095E410308DE514508DE5F6 +:1010F000023CA0E318308DE588309FE51C308DE57B +:101100000130A0E300308DE524FEFFEB0C008DE202 +:101110000D10A0E13A31E0E30FE0A0E113FF2FE171 +:1011200000309DE5000053E30000A0131200001AF8 +:101130003830A0E30C308DE5003094E510308DE5BB +:1011400014508DE5023CA0E318308DE50130A0E39A +:1011500000308DE511FEFFEB0C008DE20D10A0E1DB +:101160003A31E0E30FE0A0E113FF2FE100009DE53D +:10117000010070E20000A033FFFFFFEA24D08DE2FF +:101180003040BDE81EFF2FE160EA000038402DE945 +:101190000040A0E10150A0E16C309FE5030050E168 +:1011A0000500000A020A51E30800000AB1FFFFEB44 +:1011B000000050E30100001A0E0000EA4C409FE5D9 +:1011C000853BB0E10000A0130D00001A000000EA0A +:1011D00034409FE5003094E5030055E10700000A24 +:1011E0000400A0E1045080E40510A0E1022CA0E37B +:1011F000F2FDFFEB010000EA0000A0E3000000EABE +:101200000400A0E13840BDE81EFF2FE1F4040040D7 +:10121000F0020040F8432DE90060A0E10140A0E1A8 +:101220000270A0E10350A0E1A194A0E18994A0E1A3 +:10123000003090E5010073E3049080040910A001E0 +:10124000022CA003DDFDFF0B003096E5090053E101 +:101250000400000A0600A0E10910A0E1CAFFFFEBAC +:10126000006050E21500000A003096E5044063E09B +:10127000044086E0044084E25C809FE5029C89E2B1 +:10128000C6FDFFEB043086E2043063E0080053E162 +:101290000500009A0600A0E10910A0E1BAFFFFEBEB +:1012A000006050E20700000A044086E20130D7E403 +:1012B0000130C4E4015055E2F0FFFF1A030000EAD8 +:1012C0000000A0E3020000EA0000A0E3000000EA42 +:1012D0000100A0E3F843BDE81EFF2FE1FF0100007D +:1012E0000C309FE50020E0E3002083E5042283E545 +:1012F0001EFF2FE1F00200400C309FE50020E0E3EC +:10130000002083E5042283E51EFF2FE1F002004068 +:1013100070402DE90040A0E10150A0E10260A0E191 +:1013200039FFFFEBFF0050E30000A0030E00000AAE +:10133000010045E2040080E033FFFFEBFF0050E3D3 +:101340000000A0030800000AA434A0E1100053E349 +:101350001C009F051C009F150410A0E10620A0E1C1 +:101360000530A0E1AAFFFFEBFFFFFFEA7040BDE8F8 +:101370001EFF2FE1F4040040F002004070402DE910 +:1013800020D04DE20050A0E10160A0E11EFFFFEB84 +:101390000040A0E1010046E2050080E01AFFFFEBFB +:1013A0000050A0E1FF0054E3FF0050130000A00331 +:1013B0003A00000A050054E10000A0833700008ACB +:1013C000000054E30000A0033400000A100055E3BD +:1013D0000000A0833100008A3230A0E30C308DE59C +:1013E00010408DE514508DE50130A0E300308DE50F +:1013F0006AFDFFEB0C008DE20D10A0E13A31E0E355 +:101400000FE0A0E113FF2FE100309DE5000053E362 +:101410000000A0132100001A3430A0E30C308DE549 +:1014200010408DE514508DE57C309FE518308DE53A +:101430000130A0E300308DE558FDFFEB0C008DE29C +:101440000D10A0E13A31E0E30FE0A0E113FF2FE13E +:1014500000309DE5000053E30000A0130F00001AC8 +:101460003530A0E30C308DE510408DE514508DE54E +:101470000130A0E300308DE548FDFFEB0C008DE26C +:101480000D10A0E13A31E0E30FE0A0E113FF2FE1FE +:1014900000009DE5010070E20000A033FFFFFFEABD +:1014A00020D08DE27040BDE81EFF2FE160EA000011 +:1014B00004E02DE50CD04DE26C309FE5043293E55D +:1014C000010073E30100A0031400000A58309FE5F7 +:1014D000832F83E2060012E8011082E0102293E5D8 +:1014E000021081E0142293E5021081E0182293E5B6 +:1014F000021081E0202293E5021081E0242293E58E +:10150000023081E0003063E208208DE2043022E501 +:1015100018009FE50410A0E37CFFFFEBFFFFFFEA4C +:101520000CD08DE204E09DE41EFF2FE1F0020040AC +:1015300014200000023AA0E3050093E8000082E0D6 +:10154000082093E5020080E00C2093E5020080E093 +:10155000102093E5020080E0142093E5020080E073 +:10156000182093E5020080E01C3093E5030080E042 +:10157000010070E20000A0331EFF2FE108402DE9BA +:101580004C309FE5043293E5010073E30400000A48 +:1015900040009FE5B7FEFFEB000050E30000A00312 +:1015A0000900000A28309FE5003093E5010073E34D +:1015B0000100A0030400000A14009FE5ADFEFFEB4C +:1015C000000090E20100A013FFFFFFEA0840BDE821 +:1015D0001EFF2FE1F0020040F4040040020AA0E3E5 +:1015E0001EFF2FE100300FE1803083E303F029E19B :1015F0001EFF2FE100300FE18030C3E303F029E14B :101600001EFF2FE1000051E34300000A01C020E06B :1016100000106142012051E22700000A0030B0E1D1 @@ -385,13 +385,11 @@ :1018000000400300002000000C0000000060030006 :10181000002000000D0000000080030000200000F8 :101820000E00000000A00300002000000F000000D8 -:1018300000C0030000200000100000002E2E2F2EFC -:101840002E2F2E2E2F536F757263652F41524D37F9 -:101850005F4C5043323030302F63616E2E63000096 -:101860002E2E2F2E2E2F2E2E2F536F757263652F37 -:1018700041524D375F4C5043323030302F756172DA -:10188000742E63002E2E2F2E2E2F2E2E2F536F757B -:101890007263652F41524D375F4C504332303030C8 -:1018A0002F4743432F766563746F72732E63000076 -:0118B0000433 +:1018300000C0030000200000100000007665637403 +:101840006F72732E630000002E2E2F2E2E2F2E2E41 +:101850002F536F757263652F41524D375F4C504364 +:10186000323030302F63616E2E6300002E2E2F2E0B +:101870002E2F2E2E2F536F757263652F41524D37C9 +:101880005F4C5043323030302F756172742E6300DC +:011890000453 :00000001FF diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map index f29a6a22..31345505 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openblt_olimex_lpc_l2294_20mhz.map @@ -7,20 +7,20 @@ start address 0x00000000 Program Header: LOAD off 0x00008000 vaddr 0x00000000 paddr 0x00000000 align 2**15 - filesz 0x000018b0 memsz 0x000018b0 flags r-x - LOAD off 0x00010200 vaddr 0x40000200 paddr 0x000018b0 align 2**15 + filesz 0x00001890 memsz 0x00001890 flags r-x + LOAD off 0x00010200 vaddr 0x40000200 paddr 0x00001890 align 2**15 filesz 0x00000001 memsz 0x00000001 flags rw- - LOAD off 0x00010204 vaddr 0x40000204 paddr 0x000018b1 align 2**15 + LOAD off 0x00010204 vaddr 0x40000204 paddr 0x00001891 align 2**15 filesz 0x00000000 memsz 0x000004f4 flags rw- private flags = 5000200: [Version5 EABI] [soft-float ABI] Sections: Idx Name Size VMA LMA File off Algn - 0 .text 000018b0 00000000 00000000 00008000 2**2 + 0 .text 00001890 00000000 00000000 00008000 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .data 00000001 40000200 000018b0 00010200 2**0 + 1 .data 00000001 40000200 00001890 00010200 2**0 CONTENTS, ALLOC, LOAD, DATA - 2 .bss 000004f4 40000204 000018b1 00010204 2**2 + 2 .bss 000004f4 40000204 00001891 00010204 2**2 ALLOC 3 .ARM.attributes 0000002e 00000000 00000000 00010201 2**0 CONTENTS, READONLY @@ -32,15 +32,15 @@ Idx Name Size VMA LMA File off Algn CONTENTS, READONLY, DEBUGGING 7 .debug_aranges 00000210 00000000 00000000 000138cc 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_line 00000ba7 00000000 00000000 00013adc 2**0 + 8 .debug_line 00000b44 00000000 00000000 00013adc 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_str 00000aad 00000000 00000000 00014683 2**0 + 9 .debug_str 00000a88 00000000 00000000 00014620 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 000006f8 00000000 00000000 00015130 2**2 + 10 .debug_frame 000006f8 00000000 00000000 000150a8 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_loc 00000e69 00000000 00000000 00015828 2**0 + 11 .debug_loc 00000e69 00000000 00000000 000157a0 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_ranges 00000038 00000000 00000000 00016691 2**0 + 12 .debug_ranges 00000038 00000000 00000000 00016609 2**0 CONTENTS, READONLY, DEBUGGING SYMBOL TABLE: 00000000 l d .text 00000000 .text @@ -82,12 +82,13 @@ e01fc040 l *ABS* 00000000 MEMMAP 00000000 l df *ABS* 00000000 hooks.c 00000000 l df *ABS* 00000000 main.c 00000000 l df *ABS* 00000000 extflash.c +00000000 l df *ABS* 00000000 vectors.c 00000000 l df *ABS* 00000000 boot.c 00000000 l df *ABS* 00000000 com.c 40000200 l O .data 00000001 comActiveInterface 40000204 l O .bss 00000040 xcpCtoReqPacket.4167 00000000 l df *ABS* 00000000 xcp.c -00000320 l F .text 00000020 XcpSetCtoError +00000370 l F .text 00000020 XcpSetCtoError 00001750 l O .text 00000008 xcpStationId 40000244 l O .bss 0000004c xcpInfo 00000000 l df *ABS* 00000000 backdoor.c @@ -99,7 +100,7 @@ e01fc040 l *ABS* 00000000 MEMMAP 00000000 l df *ABS* 00000000 can.c 00001758 l O .text 00000024 canTiming 00000000 l df *ABS* 00000000 uart.c -00000c64 l F .text 0000005c UartTransmitByte +00000cb4 l F .text 0000005c UartTransmitByte 40000298 l O .bss 00000001 xcpCtoRxInProgress.4174 4000029c l O .bss 00000041 xcpCtoReqPacket.4172 400002e0 l O .bss 00000004 xcpCtoRxStartTime.4175 @@ -109,85 +110,84 @@ e01fc040 l *ABS* 00000000 MEMMAP 400002e8 l O .bss 00000004 free_running_counter_last 400002ec l O .bss 00000004 millisecond_counter 00000000 l df *ABS* 00000000 flash.c -00000fbc l F .text 0000006c FlashGetSector -00001028 l F .text 00000114 FlashWriteBlock -0000113c l F .text 00000088 FlashSwitchBlock -000011c4 l F .text 000000cc FlashAddToBlock +0000100c l F .text 0000006c FlashGetSector +00001078 l F .text 00000114 FlashWriteBlock +0000118c l F .text 00000088 FlashSwitchBlock +00001214 l F .text 000000cc FlashAddToBlock 0000177c l O .text 000000c0 flashLayout 400002f0 l O .bss 00000204 blockInfo 400004f4 l O .bss 00000204 bootBlockInfo -00000000 l df *ABS* 00000000 vectors.c 00000000 l df *ABS* 00000000 cpu_comp.c 00000000 l df *ABS* 00000000 _divsi3.o 0000160c l .text 00000000 .divsi3_skip_div0_test 00000000 l df *ABS* 00000000 _dvmd_tls.o 00000000 l df *ABS* 00000000 -000001c0 g F .text 00000030 ComInit -000012c0 g F .text 0000006c FlashWrite -00000954 g F .text 0000000c AssertFailure -00000bbc g F .text 000000a8 CanReceivePacket -000015b0 g F .text 0000001c IRQ_ISR -00000f70 g F .text 00000030 TimerUpdate -00000380 g F .text 00000014 XcpPacketTransmitted -000001f0 g F .text 0000005c ComTask -00000180 g F .text 00000024 BootInit -00000924 g F .text 00000028 BackDoorInit -00000950 g F .text 00000004 CopService -000018b0 g .text 00000000 _etext +00000210 g F .text 00000030 ComInit +00001310 g F .text 0000006c FlashWrite +000009a4 g F .text 0000000c AssertFailure +00000c0c g F .text 000000a8 CanReceivePacket +0000019c g F .text 0000001c IRQ_ISR +00000fc0 g F .text 00000030 TimerUpdate +000003d0 g F .text 00000014 XcpPacketTransmitted +00000240 g F .text 0000005c ComTask +000001d0 g F .text 00000024 BootInit +00000974 g F .text 00000028 BackDoorInit +000009a0 g F .text 00000004 CopService +00001890 g .text 00000000 _etext 000015e4 g F .text 00000010 CpuIrqDisable -0000158c g F .text 00000008 FlashGetUserProgBaseAddress -000012a8 g F .text 00000018 FlashReinit -00000f50 g F .text 00000020 TimerReset -000001a4 g F .text 0000001c BootTask -00001460 g F .text 00000084 FlashWriteChecksum +000015dc g F .text 00000008 FlashGetUserProgBaseAddress +000012f8 g F .text 00000018 FlashReinit +00000fa0 g F .text 00000020 TimerReset +000001f4 g F .text 0000001c BootTask +000014b0 g F .text 00000084 FlashWriteChecksum 40000204 g .bss 00000000 _bss_start -00000250 g F .text 00000048 ComTransmitPacket +000002a0 g F .text 00000048 ComTransmitPacket 00000000 g .text 00000000 _startup -00000368 g F .text 00000018 XcpIsConnected -00000e8c g F .text 00000010 NvmInit -00001290 g F .text 00000018 FlashInit -00000edc g F .text 00000010 NvmGetUserProgBaseAddress +000003b8 g F .text 00000018 XcpIsConnected +00000edc g F .text 00000010 NvmInit +000012e0 g F .text 00000018 FlashInit +00000f2c g F .text 00000010 NvmGetUserProgBaseAddress 400006f8 g .bss 00000000 _bss_end 0000003c g .text 00000000 Reset_Handler -00000e9c g F .text 00000010 NvmReinit -0000024c g F .text 00000004 ComFree +00000eec g F .text 00000010 NvmReinit +0000029c g F .text 00000004 ComFree 00001604 g F .text 00000000 .hidden __aeabi_idiv -00000cc0 g F .text 00000040 UartInit -00000ebc g F .text 00000010 NvmErase -00000394 g F .text 00000540 XcpPacketReceived -00000960 g F .text 00000010 CpuInit -0000152c g F .text 00000060 FlashDone -00000b00 g F .text 000000bc CanTransmitPacket +00000d10 g F .text 00000040 UartInit +00000f0c g F .text 00000010 NvmErase +000003e4 g F .text 00000540 XcpPacketReceived +000009b0 g F .text 00000010 CpuInit +0000157c g F .text 00000060 FlashDone +00000b50 g F .text 000000bc CanTransmitPacket 0000174c w F .text 00000004 .hidden __aeabi_ldiv0 -00000340 g F .text 00000028 XcpInit -0000132c g F .text 00000134 FlashErase +00000390 g F .text 00000028 XcpInit +0000137c g F .text 00000134 FlashErase 000000dc g F .text 000000a4 main -00000eec g F .text 00000024 NvmDone -00000d00 g F .text 00000084 UartTransmitPacket -00000ecc g F .text 00000010 NvmVerifyChecksum -00000970 g F .text 00000040 CpuMemCopy +00000f3c g F .text 00000024 NvmDone +00000d50 g F .text 00000084 UartTransmitPacket +00000f1c g F .text 00000010 NvmVerifyChecksum +000009c0 g F .text 00000040 CpuMemCopy 40001edc g *ABS* 00000000 _stack_end 00001604 g F .text 00000128 .hidden __divsi3 -00001594 g F .text 0000001c FIQ_ISR -000002d4 g F .text 0000003c ComGetActiveInterfaceMaxTxLen -00000d84 g F .text 00000108 UartReceivePacket +00000180 g F .text 0000001c FIQ_ISR +00000324 g F .text 0000003c ComGetActiveInterfaceMaxTxLen +00000dd4 g F .text 00000108 UartReceivePacket 000015f4 g F .text 00000010 CpuIrqEnable 40000200 g .data 00000000 _data -0000094c g F .text 00000004 CopInit +0000099c g F .text 00000004 CopInit 0000008c g .text 00000000 SetupRAM -00000a00 g F .text 00000100 CanInit -00000eac g F .text 00000010 NvmWrite -000009b0 g F .text 00000050 CpuStartUserProgram -000014e4 g F .text 00000048 FlashVerifyChecksum +00000a50 g F .text 00000100 CanInit +00000efc g F .text 00000010 NvmWrite +00000a00 g F .text 00000050 CpuStartUserProgram +00001534 g F .text 00000048 FlashVerifyChecksum 40000201 g .data 00000000 _edata 400006f8 g .bss 00000000 _end -000015cc g F .text 00000018 UNDEF_ISR -00000310 g F .text 00000010 ComIsConnected +000001b8 g F .text 00000018 UNDEF_ISR +00000360 g F .text 00000010 ComIsConnected 0000174c w F .text 00000004 .hidden __aeabi_idiv0 -00000298 g F .text 0000003c ComGetActiveInterfaceMaxRxLen -000008d4 g F .text 00000050 BackDoorCheck -00000fa0 g F .text 0000001c TimerGet +000002e8 g F .text 0000003c ComGetActiveInterfaceMaxRxLen +00000924 g F .text 00000050 BackDoorCheck +00000ff0 g F .text 0000001c TimerGet 0000172c g F .text 00000020 .hidden __aeabi_idivmod -00000f10 g F .text 00000040 TimerInit +00000f60 g F .text 00000040 TimerInit diff --git a/Target/Source/ARM7_LPC2000/GCC/cstart.s b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/cstart.s similarity index 96% rename from Target/Source/ARM7_LPC2000/GCC/cstart.s rename to Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/cstart.s index cfd095c6..57c857f4 100644 --- a/Target/Source/ARM7_LPC2000/GCC/cstart.s +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/cstart.s @@ -1,7 +1,7 @@ /************************************************************************************//** -* \file ARM7_LPC2000\GCC\cstart.s +* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_GCC\Boot\cstart.s * \brief Bootloader C-startup assembly file. -* \ingroup Target_ARM7_LPC2000 +* \ingroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_GCC * \internal *---------------------------------------------------------------------------------------- * C O P Y R I G H T diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile index 8c4d0ca3..174e4ba9 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile @@ -41,6 +41,8 @@ main.c \ extflash.c \ extflash.h \ lpc2294.h \ +vectors.c \ +cstart.s \ ../../../Source/boot.c \ ../../../Source/boot.h \ ../../../Source/com.c \ @@ -65,11 +67,9 @@ lpc2294.h \ ../../../Source/ARM7_LPC2000/uart.c \ ../../../Source/ARM7_LPC2000/nvm.c \ ../../../Source/ARM7_LPC2000/timer.c \ -../../../Source/ARM7_LPC2000/GCC/flash.c \ -../../../Source/ARM7_LPC2000/GCC/flash.h \ -../../../Source/ARM7_LPC2000/GCC/vectors.c \ -../../../Source/ARM7_LPC2000/GCC/cpu_comp.c \ -../../../Source/ARM7_LPC2000/GCC/cstart.s +../../../Source/ARM7_LPC2000/flash.c \ +../../../Source/ARM7_LPC2000/flash.h \ +../../../Source/ARM7_LPC2000/GCC/cpu_comp.c #|---------------------------------------------------------------------------------------| @@ -101,7 +101,7 @@ OBJ_PATH = ./obj BIN_PATH = ./bin INC_PATH = $(patsubst %,-I%,$(sort $(foreach file,$(filter %.h,$(PROJ_FILES)),$(dir $(file))))) INC_PATH += -I. -LIB_PATH = -L../../../Source/ARM7_LPC2000/GCC/ +LIB_PATH = -L./ #|---------------------------------------------------------------------------------------| diff --git a/Target/Source/ARM7_LPC2000/GCC/memory.x b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/memory.x similarity index 100% rename from Target/Source/ARM7_LPC2000/GCC/memory.x rename to Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/memory.x diff --git a/Target/Source/ARM7_LPC2000/GCC/vectors.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/vectors.c similarity index 94% rename from Target/Source/ARM7_LPC2000/GCC/vectors.c rename to Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/vectors.c index e6ef0562..34741fdc 100644 --- a/Target/Source/ARM7_LPC2000/GCC/vectors.c +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/vectors.c @@ -1,7 +1,7 @@ /************************************************************************************//** -* \file Source\ARM7_LPC2000\GCC\vectors.c +* \file Demo\ARM7_LPC2000_Olimex_LPC_L2294_GCC\Boot\vectors.c * \brief Bootloader interrupt vectors source file. -* \ingroup Target_ARM7_LPC2000 +* \ingroup Boot_ARM7_LPC2000_Olimex_LPC_L2294_GCC * \internal *---------------------------------------------------------------------------------------- * C O P Y R I G H T diff --git a/Target/Source/ARM7_LPC2000/Crossworks/cpu_comp.c b/Target/Source/ARM7_LPC2000/Crossworks/cpu_comp.c deleted file mode 100644 index 295a2e88..00000000 --- a/Target/Source/ARM7_LPC2000/Crossworks/cpu_comp.c +++ /dev/null @@ -1,91 +0,0 @@ -/************************************************************************************//** -* \file Source\ARM7_LPC2000\Crossworks\cpu_comp.c -* \brief Bootloader cpu module source file. -* \ingroup Target_ARM7_LPC2000 -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2016 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "boot.h" /* bootloader generic header */ - - -/************************************************************************************//** -** \brief Obtains current value of CPSR CPU register. Derived from a sample by R O -** Software that is Copyright 2004, R O SoftWare, and can be used for hobby -** or commercial purposes. -** \return CPSR value. -** -****************************************************************************************/ -static blt_int32u IrqGetCPSR(void) -{ - blt_int32u retval; - __asm__ volatile (" mrs %0, cpsr" : "=r" (retval) : /* no inputs */ ); - return retval; -} /*** end of IrqGetCPSR ***/ - - -/************************************************************************************//** -** \brief Update value of CPSR CPU register. Derived from a sample by R O -** Software that is Copyright 2004, R O SoftWare, and can be used for hobby -** or commercial purposes. -** \param val CPSR value. -** \return none. -** -****************************************************************************************/ -static void IrqSetCPSR(blt_int32u val) -{ - __asm__ volatile (" msr cpsr, %0" : /* no outputs */ : "r" (val) ); -} /*** end of IrqSetCPSR ***/ - - -/************************************************************************************//** -** \brief Disable global interrupts. -** \return none. -** -****************************************************************************************/ -void CpuIrqDisable(void) -{ - blt_int32u _cpsr; - - _cpsr = IrqGetCPSR(); - IrqSetCPSR(_cpsr | 0x00000080); -} /*** end of CpuIrqDisable ***/ - - -/************************************************************************************//** -** \brief Enable global interrupts. -** \return none. -** -****************************************************************************************/ -void CpuIrqEnable(void) -{ - blt_int32u _cpsr; - - _cpsr = IrqGetCPSR(); - IrqSetCPSR(_cpsr & ~0x00000080); -} /*** end of CpuIrqEnable ***/ - -/*********************************** end of cpu_comp.c *********************************/ diff --git a/Target/Source/ARM7_LPC2000/Crossworks/cstart.s b/Target/Source/ARM7_LPC2000/Crossworks/cstart.s deleted file mode 100644 index 06434628..00000000 --- a/Target/Source/ARM7_LPC2000/Crossworks/cstart.s +++ /dev/null @@ -1,419 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2001, 2002 Rowley Associates Limited. * - * * - * This file may be distributed under the terms of the License Agreement * - * provided with this software. * - * * - * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE * - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - *****************************************************************************/ - -/***************************************************************************** - * Preprocessor Definitions - * ------------------------ - * APP_ENTRY_POINT - * - * Defines the application entry point function, if undefined this setting - * defaults to "main". - * - * INITIALIZE_STACKS - * - * If defined, the contents of the stacks will be initialized to a the - * value 0xCC. - * - * INITIALIZE_SECONDARY_SECTIONS - * - * If defined, the .text2, .data2 and .bss2 sections will be initialized. - * - * SUPERVISOR_START - * - * If defined, the application will start up in supervisor mode. If - * undefined the application will start up in system mode. - * - * FULL_LIBRARY - * - * If defined then - * - argc, argv are setup by the debug_getargs. - * - the exit symbol is defined and executes on return from main. - * - the exit symbol calls destructors, atexit functions and then debug_exit. - * - * If not defined then - * - argc and argv are zero. - * - the exit symbol is defined, executes on return from main and loops - * - *****************************************************************************/ - - .section .vectors, "ax" - .code 32 - .align 0 - .global _vectors - .global reset_handler - -/***************************************************************************** - * Exception Vectors * - *****************************************************************************/ -_vectors: - ldr pc, [pc, #reset_handler_address - . - 8] /* reset */ - ldr pc, [pc, #undef_handler_address - . - 8] /* undefined instruction */ - ldr pc, [pc, #undef_handler_address - . - 8] /* swi handler */ - ldr pc, [pc, #pabort_handler_address - . - 8] /* abort prefetch */ - ldr pc, [pc, #dabort_handler_address - . - 8] /* abort data */ - .word 0xB9205F88 /* boot loader checksum */ - ldr pc, [pc, #-0xFF0] /* irq handler */ - ldr pc, [pc, #fiq_handler_address - . - 8] /* fiq handler */ - -reset_handler_address: - .word Reset_Handler -undef_handler_address: - .word undef_handler -pabort_handler_address: - .word pabort_handler -dabort_handler_address: - .word dabort_handler -fiq_handler_address: - .word fiq_handler - - - .section .init, "ax" - .code 32 - .align 4 - -#ifndef APP_ENTRY_POINT -#define APP_ENTRY_POINT main -#endif - -#ifndef ARGSSPACE -#define ARGSSPACE 128 -#endif - - .weak Reset_Handler - .global __start - .global __gccmain - .extern APP_ENTRY_POINT - .global exit - -/************************************************************************************//** -** \brief Reset interrupt service routine. Configures the stack for each mode, -** disables the IRQ and FIQ interrupts, initializes RAM and jumps to -** function main. -** \return none. -** -****************************************************************************************/ -Reset_Handler: -__start: - mrs r0, cpsr - bic r0, r0, #0x1F - - /* Setup stacks */ - orr r1, r0, #0x1B /* Undefined mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_und_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x17 /* Abort mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_abt_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x12 /* IRQ mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_irq_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x11 /* FIQ mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_fiq_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - - orr r1, r0, #0x13 /* Supervisor mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_svc_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif - -#ifdef SUPERVISOR_START - /* Start application in supervisor mode */ - ldr r1, =__stack_end__ /* Setup user/system mode stack */ -#ifdef __ARM_EABI__ - bic r1, r1, #0x7 -#endif - mov r2, sp - stmfd r2!, {r1} - ldmfd r2, {sp}^ -#else - /* Start application in system mode */ - orr r1, r0, #0x1F /* System mode */ - msr cpsr_cxsf, r1 - ldr sp, =__stack_end__ -#ifdef __ARM_EABI__ - bic sp, sp, #0x7 -#endif -#endif - -#ifdef INITIALIZE_STACKS - mov r2, #0xCC - ldr r0, =__stack_und_start__ - ldr r1, =__stack_und_end__ - bl memory_set - ldr r0, =__stack_abt_start__ - ldr r1, =__stack_abt_end__ - bl memory_set - ldr r0, =__stack_irq_start__ - ldr r1, =__stack_irq_end__ - bl memory_set - ldr r0, =__stack_fiq_start__ - ldr r1, =__stack_fiq_end__ - bl memory_set - ldr r0, =__stack_svc_start__ - ldr r1, =__stack_svc_end__ - bl memory_set - ldr r0, =__stack_start__ - ldr r1, =__stack_end__ - bl memory_set -#endif - - /* Copy initialised memory sections into RAM (if necessary). */ - ldr r0, =__data_load_start__ - ldr r1, =__data_start__ - ldr r2, =__data_end__ - bl memory_copy - ldr r0, =__text_load_start__ - ldr r1, =__text_start__ - ldr r2, =__text_end__ - bl memory_copy - ldr r0, =__fast_load_start__ - ldr r1, =__fast_start__ - ldr r2, =__fast_end__ - bl memory_copy - ldr r0, =__ctors_load_start__ - ldr r1, =__ctors_start__ - ldr r2, =__ctors_end__ - bl memory_copy - ldr r0, =__dtors_load_start__ - ldr r1, =__dtors_start__ - ldr r2, =__dtors_end__ - bl memory_copy - ldr r0, =__rodata_load_start__ - ldr r1, =__rodata_start__ - ldr r2, =__rodata_end__ - bl memory_copy -#ifdef INITIALIZE_SECONDARY_SECTIONS - ldr r0, =__data2_load_start__ - ldr r1, =__data2_start__ - ldr r2, =__data2_end__ - bl memory_copy - ldr r0, =__text2_load_start__ - ldr r1, =__text2_start__ - ldr r2, =__text2_end__ - bl memory_copy - ldr r0, =__rodata2_load_start__ - ldr r1, =__rodata2_start__ - ldr r2, =__rodata2_end__ - bl memory_copy -#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ - - /* Zero the bss. */ - ldr r0, =__bss_start__ - ldr r1, =__bss_end__ - mov r2, #0 - bl memory_set -#ifdef INITIALIZE_SECONDARY_SECTIONS - ldr r0, =__bss2_start__ - ldr r1, =__bss2_end__ - mov r2, #0 - bl memory_set -#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ - - /* Initialise the heap */ - ldr r0, = __heap_start__ - ldr r1, = __heap_end__ - sub r1, r1, r0 - cmp r1, #8 - movge r2, #0 - strge r2, [r0], #+4 - strge r1, [r0] - - /* Call constructors */ - ldr r0, =__ctors_start__ - ldr r1, =__ctors_end__ -ctor_loop: - cmp r0, r1 - beq ctor_end - ldr r2, [r0], #+4 - stmfd sp!, {r0-r1} - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - ldmfd sp!, {r0-r1} - b ctor_loop -ctor_end: - - .type start, function -start: - /* Jump to application entry point */ -#ifdef FULL_LIBRARY - mov r0, #ARGSSPACE - ldr r1, =args - ldr r2, =debug_getargs - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - ldr r1, =args -#else - mov r0, #0 - mov r1, #0 -#endif - ldr r2, =APP_ENTRY_POINT - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - -exit: -#ifdef FULL_LIBRARY - mov r5, r0 // save the exit parameter/return result - - /* Call destructors */ - ldr r0, =__dtors_start__ - ldr r1, =__dtors_end__ -dtor_loop: - cmp r0, r1 - beq dtor_end - ldr r2, [r0], #+4 - stmfd sp!, {r0-r1} - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - ldmfd sp!, {r0-r1} - b dtor_loop -dtor_end: - - /* Call atexit functions */ - ldr r2, =_execute_at_exit_fns - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - - /* Call debug_exit with return result/exit parameter */ - mov r0, r5 - ldr r2, =debug_exit - mov lr, pc -#ifdef __ARM_ARCH_3__ - mov pc, r2 -#else - bx r2 -#endif - -#endif - - /* Returned from application entry point/debug_exit, loop forever. */ -exit_loop: - b exit_loop - - - - -memory_copy: - cmp r0, r1 - moveq pc, lr - subs r2, r2, r1 - moveq pc, lr - - /* if either pointer or length is not word aligned then byte copy */ - orr r3, r0, r1 - orr r3, r3, r2 - tst r3, #0x3 - bne 2f - /* word copy */ -1: - ldr r3, [r0], #+4 - str r3, [r1], #+4 - subs r2, r2, #4 - bne 1b - mov pc, lr - /* byte copy */ -2: - ldrb r3, [r0], #+1 - strb r3, [r1], #+1 - subs r2, r2, #1 - bne 2b - mov pc, lr - -memory_set: - cmp r0, r1 - moveq pc, lr - strb r2, [r0], #1 - b memory_set - - - .section .init, "ax" - .code 32 - .align 0 - -/****************************************************************************** - * * - * Default exception handlers * - * * - ******************************************************************************/ -/****************************************************************************** - * * - * Default exception handlers * - * These are declared weak symbols so they can be redefined in user code. * - * * - ******************************************************************************/ -undef_handler: - b undef_handler - -pabort_handler: - b pabort_handler - -dabort_handler: - b dabort_handler - -fiq_handler: - b fiq_handler - -irq_handler: - b irq_handler - - .weak undef_handler, pabort_handler, dabort_handler, fiq_handler, irq_handler - - -#ifdef FULL_LIBRARY - .bss -args: - .space ARGSSPACE -#endif - - /* Setup attibutes of stack and heap sections so they don't take up unnecessary room in the elf file */ - .section .stack, "wa", %nobits - .section .stack_abt, "wa", %nobits - .section .stack_irq, "wa", %nobits - .section .stack_fiq, "wa", %nobits - .section .stack_svc, "wa", %nobits - .section .stack_und, "wa", %nobits - .section .heap, "wa", %nobits - diff --git a/Target/Source/ARM7_LPC2000/Crossworks/flash.c b/Target/Source/ARM7_LPC2000/Crossworks/flash.c deleted file mode 100644 index 21a98d25..00000000 --- a/Target/Source/ARM7_LPC2000/Crossworks/flash.c +++ /dev/null @@ -1,760 +0,0 @@ -/************************************************************************************//** -* \file Source\ARM7_LPC2000\Crossworks\flash.c -* \brief Bootloader flash driver source file. -* \ingroup Target_ARM7_LPC2000 -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ - -/**************************************************************************************** -* Include files -****************************************************************************************/ -#include "boot.h" /* bootloader generic header */ - - -/**************************************************************************************** -* Macro definitions -****************************************************************************************/ -/** \brief Value for an invalid flash sector. */ -#define FLASH_INVALID_SECTOR (0xff) -/** \brief Value for an invalid flash address. */ -#define FLASH_INVALID_ADDRESS (0xffffffff) -/** \brief Standard size of a flash block for writing. */ -#define FLASH_WRITE_BLOCK_SIZE (512) -/** \brief Total numbers of sectors in array flashLayout[]. */ -#define FLASH_TOTAL_SECTORS (sizeof(flashLayout)/sizeof(flashLayout[0])) -/** \brief Entry address for the IAP algorithms, enabling a switch to thumb mode. */ -#define IAP_ENTRY_ADDRESS (0x7ffffff1) -/** \brief IAP prepare sectos command code. */ -#define IAP_CMD_PREPARE_SECTORS (50) -/** \brief IAP copy ram to flash command code. */ -#define IAP_CMD_COPY_RAM_TO_FLASH (51) -/** \brief IAP erase sectors command code. */ -#define IAP_CMD_ERASE_SECTORS (52) -/** \brief IAP black check sectors command code. */ -#define IAP_CMD_BLANK_CHECK_SECTORS (53) -/** \brief IAP compare command code. */ -#define IAP_CMD_COMPARE (56) -/** \brief IAP result code for success. */ -#define IAP_CMD_SUCCESS (0) - - -/**************************************************************************************** -* Plausibility checks -****************************************************************************************/ -#ifndef BOOT_FLASH_CUSTOM_LAYOUT_ENABLE -#define BOOT_FLASH_CUSTOM_LAYOUT_ENABLE (0u) -#endif - - -/**************************************************************************************** -* Type definitions -****************************************************************************************/ -/** \brief Function pointer type that is needed to call IAP functions of the - * NXP LPC2xxx. - */ -typedef void (*pIapHandler)(blt_int32u command[], blt_int32u result[]); - -/** \brief Flash sector descriptor type. */ -typedef struct -{ - blt_addr sector_start; /**< sector start address */ - blt_int32u sector_size; /**< sector size in bytes */ - blt_int8u sector_num; /**< sector number */ -} tFlashSector; - - -/** \brief Structure type for grouping flash block information. - * \details Programming is done per block of max FLASH_WRITE_BLOCK_SIZE. for this a - * flash block manager is implemented in this driver. this flash block manager - * depends on this flash block info structure. It holds the base address of - * the flash block and the data that should be programmed into the flash - * block. Note that the .data member must be 32-bit aligned by the linker. - * the .base_addr must be a multiple of FLASH_WRITE_BLOCK_SIZE. - */ -typedef struct -{ - blt_addr base_addr; /**< Base address for the flash operation.*/ - blt_int8u data[FLASH_WRITE_BLOCK_SIZE] __attribute__((aligned(4))); /**< Data array. */ -} tFlashBlockInfo; - - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -static blt_bool FlashInitBlock(tFlashBlockInfo *block, blt_addr address); -static tFlashBlockInfo *FlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr); -static blt_bool FlashAddToBlock(tFlashBlockInfo *block, blt_addr address, - blt_int8u *data, blt_int32u len); -static blt_bool FlashWriteBlock(tFlashBlockInfo *block); -static blt_bool FlashEraseSectors(blt_int8u first_sector, blt_int8u last_sector); -static blt_int8u FlashGetSector(blt_addr address); - - -/**************************************************************************************** -* Local constant declarations -****************************************************************************************/ -/** \brief If desired, it is possible to set BOOT_FLASH_CUSTOM_LAYOUT_ENABLE to > 0 - * in blt_conf.h and then implement your own version of the flashLayout[] table - * in a source-file with the name flash_layout.c. This way you customize the - * flash memory size reserved for the bootloader, without having to modify - * the flashLayout[] table in this file directly. This file will then include - * flash_layout.c so there is no need to compile it additionally with your - * project. - */ -#if (BOOT_FLASH_CUSTOM_LAYOUT_ENABLE == 0) -/** \brief Array wit the layout of the flash memory. - * \details Also controls what part of the flash memory is reserved for the bootloader. - * If the bootloader size changes, the reserved sectors for the bootloader - * might need adjustment to make sure the bootloader doesn't get overwritten. - * The current flash layout supports the NXP LPC21xx and LPC22xx targets. - * LPC23xx has a slightly different layout. To support the LPC23xx, simply - * update this flash layout. - */ -static const tFlashSector flashLayout[] = -{ -#if (BOOT_NVM_SIZE_KB == 64) - /* { 0x00000000, 0x02000, 0}, flash sector 0 - reserved for bootloader */ - { 0x00002000, 0x02000, 1}, /* flash sector 1 */ - { 0x00004000, 0x02000, 2}, /* flash sector 2 */ - { 0x00006000, 0x02000, 3}, /* flash sector 3 */ - { 0x00008000, 0x02000, 4}, /* flash sector 4 */ - { 0x0000A000, 0x02000, 5}, /* flash sector 5 */ - { 0x0000C000, 0x02000, 6}, /* flash sector 6 */ - /* { 0x0000E000, 0x02000, 7}, flash sector 7 - used by NXP bootcode */ -#endif -#if (BOOT_NVM_SIZE_KB == 128) - /* { 0x00000000, 0x02000, 0}, flash sector 0 - reserved for bootloader */ - { 0x00002000, 0x02000, 1}, /* flash sector 1 */ - { 0x00004000, 0x02000, 2}, /* flash sector 2 */ - { 0x00006000, 0x02000, 3}, /* flash sector 3 */ - { 0x00008000, 0x02000, 4}, /* flash sector 4 */ - { 0x0000A000, 0x02000, 5}, /* flash sector 5 */ - { 0x0000C000, 0x02000, 6}, /* flash sector 6 */ - { 0x0000E000, 0x02000, 7}, /* flash sector 7 */ - { 0x00010000, 0x02000, 8}, /* flash sector 8 */ - { 0x00012000, 0x02000, 9}, /* flash sector 9 */ - { 0x00014000, 0x02000, 10}, /* flash sector 10 */ - { 0x00016000, 0x02000, 11}, /* flash sector 11 */ - { 0x00018000, 0x02000, 12}, /* flash sector 12 */ - { 0x0001A000, 0x02000, 13}, /* flash sector 13 */ - { 0x0001C000, 0x02000, 14}, /* flash sector 14 */ - /* { 0x0001E000, 0x02000, 15}, flash sector 15 - used by NXP bootcode */ -#endif -#if (BOOT_NVM_SIZE_KB == 256) - /* { 0x00000000, 0x02000, 0}, flash sector 0 - reserved for bootloader */ - { 0x00002000, 0x02000, 1}, /* flash sector 1 */ - { 0x00004000, 0x02000, 2}, /* flash sector 2 */ - { 0x00006000, 0x02000, 3}, /* flash sector 3 */ - { 0x00008000, 0x02000, 4}, /* flash sector 4 */ - { 0x0000A000, 0x02000, 5}, /* flash sector 5 */ - { 0x0000C000, 0x02000, 6}, /* flash sector 6 */ - { 0x0000E000, 0x02000, 7}, /* flash sector 7 */ - { 0x00010000, 0x10000, 8}, /* flash sector 8 */ - { 0x00020000, 0x10000, 9}, /* flash sector 9 */ - { 0x00030000, 0x02000, 10}, /* flash sector 10 */ - { 0x00032000, 0x02000, 11}, /* flash sector 11 */ - { 0x00034000, 0x02000, 12}, /* flash sector 12 */ - { 0x00036000, 0x02000, 13}, /* flash sector 13 */ - { 0x00038000, 0x02000, 14}, /* flash sector 14 */ - { 0x0003A000, 0x02000, 15}, /* flash sector 15 */ - { 0x0003C000, 0x02000, 16}, /* flash sector 16 */ - /* { 0x0003E000, 0x02000, 17}, flash sector 17 - used by NXP bootcode */ -#endif -}; -#else -#include "flash_layout.c" -#endif /* BOOT_FLASH_CUSTOM_LAYOUT_ENABLE == 0 */ - - -/**************************************************************************************** -* Local data declarations -****************************************************************************************/ -/** \brief Local variable with information about the flash block that is currently - * being operated on. - * \details The smallest amount of flash that can be programmed is - * FLASH_WRITE_BLOCK_SIZE. A flash block manager is implemented in this driver - * and stores info in this variable. Whenever new data should be flashed, it - * is first added to a RAM buffer, which is part of this variable. Whenever - * the RAM buffer, which has the size of a flash block, is full or data needs - * to be written to a different block, the contents of the RAM buffer are - * programmed to flash. The flash block manager requires some software - * overhead, yet results is faster flash programming because data is first - * harvested, ideally until there is enough to program an entire flash block, - * before the flash device is actually operated on. - */ -static tFlashBlockInfo blockInfo; - -/** \brief Local variable with information about the flash boot block. - * \details The first block of the user program holds the vector table, which on the - * LPC2000 is also the where the checksum is written to. Is it likely that the - * vector table is first flashed and then, at the end of the programming - * sequence, the checksum. This means that this flash block need to be written - * to twice. Normally this is not a problem with flash memory, as long as you - * write the same values to those bytes that are not supposed to be changed and - * the locations where you do write to are still in the erased 0xFF state. - * Unfortunately, writing twice to flash this way, does not work reliably on - * the LPC2000. This is why we need to have an extra block, the bootblock, - * placed under the management of the block manager. This way is it possible - * to implement functionality so that the bootblock is only written to once at - * the end of the programming sequency. - */ -static tFlashBlockInfo bootBlockInfo; - - -/************************************************************************************//** -** \brief Initializes the flash driver. -** \return none. -** -****************************************************************************************/ -void FlashInit(void) -{ - /* check the flash block data buffer alignments */ - if ((((blt_addr)blockInfo.data % 4) != 0) || (((blt_addr)bootBlockInfo.data % 4) != 0)) - { - /* incorrect alignment */ - ASSERT_RT(BLT_FALSE); - } - /* init the flash block info structs by setting the address to an invalid address */ - blockInfo.base_addr = FLASH_INVALID_ADDRESS; - bootBlockInfo.base_addr = FLASH_INVALID_ADDRESS; -} /*** end of FlashInit ***/ - - -/************************************************************************************//** -** \brief Reinitializes the flash driver. -** \return none. -** -****************************************************************************************/ -void FlashReinit(void) -{ - /* init the flash block info structs by setting the address to an invalid address */ - blockInfo.base_addr = FLASH_INVALID_ADDRESS; - bootBlockInfo.base_addr = FLASH_INVALID_ADDRESS; -} /*** end of FlashReinit ***/ - - -/************************************************************************************//** -** \brief Writes the data to flash through a flash block manager. Note that this -** function also checks that no data is programmed outside the flash -** memory region, so the bootloader can never be overwritten. -** \param addr Start address. -** \param len Length in bytes. -** \param data Pointer to the data buffer. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool FlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data) -{ - blt_addr base_addr; - - /* make sure the addresses are within the flash device */ - if ((FlashGetSector(addr) == FLASH_INVALID_SECTOR) || \ - (FlashGetSector(addr+len-1) == FLASH_INVALID_SECTOR)) - { - return BLT_FALSE; - } - - /* if this is the bootblock, then let the boot block manager handle it */ - base_addr = (addr/FLASH_WRITE_BLOCK_SIZE)*FLASH_WRITE_BLOCK_SIZE; - if (base_addr == flashLayout[0].sector_start) - { - /* let the boot block manager handle it */ - return FlashAddToBlock(&bootBlockInfo, addr, data, len); - } - /* let the block manager handle it */ - return FlashAddToBlock(&blockInfo, addr, data, len); -} /*** end of FlashWrite ***/ - - -/************************************************************************************//** -** \brief Erases the flash memory. Note that this function also checks that no -** data is erased outside the flash memory region, so the bootloader can -** never be erased. -** \param addr Start address. -** \param len Length in bytes. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool FlashErase(blt_addr addr, blt_int32u len) -{ - blt_int8u first_sector; - blt_int8u last_sector; - - /* obtain the first and last sector number */ - first_sector = FlashGetSector(addr); - last_sector = FlashGetSector(addr+len-1); - /* check them */ - if ((first_sector == FLASH_INVALID_SECTOR) || (last_sector == FLASH_INVALID_SECTOR)) - { - return BLT_FALSE; - } - /* erase the sectors */ - return FlashEraseSectors(first_sector, last_sector); -} /*** end of FlashErase ***/ - - -/************************************************************************************//** -** \brief Writes a checksum of the user program to non-volatile memory. This is -** performed once the entire user program has been programmed. Through -** the checksum, the bootloader can check if the programming session -** was completed, which indicates that a valid user programming is -** present and can be started. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool FlashWriteChecksum(void) -{ - blt_int32u signature_checksum = 0; - - /* The ARM7 core already has a spot reserved for a checksum that the bootloader can - * store at the end of a programming session. - * - * Layout of the vector table (* = don't care) - * 0x******00 Reset Exception - * 0x******04 Undefined Instruction Exception - * 0x******08 Software Interrupt Exception - * 0x******0C Prefetch Exception - * 0x******10 Abort Exception - * 0x******14 [reserved for signature checksum] - * 0x******18 IRQ Exception - * 0x******1C FIQ Exception - * - * signature_checksum = Two's complement of (SUM(exception address values)) - */ - - /* first check that the bootblock contains valid data. if not, this means the - * bootblock is not part of the reprogramming this time and therefore no - * new checksum needs to be written - */ - if (bootBlockInfo.base_addr == FLASH_INVALID_ADDRESS) - { - return BLT_TRUE; - } - - /* compute the checksum. note that the user program's vectors are not yet written - * to flash but are present in the bootblock data structure at this point. - */ - signature_checksum += *((blt_int32u *)(&bootBlockInfo.data[0+0x00])); - signature_checksum += *((blt_int32u *)(&bootBlockInfo.data[0+0x04])); - signature_checksum += *((blt_int32u *)(&bootBlockInfo.data[0+0x08])); - signature_checksum += *((blt_int32u *)(&bootBlockInfo.data[0+0x0C])); - signature_checksum += *((blt_int32u *)(&bootBlockInfo.data[0+0x10])); - signature_checksum += *((blt_int32u *)(&bootBlockInfo.data[0+0x18])); - signature_checksum += *((blt_int32u *)(&bootBlockInfo.data[0+0x1C])); - signature_checksum = ~signature_checksum; /* one's complement */ - signature_checksum += 1; /* two's complement */ - - /* write the checksum */ - return FlashWrite(flashLayout[0].sector_start+0x14, sizeof(blt_addr), - (blt_int8u *)&signature_checksum); -} /*** end of FlashWriteChecksum ***/ - - -/************************************************************************************//** -** \brief Verifies the checksum, which indicates that a valid user program is -** present and can be started. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool FlashVerifyChecksum(void) -{ - blt_int32u signature_checksum = 0; - - /* verify the checksum based on how it was written by CpuWriteChecksum() */ - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start)); - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start+0x04)); - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start+0x08)); - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start+0x0C)); - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start+0x10)); - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start+0x14)); - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start+0x18)); - signature_checksum += *((blt_int32u *)(flashLayout[0].sector_start+0x1C)); - - /* sum should add up to an unsigned 32-bit value of 0 */ - if (signature_checksum == 0) - { - /* checksum okay */ - return BLT_TRUE; - } - /* checksum incorrect */ - return BLT_FALSE; -} /*** end of FlashVerifyChecksum ***/ - - -/************************************************************************************//** -** \brief Finalizes the flash driver operations. There could still be data in -** the currently active block that needs to be flashed. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -blt_bool FlashDone(void) -{ - /* check if there is still data waiting to be programmed in the boot block */ - if (bootBlockInfo.base_addr != FLASH_INVALID_ADDRESS) - { - if (FlashWriteBlock(&bootBlockInfo) == BLT_FALSE) - { - return BLT_FALSE; - } - } - - /* check if there is still data waiting to be programmed */ - if (blockInfo.base_addr != FLASH_INVALID_ADDRESS) - { - if (FlashWriteBlock(&blockInfo) == BLT_FALSE) - { - return BLT_FALSE; - } - } - /* still here so all is okay */ - return BLT_TRUE; -} /*** end of FlashDone ***/ - - -/************************************************************************************//** -** \brief Obtains the base address of the flash memory available to the user program. -** This is basically the first address in the flashLayout table. -** \return Base address. -** -****************************************************************************************/ -blt_addr FlashGetUserProgBaseAddress(void) -{ - return flashLayout[0].sector_start; -} /*** end of FlashGetUserProgBaseAddress ***/ - - -/************************************************************************************//** -** \brief Copies data currently in flash to the block->data and sets the -** base address. -** \param block Pointer to flash block info structure to operate on. -** \param address Base address of the block data. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool FlashInitBlock(tFlashBlockInfo *block, blt_addr address) -{ - /* check address alignment */ - if ((address % FLASH_WRITE_BLOCK_SIZE) != 0) - { - return BLT_FALSE; - } - /* make sure that we are initializing a new block and not the same one */ - if (block->base_addr == address) - { - /* block already initialized, so nothing to do */ - return BLT_TRUE; - } - /* set the base address and copies the current data from flash */ - block->base_addr = address; - CpuMemCopy((blt_addr)block->data, address, FLASH_WRITE_BLOCK_SIZE); - return BLT_TRUE; -} /*** end of FlashInitBlock ***/ - - -/************************************************************************************//** -** \brief Switches blocks by programming the current one and initializing the -** next. -** \param block Pointer to flash block info structure to operate on. -** \param base_addr Base address of the next block. -** \return The pointer of the block info struct that is no being used, or a NULL -** pointer in case of error. -** -****************************************************************************************/ -static tFlashBlockInfo *FlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr) -{ - /* check if a switch needs to be made away from the boot block. in this case the boot - * block shouldn't be written yet, because this is done at the end of the programming - * session by FlashDone(), this is right after the checksum was written. - */ - if (block == &bootBlockInfo) - { - /* switch from the boot block to the generic block info structure */ - block = &blockInfo; - } - /* check if a switch back into the bootblock is needed. in this case the generic block - * doesn't need to be written here yet. - */ - else if (base_addr == flashLayout[0].sector_start) - { - /* switch from the generic block to the boot block info structure */ - block = &bootBlockInfo; - base_addr = flashLayout[0].sector_start; - } - else - { - /* need to switch to a new block, so program the current one and init the next */ - if (FlashWriteBlock(block) == BLT_FALSE) - { - return BLT_NULL; - } - } - - /* initialize tne new block when necessary */ - if (FlashInitBlock(block, base_addr) == BLT_FALSE) - { - return BLT_NULL; - } - - /* still here to all is okay */ - return block; -} /*** end of FlashSwitchBlock ***/ - - -/************************************************************************************//** -** \brief Programming is done per block. This function adds data to the block -** that is currently collecting data to be written to flash. If the -** address is outside of the current block, the current block is written -** to flash an a new block is initialized. -** \param block Pointer to flash block info structure to operate on. -** \param address Flash destination address. -** \param data Pointer to the byte array with data. -** \param len Number of bytes to add to the block. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool FlashAddToBlock(tFlashBlockInfo *block, blt_addr address, - blt_int8u *data, blt_int32u len) -{ - blt_addr current_base_addr; - blt_int8u *dst; - blt_int8u *src; - - /* determine the current base address */ - current_base_addr = (address/FLASH_WRITE_BLOCK_SIZE)*FLASH_WRITE_BLOCK_SIZE; - - /* make sure the blockInfo is not uninitialized */ - if (block->base_addr == FLASH_INVALID_ADDRESS) - { - /* initialize the blockInfo struct for the current block */ - if (FlashInitBlock(block, current_base_addr) == BLT_FALSE) - { - return BLT_FALSE; - } - } - - /* check if the new data fits in the current block */ - if (block->base_addr != current_base_addr) - { - /* need to switch to a new block, so program the current one and init the next */ - block = FlashSwitchBlock(block, current_base_addr); - if (block == BLT_NULL) - { - return BLT_FALSE; - } - } - - /* add the data to the current block, but check for block overflow */ - dst = &(block->data[address - block->base_addr]); - src = data; - do - { - /* keep the watchdog happy */ - CopService(); - /* buffer overflow? */ - if ((blt_addr)(dst-&(block->data[0])) >= FLASH_WRITE_BLOCK_SIZE) - { - /* need to switch to a new block, so program the current one and init the next */ - block = FlashSwitchBlock(block, current_base_addr+FLASH_WRITE_BLOCK_SIZE); - if (block == BLT_NULL) - { - return BLT_FALSE; - } - /* reset destination pointer */ - dst = &(block->data[0]); - } - /* write the data to the buffer */ - *dst = *src; - /* update pointers */ - dst++; - src++; - /* decrement byte counter */ - len--; - } - while (len > 0); - /* still here so all is good */ - return BLT_TRUE; -} /*** end of FlashAddToBlock ***/ - - -/************************************************************************************//** -** \brief Programs FLASH_WRITE_BLOCK_SIZE bytes to flash from the block->data -** array. -** \param block Pointer to flash block info structure to operate on. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool FlashWriteBlock(tFlashBlockInfo *block) -{ - blt_int32u iap_command[5]; - blt_int32u iap_result[3]; - blt_int8u sector_num; - pIapHandler iapHandler = (void *)IAP_ENTRY_ADDRESS; - - /* check that address is actually within flash */ - sector_num = FlashGetSector(block->base_addr); - if (sector_num == FLASH_INVALID_SECTOR) - { - return BLT_FALSE; - } - /* send the prepare sector command for just this one sector */ - iap_command[0] = IAP_CMD_PREPARE_SECTORS; - iap_command[1] = sector_num; - iap_command[2] = sector_num; - iap_result[0] = !IAP_CMD_SUCCESS; - /* service the watchdog before calling the IAP handler */ - CopService(); - iapHandler(iap_command, iap_result); - if (iap_result[0] != IAP_CMD_SUCCESS) - { - return BLT_FALSE; - } - /* send the erase sector command */ - iap_command[0] = IAP_CMD_COPY_RAM_TO_FLASH; - iap_command[1] = (blt_int32u)block->base_addr; - iap_command[2] = (blt_int32u)block->data; - iap_command[3] = FLASH_WRITE_BLOCK_SIZE; - iap_command[4] = BOOT_CPU_SYSTEM_SPEED_KHZ; - iap_result[0] = !IAP_CMD_SUCCESS; - /* service the watchdog before calling the IAP handler */ - CopService(); - iapHandler(iap_command, iap_result); - if (iap_result[0] != IAP_CMD_SUCCESS) - { - return BLT_FALSE; - } - /* perform a comparison for verification purposes */ - iap_command[0] = IAP_CMD_COMPARE; - iap_command[1] = (blt_int32u)block->base_addr; - iap_command[2] = (blt_int32u)block->data; - iap_command[3] = FLASH_WRITE_BLOCK_SIZE; - iap_result[0] = !IAP_CMD_SUCCESS; - /* service the watchdog before calling the IAP handler */ - CopService(); - iapHandler(iap_command, iap_result); - if (iap_result[0] != IAP_CMD_SUCCESS) - { - return BLT_FALSE; - } - /* still here so all is okay */ - return BLT_TRUE; - -} /*** end of FlashWriteBlock ***/ - - -/************************************************************************************//** -** \brief Erases the flash sectors from first_sector up until last_sector. -** \param first_sector First flash sector number. -** \param last_sector Last flash sector number. -** \return BLT_TRUE if successful, BLT_FALSE otherwise. -** -****************************************************************************************/ -static blt_bool FlashEraseSectors(blt_int8u first_sector, blt_int8u last_sector) -{ - blt_int32u iap_command[5]; - blt_int32u iap_result[3]; - pIapHandler iapHandler = (void *)IAP_ENTRY_ADDRESS; - - /* validate the sector numbers */ - if (first_sector > last_sector) - { - return BLT_FALSE; - } - if ((first_sector < flashLayout[0].sector_num) || \ - (last_sector > flashLayout[FLASH_TOTAL_SECTORS-1].sector_num)) - { - return BLT_FALSE; - } - - /* send the prepare sector command for just this one sector */ - iap_command[0] = IAP_CMD_PREPARE_SECTORS; - iap_command[1] = first_sector; - iap_command[2] = last_sector; - iap_result[0] = !IAP_CMD_SUCCESS; - /* service the watchdog before calling the IAP handler */ - CopService(); - iapHandler(iap_command, iap_result); - if (iap_result[0] != IAP_CMD_SUCCESS) - { - return BLT_FALSE; - } - /* send the erase sector command */ - iap_command[0] = IAP_CMD_ERASE_SECTORS; - iap_command[1] = first_sector; - iap_command[2] = last_sector; - iap_command[3] = BOOT_CPU_SYSTEM_SPEED_KHZ; - iap_result[0] = !IAP_CMD_SUCCESS; - /* service the watchdog before calling the IAP handler */ - CopService(); - iapHandler(iap_command, iap_result); - if (iap_result[0] != IAP_CMD_SUCCESS) - { - return BLT_FALSE; - } - /* perform a blank check for verification purposes */ - iap_command[0] = IAP_CMD_BLANK_CHECK_SECTORS ; - iap_command[1] = first_sector; - iap_command[2] = last_sector; - iap_result[0] = !IAP_CMD_SUCCESS; - /* service the watchdog before calling the IAP handler */ - CopService(); - iapHandler(iap_command, iap_result); - if (iap_result[0] != IAP_CMD_SUCCESS) - { - return BLT_FALSE; - } - /* still here so all went okay */ - return BLT_TRUE; -} /*** end of FlashEraseSectors ***/ - - -/************************************************************************************//** -** \brief Determines the flash sector the address is in. -** \param address Address in the flash sector. -** \return Flash sector number or FLASH_INVALID_SECTOR. -** -****************************************************************************************/ -static blt_int8u FlashGetSector(blt_addr address) -{ - blt_int8u sectorIdx; - - /* search through the sectors to find the right one */ - for (sectorIdx = 0; sectorIdx < FLASH_TOTAL_SECTORS; sectorIdx++) - { - /* keep the watchdog happy */ - CopService(); - /* is the address in this sector? */ - if ((address >= flashLayout[sectorIdx].sector_start) && \ - (address < (flashLayout[sectorIdx].sector_start + \ - flashLayout[sectorIdx].sector_size))) - { - /* return the sector number */ - return flashLayout[sectorIdx].sector_num; - } - } - /* still here so no valid sector found */ - return FLASH_INVALID_SECTOR; -} /*** end of FlashGetSector ***/ - - -/*********************************** end of flash.c ************************************/ diff --git a/Target/Source/ARM7_LPC2000/Crossworks/flash.h b/Target/Source/ARM7_LPC2000/Crossworks/flash.h deleted file mode 100644 index 75981a2d..00000000 --- a/Target/Source/ARM7_LPC2000/Crossworks/flash.h +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************************************************//** -* \file Source\ARM7_LPC2000\Crossworks\flash.h -* \brief Bootloader flash driver header file. -* \ingroup Target_ARM7_LPC2000 -* \internal -*---------------------------------------------------------------------------------------- -* C O P Y R I G H T -*---------------------------------------------------------------------------------------- -* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved -* -*---------------------------------------------------------------------------------------- -* L I C E N S E -*---------------------------------------------------------------------------------------- -* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or -* modify it under the terms of the GNU General Public License as published by the Free -* Software Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -* PURPOSE. See the GNU General Public License for more details. -* -* You have received a copy of the GNU General Public License along with OpenBLT. It -* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. -* -* \endinternal -****************************************************************************************/ -#ifndef FLASH_H -#define FLASH_H - -/**************************************************************************************** -* Function prototypes -****************************************************************************************/ -void FlashInit(void); -void FlashReinit(void); -blt_bool FlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data); -blt_bool FlashErase(blt_addr addr, blt_int32u len); -blt_bool FlashWriteChecksum(void); -blt_bool FlashVerifyChecksum(void); -blt_bool FlashDone(void); -blt_addr FlashGetUserProgBaseAddress(void); - - -#endif /* FLASH_H */ -/*********************************** end of flash.h ************************************/ diff --git a/Target/Source/ARM7_LPC2000/Crossworks/memory.x b/Target/Source/ARM7_LPC2000/Crossworks/memory.x deleted file mode 100644 index e6148c8a..00000000 --- a/Target/Source/ARM7_LPC2000/Crossworks/memory.x +++ /dev/null @@ -1,356 +0,0 @@ -MEMORY -{ - UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0 - AHB_Peripherals (wx) : ORIGIN = 0xffe00000, LENGTH = 0x00200000 - VPB_Peripherals (wx) : ORIGIN = 0xe0000000, LENGTH = 0x00200000 - BANK3 (wx) : ORIGIN = 0x83000000, LENGTH = 0x01000000 - BANK2 (wx) : ORIGIN = 0x82000000, LENGTH = 0x01000000 - External_SRAM (wx) : ORIGIN = 0x81000000, LENGTH = 0x00100000 - External_FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x00400000 - SRAM (wx) : ORIGIN = 0x40000200, LENGTH = 0x00001CE0 - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00002000 -} - - -SECTIONS -{ - __AHB_Peripherals_segment_start__ = 0xffe00000; - __AHB_Peripherals_segment_end__ = 0x00000000; - __VPB_Peripherals_segment_start__ = 0xe0000000; - __VPB_Peripherals_segment_end__ = 0xe0200000; - __BANK3_segment_start__ = 0x83000000; - __BANK3_segment_end__ = 0x84000000; - __BANK2_segment_start__ = 0x82000000; - __BANK2_segment_end__ = 0x83000000; - __External_SRAM_segment_start__ = 0x81000000; - __External_SRAM_segment_end__ = 0x81100000; - __External_FLASH_segment_start__ = 0x80000000; - __External_FLASH_segment_end__ = 0x80400000; - __SRAM_segment_start__ = 0x40000200; - __SRAM_segment_end__ = 0x40001EE0; - __FLASH_segment_start__ = 0x00000000; - __FLASH_segment_end__ = 0x00002000; - - __STACKSIZE__ = 1024; - __STACKSIZE_IRQ__ = 256; - __STACKSIZE_FIQ__ = 256; - __STACKSIZE_SVC__ = 0; - __STACKSIZE_ABT__ = 0; - __STACKSIZE_UND__ = 0; - __HEAPSIZE__ = 1024; - - __text2_load_start__ = ALIGN(__External_FLASH_segment_start__ , 4); - .text2 ALIGN(__External_FLASH_segment_start__ , 4) : AT(ALIGN(__External_FLASH_segment_start__ , 4)) - { - __text2_start__ = .; - *(.text2 .text2.*) - } - __text2_end__ = __text2_start__ + SIZEOF(.text2); - - __text2_load_end__ = __text2_end__; - - . = ASSERT(__text2_end__ >= __External_FLASH_segment_start__ && __text2_end__ <= (__External_FLASH_segment_start__ + 0x00400000) , "error: .text2 is too large to fit in External_FLASH memory segment"); - - __rodata2_load_start__ = ALIGN(__text2_end__ , 4); - .rodata2 ALIGN(__text2_end__ , 4) : AT(ALIGN(__text2_end__ , 4)) - { - __rodata2_start__ = .; - *(.rodata2 .rodata2.*) - } - __rodata2_end__ = __rodata2_start__ + SIZEOF(.rodata2); - - __rodata2_load_end__ = __rodata2_end__; - - . = ASSERT(__rodata2_end__ >= __External_FLASH_segment_start__ && __rodata2_end__ <= (__External_FLASH_segment_start__ + 0x00400000) , "error: .rodata2 is too large to fit in External_FLASH memory segment"); - - __data2_load_start__ = ALIGN(__rodata2_end__ , 4); - .data2 ALIGN(__External_SRAM_segment_start__ , 4) : AT(ALIGN(__rodata2_end__ , 4)) - { - __data2_start__ = .; - *(.data2 .data2.*) - } - __data2_end__ = __data2_start__ + SIZEOF(.data2); - - __data2_load_end__ = __data2_load_start__ + SIZEOF(.data2); - - __External_FLASH_segment_used_end__ = ALIGN(__rodata2_end__ , 4) + SIZEOF(.data2); - - . = ASSERT((__data2_load_start__ + SIZEOF(.data2)) >= __External_FLASH_segment_start__ && (__data2_load_start__ + SIZEOF(.data2)) <= (__External_FLASH_segment_start__ + 0x00400000) , "error: .data2 is too large to fit in External_FLASH memory segment"); - - .data2_run ALIGN(__External_SRAM_segment_start__ , 4) (NOLOAD) : - { - __data2_run_start__ = .; - . = MAX(__data2_run_start__ + SIZEOF(.data2), .); - } - __data2_run_end__ = __data2_run_start__ + SIZEOF(.data2_run); - - __data2_run_load_end__ = __data2_run_end__; - - . = ASSERT(__data2_run_end__ >= __External_SRAM_segment_start__ && __data2_run_end__ <= (__External_SRAM_segment_start__ + 0x00100000) , "error: .data2_run is too large to fit in External_SRAM memory segment"); - - __bss2_load_start__ = ALIGN(__data2_run_end__ , 4); - .bss2 ALIGN(__data2_run_end__ , 4) (NOLOAD) : AT(ALIGN(__data2_run_end__ , 4)) - { - __bss2_start__ = .; - *(.bss2 .bss2.*) - } - __bss2_end__ = __bss2_start__ + SIZEOF(.bss2); - - __bss2_load_end__ = __bss2_end__; - - __External_SRAM_segment_used_end__ = ALIGN(__data2_run_end__ , 4) + SIZEOF(.bss2); - - . = ASSERT(__bss2_end__ >= __External_SRAM_segment_start__ && __bss2_end__ <= (__External_SRAM_segment_start__ + 0x00100000) , "error: .bss2 is too large to fit in External_SRAM memory segment"); - - __vectors_ram_load_start__ = __SRAM_segment_start__; - .vectors_ram __SRAM_segment_start__ (NOLOAD) : AT(__SRAM_segment_start__) - { - __vectors_ram_start__ = .; - *(.vectors_ram .vectors_ram.*) - . = MAX(__vectors_ram_start__ + 0x0000003C , .); - } - __vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram); - - __vectors_ram_load_end__ = __vectors_ram_end__; - - . = ASSERT(__vectors_ram_end__ >= __SRAM_segment_start__ && __vectors_ram_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .vectors_ram is too large to fit in SRAM memory segment"); - - __vectors_load_start__ = __FLASH_segment_start__; - .vectors __FLASH_segment_start__ : AT(__FLASH_segment_start__) - { - __vectors_start__ = .; - *(.vectors .vectors.*) - } - __vectors_end__ = __vectors_start__ + SIZEOF(.vectors); - - __vectors_load_end__ = __vectors_end__; - - . = ASSERT(__vectors_end__ >= __FLASH_segment_start__ && __vectors_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .vectors is too large to fit in FLASH memory segment"); - - __init_load_start__ = ALIGN(__vectors_end__ , 4); - .init ALIGN(__vectors_end__ , 4) : AT(ALIGN(__vectors_end__ , 4)) - { - __init_start__ = .; - *(.init .init.*) - } - __init_end__ = __init_start__ + SIZEOF(.init); - - __init_load_end__ = __init_end__; - - . = ASSERT(__init_end__ >= __FLASH_segment_start__ && __init_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .init is too large to fit in FLASH memory segment"); - - __text_load_start__ = ALIGN(__init_end__ , 4); - .text ALIGN(__init_end__ , 4) : AT(ALIGN(__init_end__ , 4)) - { - __text_start__ = .; - *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table) - } - __text_end__ = __text_start__ + SIZEOF(.text); - - __text_load_end__ = __text_end__; - - . = ASSERT(__text_end__ >= __FLASH_segment_start__ && __text_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .text is too large to fit in FLASH memory segment"); - - __dtors_load_start__ = ALIGN(__text_end__ , 4); - .dtors ALIGN(__text_end__ , 4) : AT(ALIGN(__text_end__ , 4)) - { - __dtors_start__ = .; - KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) - } - __dtors_end__ = __dtors_start__ + SIZEOF(.dtors); - - __dtors_load_end__ = __dtors_end__; - - . = ASSERT(__dtors_end__ >= __FLASH_segment_start__ && __dtors_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .dtors is too large to fit in FLASH memory segment"); - - __ctors_load_start__ = ALIGN(__dtors_end__ , 4); - .ctors ALIGN(__dtors_end__ , 4) : AT(ALIGN(__dtors_end__ , 4)) - { - __ctors_start__ = .; - KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) - } - __ctors_end__ = __ctors_start__ + SIZEOF(.ctors); - - __ctors_load_end__ = __ctors_end__; - - . = ASSERT(__ctors_end__ >= __FLASH_segment_start__ && __ctors_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .ctors is too large to fit in FLASH memory segment"); - - __rodata_load_start__ = ALIGN(__ctors_end__ , 4); - .rodata ALIGN(__ctors_end__ , 4) : AT(ALIGN(__ctors_end__ , 4)) - { - __rodata_start__ = .; - *(.rodata .rodata.* .gnu.linkonce.r.*) - } - __rodata_end__ = __rodata_start__ + SIZEOF(.rodata); - - __rodata_load_end__ = __rodata_end__; - - . = ASSERT(__rodata_end__ >= __FLASH_segment_start__ && __rodata_end__ <= (__FLASH_segment_start__ + 0x00040000) , "error: .rodata is too large to fit in FLASH memory segment"); - - __data_load_start__ = ALIGN(__rodata_end__ , 4); - .data ALIGN(__vectors_ram_end__ , 4) : AT(ALIGN(__rodata_end__ , 4)) - { - __data_start__ = .; - *(.data .data.* .gnu.linkonce.d.*) - } - __data_end__ = __data_start__ + SIZEOF(.data); - - __data_load_end__ = __data_load_start__ + SIZEOF(.data); - - . = ASSERT((__data_load_start__ + SIZEOF(.data)) >= __FLASH_segment_start__ && (__data_load_start__ + SIZEOF(.data)) <= (__FLASH_segment_start__ + 0x00040000) , "error: .data is too large to fit in FLASH memory segment"); - - .data_run ALIGN(__vectors_ram_end__ , 4) (NOLOAD) : - { - __data_run_start__ = .; - . = MAX(__data_run_start__ + SIZEOF(.data), .); - } - __data_run_end__ = __data_run_start__ + SIZEOF(.data_run); - - __data_run_load_end__ = __data_run_end__; - - . = ASSERT(__data_run_end__ >= __SRAM_segment_start__ && __data_run_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .data_run is too large to fit in SRAM memory segment"); - - __bss_load_start__ = ALIGN(__data_run_end__ , 4); - .bss ALIGN(__data_run_end__ , 4) (NOLOAD) : AT(ALIGN(__data_run_end__ , 4)) - { - __bss_start__ = .; - *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) - } - __bss_end__ = __bss_start__ + SIZEOF(.bss); - - __bss_load_end__ = __bss_end__; - - . = ASSERT(__bss_end__ >= __SRAM_segment_start__ && __bss_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .bss is too large to fit in SRAM memory segment"); - - __non_init_load_start__ = ALIGN(__bss_end__ , 4); - .non_init ALIGN(__bss_end__ , 4) (NOLOAD) : AT(ALIGN(__bss_end__ , 4)) - { - __non_init_start__ = .; - *(.non_init .non_init.*) - } - __non_init_end__ = __non_init_start__ + SIZEOF(.non_init); - - __non_init_load_end__ = __non_init_end__; - - . = ASSERT(__non_init_end__ >= __SRAM_segment_start__ && __non_init_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .non_init is too large to fit in SRAM memory segment"); - - __heap_load_start__ = ALIGN(__non_init_end__ , 4); - .heap ALIGN(__non_init_end__ , 4) (NOLOAD) : AT(ALIGN(__non_init_end__ , 4)) - { - __heap_start__ = .; - *(.heap .heap.*) - . = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4); - } - __heap_end__ = __heap_start__ + SIZEOF(.heap); - - __heap_load_end__ = __heap_end__; - - . = ASSERT(__heap_end__ >= __SRAM_segment_start__ && __heap_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .heap is too large to fit in SRAM memory segment"); - - __stack_load_start__ = ALIGN(__heap_end__ , 4); - .stack ALIGN(__heap_end__ , 4) (NOLOAD) : AT(ALIGN(__heap_end__ , 4)) - { - __stack_start__ = .; - *(.stack .stack.*) - . = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 4); - } - __stack_end__ = __stack_start__ + SIZEOF(.stack); - - __stack_load_end__ = __stack_end__; - - . = ASSERT(__stack_end__ >= __SRAM_segment_start__ && __stack_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack is too large to fit in SRAM memory segment"); - - __stack_irq_load_start__ = ALIGN(__stack_end__ , 4); - .stack_irq ALIGN(__stack_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_end__ , 4)) - { - __stack_irq_start__ = .; - *(.stack_irq .stack_irq.*) - . = ALIGN(MAX(__stack_irq_start__ + __STACKSIZE_IRQ__ , .), 4); - } - __stack_irq_end__ = __stack_irq_start__ + SIZEOF(.stack_irq); - - __stack_irq_load_end__ = __stack_irq_end__; - - . = ASSERT(__stack_irq_end__ >= __SRAM_segment_start__ && __stack_irq_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_irq is too large to fit in SRAM memory segment"); - - __stack_fiq_load_start__ = ALIGN(__stack_irq_end__ , 4); - .stack_fiq ALIGN(__stack_irq_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_irq_end__ , 4)) - { - __stack_fiq_start__ = .; - *(.stack_fiq .stack_fiq.*) - . = ALIGN(MAX(__stack_fiq_start__ + __STACKSIZE_FIQ__ , .), 4); - } - __stack_fiq_end__ = __stack_fiq_start__ + SIZEOF(.stack_fiq); - - __stack_fiq_load_end__ = __stack_fiq_end__; - - . = ASSERT(__stack_fiq_end__ >= __SRAM_segment_start__ && __stack_fiq_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_fiq is too large to fit in SRAM memory segment"); - - __stack_svc_load_start__ = ALIGN(__stack_fiq_end__ , 4); - .stack_svc ALIGN(__stack_fiq_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_fiq_end__ , 4)) - { - __stack_svc_start__ = .; - *(.stack_svc .stack_svc.*) - . = ALIGN(MAX(__stack_svc_start__ + __STACKSIZE_SVC__ , .), 4); - } - __stack_svc_end__ = __stack_svc_start__ + SIZEOF(.stack_svc); - - __stack_svc_load_end__ = __stack_svc_end__; - - . = ASSERT(__stack_svc_end__ >= __SRAM_segment_start__ && __stack_svc_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_svc is too large to fit in SRAM memory segment"); - - __stack_abt_load_start__ = ALIGN(__stack_svc_end__ , 4); - .stack_abt ALIGN(__stack_svc_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_svc_end__ , 4)) - { - __stack_abt_start__ = .; - *(.stack_abt .stack_abt.*) - . = ALIGN(MAX(__stack_abt_start__ + __STACKSIZE_ABT__ , .), 4); - } - __stack_abt_end__ = __stack_abt_start__ + SIZEOF(.stack_abt); - - __stack_abt_load_end__ = __stack_abt_end__; - - . = ASSERT(__stack_abt_end__ >= __SRAM_segment_start__ && __stack_abt_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_abt is too large to fit in SRAM memory segment"); - - __stack_und_load_start__ = ALIGN(__stack_abt_end__ , 4); - .stack_und ALIGN(__stack_abt_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_abt_end__ , 4)) - { - __stack_und_start__ = .; - *(.stack_und .stack_und.*) - . = ALIGN(MAX(__stack_und_start__ + __STACKSIZE_UND__ , .), 4); - } - __stack_und_end__ = __stack_und_start__ + SIZEOF(.stack_und); - - __stack_und_load_end__ = __stack_und_end__; - - . = ASSERT(__stack_und_end__ >= __SRAM_segment_start__ && __stack_und_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .stack_und is too large to fit in SRAM memory segment"); - - __fast_load_start__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4); - .fast ALIGN(__stack_und_end__ , 4) : AT(ALIGN(__data_load_start__ + SIZEOF(.data) , 4)) - { - __fast_start__ = .; - *(.fast .fast.*) - } - __fast_end__ = __fast_start__ + SIZEOF(.fast); - - __fast_load_end__ = __fast_load_start__ + SIZEOF(.fast); - - __FLASH_segment_used_end__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4) + SIZEOF(.fast); - - . = ASSERT((__fast_load_start__ + SIZEOF(.fast)) >= __FLASH_segment_start__ && (__fast_load_start__ + SIZEOF(.fast)) <= (__FLASH_segment_start__ + 0x00040000) , "error: .fast is too large to fit in FLASH memory segment"); - - .fast_run ALIGN(__stack_und_end__ , 4) (NOLOAD) : - { - __fast_run_start__ = .; - . = MAX(__fast_run_start__ + SIZEOF(.fast), .); - } - __fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run); - - __fast_run_load_end__ = __fast_run_end__; - - __SRAM_segment_used_end__ = ALIGN(__stack_und_end__ , 4) + SIZEOF(.fast_run); - - . = ASSERT(__fast_run_end__ >= __SRAM_segment_start__ && __fast_run_end__ <= (__SRAM_segment_start__ + 0x00004000) , "error: .fast_run is too large to fit in SRAM memory segment"); - -} - diff --git a/Target/Source/ARM7_LPC2000/GCC/flash.c b/Target/Source/ARM7_LPC2000/flash.c similarity index 100% rename from Target/Source/ARM7_LPC2000/GCC/flash.c rename to Target/Source/ARM7_LPC2000/flash.c diff --git a/Target/Source/ARM7_LPC2000/GCC/flash.h b/Target/Source/ARM7_LPC2000/flash.h similarity index 100% rename from Target/Source/ARM7_LPC2000/GCC/flash.h rename to Target/Source/ARM7_LPC2000/flash.h