Refs #816. Added S32K144 EVB demo programs for the IAR Embedded Workbench.

git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@764 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
master
Frank Voorburg 3 years ago
parent eca185dd01
commit d78ae71cdb

@ -0,0 +1,121 @@
/*
** ###################################################################
** Processor: S32K144 with 64 KB SRAM
** Compiler: IAR ANSI C/C++ Compiler for ARM
**
** Abstract:
** Linker file for the IAR ANSI C/C++ Compiler for ARM
**
** Copyright (c) 2015-2016 Freescale Semiconductor, Inc.
** Copyright 2017 NXP
** All rights reserved.
**
** THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
** INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
** STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
** IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
** THE POSSIBILITY OF SUCH DAMAGE.
**
** http: www.freescale.com
** mail: support@freescale.com
**
** ###################################################################
*/
/* If symbol __flash_vector_table__=1 is defined at link time
* the interrupt vector will not be copied to RAM.
* Warning: Using the interrupt vector from FLASH will not allow
* INT_SYS_InstallHandler because the section is Read Only.
*/
define symbol __ram_vector_table_size__ = isdefinedsymbol(__flash_vector_table__) ? 0 : 0x00000400;
define symbol __ram_vector_table_offset__ = isdefinedsymbol(__flash_vector_table__) ? 0 : 0x000003FF;
/* Flash */
define symbol m_interrupts_start = 0x00000000;
define symbol m_interrupts_end = 0x000003FF;
define symbol m_flash_config_start = 0x00000400;
define symbol m_flash_config_end = 0x0000040F;
define symbol m_text_start = 0x00000410;
define symbol m_text_end = 0x00001FFF;
/* SRAM_L */
define symbol m_interrupts_ram_start = 0x1FFF8000;
define symbol m_interrupts_ram_end = 0x1FFF8000 + __ram_vector_table_offset__;
define symbol m_data_start = m_interrupts_ram_start + __ram_vector_table_size__;
define symbol m_data_end = 0x1FFFFFFF;
/* SRAM_U */
define symbol m_data_2_start = 0x20000000;
define symbol m_data_2_end = 0x20006FFF;
/* Sizes */
if (isdefinedsymbol(__stack_size__)) {
define symbol __size_cstack__ = __stack_size__;
} else {
define symbol __size_cstack__ = 0x00000400;
}
if (isdefinedsymbol(__heap_size__)) {
define symbol __size_heap__ = __heap_size__;
} else {
define symbol __size_heap__ = 0x00000400;
}
define exported symbol __VECTOR_TABLE = m_interrupts_start;
define exported symbol __VECTOR_RAM = isdefinedsymbol(__flash_vector_table__) ? m_interrupts_start : m_interrupts_ram_start;
define exported symbol __RAM_VECTOR_TABLE_SIZE = __ram_vector_table_size__;
define exported symbol __RAM_START = m_interrupts_ram_start;
define exported symbol __RAM_END = m_data_2_end;
define memory mem with size = 4G;
define region m_flash_config_region = mem:[from m_flash_config_start to m_flash_config_end];
define region TEXT_region = mem:[from m_interrupts_start to m_interrupts_end]
| mem:[from m_text_start to m_text_end];
define region DATA_region = mem:[from m_data_start to m_data_end];
define region DATA_region_2 = mem:[from m_data_2_start to m_data_2_end-__size_cstack__];
define region CSTACK_region = mem:[from m_data_2_end-__size_cstack__+1 to m_data_2_end];
define region m_interrupts_ram_region = mem:[from m_interrupts_ram_start to m_interrupts_ram_end];
define block CSTACK with alignment = 8, size = __size_cstack__ { };
define block HEAP with alignment = 8, size = __size_heap__ { };
define block RW { readwrite };
define block ZI { zi };
/* Custom Section Block that can be used to place data at absolute address. */
/* Use __attribute__((section (".customSection"))) to place data here. */
define block customSectionBlock { section .customSection };
define block __CODE_ROM { section .textrw_init };
define block __CODE_RAM { section .textrw };
initialize manually { section .textrw };
initialize manually { section .bss };
initialize manually { section .customSection };
initialize manually { section .data };
initialize manually { section __DLIB_PERTHREAD };
do not initialize { section .noinit, section .bss, section .data, section __DLIB_PERTHREAD, section .customSection };
place at address mem: m_interrupts_start { readonly section .intvec };
place in m_flash_config_region { section FlashConfig };
place in TEXT_region { readonly };
place in TEXT_region { block __CODE_ROM };
place in DATA_region { block RW };
place in DATA_region { block __CODE_RAM };
place in DATA_region_2 { first block customSectionBlock };
place in DATA_region_2 { block ZI };
place in DATA_region_2 { last block HEAP };
place in CSTACK_region { block CSTACK };
place in m_interrupts_ram_region { section m_interrupts_ram };

@ -0,0 +1,486 @@
S01700006F70656E626C745F7333326B3134342E73726563DE
S1130000007000205D1C0000530A0000C70A0000B5
S11300108B100000C71700009B1D000000000000AB
S1130020000000000000000000000000C31D0000EC
S1130030CF1D000000000000291E0000391E000032
S1130040351E0000351E0000351E0000351E000060
S1130050351E0000351E0000351E0000351E000050
S1130060351E0000351E0000351E0000351E000040
S1130070351E0000351E0000351E0000351E000030
S1130080351E0000351E0000351E0000351E000020
S1130090351E0000351E0000351E0000351E000010
S11300A0351E0000351E0000351E0000351E000000
S11300B0351E0000351E0000351E0000351E0000F0
S11300C0351E0000351E0000351E0000351E0000E0
S11300D0351E0000351E0000351E0000351E0000D0
S11300E0351E0000351E0000351E0000351E0000C0
S11300F0351E0000351E0000351E0000351E0000B0
S1130100351E0000351E0000351E0000351E00009F
S1130110351E0000351E0000351E0000351E00008F
S1130120351E0000351E0000351E0000351E00007F
S1130130351E0000351E0000351E0000351E00006F
S1130140351E0000351E0000351E0000351E00005F
S1130150351E0000351E0000351E0000351E00004F
S1130160351E0000351E0000351E0000351E00003F
S1130170351E0000351E0000351E0000351E00002F
S1130180351E0000351E0000351E0000351E00001F
S1130190351E0000351E0000351E0000351E00000F
S11301A0351E0000351E0000351E0000351E0000FF
S11301B0351E0000351E0000351E0000351E0000EF
S11301C0351E0000351E0000351E0000351E0000DF
S11301D0351E0000351E0000351E0000351E0000CF
S11301E0351E0000351E0000351E0000351E0000BF
S11301F0351E0000351E0000351E0000351E0000AF
S1130200351E0000351E0000351E0000351E00009E
S1130210351E0000351E0000351E0000351E00008E
S1130220351E0000351E0000351E0000351E00007E
S1130230351E0000351E0000351E0000351E00006E
S1130240351E0000351E0000351E0000351E00005E
S1130250351E0000351E0000351E0000351E00004E
S1130260351E0000351E0000351E0000351E00003E
S1130270351E0000351E0000351E0000351E00002E
S1130280351E0000351E0000351E0000351E00001E
S1130290351E0000351E0000351E0000351E00000E
S11302A0351E0000351E0000351E0000351E0000FE
S11302B0351E0000351E0000351E0000351E0000EE
S11302C0351E0000351E0000351E0000351E0000DE
S11302D0351E0000351E0000351E0000351E0000CE
S11302E0351E0000351E0000351E0000351E0000BE
S11302F0351E0000351E0000351E0000351E0000AE
S1130300351E0000351E0000351E0000351E00009D
S1130310351E0000351E0000351E0000351E00008D
S1130320351E0000351E0000351E0000351E00007D
S1130330351E0000351E0000351E0000351E00006D
S1130340351E0000351E0000351E0000351E00005D
S1130350351E0000351E0000351E0000351E00004D
S1130360351E0000351E0000351E0000351E00003D
S1130370351E0000351E0000351E0000351E00002D
S1130380351E0000351E0000351E0000351E00001D
S1130390351E0000351E0000351E0000351E00000D
S11303A0351E0000351E0000351E0000351E0000FD
S11303B0351E0000351E0000351E0000351E0000ED
S11303C0351E0000351E0000351E0000351E0000DD
S11303D0351E0000351E0000351E0000351E0000CD
S11303E0351E0000351E0000351E0000351E0000BD
S11303F0351E0000351E0000351E0000FFFFFFFF04
S1130400FFFFFFFFFFFFFFFFFFFFFFFFFE7FFFFF79
S1130410DFF800F00184FF1F5FF0FF30DFF878158C
S11304200860DFF87815086070472DE9F041040092
S11304300D0016005FF00108DFF86475D7F8F010BE
S1130440D7F8F4004118491E091B681E814201D2E5
S11304505FF000084046C0B201280CD1200000F033
S113046074FAFF2805D02819401E00F06EFAFF2800
S113047001D15FF000084046C0B2012818D1210024
S1130480890A4FF4806041433868814208D12B00C7
S113049032002100DFF8040500F006F9804607E089
S11304A02B0032002100DFF8F00400F0FDF8804654
S11304B04046C0B2BDE8F081F8B504000D00012645
S11304C0DFF8DC14D1F8F020D1F8F4108A18521EA9
S11304D0121B691E8A4200D200263100C9B20129CA
S11304E011D1200000F031FA07002C19641E2000FD
S11304F000F02BFA3900C9B2FF2903D00100C9B2B8
S1130500FF2900D100263100C9B2012906D101001A
S1130510C9B23800C0B200F09DF906003000C0B284
S1130520F2BD80B5012000210091DFF870140A6843
S113053012F1010F2ED00200D2B2012A2AD1009A60
S1130540486882180092009A886882180092009A7B
S1130550C86882180092009A086982180092009A6A
S1130560486982180092009A886982180092009A59
S1130570C869821800920098C04300900098401CFB
S113058000906A460421DFF81804006810F57E70B4
S1130590FFF74BFFC0B202BD01200022DFF8003498
S11305A0196809688A181968091D09688A18196878
S11305B0083109688A1819680C3109688A18196899
S11305C0103109688A181968143109688A18196879
S11305D0183109688A18196811F57E7109688A1832
S11305E0002A00D00020C0B2704710B50124DFF803
S11305F0AC03016811F1010F04D000F0A9F8002840
S113060000D100242000C0B201280AD1DFF88803F9
S1130610016811F1010F04D000F09AF8002800D10C
S113062000242000C0B210BDDFF8740300687047D6
S113063010B501248A0500D000242200D2B2012A78
S113064008D102688A4205D001604FF48062001D1F
S113065000F0E6F92000C0B210BD70B505000E0030
S11306600020DFF83803854203D1DFF82C532C0037
S11306700FE0DFF82C130A68964203D105000E68D8
S11306802C0006E02C00280000F062F8002800D1BD
S11306900024002C06D031002800FFF7C9FF0028F1
S11306A000D10024200070BD2DE9F84304008946E0
S11306B090461D0001274E46B60A4FF4806046431B
S11306C0206810F1010F06D131002000FFF7B0FFC0
S11306D0002800D100273800C0B201280AD12068C0
S11306E0B04207D031002000FFF7B7FF0400002C10
S11306F000D100273800C0B2012825D12068B9EB09
S1130700000904EB090010F1040900F09EF9201D12
S1130710B9EB0000B0F5806F09D316F580612000B5
S1130720FFF79BFF0400002C0DD014F1040998F886
S1130730000089F8000019F1010918F101086D1E83
S1130740002DE2D100E000273800C0B2BDE8F283FA
S11307502DE9F047040001260825206800F0F5F88B
S1130760FF2800D100263000C0B201286CD1002738
S113077012E0401C01002A00C9B2D2B291420AD24E
S11307800100C9B219F801100200D2B218F802200F
S11307909142EED000267F1C4FF480602900C9B23C
S11307A090FBF1F087424FD22068A9465FFA89F99D
S11307B009FB07092800C0B200FB07F0204410F130
S11307C0040800F042F9DFF8DCA19AF80000000602
S11307D039D570208AF8000007207349087048460C
S11307E0000C724908704846000A71490870714843
S11307F080F8009098F800006F49087098F801009C
S11308006E49087098F802006D49087098F8030062
S11308106C49087098F804006B49087098F8050052
S11308206A49087098F806006949087098F8070042
S113083068490870FFF7ECFD9AF8000010F0710F9A
S113084006D1002096E700263000C0B2BDE8F0874C
S11308500026F9E72DE9F04781460E000125300016
S11308604946C0B2C9B2884200D200252800C0B2AD
S1130870012804D13000C0B2152800D30025280077
S1130880C0B201285DD101E019F1010930004946E7
S1130890C0B2C9B2884254D300F0D7F80C20404902
S11308A04A46D2B242438F584A46D2B200FB02F0C3
S11308B00844446817F1010F09D0002C07D038050B
S11308C007D1200507D1240B5FF000081EE00025A6
S11308D037E0002535E0002533E070208AF8000079
S11308E00920314A10700800000C304A10700800CA
S11308F0000A2F4A10702F480170FFF789FD9AF8FB
S1130900000010F0710F17D118F1010840462100C2
S1130910C0B2C9B2884210D200F097F84146C9B2B9
S11309204FF4805000FB0171DFF878A09AF80000C2
S11309300006D2D4002500E000252800C0B200281B
S1130940A2D12800C0B2BDE8F08770B50400FF252D
S1130950002600E0761C3000C0B2152817D200F043
S113096074F80C200E493200D2B242438A589442A1
S1130970F0D33200D2B242438A583300DBB200FBD8
S113098003F00844406882189442E3D235002800FA
S1130990C0B270BD000000004C00002050040020D4
S11309A08C1A0000000002400700024006000240CA
S11309B00500024004000240080002400900024011
S11309C00A0002400B0002400C0002400D000240ED
S11309D00E0002400F00024080B500F03BF801BD5C
S11309E080B500F047F8002814D000F055F800282E
S11309F010D000F095F800F0F3F800F03FF8064945
S1130A0008400649086000F027F800F037F8001D98
S1130A100068804701BD000080FFFF1F08ED00E073
S1130A2070B504000D00160005E0287820706D1CD8
S1130A30641C00F00AF83000461E80B20028F4D18D
S1130A4070BD80B500F036F801BD80B500F037F810
S1130A5001BDFEE762B6704762B6704780B5FFF726
S1130A60DBFC01BD80B5FFF7E0FC02BD80B5FFF7FC
S1130A7023FD02BD80B5FFF78FFD02BD80B5FFF7F2
S1130A80D3FD02BD80B5FFF74CFD002801D1002045
S1130A9001E0FFF7AAFD02BD80B505480068C00467
S1130AA001D5002002E000F0ECF8012002BD0000B6
S1130AB090F00F4080B5642000F0B0F801BD80B51F
S1130AC000F0BEF801BDFEE710B500F0EFF800F04D
S1130AD099FB344C0120207000F02CFD0020207084
S1130AE010BD1CB5304C6946200000F0C6FC01283E
S1130AF007D101202B4908709DF80010200000F058
S1130B00F5F86946200000F088FD012807D100208F
S1130B10244908709DF80010200000F0E7F813BD88
S1130B20704770B504000D001E4E3078012804D1C2
S1130B302900C9B2200000F034FC3078002804D128
S1130B402900C9B2200000F047FD00F0C9F870BDCB
S1130B5014480078002805D0022807D004D30328BD
S1130B6006D007E0402006E0082004E0002002E070
S1130B70002000E0402080B270470A480078002836
S1130B8005D0022807D004D3032806D007E040206C
S1130B9006E0082004E0002002E0002000E04020FD
S1130BA080B270471C84FF1F0C00002010B5002485
S1130BB000F08DF8002800D001242000C0B210BD40
S1130BC080B500F00DF81048104908600020104965
S1130BD0086005200F49086000200F49086001BD26
S1130BE000200C49086070470A480068C00303D518
S1130BF009480168491C0160704780B5FFF7F4FF9C
S1130C000548006802BD00007F38010014E000E0E0
S1130C1018E000E010E000E0A00800201C490A6889
S1130C2052F480720A601B490A6852F001020A6099
S1130C3019490A6852F001020A601849088070478D
S1130C4010B5FFF7DAFF164C2168884218D315490E
S1130C500878002807D1012008701348016851F072
S1130C600101016006E0002008700B48016851F0A2
S1130C7001010160FFF7C1FF08490988401820609D
S1130C8010BD0548016851F0010101607047000082
S1130C9000C00440D4F00F40C4F00F40F00800201E
S1130CA054080020F3080020C8F00F40DFF8C80300
S1130CB00021017000218164002180F8431000218B
S1130CC0A0F8441000218170002141707047DFF8C2
S1130CD0A8030078002801D1002000E0012070471B
S1130CE00020DFF8941381F84300704710B50178B1
S1130CF0FF2917D100F08CF8DFF87C4394F8430007
S1130D00012802D1102000F07BF8B4F94400012836
S1130D1007DB012084F84300B4F94410E01C00F020
S1130D2053F810BDDFF85013097801294BD101782D
S1130D30C92932D0CC293FD0CF293AD0D0292FD0BD
S1130D40D12933D0D2292ED0F32917D0F4290FD0AA
S1130D50F5290AD0F6290ED0FA2912D0FC2913D08D
S1130D60FD2914D0FE2915D029E000F0B5F8C3E719
S1130D7000F0D1F8C0E700F0A6F8BDE700F0ECF809
S1130D80BAE700F08EF8B7E700F086F8B4E700F0B1
S1130D9072F8B1E700F063F8AEE700F004F9ABE7EE
S1130DA000F020F9A8E700F0E9F8A5E700F048F919
S1130DB0A2E700F057F99FE700F062F99CE72020D2
S1130DC000F01EF898E7ACE780B589B2FFF7A9FEFA
S1130DD001BDF8B504000D001600002704E02078DA
S1130DE0C719641CFFF731FE2800451E0028F6D100
S1130DF0FFB237600120F2BD00209F494870704760
S1130E009D49FE22CA7008710220A1F8440070476F
S1130E1010B5FFF7F1FF984C01202070FF20E0701F
S1130E2000202071207950F01000207100206071A2
S1130E3060796071FFF78CFEA071FFF79EFEE07190
S1130E40FFF79BFE80B2000A20720120607201202D
S1130E50A0720820A4F84400FFF700FE10BD10B5EE
S1130E60854C00202070FFF7C7FFFF20E0700120B1
S1130E70A4F8440010BD8048FF21C1700021017115
S1130E8041784171002181710021C17100210172F9
S1130E900621A0F84410704780B50020FFF7B0FF8A
S1130EA001BD7548FF21C17074498164002101713D
S1130EB000214171002181710721C0F80710082128
S1130EC0A0F8441070476C49FF22CA7040688864D7
S1130ED00120A1F84400704738B50400FFF738FE3C
S1130EE080B2401E6178884203DA2220FFF788FF2F
S1130EF010E06278604D281D92B2A96CFFF790FD56
S1130F00FF20E870A86C61784018A8646078401CE1
S1130F10A5F8440031BD38B50400FFF719FE80B2CE
S1130F20401E6178884203DA2220FFF769FF12E04D
S1130F30514D6068A8646278281D92B2A96CFFF7CD
S1130F406FFDFF20E870A86C61784018A864607891
S1130F50401CA5F8440031BD10B5474CFF21E17099
S1130F60E21D4168A06CFFF734FF2071002060711E
S1130F700020A0710820A4F8440010BD10B53E4C18
S1130F80FF20E0700020207100206071FFF7E0FD79
S1130F90A0710020E0710020207200206072072000
S1130FA0A4F8440010BD38B50400FFF7D1FD0100DA
S1130FB0314D621C89B2491EA86CFFF753FD00280D
S1130FC003D13120FFF71CFF0BE0FF20E870FFF78F
S1130FD0BFFDA96C80B2401E4018A8640120A5F88A
S1130FE0440031BD38B50400FFF7B2FD80B2801E65
S1130FF06178884203DA2220FFF702FF1FE01E4DCA
S1131000FF20E8700120A5F844006078002807D18B
S1131010FFF738FD002802D13120FFF7F1FE0EE082
S1131020A21C6178A86CFFF71DFD002803D13120B4
S1131030FFF7E6FE03E0A86C61784018A86431BDB0
S113104010B50D4C4168A06CFFF710FD002803D1CA
S11310503120FFF7D5FE04E0FF20E0700120A4F862
S1131060440010BD80B5FFF7BBFC0348FF21C170ED
S11310700121A0F8441001BDA4080020181E00009E
S113108080B53120FFF7BCFE01BDFEE7FCB40300D0
S11310906846DFF84444D4E90056C0E90056DFF856
S11310A03C442068C0F30220002804D1012005023A
S11310B015F4E06525604FF4FA546D46285CB4FBE2
S11310C0F0F5002600E0761C3000C0B2122826D2CB
S11310D0DFF80C74180080B23400E4B217F824402E
S11310E06043B5FBF0F400FB14500028EBD11C0066
S11310F0A4B23000C0B217F820004443B5FBF4F0AA
S1131100088008880028DED0088840F20114A04234
S1131110D9D2F6B257F826001060012000E0002072
S1131120F6BC704738B5DFF8BC532868002804D5EE
S1131130DE21DFF8B40300F005FB286850F080409E
S11311402860286850F080502860FFF756FD04009E
S1131150FA342868C00105D4FFF777FCFFF74DFD8A
S11311608442F6D231BD38B5DFF8785328680028B8
S113117004D5FE21DFF8700300F0E4FA286830F0AB
S113118080402860286830F080502860FFF735FDE3
S11311900400FA342868C00105D5FFF756FCFFF7B0
S11311A02CFD8442F6D231BD38B5CE4D28680028D6
S11311B010D4286850F000402860FFF71EFD04009A
S11311C0FA342868C00205D4FFF73FFCFFF715FD89
S11311D08442F6D231BD38B5C24D2868002810D5F6
S11311E0286820F000402860FFF707FD0400FA3467
S11311F02868C00205D5FFF728FCFFF7FEFC8442EF
S1131200F6D231BD7CB50020ADF8040004220021E3
S1131210684600F09BFA40F26765B448016851F0F3
S113122080410160FFF7D7FFFFF77CFFFFF7BCFFAA
S1131230AF4C206830F400502060FFF7CCFFFFF77C
S113124071FF6A4601A94FF4FA70FFF71FFF0028E7
S113125004D140F28711A44800F074FA21684FF6D3
S11312607870014021602068BDF80410491E50EADE
S11312700160206020689DF80110491E11F00701EB
S11312800843206020689DF80210491EC90411F427
S113129060110843206020689DF80310491E09046A
S11312A011F4E021084320609DF80200042802DACA
S11312B09DF8020000E004202168C0B2401E8005B1
S11312C010F4400008432060206850F08000206043
S11312D0002006E00021874A03009BB242F8231055
S11312E0401C010089B28029F4D3002006E00021CB
S11312F0814A03009BB242F82310401C010089B2CA
S11313002029F4D3774E3068C009C00150F01F0083
S11313103060306850F400303060306850F4803011
S11313203060306830F0005030607FF02040734906
S1131330086073485FF080610160002D0AD525F0D4
S11313400045016851F40011016025F060456D48C5
S1131350056004E0AD0425F060456A48056000209E
S1131360694908605FF0FF30684908606848694966
S11313700860306830F4000030602168664801403D
S11313802160FFF7F0FEFFF738FC0400FA34306800
S1131390000105D5FFF759FBFFF72FFC8442F6D275
S11313A073BDF8B5002340F2E172002A02D522F0A1
S11313B000420123554C4FF480752560574D2E682B
S11313C026F060462E602E6836F440162E602E6895
S11313D056F480062E602E6836F470262E602E6831
S11313E00F00FFB23F0417F470273E432E604C4EAB
S11313F0002717E0BC465FFA8CFC5FEA9C0C5FEAAE
S11314008C0C1CF1030CBE465FFA8EFE1EF0030E1C
S1131410BCEB0E0CBE465FFA8EFE10F80EE006F82A
S11314200CE07F1CBC468E465FFA8CFC5FFA8EFE95
S1131430F445DFD3DBB2002B05D1920422F06042E5
S11314403848026007E0286850F40010286022F051
S1131450604234480260286850F040602860FFF71A
S1131460CCFB050032352068C00505D4FFF7EDFA42
S1131470FFF7C3FB8542F6D2F1BD70B40022234BC3
S11314801C68A40524D51E4A1268120C12F00F021F
S11314900A70254A00240EE02500EDB2AD08AD0027
S11314A0ED1C2600F6B216F00306AD1B555D2600B2
S11314B0F6B28555641C25000E78EDB2B542EBD327
S11314C04FF4007018601948006819490860012237
S11314D01000C0B270BC7047081E000004410640F2
S11314E0B41C0000004002403C1D00009050064027
S11314F0044002408040024080480240A448024028
S11315001041024014410240284002403040024051
S113151006003B0020400240F7EFFFFF004102407D
S11315200841024004410240184102400840024080
S11315300800002082B068466E49D1E90023C0E962
S113154000236D48016831F080410160016851F069
S11315508441016069490868C0F30220002806D16B
S113156001200A68030213F4E0631A430A60644921
S1131570644A1268D20700D463496A46105CB1FB1E
S1131580F0F04FF46141B0FBF1F0C01DC008C0049D
S1131590C00C80B2C004C00C50F0E0605B4908602D
S11315A05B485C4908605C480021016000215B4A9B
S11315B0116000215A4A11605A495FF470320A607E
S11315C00A6852F088020A600121574A11605FF4E8
S11315D04021016002B0704770B504000D0028007E
S11315E0C0B2412803DBC821504800F0ABF8280002
S11315F0C0B200F069F8002607E0FFF726FA3000D1
S113160080B2205C00F060F8761C30002900C9B27A
S113161080B289B28842F0D370BD2DE9F041050053
S11316200E00434C2078002815D1424D280000F0CC
S11316303DF8012837D12878002834D0287841286B
S113164031DAFFF7DAFA3C49086000203B490870B8
S11316500120207027E0394FDFF8D88038784044E3
S1131660401C00F023F8012814D13878401C38704D
S1131670387898F80010884215D13A7892B218F167
S113168001012800FFF7CCF9002020703878307071
S1131690012009E0FFF7B1FA274909686431814262
S11316A001D2002020700020BDE8F081020000205B
S11316B018490968C1F34051002903D02048006843
S11316C010700120C0B2704710B5C0B21C49086048
S11316D0FFF793FA04000A340E480068C0F3C050C0
S11316E0002805D1FFF7B1F9FFF787FA8442F3D256
S11316F010BD0000101E0000AC510640044206401C
S113170000127A000842064080841E0010B0064091
S113171000C01FC014B0064018B0064020B00640F8
S113172024B0064028B006402CB00640FC1C000043
S1131730F5080020580800209C080020F408002028
S11317401CB0064080B5FFF780F9FCE710B50446ED
S113175010460A460146204600F002F8204610BD15
S113176062F30F2262F31F42401810F0030308D003
S1131770C91A1FD3DB0748BF00F8012D28BF20F882
S1131780022D130030B414461546103928BF20E941
S11317903C00FAD8490728BF20E90C0048BF40F8AC
S11317A0042D890028BF20F8022D48BF00F8012D20
S11317B030BC7047C91818BF00F8012DCB0728BFEB
S11317C000F8012D7047FEE780B500F005F800F041
S11317D0A1F800F0ADF8FCE780B500F037F839481F
S11317E0016851F0804101603748016851F080413F
S11317F001603648016851F0804101603448016855
S113180051F480710160016831F0020101603148D6
S1131810016831F4805101602F48016831F480512E
S113182001602E48016851F4007101602C48016880
S113183051F4007101602B48016851F4A06101600A
S11318402948016851F4A061016001BD10B540F25E
S11318500111264801602420254A106025480268A9
S11318601202FBD4012202600268D201FCD5224A92
S113187010680002FBD410684008400010601F4B41
S11318801C6840F2023004431C605FF4C0101C4B1F
S1131890186010680002FCD4106850F00100106059
S11318A01068C001FCD51748016017481749086043
S11318B017480068C0F303600628F9D100F059F80E
S11318C010BD00002C5106403051064034510640F2
S11318D030B0044094F00F4098F00F4018B004402A
S11318E01CB0044010D0044014D00440044106400D
S11318F008410640004106400046064004460640B2
S11319000846064004420640120001061440064000
S11319101040064080B5FFF75FF8FFF792F8FFF735
S11319204FF9FFF79BF8FFF7CFF800F07DF801BD02
S113193080B5FFF78AF8FFF757F9FFF7D2F800F000
S11319407CF801BD2B48016851F4700101602A48FC
S1131950016831F08041016028482949016000682C
S113196042F22010274908604FF6FF7026490860AC
S1131970704710B40023012024490A68C2F30342CB
S1131980521C0968090E11F00F01012906D0022921
S113199006D003290CD0062912D020E01C4B1FE0EE
S11319A01C49096811F00101002900D0184B17E007
S11319B01949096811F00301184B53F821300FE05D
S11319C01349174C2368C3F302235B1C2468C4F334
S11319D00444103461435B00B1FBF3F300E00020E6
S11319E0C0B2002803D0B3FBF2F00E49086010BC6B
S11319F07047000088ED00E034EF00E0042005406B
S1131A0020C528D900200540082005401040064084
S1131A1000127A000842064008430640301E0000C7
S1131A20084606401884FF1F80B501201449087039
S1131A3000F01CF800F001F801BD10B5FFF7B6F88E
S1131A40012812D00E4C207801280ED1FFF7D5F8CA
S1131A500C490A680C4909688A1812F5FA7290420E
S1131A6003D300202070FEF7BBFF10BD80B50448EF
S1131A700078012803D1FFF7C0F80349086001BDCD
S1131A80F2080020040000200000002000200000D4
S1131A9000100000020000000030000000100000F0
S1131AA003000000004000000010000004000000DB
S1131AB0005000000010000005000000006000005D
S1131AC0001000000600000000700000001000007C
S1131AD007000000008000000080000008000000F3
S1131AE000000100008000000900000000800100E7
S1131AF0008000000A0000000000020000800000D6
S1131B000B00000000800200008000000C000000B8
S1131B1000000300008000000D00000000800300AE
S1131B20008000000E00000000000400008000009F
S1131B300F0000000080040000800000100000007E
S1131B400000050000800000110000000080050076
S1131B500080000012000000000006000080000069
S1131B601300000000800600008000001400000044
S1131B70000007000080000015000000008007003E
S1131B8000800000160000002DE9F043244B254E90
S1131B90254F264CDFF898C0DFF898E0264DDFF893
S1131BA09C8027482749284A05E096F8009083F846
S1131BB000905B1C761CB742F7D1E64509D09CF82F
S1131BC000302370641C1CF1010CF6E700232B7019
S1131BD06D1CA845FAD18A4204D00B780370491CC5
S1131BE0401CF8E70021194A194B934210D00020F9
S1131BF004E052F8204043F82040401C154CB0EB60
S1131C00940FF6D31448C9B250F82100036004E0DD
S1131C101148C9B250F821000260BDE8F08300BF4A
S1131C201884FF1F201E0000281E00000084FF1FD0
S1131C30E41D0000FC1D000000000020F608002048
S1131C400000000000000000000000000000000090
S1131C500080FF1F000400002C1E000072B600214B
S1131C60002200230024002500260027B846B94698
S1131C70BA46BB46BC460A490A4A521A013A05DD2D
S1131C800020042308601944043AFBDA0648854618
S1131C90064880470648804762B6FFF795FDFEE791
S1131CA00080FF1FFF6F0020007000204519000016
S1131CB0891B000008030202090303020A03030349
S1131CC00B0403030C0404030D0504030E050404B0
S1131CD00F06040410060504110705041207050580
S1131CE01308050514080605150807051608070650
S1131CF0170808061808080719080808433A5C5723
S1131D006F726B5C736F6674776172655C4F70653C
S1131D106E424C545C5461726765745C536F7572A7
S1131D2063655C41524D434D345F5333324B313420
S1131D305C72733233322E6300000000433A5C5706
S1131D406F726B5C736F6674776172655C4F7065FC
S1131D506E424C545C5461726765745C536F757267
S1131D6063655C41524D434D345F5333324B3134E0
S1131D705C63616E2E6300004EF68851CEF2000162
S1131D80086840F470000860BFF34F8FBFF36F8F93
S1131D904FF00070E1EE100A7047FEE700F00DF816
S1131DA0002801D0AFF30080AFF300800020AFF330
S1131DB00080FFF709FD00F002F80120704700F0F1
S1131DC001B8FEE70746384600F002F8FBE7FEE7F5
S1131DD080B5AFF30080024A11001820ABBEFBE7C8
S1131DE0260002000448017851F080010170017856
S1131DF00906FCD5704700BF00000240AFF3008025
S1131E00FFF7BAFFFFF7CAFF0001020408102040E1
S1131E1000010204081020404F70656E424C5400CB
S1131E20006CDC0204000000FEE7000008ED00E0A6
S10D1E30006CDC02FFF7FEBFFEE7C2
S9031DFDE2

@ -0,0 +1,176 @@
/************************************************************************************//**
* \file Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/blt_conf.h
* \brief Bootloader configuration header file.
* \ingroup Boot_ARMCM4_S32K14_S32K144EVB_IAR
* \internal
*----------------------------------------------------------------------------------------
* C O P Y R I G H T
*----------------------------------------------------------------------------------------
* Copyright (c) 2020 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 BLT_CONF_H
#define BLT_CONF_H
/****************************************************************************************
* C P U D R I V E R C O N F I G U R A T I O N
****************************************************************************************/
/* To properly initialize the baudrate clocks of the communication interface, typically
* the speed of the crystal oscillator and/or the speed at which the system runs is
* needed. Set these through configurables BOOT_CPU_XTAL_SPEED_KHZ and
* BOOT_CPU_SYSTEM_SPEED_KHZ, respectively. To enable data exchange with the host that is
* not dependent on the targets architecture, the byte ordering needs to be known.
* Setting BOOT_CPU_BYTE_ORDER_MOTOROLA to 1 selects big endian mode and 0 selects
* little endian mode.
*
* Set BOOT_CPU_USER_PROGRAM_START_HOOK to 1 if you would like a hook function to be
* called the moment the user program is about to be started. This could be used to
* de-initialize application specific parts, for example to stop blinking an LED, etc.
*/
/** \brief Frequency of the external crystal oscillator. */
#define BOOT_CPU_XTAL_SPEED_KHZ (8000)
/** \brief Desired system speed. */
#define BOOT_CPU_SYSTEM_SPEED_KHZ (80000)
/** \brief Motorola or Intel style byte ordering. */
#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0)
/** \brief Enable/disable hook function call right before user program start. */
#define BOOT_CPU_USER_PROGRAM_START_HOOK (1)
/****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission
* and reception is set through BOOT_COM_UART_TX_MAX_DATA and BOOT_COM_UART_RX_MAX_DATA,
* respectively. It is common for a microcontroller to have more than 1 UART interface
* on board. The zero-based BOOT_COM_UART_CHANNEL_INDEX selects the UART interface.
*
*/
/** \brief Enable/disable UART transport layer. */
#define BOOT_COM_RS232_ENABLE (1)
/** \brief Configure the desired communication speed. */
#define BOOT_COM_RS232_BAUDRATE (57600)
/** \brief Configure number of bytes in the target->host data packet. */
#define BOOT_COM_RS232_TX_MAX_DATA (64)
/** \brief Configure number of bytes in the host->target data packet. */
#define BOOT_COM_RS232_RX_MAX_DATA (64)
/** \brief Select the desired UART peripheral as a zero based index. */
#define BOOT_COM_RS232_CHANNEL_INDEX (1)
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. Note that an extended 29-bit CAN identifier is configured by
* OR-ing with mask 0x80000000. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (1)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1 /*| 0x80000000*/)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667 /*| 0x80000000*/)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (0)
/****************************************************************************************
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
****************************************************************************************/
/* It is possible to implement an application specific method to force the bootloader to
* stay active after a reset. Such a backdoor entry into the bootloader is desired in
* situations where the user program does not run properly and therefore cannot
* reactivate the bootloader. By enabling these hook functions, the application can
* implement the backdoor, which overrides the default backdoor entry that is programmed
* into the bootloader. When desired for security purposes, these hook functions can
* also be implemented in a way that disables the backdoor entry altogether.
*/
/** \brief Enable/disable the backdoor override hook functions. */
#define BOOT_BACKDOOR_HOOKS_ENABLE (0)
/****************************************************************************************
* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N
****************************************************************************************/
/* The NVM driver typically supports erase and program operations of the internal memory
* present on the microcontroller. Through these hook functions the NVM driver can be
* extended to support additional memory types such as external flash memory and serial
* eeproms. The size of the internal memory in kilobytes is specified with configurable
* BOOT_NVM_SIZE_KB. If desired the internal checksum writing and verification method can
* be overridden with a application specific method by enabling configuration switch
* BOOT_NVM_CHECKSUM_HOOKS_ENABLE.
*/
/** \brief Enable/disable the NVM hook function for supporting additional memory devices. */
#define BOOT_NVM_HOOKS_ENABLE (0)
/** \brief Configure the size of the default memory device (typically flash EEPROM). */
#define BOOT_NVM_SIZE_KB (512)
/** \brief Enable/disable hooks functions to override the user program checksum handling. */
#define BOOT_NVM_CHECKSUM_HOOKS_ENABLE (0)
/****************************************************************************************
* W A T C H D O G D R I V E R C O N F I G U R A T I O N
****************************************************************************************/
/* The COP driver cannot be configured internally in the bootloader, because its use
* and configuration is application specific. The bootloader does need to service the
* watchdog in case it is used. When the application requires the use of a watchdog,
* set BOOT_COP_HOOKS_ENABLE to be able to initialize and service the watchdog through
* hook functions.
*/
/** \brief Enable/disable the hook functions for controlling the watchdog. */
#define BOOT_COP_HOOKS_ENABLE (1)
/****************************************************************************************
* S E E D / K E Y S E C U R I T Y C O N F I G U R A T I O N
****************************************************************************************/
/* A security mechanism can be enabled in the bootloader's XCP module by setting configu-
* rable BOOT_XCP_SEED_KEY_ENABLE to 1. Before any memory erase or programming
* operations can be performed, access to this resource need to be unlocked.
* In the Microboot settings on tab "XCP Protection" you need to specify a DLL that
* implements the unlocking algorithm. The demo programs are configured for the (simple)
* algorithm in "libseednkey.dll". The source code for this DLL is available so it can be
* customized to your needs.
* During the unlock sequence, Microboot requests a seed from the bootloader, which is in
* the format of a byte array. Using this seed the unlock algorithm in the DLL computes
* a key, which is also a byte array, and sends this back to the bootloader. The
* bootloader then verifies this key to determine if programming and erase operations are
* permitted.
* After enabling this feature the hook functions XcpGetSeedHook() and XcpVerifyKeyHook()
* are called by the bootloader to obtain the seed and to verify the key, respectively.
*/
#define BOOT_XCP_SEED_KEY_ENABLE (0)
#endif /* BLT_CONF_H */
/*********************************** end of blt_conf.h *********************************/

@ -0,0 +1,7 @@
/**
\defgroup Boot_ARMCM4_S32K14_S32K144EVB_IAR Bootloader
\brief Bootloader.
\ingroup ARMCM4_S32K14_S32K144EVB_IAR
*/

@ -0,0 +1,307 @@
/************************************************************************************//**
* \file Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/hooks.c
* \brief Bootloader callback source file.
* \ingroup Boot_ARMCM4_S32K14_S32K144EVB_IAR
* \internal
*----------------------------------------------------------------------------------------
* C O P Y R I G H T
*----------------------------------------------------------------------------------------
* Copyright (c) 2020 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 */
#include "led.h" /* LED driver header */
#include "device_registers.h" /* device registers */
/****************************************************************************************
* B A C K D O O R E N T R Y H O O K F U N C T I O N S
****************************************************************************************/
#if (BOOT_BACKDOOR_HOOKS_ENABLE > 0)
/************************************************************************************//**
** \brief Initializes the backdoor entry option.
** \return none.
**
****************************************************************************************/
void BackDoorInitHook(void)
{
} /*** end of BackDoorInitHook ***/
/************************************************************************************//**
** \brief Checks if a backdoor entry is requested.
** \return BLT_TRUE if the backdoor entry is requested, BLT_FALSE otherwise.
**
****************************************************************************************/
blt_bool BackDoorEntryHook(void)
{
/* default implementation always activates the bootloader after a reset */
return BLT_TRUE;
} /*** end of BackDoorEntryHook ***/
#endif /* BOOT_BACKDOOR_HOOKS_ENABLE > 0 */
/****************************************************************************************
* C P U D R I V E R H O O K F U N C T I O N S
****************************************************************************************/
#if (BOOT_CPU_USER_PROGRAM_START_HOOK > 0)
/************************************************************************************//**
** \brief Callback that gets called when the bootloader is about to exit and
** hand over control to the user program. This is the last moment that
** some final checking can be performed and if necessary prevent the
** bootloader from activiting the user program.
** \return BLT_TRUE if it is okay to start the user program, BLT_FALSE to keep
** keep the bootloader active.
**
****************************************************************************************/
blt_bool CpuUserProgramStartHook(void)
{
/* additional and optional backdoor entry through the pushbutton (SW2) on the board. to
* force the bootloader to stay active after reset, keep it pressed during reset.
*/
if ((PTC->PDIR & GPIO_PDIR_PDI(1 << 12U)) != 0U)
{
/* pushbutton pressed, so do not start the user program and keep the
* bootloader active instead.
*/
return BLT_FALSE;
}
/* clean up the LED driver */
LedBlinkExit();
/* okay to start the user program */
return BLT_TRUE;
} /*** end of CpuUserProgramStartHook ***/
#endif /* BOOT_CPU_USER_PROGRAM_START_HOOK > 0 */
/****************************************************************************************
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
****************************************************************************************/
#if (BOOT_COP_HOOKS_ENABLE > 0)
/************************************************************************************//**
** \brief Callback that gets called at the end of the internal COP driver
** initialization routine. It can be used to configure and enable the
** watchdog.
** \return none.
**
****************************************************************************************/
void CopInitHook(void)
{
/* this function is called upon initialization. might as well use it to initialize
* the LED driver. It is kind of a visual watchdog anyways.
*/
LedBlinkInit(100);
} /*** end of CopInitHook ***/
/************************************************************************************//**
** \brief Callback that gets called at the end of the internal COP driver
** service routine. This gets called upon initialization and during
** potential long lasting loops and routine. It can be used to service
** the watchdog to prevent a watchdog reset.
** \return none.
**
****************************************************************************************/
void CopServiceHook(void)
{
/* run the LED blink task. this is a better place to do it than in the main() program
* loop. certain operations such as flash erase can take a long time, which would cause
* a blink interval to be skipped. this function is also called during such operations,
* so no blink intervals will be skipped when calling the LED blink task here.
*/
LedBlinkTask();
} /*** end of CopServiceHook ***/
#endif /* BOOT_COP_HOOKS_ENABLE > 0 */
/****************************************************************************************
* N O N - V O L A T I L E M E M O R Y D R I V E R H O O K F U N C T I O N S
****************************************************************************************/
#if (BOOT_NVM_HOOKS_ENABLE > 0)
/************************************************************************************//**
** \brief Callback that gets called at the start of the internal NVM driver
** initialization routine.
** \return none.
**
****************************************************************************************/
void NvmInitHook(void)
{
} /*** end of NvmInitHook ***/
/************************************************************************************//**
** \brief Callback that gets called at the start of a firmware update to reinitialize
** the NVM driver.
** \return none.
**
****************************************************************************************/
void NvmReinitHook(void)
{
} /*** end of NvmReinitHook ***/
/************************************************************************************//**
** \brief Callback that gets called at the start of the NVM driver write
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
** been written yet.
** \param addr Start address.
** \param len Length in bytes.
** \param data Pointer to the data buffer.
** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
** not within the supported memory range, or BLT_NVM_ERROR is the write
** operation failed.
**
****************************************************************************************/
blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
{
return BLT_NVM_NOT_IN_RANGE;
} /*** end of NvmWriteHook ***/
/************************************************************************************//**
** \brief Callback that gets called at the start of the NVM driver erase
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory
** hasn't been erased yet.
** \param addr Start address.
** \param len Length in bytes.
** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
** not within the supported memory range, or BLT_NVM_ERROR is the erase
** operation failed.
**
****************************************************************************************/
blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len)
{
return BLT_NVM_NOT_IN_RANGE;
} /*** end of NvmEraseHook ***/
/************************************************************************************//**
** \brief Callback that gets called at the end of the NVM programming session.
** \return BLT_TRUE is successful, BLT_FALSE otherwise.
**
****************************************************************************************/
blt_bool NvmDoneHook(void)
{
return BLT_TRUE;
} /*** end of NvmDoneHook ***/
#endif /* BOOT_NVM_HOOKS_ENABLE > 0 */
#if (BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0)
/************************************************************************************//**
** \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 NvmVerifyChecksumHook(void)
{
return BLT_TRUE;
} /*** end of NvmVerifyChecksum ***/
/************************************************************************************//**
** \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 a valid user programming is
** present and can be started.
** \return BLT_TRUE if successful, BLT_FALSE otherwise.
**
****************************************************************************************/
blt_bool NvmWriteChecksumHook(void)
{
return BLT_TRUE;
}
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
/****************************************************************************************
* S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S
****************************************************************************************/
#if (BOOT_XCP_SEED_KEY_ENABLE > 0)
/************************************************************************************//**
** \brief Provides a seed to the XCP master that will be used for the key
** generation when the master attempts to unlock the specified resource.
** Called by the GET_SEED command.
** \param resource Resource that the seed if requested for (XCP_RES_XXX).
** \param seed Pointer to byte buffer wher the seed will be stored.
** \return Length of the seed in bytes.
**
****************************************************************************************/
blt_int8u XcpGetSeedHook(blt_int8u resource, blt_int8u *seed)
{
/* request seed for unlocking ProGraMming resource */
if ((resource & XCP_RES_PGM) != 0)
{
seed[0] = 0x55;
}
/* return seed length */
return 1;
} /*** end of XcpGetSeedHook ***/
/************************************************************************************//**
** \brief Called by the UNLOCK command and checks if the key to unlock the
** specified resource was correct. If so, then the resource protection
** will be removed.
** \param resource resource to unlock (XCP_RES_XXX).
** \param key pointer to the byte buffer holding the key.
** \param len length of the key in bytes.
** \return 1 if the key was correct, 0 otherwise.
**
****************************************************************************************/
blt_int8u XcpVerifyKeyHook(blt_int8u resource, blt_int8u *key, blt_int8u len)
{
/* suppress compiler warning for unused parameter */
len = len;
/* the example key algorithm in "libseednkey.dll" works as follows:
* - PGM will be unlocked if key = seed - 1
*/
/* check key for unlocking ProGraMming resource */
if ((resource == XCP_RES_PGM) && (key[0] == (0x55-1)))
{
/* correct key received for unlocking PGM resource */
return 1;
}
/* still here so key incorrect */
return 0;
} /*** end of XcpVerifyKeyHook ***/
#endif /* BOOT_XCP_SEED_KEY_ENABLE > 0 */
/*********************************** end of hooks.c ************************************/

@ -0,0 +1,695 @@
<?xml version="1.0" encoding="UTF-8"?>
<project>
<fileVersion>4</fileVersion>
<fileChecksum>684628677</fileChecksum>
<configuration>
<name>Debug</name>
<outputs>
<file>$PROJ_DIR$\..\main.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\assert.c</file>
<file>$PROJ_DIR$\..\blt_conf.h</file>
<file>$PROJ_DIR$\..\hooks.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\IAR\cpu_comp.c</file>
<file>$PROJ_DIR$\..\lib\device_registers.h</file>
<file>$PROJ_DIR$\..\startup_S32K144.s</file>
<file>$PROJ_DIR$\..\led.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\can.c</file>
<file>$PROJ_DIR$\..\lib\system_S32K144.c</file>
<file>$PROJ_DIR$\..\lib\S32K144_features.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\cpu.c</file>
<file>$PROJ_DIR$\..\lib\startup.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.c</file>
<file>$PROJ_DIR$\..\led.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.h</file>
<file>$PROJ_DIR$\..\lib\startup.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\rs232.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\timer.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\types.h</file>
<file>$PROJ_DIR$\..\lib\S32K144.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\nvm.c</file>
<file>$PROJ_DIR$\..\lib\devassert.h</file>
<file>$PROJ_DIR$\..\lib\s32_core_cm4.h</file>
<file>$PROJ_DIR$\..\lib\system_S32K144.h</file>
<file>$PROJ_DIR$\..\obj\hooks.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\rs232.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\com.xcl</file>
<file>$PROJ_DIR$\..\obj\nvm.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\cop.__cstat.et</file>
<file>$TOOLKIT_DIR$\inc\c\string.h</file>
<file>$TOOLKIT_DIR$\inc\c\ysizet.h</file>
<file>$PROJ_DIR$\..\obj\cpu.xcl</file>
<file>$PROJ_DIR$\..\obj\assert.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\can.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\can.xcl</file>
<file>$PROJ_DIR$\..\obj\nvm.xcl</file>
<file>$PROJ_DIR$\..\obj\cop.xcl</file>
<file>$PROJ_DIR$\..\obj\file.xcl</file>
<file>$PROJ_DIR$\..\obj\cpu_comp.__cstat.et</file>
<file>$TOOLKIT_DIR$\inc\c\DLib_Product_string.h</file>
<file>$PROJ_DIR$\..\obj\backdoor.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\file.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\xcp.__cstat.et</file>
<file>$TOOLKIT_DIR$\inc\c\ctype.h</file>
<file>$PROJ_DIR$\..\obj\can.o</file>
<file>$PROJ_DIR$\..\obj\assert.xcl</file>
<file>$PROJ_DIR$\..\obj\cpu_comp.xcl</file>
<file>$PROJ_DIR$\..\obj\backdoor.xcl</file>
<file>$PROJ_DIR$\..\obj\flash.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\net.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\cpu.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\hooks.xcl</file>
<file>$PROJ_DIR$\..\obj\com.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\hooks.o</file>
<file>$PROJ_DIR$\..\obj\rs232.xcl</file>
<file>$PROJ_DIR$\..\obj\net.xcl</file>
<file>$PROJ_DIR$\..\obj\net.o</file>
<file>$PROJ_DIR$\..\obj\file.o</file>
<file>$PROJ_DIR$\..\obj\cpu_comp.o</file>
<file>$PROJ_DIR$\..\obj\cop.o</file>
<file>$PROJ_DIR$\..\obj\xcp.o</file>
<file>$PROJ_DIR$\..\obj\flash.xcl</file>
<file>$PROJ_DIR$\..\obj\flash.o</file>
<file>$PROJ_DIR$\..\obj\cpu.o</file>
<file>$PROJ_DIR$\..\obj\backdoor.o</file>
<file>$PROJ_DIR$\..\obj\rs232.o</file>
<file>$PROJ_DIR$\..\obj\assert.o</file>
<file>$PROJ_DIR$\..\obj\nvm.o</file>
<file>$PROJ_DIR$\..\obj\com.o</file>
<file>$PROJ_DIR$\..\obj\startup_S32K144.o</file>
<file>$PROJ_DIR$\..\obj\s32k144.pbd</file>
<file>$PROJ_DIR$\..\obj\boot.__cstat.et</file>
<file>$PROJ_DIR$\..\obj\timer.xcl</file>
<file>$PROJ_DIR$\..\obj\boot.xcl</file>
<file>$PROJ_DIR$\..\obj\led.o</file>
<file>$PROJ_DIR$\..\obj\startup.__cstat.et</file>
<file>$PROJ_DIR$\..\bin\openblt_s32k144.out</file>
<file>$PROJ_DIR$\..\obj\xcp.xcl</file>
<file>$PROJ_DIR$\..\obj\timer.o</file>
<file>$TOOLKIT_DIR$\inc\c\yvals.h</file>
<file>$PROJ_DIR$\..\timer.c</file>
<file>$TOOLKIT_DIR$\inc\c\DLib_Product.h</file>
<file>$TOOLKIT_DIR$\inc\c\DLib_Defaults.h</file>
<file>$PROJ_DIR$\..\obj\led.xcl</file>
<file>$PROJ_DIR$\..\bin\demoprog_s32k144.srec</file>
<file>$PROJ_DIR$\..\obj\main.xcl</file>
<file>$PROJ_DIR$\..\header.h</file>
<file>$PROJ_DIR$\..\obj\openblt_s32k144.map</file>
<file>$PROJ_DIR$\..\obj\main.o</file>
<file>$PROJ_DIR$\..\S32K144_64_flash.icf</file>
<file>$TOOLKIT_DIR$\inc\c\stdbool.h</file>
<file>$PROJ_DIR$\..\obj\system_S32K144.o</file>
<file>$PROJ_DIR$\..\obj\startup.xcl</file>
<file>$PROJ_DIR$\..\obj\boot.o</file>
<file>$PROJ_DIR$\..\obj\system_S32K144.__cstat.et</file>
<file>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</file>
<file>$PROJ_DIR$\..\obj\timer.__cstat.et</file>
<file>$TOOLKIT_DIR$\lib\shb_l.a</file>
<file>$PROJ_DIR$\..\obj\main.__cstat.et</file>
<file>$TOOLKIT_DIR$\inc\c\ycheck.h</file>
<file>$PROJ_DIR$\..\boot.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\com.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\xcp.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\cop.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\rs232.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\usb.h</file>
<file>$PROJ_DIR$\..\obj\system_S32K144.xcl</file>
<file>$PROJ_DIR$\..\..\..\..\Source\timer.h</file>
<file>$PROJ_DIR$\..\obj\startup.o</file>
<file>$PROJ_DIR$\..\boot.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\boot.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\com.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\net.c</file>
<file>$TOOLKIT_DIR$\lib\m7M_tls.a</file>
<file>$TOOLKIT_DIR$\lib\rt7M_tl.a</file>
<file>$PROJ_DIR$\..\obj\led.__cstat.et</file>
<file>$TOOLKIT_DIR$\inc\c\stdint.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\assert.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\boot.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\can.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\backdoor.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\cop.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\cpu.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\file.c</file>
<file>$PROJ_DIR$\..\..\..\..\Source\file.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\net.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\nvm.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\backdoor.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\plausibility.h</file>
<file>$PROJ_DIR$\..\timer.h</file>
<file>$PROJ_DIR$\..\..\..\..\Source\xcp.h</file>
<file>$TOOLKIT_DIR$\lib\dl7M_tln.a</file>
<file>$PROJ_DIR$\..\bin\openblt_s32k144.srec</file>
</outputs>
<file>
<name>[ROOT_NODE]</name>
<outputs>
<tool>
<name>ILINK</name>
<file> 77 88</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\main.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 89</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 86</file>
</tool>
<tool>
<name>__cstat</name>
<file> 99</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131 5 23 20 117 100 80 83 96 82 10 22 91 24</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\assert.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 67</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 46</file>
</tool>
<tool>
<name>__cstat</name>
<file> 33</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\hooks.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 54</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 52</file>
</tool>
<tool>
<name>__cstat</name>
<file> 25</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131 14 5 23 20 117 100 80 83 96 82 10 22 91</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\IAR\cpu_comp.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 59</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 47</file>
</tool>
<tool>
<name>__cstat</name>
<file> 39</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\startup_S32K144.s</name>
<outputs>
<tool>
<name>AARM</name>
<file> 70</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\led.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 75</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 84</file>
</tool>
<tool>
<name>__cstat</name>
<file> 116</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131 14 5 23 20 117 100 80 83 96 82 10 22 91</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\can.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 45</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 35</file>
</tool>
<tool>
<name>__cstat</name>
<file> 34</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131 5 23 20 117 100 80 83 96 82 10 22 91</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\lib\system_S32K144.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 92</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 107</file>
</tool>
<tool>
<name>__cstat</name>
<file> 95</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 5 23 20 117 100 80 83 96 82 10 22 91 24</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\cpu.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 64</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 32</file>
</tool>
<tool>
<name>__cstat</name>
<file> 51</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131 5 23 20 117 100 80 83 96 82 10 22 91</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\lib\startup.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 109</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 93</file>
</tool>
<tool>
<name>__cstat</name>
<file> 76</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 16 117 100 80 83 96 82 5 23 20 10 22 91</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 63</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 62</file>
</tool>
<tool>
<name>__cstat</name>
<file> 49</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131 5 23 20 117 100 80 83 96 82 10 22 91</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\rs232.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 66</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 55</file>
</tool>
<tool>
<name>__cstat</name>
<file> 26</file>
</tool>
</outputs>
<inputs>
<tool>
<name>ICCARM</name>
<file> 111 19 118 2 129 123 122 127 108 128 125 102 131 5 23 20 117 100 80 83 96 82 10 22 91</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\timer.c</name>
<outputs>
<tool>
<name>ICCARM</name>
<file> 79</file>
</tool>
<tool>
<name>BICOMP<