diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/S32K144_64_flash.icf b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/S32K144_64_flash.icf new file mode 100644 index 00000000..295c8d15 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/S32K144_64_flash.icf @@ -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 }; + + diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/bin/openblt_s32k144.out b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/bin/openblt_s32k144.out new file mode 100644 index 00000000..842d7c8e Binary files /dev/null and b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/bin/openblt_s32k144.out differ diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/bin/openblt_s32k144.srec b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/bin/openblt_s32k144.srec new file mode 100644 index 00000000..23781154 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/bin/openblt_s32k144.srec @@ -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 diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/blt_conf.h b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/blt_conf.h new file mode 100644 index 00000000..966813dd --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/blt_conf.h @@ -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 *********************************/ diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/boot.dox b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/boot.dox new file mode 100644 index 00000000..e9e14acb --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/boot.dox @@ -0,0 +1,7 @@ +/** +\defgroup Boot_ARMCM4_S32K14_S32K144EVB_IAR Bootloader +\brief Bootloader. +\ingroup ARMCM4_S32K14_S32K144EVB_IAR +*/ + + diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/hooks.c b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/hooks.c new file mode 100644 index 00000000..bed8d469 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/hooks.c @@ -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 ************************************/ diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.dep b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.dep new file mode 100644 index 00000000..3ceeceb4 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.dep @@ -0,0 +1,695 @@ + + + 4 + 684628677 + + Debug + + $PROJ_DIR$\..\main.c + $PROJ_DIR$\..\..\..\..\Source\assert.c + $PROJ_DIR$\..\blt_conf.h + $PROJ_DIR$\..\hooks.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\IAR\cpu_comp.c + $PROJ_DIR$\..\lib\device_registers.h + $PROJ_DIR$\..\startup_S32K144.s + $PROJ_DIR$\..\led.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\can.c + $PROJ_DIR$\..\lib\system_S32K144.c + $PROJ_DIR$\..\lib\S32K144_features.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\cpu.c + $PROJ_DIR$\..\lib\startup.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.c + $PROJ_DIR$\..\led.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.h + $PROJ_DIR$\..\lib\startup.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\rs232.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\timer.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\types.h + $PROJ_DIR$\..\lib\S32K144.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\nvm.c + $PROJ_DIR$\..\lib\devassert.h + $PROJ_DIR$\..\lib\s32_core_cm4.h + $PROJ_DIR$\..\lib\system_S32K144.h + $PROJ_DIR$\..\obj\hooks.__cstat.et + $PROJ_DIR$\..\obj\rs232.__cstat.et + $PROJ_DIR$\..\obj\com.xcl + $PROJ_DIR$\..\obj\nvm.__cstat.et + $PROJ_DIR$\..\obj\cop.__cstat.et + $TOOLKIT_DIR$\inc\c\string.h + $TOOLKIT_DIR$\inc\c\ysizet.h + $PROJ_DIR$\..\obj\cpu.xcl + $PROJ_DIR$\..\obj\assert.__cstat.et + $PROJ_DIR$\..\obj\can.__cstat.et + $PROJ_DIR$\..\obj\can.xcl + $PROJ_DIR$\..\obj\nvm.xcl + $PROJ_DIR$\..\obj\cop.xcl + $PROJ_DIR$\..\obj\file.xcl + $PROJ_DIR$\..\obj\cpu_comp.__cstat.et + $TOOLKIT_DIR$\inc\c\DLib_Product_string.h + $PROJ_DIR$\..\obj\backdoor.__cstat.et + $PROJ_DIR$\..\obj\file.__cstat.et + $PROJ_DIR$\..\obj\xcp.__cstat.et + $TOOLKIT_DIR$\inc\c\ctype.h + $PROJ_DIR$\..\obj\can.o + $PROJ_DIR$\..\obj\assert.xcl + $PROJ_DIR$\..\obj\cpu_comp.xcl + $PROJ_DIR$\..\obj\backdoor.xcl + $PROJ_DIR$\..\obj\flash.__cstat.et + $PROJ_DIR$\..\obj\net.__cstat.et + $PROJ_DIR$\..\obj\cpu.__cstat.et + $PROJ_DIR$\..\obj\hooks.xcl + $PROJ_DIR$\..\obj\com.__cstat.et + $PROJ_DIR$\..\obj\hooks.o + $PROJ_DIR$\..\obj\rs232.xcl + $PROJ_DIR$\..\obj\net.xcl + $PROJ_DIR$\..\obj\net.o + $PROJ_DIR$\..\obj\file.o + $PROJ_DIR$\..\obj\cpu_comp.o + $PROJ_DIR$\..\obj\cop.o + $PROJ_DIR$\..\obj\xcp.o + $PROJ_DIR$\..\obj\flash.xcl + $PROJ_DIR$\..\obj\flash.o + $PROJ_DIR$\..\obj\cpu.o + $PROJ_DIR$\..\obj\backdoor.o + $PROJ_DIR$\..\obj\rs232.o + $PROJ_DIR$\..\obj\assert.o + $PROJ_DIR$\..\obj\nvm.o + $PROJ_DIR$\..\obj\com.o + $PROJ_DIR$\..\obj\startup_S32K144.o + $PROJ_DIR$\..\obj\s32k144.pbd + $PROJ_DIR$\..\obj\boot.__cstat.et + $PROJ_DIR$\..\obj\timer.xcl + $PROJ_DIR$\..\obj\boot.xcl + $PROJ_DIR$\..\obj\led.o + $PROJ_DIR$\..\obj\startup.__cstat.et + $PROJ_DIR$\..\bin\openblt_s32k144.out + $PROJ_DIR$\..\obj\xcp.xcl + $PROJ_DIR$\..\obj\timer.o + $TOOLKIT_DIR$\inc\c\yvals.h + $PROJ_DIR$\..\timer.c + $TOOLKIT_DIR$\inc\c\DLib_Product.h + $TOOLKIT_DIR$\inc\c\DLib_Defaults.h + $PROJ_DIR$\..\obj\led.xcl + $PROJ_DIR$\..\bin\demoprog_s32k144.srec + $PROJ_DIR$\..\obj\main.xcl + $PROJ_DIR$\..\header.h + $PROJ_DIR$\..\obj\openblt_s32k144.map + $PROJ_DIR$\..\obj\main.o + $PROJ_DIR$\..\S32K144_64_flash.icf + $TOOLKIT_DIR$\inc\c\stdbool.h + $PROJ_DIR$\..\obj\system_S32K144.o + $PROJ_DIR$\..\obj\startup.xcl + $PROJ_DIR$\..\obj\boot.o + $PROJ_DIR$\..\obj\system_S32K144.__cstat.et + $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h + $PROJ_DIR$\..\obj\timer.__cstat.et + $TOOLKIT_DIR$\lib\shb_l.a + $PROJ_DIR$\..\obj\main.__cstat.et + $TOOLKIT_DIR$\inc\c\ycheck.h + $PROJ_DIR$\..\boot.c + $PROJ_DIR$\..\..\..\..\Source\com.h + $PROJ_DIR$\..\..\..\..\Source\xcp.c + $PROJ_DIR$\..\..\..\..\Source\cop.c + $PROJ_DIR$\..\..\..\..\Source\rs232.h + $PROJ_DIR$\..\..\..\..\Source\usb.h + $PROJ_DIR$\..\obj\system_S32K144.xcl + $PROJ_DIR$\..\..\..\..\Source\timer.h + $PROJ_DIR$\..\obj\startup.o + $PROJ_DIR$\..\boot.h + $PROJ_DIR$\..\..\..\..\Source\boot.h + $PROJ_DIR$\..\..\..\..\Source\com.c + $PROJ_DIR$\..\..\..\..\Source\net.c + $TOOLKIT_DIR$\lib\m7M_tls.a + $TOOLKIT_DIR$\lib\rt7M_tl.a + $PROJ_DIR$\..\obj\led.__cstat.et + $TOOLKIT_DIR$\inc\c\stdint.h + $PROJ_DIR$\..\..\..\..\Source\assert.h + $PROJ_DIR$\..\..\..\..\Source\boot.c + $PROJ_DIR$\..\..\..\..\Source\can.h + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + $PROJ_DIR$\..\..\..\..\Source\cop.h + $PROJ_DIR$\..\..\..\..\Source\cpu.h + $PROJ_DIR$\..\..\..\..\Source\file.c + $PROJ_DIR$\..\..\..\..\Source\file.h + $PROJ_DIR$\..\..\..\..\Source\net.h + $PROJ_DIR$\..\..\..\..\Source\nvm.h + $PROJ_DIR$\..\..\..\..\Source\backdoor.h + $PROJ_DIR$\..\..\..\..\Source\plausibility.h + $PROJ_DIR$\..\timer.h + $PROJ_DIR$\..\..\..\..\Source\xcp.h + $TOOLKIT_DIR$\lib\dl7M_tln.a + $PROJ_DIR$\..\bin\openblt_s32k144.srec + + + [ROOT_NODE] + + + ILINK + 77 88 + + + + + $PROJ_DIR$\..\main.c + + + ICCARM + 89 + + + BICOMP + 86 + + + __cstat + 99 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\..\..\..\Source\assert.c + + + ICCARM + 67 + + + BICOMP + 46 + + + __cstat + 33 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 + + + + + $PROJ_DIR$\..\hooks.c + + + ICCARM + 54 + + + BICOMP + 52 + + + __cstat + 25 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\IAR\cpu_comp.c + + + ICCARM + 59 + + + BICOMP + 47 + + + __cstat + 39 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 + + + + + $PROJ_DIR$\..\startup_S32K144.s + + + AARM + 70 + + + + + $PROJ_DIR$\..\led.c + + + ICCARM + 75 + + + BICOMP + 84 + + + __cstat + 116 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\can.c + + + ICCARM + 45 + + + BICOMP + 35 + + + __cstat + 34 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\lib\system_S32K144.c + + + ICCARM + 92 + + + BICOMP + 107 + + + __cstat + 95 + + + + + ICCARM + 5 23 20 117 100 80 83 96 82 10 22 91 24 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\cpu.c + + + ICCARM + 64 + + + BICOMP + 32 + + + __cstat + 51 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\lib\startup.c + + + ICCARM + 109 + + + BICOMP + 93 + + + __cstat + 76 + + + + + ICCARM + 16 117 100 80 83 96 82 5 23 20 10 22 91 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.c + + + ICCARM + 63 + + + BICOMP + 62 + + + __cstat + 49 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\rs232.c + + + ICCARM + 66 + + + BICOMP + 55 + + + __cstat + 26 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\timer.c + + + ICCARM + 79 + + + BICOMP + 73 + + + __cstat + 97 + + + + + ICCARM + 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 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\nvm.c + + + ICCARM + 68 + + + BICOMP + 36 + + + __cstat + 28 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 15 + + + + + $PROJ_DIR$\..\bin\openblt_s32k144.out + + + ILINK + 88 + + + OBJCOPY + 133 + + + + + ILINK + 90 67 65 94 45 69 60 64 59 58 63 54 75 89 57 68 66 109 70 92 79 61 98 115 114 132 + + + + + $PROJ_DIR$\..\timer.c + + + ICCARM + 79 + + + BICOMP + 73 + + + __cstat + 97 + + + + + ICCARM + 87 2 110 14 130 5 23 20 117 100 80 83 96 82 10 22 91 24 + + + + + $PROJ_DIR$\..\boot.c + + + ICCARM + 94 + + + BICOMP + 74 + + + __cstat + 72 + + + + + ICCARM + 87 2 110 14 130 5 23 20 117 100 80 83 96 82 10 22 91 24 + + + + + $PROJ_DIR$\..\..\..\..\Source\xcp.c + + + ICCARM + 61 + + + BICOMP + 78 + + + __cstat + 43 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 + + + + + $PROJ_DIR$\..\..\..\..\Source\cop.c + + + ICCARM + 60 + + + BICOMP + 37 + + + __cstat + 29 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 + + + + + $PROJ_DIR$\..\..\..\..\Source\com.c + + + ICCARM + 69 + + + BICOMP + 27 + + + __cstat + 53 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 120 105 + + + + + $PROJ_DIR$\..\..\..\..\Source\net.c + + + ICCARM + 57 + + + BICOMP + 56 + + + __cstat + 50 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 + + + + + $PROJ_DIR$\..\..\..\..\Source\boot.c + + + ICCARM + 94 + + + BICOMP + 74 + + + __cstat + 72 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 + + + + + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + + + ICCARM + 65 + + + BICOMP + 48 + + + __cstat + 41 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 + + + + + $PROJ_DIR$\..\..\..\..\Source\file.c + + + ICCARM + 58 + + + BICOMP + 38 + + + __cstat + 42 + + + + + ICCARM + 111 19 118 2 129 123 122 127 108 128 125 102 131 30 100 80 83 96 82 31 40 44 + + + + + + Release + + + [MULTI_TOOL] + ILINK + + + diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewd b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewd new file mode 100644 index 00000000..a1b3b1a4 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewd @@ -0,0 +1,2966 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewp b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewp new file mode 100644 index 00000000..c9168837 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewp @@ -0,0 +1,2266 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Boot + + lib + + $PROJ_DIR$\..\lib\devassert.h + + + $PROJ_DIR$\..\lib\device_registers.h + + + $PROJ_DIR$\..\lib\s32_core_cm4.h + + + $PROJ_DIR$\..\lib\S32K144.h + + + $PROJ_DIR$\..\lib\S32K144_features.h + + + $PROJ_DIR$\..\lib\startup.c + + + $PROJ_DIR$\..\lib\startup.h + + + $PROJ_DIR$\..\lib\system_S32K144.c + + + $PROJ_DIR$\..\lib\system_S32K144.h + + + + $PROJ_DIR$\..\blt_conf.h + + + $PROJ_DIR$\..\hooks.c + + + $PROJ_DIR$\..\led.c + + + $PROJ_DIR$\..\led.h + + + $PROJ_DIR$\..\main.c + + + $PROJ_DIR$\..\startup_S32K144.s + + + + Source + + ARMCM4_S32K14 + + IAR + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\IAR\cpu_comp.c + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\can.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\cpu.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.h + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\nvm.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\rs232.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\timer.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\types.h + + + + $PROJ_DIR$\..\..\..\..\Source\assert.c + + + $PROJ_DIR$\..\..\..\..\Source\assert.h + + + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + + + $PROJ_DIR$\..\..\..\..\Source\backdoor.h + + + $PROJ_DIR$\..\..\..\..\Source\boot.c + + + $PROJ_DIR$\..\..\..\..\Source\boot.h + + + $PROJ_DIR$\..\..\..\..\Source\can.h + + + $PROJ_DIR$\..\..\..\..\Source\com.c + + + $PROJ_DIR$\..\..\..\..\Source\com.h + + + $PROJ_DIR$\..\..\..\..\Source\cop.c + + + $PROJ_DIR$\..\..\..\..\Source\cop.h + + + $PROJ_DIR$\..\..\..\..\Source\cpu.h + + + $PROJ_DIR$\..\..\..\..\Source\file.c + + + $PROJ_DIR$\..\..\..\..\Source\file.h + + + $PROJ_DIR$\..\..\..\..\Source\net.c + + + $PROJ_DIR$\..\..\..\..\Source\net.h + + + $PROJ_DIR$\..\..\..\..\Source\nvm.h + + + $PROJ_DIR$\..\..\..\..\Source\plausibility.h + + + $PROJ_DIR$\..\..\..\..\Source\rs232.h + + + $PROJ_DIR$\..\..\..\..\Source\timer.h + + + $PROJ_DIR$\..\..\..\..\Source\usb.h + + + $PROJ_DIR$\..\..\..\..\Source\xcp.c + + + $PROJ_DIR$\..\..\..\..\Source\xcp.h + + + diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewt b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewt new file mode 100644 index 00000000..7985446d --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.ewt @@ -0,0 +1,2528 @@ + + + 3 + + Debug + + ARM + + 1 + + C-STAT + 261 + + 261 + + 0 + + 1 + 600 + 1 + 2 + 0 + 1 + 100 + + + 1.5.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RuntimeChecking + 0 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + Release + + ARM + + 0 + + C-STAT + 261 + + 261 + + 0 + + 1 + 600 + 1 + 2 + 0 + 1 + 100 + + + 1.5.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RuntimeChecking + 0 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + Boot + + lib + + $PROJ_DIR$\..\lib\devassert.h + + + $PROJ_DIR$\..\lib\device_registers.h + + + $PROJ_DIR$\..\lib\s32_core_cm4.h + + + $PROJ_DIR$\..\lib\S32K144.h + + + $PROJ_DIR$\..\lib\S32K144_features.h + + + $PROJ_DIR$\..\lib\startup.c + + + $PROJ_DIR$\..\lib\startup.h + + + $PROJ_DIR$\..\lib\system_S32K144.c + + + $PROJ_DIR$\..\lib\system_S32K144.h + + + + $PROJ_DIR$\..\blt_conf.h + + + $PROJ_DIR$\..\hooks.c + + + $PROJ_DIR$\..\led.c + + + $PROJ_DIR$\..\led.h + + + $PROJ_DIR$\..\main.c + + + $PROJ_DIR$\..\startup_S32K144.s + + + + Source + + ARMCM4_S32K14 + + IAR + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\IAR\cpu_comp.c + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\can.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\cpu.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\flash.h + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\nvm.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\rs232.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\timer.c + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM4_S32K14\types.h + + + + $PROJ_DIR$\..\..\..\..\Source\assert.c + + + $PROJ_DIR$\..\..\..\..\Source\assert.h + + + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + + + $PROJ_DIR$\..\..\..\..\Source\backdoor.h + + + $PROJ_DIR$\..\..\..\..\Source\boot.c + + + $PROJ_DIR$\..\..\..\..\Source\boot.h + + + $PROJ_DIR$\..\..\..\..\Source\can.h + + + $PROJ_DIR$\..\..\..\..\Source\com.c + + + $PROJ_DIR$\..\..\..\..\Source\com.h + + + $PROJ_DIR$\..\..\..\..\Source\cop.c + + + $PROJ_DIR$\..\..\..\..\Source\cop.h + + + $PROJ_DIR$\..\..\..\..\Source\cpu.h + + + $PROJ_DIR$\..\..\..\..\Source\file.c + + + $PROJ_DIR$\..\..\..\..\Source\file.h + + + $PROJ_DIR$\..\..\..\..\Source\net.c + + + $PROJ_DIR$\..\..\..\..\Source\net.h + + + $PROJ_DIR$\..\..\..\..\Source\nvm.h + + + $PROJ_DIR$\..\..\..\..\Source\plausibility.h + + + $PROJ_DIR$\..\..\..\..\Source\rs232.h + + + $PROJ_DIR$\..\..\..\..\Source\timer.h + + + $PROJ_DIR$\..\..\..\..\Source\usb.h + + + $PROJ_DIR$\..\..\..\..\Source\xcp.c + + + $PROJ_DIR$\..\..\..\..\Source\xcp.h + + + diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.eww b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.eww new file mode 100644 index 00000000..fcec0790 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/ide/s32k144.eww @@ -0,0 +1,7 @@ + + + + $WS_DIR$\s32k144.ewp + + + diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.c b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.c new file mode 100644 index 00000000..df4ca52b --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.c @@ -0,0 +1,108 @@ +/************************************************************************************//** +* \file Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.c +* \brief LED driver 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" /* module header */ +#include "device_registers.h" /* device registers */ + + +/**************************************************************************************** +* Local data declarations +****************************************************************************************/ +/** \brief Holds the desired LED blink interval time. */ +static blt_int16u ledBlinkIntervalMs; + + +/************************************************************************************//** +** \brief Initializes the LED blink driver. +** \param interval_ms Specifies the desired LED blink interval time in milliseconds. +** \return none. +** +****************************************************************************************/ +void LedBlinkInit(blt_int16u interval_ms) +{ + /* LED GPIO pin configuration. PD0 = GPIO, MUX = ALT1. */ + PORTD->PCR[0] |= PORT_PCR_MUX(1); + /* configure Port D pin 0 GPIO as digital output */ + PTD->PDDR |= GPIO_PDDR_PDD(0x00000001); + /* turn the LED off on Port D pin 0 */ + PTD->PSOR |= GPIO_PSOR_PTSO(0x00000001); + /* store the interval time between LED toggles */ + ledBlinkIntervalMs = interval_ms; +} /*** end of LedBlinkInit ***/ + + +/************************************************************************************//** +** \brief Task function for blinking the LED as a fixed timer interval. +** \return none. +** +****************************************************************************************/ +void LedBlinkTask(void) +{ + static blt_bool ledOn = BLT_FALSE; + static blt_int32u nextBlinkEvent = 0; + + /* check for blink event */ + if (TimerGet() >= nextBlinkEvent) + { + /* toggle the LED state */ + if (ledOn == BLT_FALSE) + { + ledOn = BLT_TRUE; + /* Turn the LED on. */ + PTD->PCOR |= GPIO_PCOR_PTCO(0x00000001); + } + else + { + ledOn = BLT_FALSE; + /* Turn the LED off. */ + PTD->PSOR |= GPIO_PSOR_PTSO(0x00000001); + } + /* schedule the next blink event */ + nextBlinkEvent = TimerGet() + ledBlinkIntervalMs; + } +} /*** end of LedBlinkTask ***/ + + +/************************************************************************************//** +** \brief Cleans up the LED blink driver. This is intended to be used upon program +** exit. +** \return none. +** +****************************************************************************************/ +void LedBlinkExit(void) +{ + /* Turn the LED off. */ + PTD->PSOR |= GPIO_PSOR_PTSO(0x00000001); +} /*** end of LedBlinkExit ***/ + + +/*********************************** end of led.c **************************************/ diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.h b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.h new file mode 100644 index 00000000..6889ee12 --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.h @@ -0,0 +1,40 @@ +/************************************************************************************//** +* \file Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/led.h +* \brief LED driver 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 LED_H +#define LED_H + +/**************************************************************************************** +* Function prototypes +****************************************************************************************/ +void LedBlinkInit(blt_int16u interval_ms); +void LedBlinkTask(void); +void LedBlinkExit(void); + + +#endif /* LED_H */ +/*********************************** end of led.h **************************************/ diff --git a/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/lib/S32K144.h b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/lib/S32K144.h new file mode 100644 index 00000000..ae04b8bb --- /dev/null +++ b/Target/Demo/ARMCM4_S32K14_S32K144EVB_IAR/Boot/lib/S32K144.h @@ -0,0 +1,11937 @@ +/* +** ################################################################### +** Processor: S32K144 +** Reference manual: S32K1XXRM Rev. 9, 09/2018 +** Version: rev. 4.2, 2019-02-19 +** Build: b190219 +** +** Abstract: +** Peripheral Access Layer for S32K144 +** +** Copyright (c) 1997 - 2016 Freescale Semiconductor, Inc. +** Copyright 2016-2019 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.nxp.com +** mail: support@nxp.com +** +** Revisions: +** - rev. 1.0 (2015-04-09) - Iulian Talpiga +** Initial version. +** - rev. 1.1 (2015-05-19) - Bogdan Nitu +** Updated interrupts table +** Removed SIM_CHIPCTL_DAC2CMP +** Compacted PORT_PCR registers +** Compacted PCC registers +** - rev. 1.2 (2015-06-02) - Bogdan Nitu +** Added 'U' suffix to all integer constants +** Use "" instead of <> for Platform type inclusion +** CNT register from WDOG module is RW +** - rev. 1.3 (2015-08-05) - Iulian Talpiga +** Synchronized with latest RDP +** Removed OSC32 module +** Removed reserved registers +** Incorporated bit band acces macros +** Switched to standard C99 data types +** Added 'u' to constants +** Added size defines for register arrays +** Define peripheral instance count +** - rev. 1.4 (2015-08-10) - Iulian Talpiga +** Compacted TRGMUX registers +** Defined array index offsets for PCC and TRGMUX +** Added FPU registers +** Group FTM channel registers +** Added interrupt information to peripherals +** Renamed CAN interrupts according to the reference manual +** Added author information to revisions +** - rev. 1.5 (2015-09-16) - Iulian Talpiga +** Renamed NVIC and SCB to avoid conflict +** Compacted CAN Wake-up Message buffers +** Added CAN embedded RAM +** Updated interrupts: LPIT, FTFE, LPUART,ACMP +** Corrected ADC_SC1_ADCH_WIDTH +** Compacted PDB registers +** Corrected CAN, FTM, and PDB count defines +** Guarding register acces macro against redefintion +** - rev. 1.6 (2015-09-29) - Iulian Talpiga +** Added WATER and FIFO registers to LPUART. +** - rev. 1.7 (2015-10-21) - Iulian Talpiga +** Updated ADC, AIPS, CMP, LMEM, LPTMR, PMC, PORT, RCM, RTC, SCG, SIM +** Compacted MPU and LPIT +** Added FSL_SysTick +** Updated doxygen documentation grouping +** Updated interrupts: RCM +** - rev. 1.8 (2016-01-06) - Iulian Talpiga +** Updated DMA, compacted TCD registers +** Updated SCG, removed SC2P - SC16P +** Added 8 and 16 bit access to DATA register, CRC module +** - rev. 1.9 (2016-02-15) - Iulian Talpiga +** Updated CRC, renamed DATA union +** Updated PMC, added CLKBIASDIS bitfield +** Added FSL_NVIC registers to SVD +** - rev. 2.0 (2016-04-07) - Iulian Talpiga +** Updated support for Rev2.0 silicon (0N47T) +** Updated ADC, AIPS, DMA, FlexIO, FTM, GPIO, LPI2C, LPIT, LPSPI, MCM, MPU, MSCM, PMC, RTC, RCM, PCC, RTC, SCG, SIM, TRGMUX and WDOG module +** Updated interrupts +** Added EIM and ERM modules +** Added EIM and ERM modules +** - rev. 2.1 (2016-06-10) - Iulian Talpiga +** Updated to latest RM +** Minor changes to: CAN, EIM, LPI2C, MPU, PCC, PMC, RTC, SIM and TRGMUX +** - rev. 2.2 (2016-08-02) - Iulian Talpiga +** Updated to latest RM +** Minor changes to: ADC, CAN, CRC, FTFC, LMEM, LPI2C, MCM, MSCM, PCC, RTC, SIM +** Added CSE_PRAM +** - rev. 2.3 (2016-09-09) - Iulian Talpiga +** Updated to latest RM +** Minor changes to: PCC, FSL_NVIC and FTM +** - rev. 2.4 (2016-09-28) - Iulian Talpiga +** Fix RAMn array size in FlexCAN +** Fix FCSESTAT bit order +** Added CP0CFG0, CP0CFG1,CP0CFG2 and CP0CFG3 in MSCM +** Fixed STIR register in FSL_NVIC +** Fixed SHPR3 and ACTLR registers in FSL_SCB +** - rev. 2.5 (2016-11-25) - Iulian Talpiga +** Fix FRAC bit-field in PCC module +** Removed BITBAND_ACCESS macros +** Added MISRA declarations +** Updated copyright +** Changed prefix of NVIC, SCB and SysTick to S32_ +** - rev. 2.6 (2017-01-09) - Iulian Talpiga +** Fix interrupts for CAN, LPUART, FTFC +** - rev. 2.7 (2017-02-22) - Iulian Talpiga +** Update header as per rev S32K14XRM Rev. 2, 02/2017 +** Updated modules AIPS, CAN, LPI2C, LPSPI, MCM, MPU, SCG and SIM +** - rev. 2.8 (2017-03-27) - Iulian Talpiga +** Synchronized PCC_FlexIO on S32K Family +** - rev. 3.0 (2017-08-04) - Mihai Volmer +** Update header as per rev S32K1XXRM Rev. 4, 06/2017 +** Updated modules CAN, MCM and PORTn +** - rev. 3.1 (2017-09-25) - Andrei Bolojan +** Update NVIC Size of Registers Arrays +** - rev. 4.0 (2018-02-28) - Mihai Volmer +** Updated header as per rev S32K1XXRM Rev. 6, 12/2017 +** Updated modules ERM, I2C, MSCM and SIM +** - rev. 4.1 (2018-07-19) - Dan Nastasa +** Updated the header based on S32K1XXRM Rev. 8, 06/2018. +** - rev. 4.2 (2019-02-19) - Ionut Pavel +** Updated the header based on S32K1XXRM Rev. 9, 09/2018. +** +** ################################################################### +*/ + +/*! + * @file S32K144.h + * @version 4.2 + * @date 2019-02-19 + * @brief Peripheral Access Layer for S32K144 + * + * This file contains register definitions and macros for easy access to their + * bit fields. + * + * This file assumes LITTLE endian system. + */ + +/** +* @page misra_violations MISRA-C:2012 violations +* +* @section [global] +* Violates MISRA 2012 Advisory Rule 2.3, local typedef not referenced +* The SoC header defines typedef for all modules. +* +* @section [global] +* Violates MISRA 2012 Advisory Rule 2.5, local macro not referenced +* The SoC header defines macros for all modules and registers. +* +* @section [global] +* Violates MISRA 2012 Advisory Directive 4.9, Function-like macro +* These are generated macros used for accessing the bit-fields from registers. +* +* @section [global] +* Violates MISRA 2012 Required Rule 5.1, identifier clash +* The supported compilers use more than 31 significant characters for identifiers. +* +* @section [global] +* Violates MISRA 2012 Required Rule 5.2, identifier clash +* The supported compilers use more than 31 significant characters for identifiers. +* +* @section [global] +* Violates MISRA 2012 Required Rule 5.4, identifier clash +* The supported compilers use more than 31 significant characters for identifiers. +* +* @section [global] +* Violates MISRA 2012 Required Rule 5.5, identifier clash +* The supported compilers use more than 31 significant characters for identifiers. +* +* @section [global] +* Violates MISRA 2012 Required Rule 21.1, defined macro '__I' is reserved to the compiler +* This type qualifier is needed to ensure correct I/O access and addressing. +*/ + +/* ---------------------------------------------------------------------------- + -- MCU activation + ---------------------------------------------------------------------------- */ + +/* Prevention from multiple including the same memory map */ +#if !defined(S32K144_H_) /* Check if memory map has not been already included */ +#define S32K144_H_ +#define MCU_S32K144 + +/* Check if another memory map has not been also included */ +#if (defined(MCU_ACTIVE)) + #error S32K144 memory map: There is already included another memory map. Only one memory map can be included. +#endif /* (defined(MCU_ACTIVE)) */ +#define MCU_ACTIVE + +#include + +/** Memory map major version (memory maps with equal major version number are + * compatible) */ +#define MCU_MEM_MAP_VERSION 0x0400u +/** Memory map minor version */ +#define MCU_MEM_MAP_VERSION_MINOR 0x0002u + +/* ---------------------------------------------------------------------------- + -- Generic macros + ---------------------------------------------------------------------------- */ + +/* IO definitions (access restrictions to peripheral registers) */ +/** +* IO Type Qualifiers are used +* \li to specify the access to peripheral variables. +* \li for automatic generation of peripheral register debug information. +*/ +#ifndef __IO +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ +#endif + + +/** +* @brief 32 bits memory read macro. +*/ +#if !defined(REG_READ32) + #define REG_READ32(address) (*(volatile uint32_t*)(address)) +#endif + +/** +* @brief 32 bits memory write macro. +*/ +#if !defined(REG_WRITE32) + #define REG_WRITE32(address, value) ((*(volatile uint32_t*)(address))= (uint32_t)(value)) +#endif + +/** +* @brief 32 bits bits setting macro. +*/ +#if !defined(REG_BIT_SET32) + #define REG_BIT_SET32(address, mask) ((*(volatile uint32_t*)(address))|= (uint32_t)(mask)) +#endif + +/** +* @brief 32 bits bits clearing macro. +*/ +#if !defined(REG_BIT_CLEAR32) + #define REG_BIT_CLEAR32(address, mask) ((*(volatile uint32_t*)(address))&= ((uint32_t)~((uint32_t)(mask)))) +#endif + +/** +* @brief 32 bit clear bits and set with new value +* @note It is user's responsability to make sure that value has only "mask" bits set - (value&~mask)==0 +*/ +#if !defined(REG_RMW32) + #define REG_RMW32(address, mask, value) (REG_WRITE32((address), ((REG_READ32(address)& ((uint32_t)~((uint32_t)(mask))))| ((uint32_t)(value))))) +#endif + + +/* ---------------------------------------------------------------------------- + -- Interrupt vector numbers for S32K144 + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Interrupt_vector_numbers_S32K144 Interrupt vector numbers for S32K144 + * @{ + */ + +/** Interrupt Number Definitions */ +#define NUMBER_OF_INT_VECTORS 139u /**< Number of interrupts in the Vector table */ + +/** + * @brief Defines the Interrupt Numbers definitions + * + * This enumeration is used to configure the interrupts. + * + * Implements : IRQn_Type_Class + */ +typedef enum +{ + /* Auxiliary constants */ + NotAvail_IRQn = -128, /**< Not available device specific interrupt */ + + /* Core interrupts */ + NonMaskableInt_IRQn = -14, /**< Non Maskable Interrupt */ + HardFault_IRQn = -13, /**< Cortex-M4 SV Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /**< Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /**< Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /**< Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /**< Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /**< Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /**< Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /**< Cortex-M4 System Tick Interrupt */ + + /* Device specific interrupts */ + DMA0_IRQn = 0u, /**< DMA channel 0 transfer complete */ + DMA1_IRQn = 1u, /**< DMA channel 1 transfer complete */ + DMA2_IRQn = 2u, /**< DMA channel 2 transfer complete */ + DMA3_IRQn = 3u, /**< DMA channel 3 transfer complete */ + DMA4_IRQn = 4u, /**< DMA channel 4 transfer complete */ + DMA5_IRQn = 5u, /**< DMA channel 5 transfer complete */ + DMA6_IRQn = 6u, /**< DMA channel 6 transfer complete */ + DMA7_IRQn = 7u, /**< DMA channel 7 transfer complete */ + DMA8_IRQn = 8u, /**< DMA channel 8 transfer complete */ + DMA9_IRQn = 9u, /**< DMA channel 9 transfer complete */ + DMA10_IRQn = 10u, /**< DMA channel 10 transfer complete */ + DMA11_IRQn = 11u, /**< DMA channel 11 transfer complete */ + DMA12_IRQn = 12u, /**< DMA channel 12 transfer complete */ + DMA13_IRQn = 13u, /**< DMA channel 13 transfer complete */ + DMA14_IRQn = 14u, /**< DMA channel 14 transfer complete */ + DMA15_IRQn = 15u, /**< DMA channel 15 transfer complete */ + DMA_Error_IRQn = 16u, /**< DMA error interrupt channels 0-15 */ + MCM_IRQn = 17u, /**< FPU sources */ + FTFC_IRQn = 18u, /**< FTFC Command complete */ + Read_Collision_IRQn = 19u, /**< FTFC Read collision */ + LVD_LVW_IRQn = 20u, /**< PMC Low voltage detect interrupt */ + FTFC_Fault_IRQn = 21u, /**< FTFC Double bit fault detect */ + WDOG_EWM_IRQn = 22u, /**< Single interrupt vector for WDOG and EWM */ + RCM_IRQn = 23u, /**< RCM Asynchronous Interrupt */ + LPI2C0_Master_IRQn = 24u, /**< LPI2C0 Master Interrupt */ + LPI2C0_Slave_IRQn = 25u, /**< LPI2C0 Slave Interrupt */ + LPSPI0_IRQn = 26u, /**< LPSPI0 Interrupt */ + LPSPI1_IRQn = 27u, /**< LPSPI1 Interrupt */ + LPSPI2_IRQn = 28u, /**< LPSPI2 Interrupt */ + LPUART0_RxTx_IRQn = 31u, /**< LPUART0 Transmit / Receive Interrupt */ + LPUART1_RxTx_IRQn = 33u, /**< LPUART1 Transmit / Receive Interrupt */ + LPUART2_RxTx_IRQn = 35u, /**< LPUART2 Transmit / Receive Interrupt */ + ADC0_IRQn = 39u, /**< ADC0 interrupt request. */ + ADC1_IRQn = 40u, /**< ADC1 interrupt request. */ + CMP0_IRQn = 41u, /**< CMP0 interrupt request */ + ERM_single_fault_IRQn = 44u, /**< ERM single bit error correction */ + ERM_double_fault_IRQn = 45u, /**< ERM double bit error non-correctable */ + RTC_IRQn = 46u, /**< RTC alarm interrupt */ + RTC_Seconds_IRQn = 47u, /**< RTC seconds interrupt */ + LPIT0_Ch0_IRQn = 48u, /**< LPIT0 channel 0 overflow interrupt */ + LPIT0_Ch1_IRQn = 49u, /**< LPIT0 channel 1 overflow interrupt */ + LPIT0_Ch2_IRQn = 50u, /**< LPIT0 channel 2 overflow interrupt */ + LPIT0_Ch3_IRQn = 51u, /**< LPIT0 channel 3 overflow interrupt */ + PDB0_IRQn = 52u, /**< PDB0 interrupt */ + SCG_IRQn = 57u, /**< SCG bus interrupt request */ + LPTMR0_IRQn = 58u, /**< LPTIMER interrupt request */ + PORTA_IRQn = 59u, /**< Port A pin detect interrupt */ + PORTB_IRQn = 60u, /**< Port B pin detect interrupt */ + PORTC_IRQn = 61u, /**< Port C pin detect interrupt */ + PORTD_IRQn = 62u, /**< Port D pin detect interrupt */ + PORTE_IRQn = 63u, /**< Port E pin detect interrupt */ + SWI_IRQn = 64u, /**< Software interrupt */ + PDB1_IRQn = 68u, /**< PDB1 interrupt */ + FLEXIO_IRQn = 69u, /**< FlexIO Interrupt */ + CAN0_ORed_IRQn = 78u, /**< CAN0 OR'ed [Bus Off OR Transmit Warning OR Receive Warning] */ + CAN0_Error_IRQn = 79u, /**< CAN0 Interrupt indicating that errors were detected on the CAN bus */ + CAN0_Wake_Up_IRQn = 80u, /**< CAN0 Interrupt asserted when Pretended Networking operation is enabled, and a valid message matches the selected filter criteria during Low Power mode */ + CAN0_ORed_0_15_MB_IRQn = 81u, /**< CAN0 OR'ed Message buffer (0-15) */ + CAN0_ORed_16_31_MB_IRQn = 82u, /**< CAN0 OR'ed Message buffer (16-31) */ + CAN1_ORed_IRQn = 85u, /**< CAN1 OR'ed [Bus Off OR Transmit Warning OR Receive Warning] */ + CAN1_Error_IRQn = 86u, /**< CAN1 Interrupt indicating that errors were detected on the CAN bus */ + CAN1_ORed_0_15_MB_IRQn = 88u, /**< CAN1 OR'ed Interrupt for Message buffer (0-15) */ + CAN2_ORed_IRQn = 92u, /**< CAN2 OR'ed [Bus Off OR Transmit Warning OR Receive Warning] */ + CAN2_Error_IRQn = 93u, /**< CAN2 Interrupt indicating that errors were detected on the CAN bus */ + CAN2_ORed_0_15_MB_IRQn = 95u, /**< CAN2 OR'ed Message buffer (0-15) */ + FTM0_Ch0_Ch1_IRQn = 99u, /**< FTM0 Channel 0 and 1 interrupt */ + FTM0_Ch2_Ch3_IRQn = 100u, /**< FTM0 Channel 2 and 3 interrupt */ + FTM0_Ch4_Ch5_IRQn = 101u, /**< FTM0 Channel 4 and 5 interrupt */ + FTM0_Ch6_Ch7_IRQn = 102u, /**< FTM0 Channel 6 and 7 interrupt */ + FTM0_Fault_IRQn = 103u, /**< FTM0 Fault interrupt */ + FTM0_Ovf_Reload_IRQn = 104u, /**< FTM0 Counter overflow and Reload interrupt */ + FTM1_Ch0_Ch1_IRQn = 105u, /**< FTM1 Channel 0 and 1 interrupt */ + FTM1_Ch2_Ch3_IRQn = 106u, /**< FTM1 Channel 2 and 3 interrupt */ + FTM1_Ch4_Ch5_IRQn = 107u, /**< FTM1 Channel 4 and 5 interrupt */ + FTM1_Ch6_Ch7_IRQn = 108u, /**< FTM1 Channel 6 and 7 interrupt */ + FTM1_Fault_IRQn = 109u, /**< FTM1 Fault interrupt */ + FTM1_Ovf_Reload_IRQn = 110u, /**< FTM1 Counter overflow and Reload interrupt */ + FTM2_Ch0_Ch1_IRQn = 111u, /**< FTM2 Channel 0 and 1 interrupt */ + FTM2_Ch2_Ch3_IRQn = 112u, /**< FTM2 Channel 2 and 3 interrupt */ + FTM2_Ch4_Ch5_IRQn = 113u, /**< FTM2 Channel 4 and 5 interrupt */ + FTM2_Ch6_Ch7_IRQn = 114u, /**< FTM2 Channel 6 and 7 interrupt */ + FTM2_Fault_IRQn = 115u, /**< FTM2 Fault interrupt */ + FTM2_Ovf_Reload_IRQn = 116u, /**< FTM2 Counter overflow and Reload interrupt */ + FTM3_Ch0_Ch1_IRQn = 117u, /**< FTM3 Channel 0 and 1 interrupt */ + FTM3_Ch2_Ch3_IRQn = 118u, /**< FTM3 Channel 2 and 3 interrupt */ + FTM3_Ch4_Ch5_IRQn = 119u, /**< FTM3 Channel 4 and 5 interrupt */ + FTM3_Ch6_Ch7_IRQn = 120u, /**< FTM3 Channel 6 and 7 interrupt */ + FTM3_Fault_IRQn = 121u, /**< FTM3 Fault interrupt */ + FTM3_Ovf_Reload_IRQn = 122u /**< FTM3 Counter overflow and Reload interrupt */ +} IRQn_Type; + +/*! + * @} + */ /* end of group Interrupt_vector_numbers_S32K144 */ + + +/* ---------------------------------------------------------------------------- + -- Device Peripheral Access Layer for S32K144 + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Peripheral_access_layer_S32K144 Device Peripheral Access Layer for S32K144 + * @{ + */ + +/* @brief This module covers memory mapped registers available on SoC */ + +/* ---------------------------------------------------------------------------- + -- ADC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ADC_Peripheral_Access_Layer ADC Peripheral Access Layer + * @{ + */ + + +/** ADC - Size of Registers Arrays */ +#define ADC_SC1_COUNT 16u +#define ADC_R_COUNT 16u +#define ADC_CV_COUNT 2u + +/** ADC - Register Layout Typedef */ +typedef struct { + __IO uint32_t SC1[ADC_SC1_COUNT]; /**< ADC Status and Control Register 1, array offset: 0x0, array step: 0x4 */ + __IO uint32_t CFG1; /**< ADC Configuration Register 1, offset: 0x40 */ + __IO uint32_t CFG2; /**< ADC Configuration Register 2, offset: 0x44 */ + __I uint32_t R[ADC_R_COUNT]; /**< ADC Data Result Registers, array offset: 0x48, array step: 0x4 */ + __IO uint32_t CV[ADC_CV_COUNT]; /**< Compare Value Registers, array offset: 0x88, array step: 0x4 */ + __IO uint32_t SC2; /**< Status and Control Register 2, offset: 0x90 */ + __IO uint32_t SC3; /**< Status and Control Register 3, offset: 0x94 */ + __IO uint32_t BASE_OFS; /**< BASE Offset Register, offset: 0x98 */ + __IO uint32_t OFS; /**< ADC Offset Correction Register, offset: 0x9C */ + __IO uint32_t USR_OFS; /**< USER Offset Correction Register, offset: 0xA0 */ + __IO uint32_t XOFS; /**< ADC X Offset Correction Register, offset: 0xA4 */ + __IO uint32_t YOFS; /**< ADC Y Offset Correction Register, offset: 0xA8 */ + __IO uint32_t G; /**< ADC Gain Register, offset: 0xAC */ + __IO uint32_t UG; /**< ADC User Gain Register, offset: 0xB0 */ + __IO uint32_t CLPS; /**< ADC General Calibration Value Register S, offset: 0xB4 */ + __IO uint32_t CLP3; /**< ADC Plus-Side General Calibration Value Register 3, offset: 0xB8 */ + __IO uint32_t CLP2; /**< ADC Plus-Side General Calibration Value Register 2, offset: 0xBC */ + __IO uint32_t CLP1; /**< ADC Plus-Side General Calibration Value Register 1, offset: 0xC0 */ + __IO uint32_t CLP0; /**< ADC Plus-Side General Calibration Value Register 0, offset: 0xC4 */ + __IO uint32_t CLPX; /**< ADC Plus-Side General Calibration Value Register X, offset: 0xC8 */ + __IO uint32_t CLP9; /**< ADC Plus-Side General Calibration Value Register 9, offset: 0xCC */ + __IO uint32_t CLPS_OFS; /**< ADC General Calibration Offset Value Register S, offset: 0xD0 */ + __IO uint32_t CLP3_OFS; /**< ADC Plus-Side General Calibration Offset Value Register 3, offset: 0xD4 */ + __IO uint32_t CLP2_OFS; /**< ADC Plus-Side General Calibration Offset Value Register 2, offset: 0xD8 */ + __IO uint32_t CLP1_OFS; /**< ADC Plus-Side General Calibration Offset Value Register 1, offset: 0xDC */ + __IO uint32_t CLP0_OFS; /**< ADC Plus-Side General Calibration Offset Value Register 0, offset: 0xE0 */ + __IO uint32_t CLPX_OFS; /**< ADC Plus-Side General Calibration Offset Value Register X, offset: 0xE4 */ + __IO uint32_t CLP9_OFS; /**< ADC Plus-Side General Calibration Offset Value Register 9, offset: 0xE8 */ +} ADC_Type, *ADC_MemMapPtr; + + /** Number of instances of the ADC module. */ +#define ADC_INSTANCE_COUNT (2u) + + +/* ADC - Peripheral instance base addresses */ +/** Peripheral ADC0 base address */ +#define ADC0_BASE (0x4003B000u) +/** Peripheral ADC0 base pointer */ +#define ADC0 ((ADC_Type *)ADC0_BASE) +/** Peripheral ADC1 base address */ +#define ADC1_BASE (0x40027000u) +/** Peripheral ADC1 base pointer */ +#define ADC1 ((ADC_Type *)ADC1_BASE) +/** Array initializer of ADC peripheral base addresses */ +#define ADC_BASE_ADDRS { ADC0_BASE, ADC1_BASE } +/** Array initializer of ADC peripheral base pointers */ +#define ADC_BASE_PTRS { ADC0, ADC1 } + /** Number of interrupt vector arrays for the ADC module. */ +#define ADC_IRQS_ARR_COUNT (1u) + /** Number of interrupt channels for the ADC module. */ +#define ADC_IRQS_CH_COUNT (1u) +/** Interrupt vectors for the ADC peripheral type */ +#define ADC_IRQS { ADC0_IRQn, ADC1_IRQn } + +/* ---------------------------------------------------------------------------- + -- ADC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ADC_Register_Masks ADC Register Masks + * @{ + */ + +/* SC1 Bit Fields */ +#define ADC_SC1_ADCH_MASK 0x1Fu +#define ADC_SC1_ADCH_SHIFT 0u +#define ADC_SC1_ADCH_WIDTH 5u +#define ADC_SC1_ADCH(x) (((uint32_t)(((uint32_t)(x))<