diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs
index 5686e7c8..c3cead79 100644
Binary files a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs and b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs differ
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.phy b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.phy
index 17dc1be3..79ec193b 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.phy
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.phy
@@ -1,142 +1,150 @@
S0720000433A5C576F726B5C736F6674776172655C4F70656E424C545C5461726765745C44656D6F5C48435331325F457662706C75735F447261676F6E3132705F436F646557617272696F725C426F6F745C62696E5C6F70656E626C745F657662706C75735F647261676F6E3132702E61627366
S2240FE800FEE833FDE831270E35ED31EC3169700434FB310326F2FEE835EC31270BED311818
-S2240FE8200A30700434F920F13DCF390007D206E9B70001E837F8C3390004FC4F70656E422C
+S2240FE8200A30700434F920F13DCF390007D206E9DA0001E837F9D2390004494F70656E42AC
S2240FE8404C5400000C000000004000000C400000004000000C800000004000000CC0000094
S2240FE860004000000D000000004000000D400000004000000D800000004000000DC00000D0
S2240FE880004000000E000000004000000E400000004000000E800000004000000EC00000AC
S2240FE8A0004000000F000000004000000F400000004000000F800000004000000FC0000088
S2240FE8C0000800000FC80000000800000FD00000000800000FD80000000800000FE0000078
-S2240FE8E00008003634CE01001A0586806A00A7A7A7A70F0040FC30323D433A5C576F726B32
-S2240FE9005C736F6674776172655C4F70656E424C545C5461726765745C44656D6F5C4843C1
-S2240FE9205331325F457662706C75735F447261676F6E3132705F436F646557617272696FF2
-S2240FE940725C426F6F745C6D61696E2E6300433A5C576F726B5C736F6674776172655C4FC1
-S2240FE96070656E424C545C5461726765745C536F757263655C48435331325C666C617368C7
-S2240FE9802E6300433A5C576F726B5C736F6674776172655C4F70656E424C545C54617267D5
-S2240FE9A065745C536F757263655C48435331325C756172742E630016E9C216EA7D16EA8C8D
-S2240FE9C020FB1B99698214104D398069816980E68087CD1F40C3000118133BE68387C30076
-S2240FE9E00116F8B73B34EC84B76516F8A96C876E858C5DC01B822609046506C6016B8220ED
-S2240FEA00286280E680C13F23C6E6820401086281E681C10F23B7E68204010ECCE8F93BC6F7
-S2240FEA207A87B70516F78F1B82E6805B34E6815B354F3708FC4C39801B873DC6017B3900F7
-S2240FEA4016F5177C39037E390106EA4C16EAD704012AF6390004212416F5173BFC3903C3FE
-S2240FEA600032B746FC3901C9008900353BEC8416F7C51B82250679390016EEA03D16EADBE3
-S2240FEA8016F4BF16F48516EA9806EA3B16EADC16F4F816EAB106EA4CC6FF6BAE698116EAB4
-S2240FEAA0DD16F520F63905042105B77416EAFF3A3DCC390616F597042106CC390616EAFF59
-S2240FEAC03D3D3BEC843BE68316F5393A16EAFB3A3DC6017B39053D16EAF23D3D3DC7877C39
-S2240FEAE0398E7C398C7B39897C398A7B39487C39463DF6394626013DC6013D7939893D3BBA
-S2240FEB0036B745E600C1FF2607B75416EC492055B639460420CDC1FE2244C1F3250EC1F628
-S2240FEB202221C0F38716F8BE4D3F3846C1CC6B802526C1D22222C0CC8716F8BE7F868678F2
-S2240FEB4063716AC1FA6B80250FC1FE220BC0FA8716F8BE296F30373EE680C1C9273A206280
-S2240FEB60EC8116ECDD2060EC8116ED2B2059EC8116ECC32052EC8116ED80204BEC8116EC33
-S2240FEB80A12044EC8116EC9D203DEC8116EC832036EC8116EC73202FB75416EDC52028EC73
-S2240FEBA08116EE082021EC8116EDAC201AEC8116EE632013EC8116EE8D200CEC8116EE9BE0
-S2240FEBC02005C62016EC39F63989042105C61016EC39C6017B3989CC39493BFC398A16EB9B
-S2240FEBE0E61B821B833D3BEC843BEC8216EAC21B843D6CAD69822013EE8BE600EB826B82C1
-S2240FEC00EE89EC8B16F7DE6C8B6E89EC87EE85343B16F7E36C8B6E89C7873B3BEC84EE863E
-S2240FEC2016F7C51B8426D1E68287EE806C02C76C00521B833D7939473D37C6FE7B394932CD
-S2240FEC407A394A50877C398A3D07EACCFF017B3946C77C39491C394A107B394B1C394B0185
-S2240FEC6086407C394C527C394E7B3950CE00087E398A3D79394607BDC6FF7B394950877C3B
-S2240FEC80398A3D86FFC77C3949F639477B394BC7877C394C7B394EC6067C398A3DC706EC4F
-S2240FECA0391803E83B398EC7877C398C437C3949877C394BC6077C394FC77C394DC6087CC7
-S2240FECC0398A3D3BC6FF7B3949EE80EC047C398CEC067C398EC601877C398A3A3D3B36B723
-S2240FECE045E601C13F2307C62216EC39203ACD394A356B82C7873BFD398E35FD398C35E65C
-S2240FED008816EEB81B88C6FF7B3949EE81E60187B745F3398E7C398ECC0000F9398DB939E3
-S2240FED208C7C398C087E398A1B833D3BB745E601C13F2307C62216EC392043ED047D398CCD
-S2240FED4037EC067C398ECC394A3BC7873BFC398E3B35E6888716EEB81B88C6FF7B3949EEE9
-S2240FED6081E60187B745F3398E7C398ECC0000F9398DB9398C7C398C087E398A1B813A3DF1
-S2240FED803BC6FF7B3949FC398E3BFC398C3BEE84EC063BEC043BCC394D16EBF27B394AC794
-S2240FEDA0877C394BC6087C398A1B8A3D86FFC77C3949CE00407E394B877C394D7B394FC61D
-S2240FEDC0077C398A3D3BFC398E3BFC398C3BC63F873BC73BEC88C3000116F4881B880461CC
-S2240FEDE007C63116EC39201EC6FF7B3949FC398EC3003F7C398EFC398CC90089007C398C6A
-S2240FEE00C601877C398A3A3D3BB745E601C13E2304C622203086FF7A3949CD00017D398ACF
-S2240FEE2004610816F4B40461382018FD398E35FD398C35873BC73B1902B7C616F4881B883D
-S2240FEE40046107C63116EC392017EE80E60187F3398E7C398ECC0000F9398DB9398C7C3932
-S2240FEE608C3A3D3BFC398E3BFC398C3BEE84EC06EE0416F49E1B84046107C63116EC3920EB
-S2240FEE800AC6FF7B394950877C398A3A3D16EEDFC6FF7B394950877C398A3DC63106EC39EB
-S2240FEEA03B16F4B004410F16EAC116F4DCFCE7FE6C8015F300003A3D6CACEC8C6C82EE880E
-S2240FEEC0200DED82E6306B706D823416EADC30ED80341A5F6E828D00003026E61B843D06AD
-S2240FEEE0F60C1B9D6982CCFF016B81507C39927C39907C3B967C3B941C010303F60103C44C
-S2240FEF0003527B3DAE1D0103E36980E68087B745E68108B75613B745CC1F4018151AE16905
-S2240FEF208E00302212E681C1082605A6808A408FA6807A0100201C6280E680C13F23CCE6F7
-S2240FEF408204010FCCE94E3BCC017CCE000016F78F1B821B833D1B983BFCE843ACF01022BB
-S2240FEF60442608FCE845ACF012223AECF012E38E3BEC8EE9F013A9F012B7453A16F7E33BCC
-S2240FEF80FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DFB7D43BEC8216F7E33B34EC88EE8416F71F
-S2240FEFA0C51B862303C72061FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC828302006C888F
-S2240FEFC03AC20082006C84EDF014EEF012C60916F7B4B746C60916F7A36C8A6E88EE86342E
-S2240FEFE0ACB3260BEC86AC822605CC3B942003CC39903BEEF01434EEF01434EE8634ECF044
-S2240FF00016EEF01416F2AE1B881B8A3D1B943B34EDF014EEF012C60916F7B4B746C6091628
-S2240FF020F7A36C8E6E8CBEE84318250099FCE843AC8C2607FCE845AC8E2238ECF014E382D1
-S2240FF0403BEC82E9F015A9F014B7453A16F7E33BFCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF3F
-S2240FF060B7D43BEC8216F7E33B34EC88EE8416F7C51B862251ECF014A38E3BECF014E28F60
-S2240FF080A28E3BEC82E3866C8C3AE983A9826C88C609EE88ED8A16F7B46C86EC8A84018C67
-S2240FF0A000001B822705EE84086E846D8A202E16EADCC64037EC8F3BEC8F3BCC55AA16F468
-S2240FF0C0311B85046103C7201CEC8EC302006C8EEC8CC90089006C8CEE8A086E8AEC8AAC4B
-S2240FF0E08425CCC6011BF0103DC7876CACFE3B9604A509FE3B9404A503522051CE01806E88
-S2240FF100828737E383B745E6E23B9887E3816C813352C18025EB61816180EE80086E80FCCD
-S2240FF120E8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC82830082B7453AC2008200343BC602A0
-S2240FF140873BC73B1A8AB75416EF561B8A1B843D1B96C7876C88FCE8DDF3E8E13BFCE8DBE2
-S2240FF160F9E8E0B9E8DF3BEC828300826C863AC20082006C82FCE8DDF3E8E16C80FCE8DB06
-S2240FF180F9E8E0B9E8DF3BEC828300806C8A3AC20082006C86C71B828737E3873BCC000075
-S2240FF1A0E988A987B7453A16F3E387E3896C893352C18025E3EC82EE8016F3E3B710C73B31
-S2240FF1C0EC84EE8216F7DE16F3E387E380E38A1B822603C60121C71B8A3DFC3B9604A4063B
-S2240FF1E0FC3B94048409CC3B9416F36B044115FC399204A406FC399004840BCC399016F3CB
-S2240FF2006B046102C73DC752C11625FBC6013D6CAD348401044403C72043EE87EC02AC8218
-S2240FF2202606EC00AC802733EC806C00EC826C02D6306B84EC82EE8016F4005B30EE871A73
-S2240FF2400434C7873BEC86EE8416F40C3BC7873B860216EEB81B88E6845B30C6011B853D9B
-S2240FF2603B34EC868C3B942607CC39906C862027FCE8DDAC822618FCE8DBAC802611CC3BED
-S2240FF280946C86FEE8DD6E82FEE8DB6E802008EC8616F36B04410FEC863BEC84EE8216F27B
-S2240FF2A00F1B82046103C7878FEC861B843D1B983B34EDF012EEF010C60916F7B4B746C6A9
-S2240FF2C00916F7A36C866E84EEF014EC0204A412EC0004A40D34EC88EE8616F20F1B82046E
-S2240FF2E04160EEF014EC02AC862606EC00AC84270F34EC88EE8616F2601B826CF0142742CF
-S2240FF300EEF014ECF012A3021A041AE66E88EC8E6C8A16EADCEEF0141904EC8835A3B18C5C
-S2240FF3200200252634EC88C30200B745EC86C9008900B746B754B76516F2601B826CF014A6
-S2240FF3402603C72023C300046C88EE8AE630ED886B706D886E8AEC82EE8016F7E36C826EB8
-S2240FF360800474AE26ACC6011B8C3D1B973BC6016B8AEE80EC0204A408EC0004A403C72023
-S2240FF3805FC7876C88EC8859B746EE80E3026C84CC0000E901A9006C82B75419EEEC446CB0
-S2240FF3A08616EADCC62037EC853BEE8534EC8B16F4311B85044119EC84EE8216F3E3E18684
-S2240FF3C0260EEC84EE8216F7DE16F3E3E1872704698A200AEE88086E888E010025A7E68A3F
-S2240FF3E01B8B3D3B34D63037EC8316F4005B30EC83EE8116F40CB745E600325A301B843DF8
-S2240FF4003B34C60EED8216F7B41B843D843FC380003D3BC787B74537E6E2E8E36BE23D98D5
-S2240FF4203352C11625EECC3D986C8015F300003A3D6CAC6982D6306B83EC88EE8607C15B3B
-S2240FF440301D010303545451C403FA01037B0103C6307B0105B6010584808180261EEC8817
-S2240FF460EE8607A8EE80B7466E40E68A7B010607A11F010530022004C6016B82E6835B307F
-S2240FF480E6821B843D06EEE23BEC8A3BEC8A3BEC8A3BEC8A3BEC8816EF561B88303D3B34F1
-S2240FF4A0EC883BEC883BEC8616F00C1B841B843D16F1503D16F0E90461013D16F1DA3D1681
-S2240FF4C0F4DC4C4001C6015B4EDC44C35DC05C504C4680C7877C3DB17C3DAF3D79004C79F2
-S2240FF4E0004679004D79004079004779004879004979004A79004B3D4F4E011AC6015B4E04
-S2240FF500DC50C35DC05C50FC3DB1FE3DAF16F7DE7C3DB17E3DAF3D07DFFC3DB1FE3DAF3D58
-S2240FF5207900CB7900CA7900C87900C9C61A873B5AC85BC94CCB0C3A3D6BADC140230ECC15
-S2240FF540E9833BC68887B70516F78F1B82E68016F5F804010ECCE9833BC68B87B70516F796
-S2240FF5608F1B82C7876C81202416EADCEC85E381B745E60016F5F804010ECCE9833BC69357
-S2240FF58087B70516F78F1B82EE81086E81E68087AC8122D51B833D3BF63DB32614CC3DB471
-S2240FF5A016F5E7042108C6017B3DB3793DF5C72034F63DF587C3000187C33DB416F5E7047C
-S2240FF5C031EC723DF5F63DF5F13DB426E1EE8034C7873BCE3DB5343BF63DF516EEB81B8864
-S2240FF5E0793DB3C601303D3B4FCC2009D6CFEE806B00C60121C7303D4ECC8002C73D5BCF77
-S2240FF600200316EADC4FCC80F9C6013DCF390016E82906E9B7FEE78005003DFEE782050057
-S2240FF6203DFEE78405003DFEE78605003DFEE78805003DFEE78A05003DFEE78C05003DFE10
-S2240FF640E78E05003DFEE79005003DFEE79205003DFEE79405003DFEE79605003DFEE7987A
-S2240FF66005003DFEE79A05003DFEE79C05003DFEE79E05003DFEE7A005003DFEE7A2050098
-S2240FF6803DFEE7A405003DFEE7A605003DFEE7A805003DFEE7AA05003DFEE7AC05003DFE10
-S2240FF6A0E7AE05003DFEE7B005003DFEE7B205003DFEE7B405003DFEE7B605003DFEE7B85A
-S2240FF6C005003DFEE7BA05003DFEE7BC05003DFEE7BE05003DFEE7C005003DFEE7C2050098
-S2240FF6E03DFEE7C405003DFEE7C605003DFEE7C805003DFEE7CA05003DFEE7CC05003DFE10
-S2240FF700E7CE05003DFEE7D005003DFEE7D205003DFEE7D405003DFEE7D605003DFEE7D839
-S2240FF72005003DFEE7DA05003DFEE7DC05003DFEE7DE05003DFEE7E005003DFEE7E2050097
-S2240FF7403DFEE7E405003DFEE7E605003DFEE7E805003DFEE7EA05003DFEE7EC05003DFE0F
-S2240FF760E7EE05003DFEE7F005003DFEE7F205003DFEE7F405003DFEE7F605003DFEE7F819
-S2240FF78005003DFEE7FA05003DFEE7FC05003D3B34EC867C3DF6EC827E3DF87C3DFA16EA6B
-S2240FF7A0DC20FB87D7B7C6270A59B7C55545B7C50436F63D87D7B7C6270AB7C549B7C54647
-S2240FF7C0560436F63DAC84270E34B7C5E285A284B7C510FB302002AE82311B84054004A4EA
-S2240FF7E001083D046401098300013D87C76C82EC8C261FEE8EED86EC8811280DEC86CD009B
-S2240FF80000116D82B746EC88116D846C8887C76C863D972709EE86B7C5CD00002008EE8DC9
-S2240FF820E686ED87B7C61135ECF010133B35ECF012ED8413E3B130B7C5CD0000356581A365
-S2240FF8408CB7C5E28BA28A310446113669AF3137323433EEF01011B76532201F252A0464D5
-S2240FF86003044539E78E2706EE8E87C7200BB7C5363469AFEEF013313A1810083A34A3B10C
-S2240FF880B74620A33102209F4151B7C5415104A40108AE8E22EE2505ACF01024E7316D8402
-S2240FF8A0698369826C886E863D3B341B9C16F7EB30ECB5EDB505403BB704B7053A3D30E623
-S2090FF8C0E605E500005F
-S2100FFEF0CF390016E82916EAD106E9B74C
-S2240FFF80F615F61BF621F627F62DF633F639F63FF645F64BF651F657F65DF663F669F66FCD
-S2240FFFA0F675F67BF681F687F68DF693F699F69FF6A5F6ABF6B1F6B7F6BDF6C3F6C9F6CFAD
-S2240FFFC0F6D5F6DBF6E1F6E7F6EDF6F3F6F9F6FFF705F70BF711F717F71DF723F729F72F85
-S2240FFFE0F735F73BF741F747F74DF753F759F75FF765F76BF771F777F77DF783F789F60CE1
+S2240FE8E00008003634CE01001A0586806A00A7A7A7A70F0040FC30323D050206020603078F
+S2240FE900030803090309040A040B040C040C050D050E050F050F06100610071008433A5C12
+S2240FE920576F726B5C736F6674776172655C4F70656E424C545C5461726765745C44656D54
+S2240FE9406F5C48435331325F457662706C75735F447261676F6E3132705F436F6465576138
+S2240FE9607272696F725C426F6F745C6D61696E2E6300433A5C576F726B5C736F6674776167
+S2240FE98072655C4F70656E424C545C5461726765745C536F757263655C48435331325C66CD
+S2240FE9A06C6173682E6300433A5C576F726B5C736F6674776172655C4F70656E424C545C9B
+S2240FE9C05461726765745C536F757263655C48435331325C63616E2E630016E9E516EAA0AF
+S2240FE9E016EAAF20FB1B99698214104D398069816980E68087CD1F40C3000118133BE683F1
+S2240FEA0087C3000116F9C63B34EC84B76516F9B86C876E858C5DC01B822609046506C6016F
+S2240FEA206B8220286280E680C13F23C6E6820401086281E681C10F23B7E68204010ECCE9C3
+S2240FEA401D3BC67587B70516F6C41B82E6805B34E6815B354F3708FC4C39801B873DC6013E
+S2240FEA607B390016F5387C39037E390106EA6F16EAFA04012AF6390004212416F5383BFCA1
+S2240FEA803903C30032B746FC3901C9008900353BEC8416F8D41B82250679390016EEC13D6E
+S2240FEAA016EAFE16F4E016F4A616EABB06EA5E16EAFF16F51916EAD406EA6FC6FF6BAE6904
+S2240FEAC08116EB0016F6D8F63905042105B77416EB223A3DCC390616F7C5042106CC390686
+S2240FEAE016EB223D3D3BEC843BE68316F7743A16EB1E3A3DC6017B39053D16EB153D3D3D3B
+S2240FEB00C7877C391E7C391C7B39197C391A7B39107C390E3DF6390E26013DC6013D793938
+S2240FEB20193D3B36B745E600C1FF2607B75416EC6C2055B6390E0420CDC1FE2244C1F32551
+S2240FEB400EC1F62221C0F38716F9CD4D3F3846C1CC6B802526C1D22222C0CC8716F9CD7F71
+S2240FEB6086867863716AC1FA6B80250FC1FE220BC0FA8716F9CD296F30373EE680C1C92788
+S2240FEB803A2062EC8116ECFF2060EC8116ED4D2059EC8116ECE52052EC8116EDA2204BEC52
+S2240FEBA08116ECC32044EC8116ECBF203DEC8116ECA52036EC8116EC95202FB75416EDE65B
+S2240FEBC02028EC8116EE292021EC8116EDCE201AEC8116EE842013EC8116EEAE200CEC81A6
+S2240FEBE016EEBC2005C62016EC5CF63919042105C61016EC5CC6017B3919CC39113BFC3918
+S2240FEC001A16EC091B821B833D3BEC843BEC8216EAE51B843D6CAD69822013EE8BE600EBAD
+S2240FEC20826B82EE89EC8B16F8ED6C8B6E89EC87EE85343B16F8F26C8B6E89C7873B3BEC87
+S2240FEC4084EE8616F8D41B8426D1E68287EE806C02C76C00521B833D79390F3D37C6FE7B91
+S2240FEC603911327A391250877C391A3D07EACCFF017B390EC77C39111C3912107B39131CF6
+S2240FEC8039130186087C3914527C39167B3918B7047C391A3D79390E07BEC6FF7B391150AD
+S2240FECA0877C391A3D86FFC77C3911F6390F7B3913C7877C39147B3916C6067C391A3DC716
+S2240FECC006EC5C1803E83B391EC7877C391C437C3911877C3913C6077C3917C77C3915C6D6
+S2240FECE0087C391A3D3BC6FF7B3911EE80EC047C391CEC067C391EC601877C391A3A3D3B64
+S2240FED0036B745E601C1072307C62216EC5C203ACD3912356B82C7873BFD391E35FD391C96
+S2240FED2035E68816EED91B88C6FF7B3911EE81E60187B745F3391E7C391ECC0000F9391D01
+S2240FED40B9391C7C391C087E391A1B833D3BB745E601C1072307C62216EC5C2043ED047DE5
+S2240FED60391C37EC067C391ECC39123BC7873BFC391E3B35E6888716EED91B88C6FF7B39A2
+S2240FED8011EE81E60187B745F3391E7C391ECC0000F9391DB9391C7C391C087E391A1B81E9
+S2240FEDA03A3D3BC6FF7B3911FC391E3BFC391C3BEE84EC063BEC043BCC391516EC157B393A
+S2240FEDC012C7877C3913C6087C391A1B8A3D86FFC77C3911CE00087E3913877C39157B39C1
+S2240FEDE017097E391A3D3BFC391E3BFC391C3BC607873BC73BEC88C3000116F4A91B880459
+S2240FEE006107C63116EC5C201EC6FF7B3911FC391EC300077C391EFC391CC90089007C3911
+S2240FEE201CC601877C391A3A3D3BB745E601C1062304C622203086FF7A3911CD00017D39FD
+S2240FEE401A04610816F4D50461382018FD391E35FD391C35873BC73B1902B7C616F4A91B29
+S2240FEE6088046107C63116EC5C2017EE80E60187F3391E7C391ECC0000F9391DB9391C7C60
+S2240FEE80391C3A3D3BFC391E3BFC391C3BEE84EC06EE0416F4BF1B84046107C63116EC5CBE
+S2240FEEA0200AC6FF7B391150877C391A3A3D16EF00C6FF7B391150877C391A3DC63106EC12
+S2240FEEC05C3B16F4D104410F16EAE416F4FDFCE7FE6C8015F300003A3D6CACEC8C6C82EEB5
+S2240FEEE088200DED82E6306B706D823416EAFF30ED80341A5F6E828D00003026E61B843DE8
+S2240FEF0006F5411B9D6982CCFF016B81507C39227C39207C3B267C3B241C010303F6010375
+S2240FEF20C403527B3D3E1D0103E36980E68087B745E68108B75613B745CC1F4018151AE1FA
+S2240FEF40698E00302212E681C1082605A6808A408FA6807A0100201C6280E680C13F23CC54
+S2240FEF60E68204010FCCE9723BCC017CCE000016F6C41B821B833D1B983BFCE843ACF0107F
+S2240FEF8022442608FCE845ACF012223AECF012E38E3BEC8EE9F013A9F012B7453A16F8F2B5
+S2240FEFA03BFCE8DDF3E8E13BFCE8DBF9E8E0B9E8DFB7D43BEC8216F8F23B34EC88EE8416AB
+S2240FEFC0F8D41B862303C72061FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC828302006CF0
+S2240FEFE0883AC20082006C84EDF014EEF012C60916F8C3B746C60916F8B26C8A6E88EE869A
+S2240FF00034ACB3260BEC86AC822605CC3B242003CC39203BEEF01434EEF01434EE8634ECBF
+S2240FF020F016EEF01416F2CF1B881B8A3D1B943B34EDF014EEF012C60916F8C3B746C609FD
+S2240FF04016F8B26C8E6E8CBEE84318250099FCE843AC8C2607FCE845AC8E2238ECF014E30D
+S2240FF060823BEC82E9F015A9F014B7453A16F8F23BFCE8DDF3E8E13BFCE8DBF9E8E0B9E86C
+S2240FF080DFB7D43BEC8216F8F23B34EC88EE8416F8D41B862251ECF014A38E3BECF014E2D0
+S2240FF0A08FA28E3BEC82E3866C8C3AE983A9826C88C609EE88ED8A16F8C36C86EC8A840134
+S2240FF0C08C00001B822705EE84086E846D8A202E16EAFFC64037EC8F3BEC8F3BCC55AA168D
+S2240FF0E0F4521B85046103C7201CEC8EC302006C8EEC8CC90089006C8CEE8A086E8AEC8AC2
+S2240FF100AC8425CCC6011BF0103DC7876CACFE3B2604A509FE3B2404A503522051CE018009
+S2240FF1206E828737E383B745E6E23B2887E3816C813352C18025EB61816180EE80086E80AB
+S2240FF140FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC82830082B7453AC2008200343BC686
+S2240FF16002873BC73B1A8AB75416EF771B8A1B843D1B96C7876C88FCE8DDF3E8E13BFCE87A
+S2240FF180DBF9E8E0B9E8DF3BEC828300826C863AC20082006C82FCE8DDF3E8E16C80FCE8E6
+S2240FF1A0DBF9E8E0B9E8DF3BEC828300806C8A3AC20082006C86C71B828737E3873BCC007A
+S2240FF1C000E988A987B7453A16F40487E3896C893352C18025E3EC82EE8016F404B710C708
+S2240FF1E03BEC84EE8216F8ED16F40487E380E38A1B822603C60121C71B8A3DFC3B2604A424
+S2240FF20006FC3B24048409CC3B2416F38C044115FC392204A406FC392004840BCC392016A6
+S2240FF220F38C046102C73DC752C11625FBC6013D6CAD348401044403C72043EE87EC02AC66
+S2240FF240822606EC00AC802733EC806C00EC826C02D6306B84EC82EE8016F4215B30EE87CA
+S2240FF2601A0434C7873BEC86EE8416F42D3BC7873B860216EED91B88E6845B30C6011B855C
+S2240FF2803D3B34EC868C3B242607CC39206C862027FCE8DDAC822618FCE8DBAC802611CCAB
+S2240FF2A03B246C86FEE8DD6E82FEE8DB6E802008EC8616F38C04410FEC863BEC84EE821661
+S2240FF2C0F2301B82046103C7878FEC861B843D1B983B34EDF012EEF010C60916F8C3B7462C
+S2240FF2E0C60916F8B26C866E84EEF014EC0204A412EC0004A40D34EC88EE8616F2301B825B
+S2240FF300044160EEF014EC02AC862606EC00AC84270F34EC88EE8616F2811B826CF01427CB
+S2240FF32042EEF014ECF012A3021A041AE66E88EC8E6C8A16EAFFEEF0141904EC8835A3B163
+S2240FF3408C0200252634EC88C30200B745EC86C9008900B746B754B76516F2811B826CF0ED
+S2240FF360142603C72023C300046C88EE8AE630ED886B706D886E8AEC82EE8016F8F26C82E2
+S2240FF3806E800474AE26ACC6011B8C3D1B973BC6016B8AEE80EC0204A408EC0004A403C7B5
+S2240FF3A0205FC7876C88EC8859B746EE80E3026C84CC0000E901A9006C82B75419EEEC44DC
+S2240FF3C06C8616EAFFC62037EC853BEE8534EC8B16F4521B85044119EC84EE8216F404E118
+S2240FF3E086260EEC84EE8216F8ED16F404E1872704698A200AEE88086E888E010025A7E6F1
+S2240FF4008A1B8B3D3B34D63037EC8316F4215B30EC83EE8116F42DB745E600325A301B8448
+S2240FF4203D3B34C60EED8216F8C31B843D843FC380003D3BC787B74537E6E2E8E36BE23D00
+S2240FF440283352C11625EECC3D286C8015F300003A3D6CAC6982D6306B83EC88EE8607C1BE
+S2240FF4605B301D010303545451C403FA01037B0103C6307B0105B6010584808180261EEC24
+S2240FF48088EE8607A8EE80B7466E40E68A7B010607A11F010530022004C6016B82E6835B07
+S2240FF4A030E6821B843D06EF033BEC8A3BEC8A3BEC8A3BEC8A3BEC8816EF771B88303D3B92
+S2240FF4C034EC883BEC883BEC8616F02D1B841B843D16F1713D16F10A0461013D16F1FB3DBE
+S2240FF4E016F4FD4C4001C6015B4EDC44C35DC05C504C4680C7877C3D417C3D3F3D79004CF4
+S2240FF50079004679004D79004079004779004879004979004A79004B3D4F4E011AC6015BB8
+S2240FF5204EDC50C35DC05C50FC3D41FE3D3F16F8ED7C3D417E3D3F3D07DFFC3D41FE3D3FB7
+S2240FF5403DCF390016E82906E9DAFEE78005003DFEE78205003DFEE78405003DFEE78605F7
+S2240FF560003DFEE78805003DFEE78A05003DFEE78C05003DFEE78E05003DFEE79005003DBB
+S2240FF580FEE79205003DFEE79405003DFEE79605003DFEE79805003DFEE79A05003DFEE7C1
+S2240FF5A09C05003DFEE79E05003DFEE7A005003DFEE7A205003DFEE7A405003DFEE7A605A9
+S2240FF5C0003DFEE7A805003DFEE7AA05003DFEE7AC05003DFEE7AE05003DFEE7B005003DBB
+S2240FF5E0FEE7B205003DFEE7B405003DFEE7B605003DFEE7B805003DFEE7BA05003DFEE7C1
+S2240FF600BC05003DFEE7BE05003DFEE7C005003DFEE7C205003DFEE7C405003DFEE7C60588
+S2240FF620003DFEE7C805003DFEE7CA05003DFEE7CC05003DFEE7CE05003DFEE7D005003DBA
+S2240FF640FEE7D205003DFEE7D405003DFEE7D605003DFEE7D805003DFEE7DA05003DFEE7C0
+S2240FF660DC05003DFEE7DE05003DFEE7E005003DFEE7E205003DFEE7E405003DFEE7E60568
+S2240FF680003DFEE7E805003DFEE7EA05003DFEE7EC05003DFEE7EE05003DFEE7F005003DBA
+S2240FF6A0FEE7F205003DFEE7F405003DFEE7F605003DFEE7F805003DFEE7FA05003DFEE7C0
+S2240FF6C0FC05003D3B34EC867C3D43EC827E3D457C3D4716EAFF20FB1B96C6017B01401F20
+S2240FF6E0014101FBC6807B0141CC01F43B1A82341A85B75416F8491B8404010ECCE9A73B9F
+S2240FF700C6F587B70516F6C41B82E6807B0142E6817B01431D014B30CC06676C88C7876CA0
+S2240FF720866C846C827B0150C6087B0151C60C7B0152C6CE7B01537A0154C6107B01557AF7
+S2240FF74001567A0157C6CC7B0158C6E07B01597A015A7A015B7A015CC6077B015D7A015E8A
+S2240FF7607A015F1D0140011E014101FBC6017B014A1B8A3D371E0146010FCCE9A73BCC0161
+S2240FF78036CE000016F6C41B82CC20FC7B01707A0171790172790173E6807B017CC72010F6
+S2240FF7A08737B746E384B745E6006BEA01743352E18025ECC6017B0146200316EAFF1F01A5
+S2240FF7C04601F8323D6CA869861F014401761E01610810FC016049494949496C84C7876C7D
+S2240FF7E0822030FE0162FC0160C4078749B7C54656CD00003BFC0160C4E03BC60334EE8201
+S2240FF80016F8C3EA85AA846C8AB754EA81AA806C881B86EC848C06672626EC822622C60109
+S2240FF8206B86B6016C840F6A87C720108737B745E381B746E6E201646B403352E18725EC34
+S2240FF8401D0144FEE6861B883D6CAC3B6984E6848759B745E6E2E8F987B746E6E2E8FA1972
+S2240FF860EE02B764ED8A136C80CC1F40B756EE80181004642ECC1F40EE801810B7516B85D6
+S2240FF8802721C140221D53EE886B00E6EAE8FA53861012A6EAE8F94337AAB0EE826A00C606
+S2240FF8A001200C16EAFF6284E684C11225A0C71B863D87D7B7C6270A59B7C55545B7C50480
+S2240FF8C036F63D87D7B7C6270AB7C549B7C546560436F63DAC84270E34B7C5E285A284B7FC
+S2240FF8E0C510FB302002AE82311B84054004A401083D046401098300013D87C76C82EC8CB8
+S2240FF900261FEE8EED86EC8811280DEC86CD0000116D82B746EC88116D846C8887C76C86FF
+S2240FF9203D972709EE86B7C5CD00002008EE8DE686ED87B7C61135ECF010133B35ECF0124F
+S2240FF940ED8413E3B130B7C5CD0000356581A38CB7C5E28BA28A310446113669AF3137322F
+S2240FF9603433EEF01011B76532201F252A046403044539E78E2706EE8E87C7200BB7C536FB
+S2240FF9803469AFEEF013313A1810083A34A3B1B74620A33102209F4151B7C5415104A401BE
+S2240FF9A008AE8E22EE2505ACF01024E7316D84698369826C886E863D3B341B9C16F8FA3082
+S2180FF9C0ECB5EDB505403BB704B7053A3D30E6E605E5000088
+S2100FFEF0CF390016E82916EAF406E9DA06
+S2240FFF80F54AF550F556F55CF562F568F56EF574F57AF580F586F58CF592F598F59EF5A48D
+S2240FFFA0F5AAF5B0F5B6F5BCF5C2F5C8F5CEF5D4F5DAF5E0F5E6F5ECF5F2F5F8F5FEF6046C
+S2240FFFC0F60AF610F616F61CF622F628F62EF634F63AF640F646F64CF652F658F65EF6643D
+S2240FFFE0F66AF670F676F67CF682F688F68EF694F69AF6A0F6A6F6ACF6B2F6B8F6BEF541A1
S9030000FC
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.s19 b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.s19
index f44d59fb..51195760 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.s19
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.abs.s19
@@ -1,142 +1,150 @@
S0720000433A5C576F726B5C736F6674776172655C4F70656E424C545C5461726765745C44656D6F5C48435331325F457662706C75735F447261676F6E3132705F436F646557617272696F725C426F6F745C62696E5C6F70656E626C745F657662706C75735F647261676F6E3132702E61627366
S123E800FEE833FDE831270E35ED31EC3169700434FB310326F2FEE835EC31270BED311828
-S123E8200A30700434F920F13DCF390007D206E9B70001E837F8C3390004FC4F70656E423C
+S123E8200A30700434F920F13DCF390007D206E9DA0001E837F9D2390004494F70656E42BC
S123E8404C5400000C000000004000000C400000004000000C800000004000000CC00000A4
S123E860004000000D000000004000000D400000004000000D800000004000000DC00000E0
S123E880004000000E000000004000000E400000004000000E800000004000000EC00000BC
S123E8A0004000000F000000004000000F400000004000000F800000004000000FC0000098
S123E8C0000800000FC80000000800000FD00000000800000FD80000000800000FE0000088
-S123E8E00008003634CE01001A0586806A00A7A7A7A70F0040FC30323D433A5C576F726B42
-S123E9005C736F6674776172655C4F70656E424C545C5461726765745C44656D6F5C4843D1
-S123E9205331325F457662706C75735F447261676F6E3132705F436F646557617272696F02
-S123E940725C426F6F745C6D61696E2E6300433A5C576F726B5C736F6674776172655C4FD1
-S123E96070656E424C545C5461726765745C536F757263655C48435331325C666C617368D7
-S123E9802E6300433A5C576F726B5C736F6674776172655C4F70656E424C545C54617267E5
-S123E9A065745C536F757263655C48435331325C756172742E630016E9C216EA7D16EA8C9D
-S123E9C020FB1B99698214104D398069816980E68087CD1F40C3000118133BE68387C30086
-S123E9E00116F8B73B34EC84B76516F8A96C876E858C5DC01B822609046506C6016B8220FD
-S123EA00286280E680C13F23C6E6820401086281E681C10F23B7E68204010ECCE8F93BC607
-S123EA207A87B70516F78F1B82E6805B34E6815B354F3708FC4C39801B873DC6017B390007
-S123EA4016F5177C39037E390106EA4C16EAD704012AF6390004212416F5173BFC3903C30E
-S123EA600032B746FC3901C9008900353BEC8416F7C51B82250679390016EEA03D16EADBF3
-S123EA8016F4BF16F48516EA9806EA3B16EADC16F4F816EAB106EA4CC6FF6BAE698116EAC4
-S123EAA0DD16F520F63905042105B77416EAFF3A3DCC390616F597042106CC390616EAFF69
-S123EAC03D3D3BEC843BE68316F5393A16EAFB3A3DC6017B39053D16EAF23D3D3DC7877C49
-S123EAE0398E7C398C7B39897C398A7B39487C39463DF6394626013DC6013D7939893D3BCA
-S123EB0036B745E600C1FF2607B75416EC492055B639460420CDC1FE2244C1F3250EC1F638
-S123EB202221C0F38716F8BE4D3F3846C1CC6B802526C1D22222C0CC8716F8BE7F86867802
-S123EB4063716AC1FA6B80250FC1FE220BC0FA8716F8BE296F30373EE680C1C9273A206290
-S123EB60EC8116ECDD2060EC8116ED2B2059EC8116ECC32052EC8116ED80204BEC8116EC43
-S123EB80A12044EC8116EC9D203DEC8116EC832036EC8116EC73202FB75416EDC52028EC83
-S123EBA08116EE082021EC8116EDAC201AEC8116EE632013EC8116EE8D200CEC8116EE9BF0
-S123EBC02005C62016EC39F63989042105C61016EC39C6017B3989CC39493BFC398A16EBAB
-S123EBE0E61B821B833D3BEC843BEC8216EAC21B843D6CAD69822013EE8BE600EB826B82D1
-S123EC00EE89EC8B16F7DE6C8B6E89EC87EE85343B16F7E36C8B6E89C7873B3BEC84EE864E
-S123EC2016F7C51B8426D1E68287EE806C02C76C00521B833D7939473D37C6FE7B394932DD
-S123EC407A394A50877C398A3D07EACCFF017B3946C77C39491C394A107B394B1C394B0195
-S123EC6086407C394C527C394E7B3950CE00087E398A3D79394607BDC6FF7B394950877C4B
-S123EC80398A3D86FFC77C3949F639477B394BC7877C394C7B394EC6067C398A3DC706EC5F
-S123ECA0391803E83B398EC7877C398C437C3949877C394BC6077C394FC77C394DC6087CD7
-S123ECC0398A3D3BC6FF7B3949EE80EC047C398CEC067C398EC601877C398A3A3D3B36B733
-S123ECE045E601C13F2307C62216EC39203ACD394A356B82C7873BFD398E35FD398C35E66C
-S123ED008816EEB81B88C6FF7B3949EE81E60187B745F3398E7C398ECC0000F9398DB939F3
-S123ED208C7C398C087E398A1B833D3BB745E601C13F2307C62216EC392043ED047D398CDD
-S123ED4037EC067C398ECC394A3BC7873BFC398E3B35E6888716EEB81B88C6FF7B3949EEF9
-S123ED6081E60187B745F3398E7C398ECC0000F9398DB9398C7C398C087E398A1B813A3D01
-S123ED803BC6FF7B3949FC398E3BFC398C3BEE84EC063BEC043BCC394D16EBF27B394AC7A4
-S123EDA0877C394BC6087C398A1B8A3D86FFC77C3949CE00407E394B877C394D7B394FC62D
-S123EDC0077C398A3D3BFC398E3BFC398C3BC63F873BC73BEC88C3000116F4881B880461DC
-S123EDE007C63116EC39201EC6FF7B3949FC398EC3003F7C398EFC398CC90089007C398C7A
-S123EE00C601877C398A3A3D3BB745E601C13E2304C622203086FF7A3949CD00017D398ADF
-S123EE2004610816F4B40461382018FD398E35FD398C35873BC73B1902B7C616F4881B884D
-S123EE40046107C63116EC392017EE80E60187F3398E7C398ECC0000F9398DB9398C7C3942
-S123EE608C3A3D3BFC398E3BFC398C3BEE84EC06EE0416F49E1B84046107C63116EC3920FB
-S123EE800AC6FF7B394950877C398A3A3D16EEDFC6FF7B394950877C398A3DC63106EC39FB
-S123EEA03B16F4B004410F16EAC116F4DCFCE7FE6C8015F300003A3D6CACEC8C6C82EE881E
-S123EEC0200DED82E6306B706D823416EADC30ED80341A5F6E828D00003026E61B843D06BD
-S123EEE0F60C1B9D6982CCFF016B81507C39927C39907C3B967C3B941C010303F60103C45C
-S123EF0003527B3DAE1D0103E36980E68087B745E68108B75613B745CC1F4018151AE16915
-S123EF208E00302212E681C1082605A6808A408FA6807A0100201C6280E680C13F23CCE607
-S123EF408204010FCCE94E3BCC017CCE000016F78F1B821B833D1B983BFCE843ACF01022CB
-S123EF60442608FCE845ACF012223AECF012E38E3BEC8EE9F013A9F012B7453A16F7E33BDC
-S123EF80FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DFB7D43BEC8216F7E33B34EC88EE8416F72F
-S123EFA0C51B862303C72061FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC828302006C889F
-S123EFC03AC20082006C84EDF014EEF012C60916F7B4B746C60916F7A36C8A6E88EE86343E
-S123EFE0ACB3260BEC86AC822605CC3B942003CC39903BEEF01434EEF01434EE8634ECF054
-S123F00016EEF01416F2AE1B881B8A3D1B943B34EDF014EEF012C60916F7B4B746C6091638
-S123F020F7A36C8E6E8CBEE84318250099FCE843AC8C2607FCE845AC8E2238ECF014E382E1
-S123F0403BEC82E9F015A9F014B7453A16F7E33BFCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF4F
-S123F060B7D43BEC8216F7E33B34EC88EE8416F7C51B862251ECF014A38E3BECF014E28F70
-S123F080A28E3BEC82E3866C8C3AE983A9826C88C609EE88ED8A16F7B46C86EC8A84018C77
-S123F0A000001B822705EE84086E846D8A202E16EADCC64037EC8F3BEC8F3BCC55AA16F478
-S123F0C0311B85046103C7201CEC8EC302006C8EEC8CC90089006C8CEE8A086E8AEC8AAC5B
-S123F0E08425CCC6011BF0103DC7876CACFE3B9604A509FE3B9404A503522051CE01806E98
-S123F100828737E383B745E6E23B9887E3816C813352C18025EB61816180EE80086E80FCDD
-S123F120E8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC82830082B7453AC2008200343BC602B0
-S123F140873BC73B1A8AB75416EF561B8A1B843D1B96C7876C88FCE8DDF3E8E13BFCE8DBF2
-S123F160F9E8E0B9E8DF3BEC828300826C863AC20082006C82FCE8DDF3E8E16C80FCE8DB16
-S123F180F9E8E0B9E8DF3BEC828300806C8A3AC20082006C86C71B828737E3873BCC000085
-S123F1A0E988A987B7453A16F3E387E3896C893352C18025E3EC82EE8016F3E3B710C73B41
-S123F1C0EC84EE8216F7DE16F3E387E380E38A1B822603C60121C71B8A3DFC3B9604A4064B
-S123F1E0FC3B94048409CC3B9416F36B044115FC399204A406FC399004840BCC399016F3DB
-S123F2006B046102C73DC752C11625FBC6013D6CAD348401044403C72043EE87EC02AC8228
-S123F2202606EC00AC802733EC806C00EC826C02D6306B84EC82EE8016F4005B30EE871A83
-S123F2400434C7873BEC86EE8416F40C3BC7873B860216EEB81B88E6845B30C6011B853DAB
-S123F2603B34EC868C3B942607CC39906C862027FCE8DDAC822618FCE8DBAC802611CC3BFD
-S123F280946C86FEE8DD6E82FEE8DB6E802008EC8616F36B04410FEC863BEC84EE8216F28B
-S123F2A00F1B82046103C7878FEC861B843D1B983B34EDF012EEF010C60916F7B4B746C6B9
-S123F2C00916F7A36C866E84EEF014EC0204A412EC0004A40D34EC88EE8616F20F1B82047E
-S123F2E04160EEF014EC02AC862606EC00AC84270F34EC88EE8616F2601B826CF0142742DF
-S123F300EEF014ECF012A3021A041AE66E88EC8E6C8A16EADCEEF0141904EC8835A3B18C6C
-S123F3200200252634EC88C30200B745EC86C9008900B746B754B76516F2601B826CF014B6
-S123F3402603C72023C300046C88EE8AE630ED886B706D886E8AEC82EE8016F7E36C826EC8
-S123F360800474AE26ACC6011B8C3D1B973BC6016B8AEE80EC0204A408EC0004A403C72033
-S123F3805FC7876C88EC8859B746EE80E3026C84CC0000E901A9006C82B75419EEEC446CC0
-S123F3A08616EADCC62037EC853BEE8534EC8B16F4311B85044119EC84EE8216F3E3E18694
-S123F3C0260EEC84EE8216F7DE16F3E3E1872704698A200AEE88086E888E010025A7E68A4F
-S123F3E01B8B3D3B34D63037EC8316F4005B30EC83EE8116F40CB745E600325A301B843D08
-S123F4003B34C60EED8216F7B41B843D843FC380003D3BC787B74537E6E2E8E36BE23D98E5
-S123F4203352C11625EECC3D986C8015F300003A3D6CAC6982D6306B83EC88EE8607C15B4B
-S123F440301D010303545451C403FA01037B0103C6307B0105B6010584808180261EEC8827
-S123F460EE8607A8EE80B7466E40E68A7B010607A11F010530022004C6016B82E6835B308F
-S123F480E6821B843D06EEE23BEC8A3BEC8A3BEC8A3BEC8A3BEC8816EF561B88303D3B3401
-S123F4A0EC883BEC883BEC8616F00C1B841B843D16F1503D16F0E90461013D16F1DA3D1691
-S123F4C0F4DC4C4001C6015B4EDC44C35DC05C504C4680C7877C3DB17C3DAF3D79004C7902
-S123F4E0004679004D79004079004779004879004979004A79004B3D4F4E011AC6015B4E14
-S123F500DC50C35DC05C50FC3DB1FE3DAF16F7DE7C3DB17E3DAF3D07DFFC3DB1FE3DAF3D68
-S123F5207900CB7900CA7900C87900C9C61A873B5AC85BC94CCB0C3A3D6BADC140230ECC25
-S123F540E9833BC68887B70516F78F1B82E68016F5F804010ECCE9833BC68B87B70516F7A6
-S123F5608F1B82C7876C81202416EADCEC85E381B745E60016F5F804010ECCE9833BC69367
-S123F58087B70516F78F1B82EE81086E81E68087AC8122D51B833D3BF63DB32614CC3DB481
-S123F5A016F5E7042108C6017B3DB3793DF5C72034F63DF587C3000187C33DB416F5E7048C
-S123F5C031EC723DF5F63DF5F13DB426E1EE8034C7873BCE3DB5343BF63DF516EEB81B8874
-S123F5E0793DB3C601303D3B4FCC2009D6CFEE806B00C60121C7303D4ECC8002C73D5BCF87
-S123F600200316EADC4FCC80F9C6013DCF390016E82906E9B7FEE78005003DFEE782050067
-S123F6203DFEE78405003DFEE78605003DFEE78805003DFEE78A05003DFEE78C05003DFE20
-S123F640E78E05003DFEE79005003DFEE79205003DFEE79405003DFEE79605003DFEE7988A
-S123F66005003DFEE79A05003DFEE79C05003DFEE79E05003DFEE7A005003DFEE7A20500A8
-S123F6803DFEE7A405003DFEE7A605003DFEE7A805003DFEE7AA05003DFEE7AC05003DFE20
-S123F6A0E7AE05003DFEE7B005003DFEE7B205003DFEE7B405003DFEE7B605003DFEE7B86A
-S123F6C005003DFEE7BA05003DFEE7BC05003DFEE7BE05003DFEE7C005003DFEE7C20500A8
-S123F6E03DFEE7C405003DFEE7C605003DFEE7C805003DFEE7CA05003DFEE7CC05003DFE20
-S123F700E7CE05003DFEE7D005003DFEE7D205003DFEE7D405003DFEE7D605003DFEE7D849
-S123F72005003DFEE7DA05003DFEE7DC05003DFEE7DE05003DFEE7E005003DFEE7E20500A7
-S123F7403DFEE7E405003DFEE7E605003DFEE7E805003DFEE7EA05003DFEE7EC05003DFE1F
-S123F760E7EE05003DFEE7F005003DFEE7F205003DFEE7F405003DFEE7F605003DFEE7F829
-S123F78005003DFEE7FA05003DFEE7FC05003D3B34EC867C3DF6EC827E3DF87C3DFA16EA7B
-S123F7A0DC20FB87D7B7C6270A59B7C55545B7C50436F63D87D7B7C6270AB7C549B7C54657
-S123F7C0560436F63DAC84270E34B7C5E285A284B7C510FB302002AE82311B84054004A4FA
-S123F7E001083D046401098300013D87C76C82EC8C261FEE8EED86EC8811280DEC86CD00AB
-S123F80000116D82B746EC88116D846C8887C76C863D972709EE86B7C5CD00002008EE8DD9
-S123F820E686ED87B7C61135ECF010133B35ECF012ED8413E3B130B7C5CD0000356581A375
-S123F8408CB7C5E28BA28A310446113669AF3137323433EEF01011B76532201F252A0464E5
-S123F86003044539E78E2706EE8E87C7200BB7C5363469AFEEF013313A1810083A34A3B11C
-S123F880B74620A33102209F4151B7C5415104A40108AE8E22EE2505ACF01024E7316D8412
-S123F8A0698369826C886E863D3B341B9C16F7EB30ECB5EDB505403BB704B7053A3D30E633
-S108F8C0E605E500006F
-S10FFEF0CF390016E82916EAD106E9B75C
-S123FF80F615F61BF621F627F62DF633F639F63FF645F64BF651F657F65DF663F669F66FDD
-S123FFA0F675F67BF681F687F68DF693F699F69FF6A5F6ABF6B1F6B7F6BDF6C3F6C9F6CFBD
-S123FFC0F6D5F6DBF6E1F6E7F6EDF6F3F6F9F6FFF705F70BF711F717F71DF723F729F72F95
-S123FFE0F735F73BF741F747F74DF753F759F75FF765F76BF771F777F77DF783F789F60CF1
+S123E8E00008003634CE01001A0586806A00A7A7A7A70F0040FC30323D050206020603079F
+S123E900030803090309040A040B040C040C050D050E050F050F06100610071008433A5C22
+S123E920576F726B5C736F6674776172655C4F70656E424C545C5461726765745C44656D64
+S123E9406F5C48435331325F457662706C75735F447261676F6E3132705F436F6465576148
+S123E9607272696F725C426F6F745C6D61696E2E6300433A5C576F726B5C736F6674776177
+S123E98072655C4F70656E424C545C5461726765745C536F757263655C48435331325C66DD
+S123E9A06C6173682E6300433A5C576F726B5C736F6674776172655C4F70656E424C545CAB
+S123E9C05461726765745C536F757263655C48435331325C63616E2E630016E9E516EAA0BF
+S123E9E016EAAF20FB1B99698214104D398069816980E68087CD1F40C3000118133BE68301
+S123EA0087C3000116F9C63B34EC84B76516F9B86C876E858C5DC01B822609046506C6017F
+S123EA206B8220286280E680C13F23C6E6820401086281E681C10F23B7E68204010ECCE9D3
+S123EA401D3BC67587B70516F6C41B82E6805B34E6815B354F3708FC4C39801B873DC6014E
+S123EA607B390016F5387C39037E390106EA6F16EAFA04012AF6390004212416F5383BFCB1
+S123EA803903C30032B746FC3901C9008900353BEC8416F8D41B82250679390016EEC13D7E
+S123EAA016EAFE16F4E016F4A616EABB06EA5E16EAFF16F51916EAD406EA6FC6FF6BAE6914
+S123EAC08116EB0016F6D8F63905042105B77416EB223A3DCC390616F7C5042106CC390696
+S123EAE016EB223D3D3BEC843BE68316F7743A16EB1E3A3DC6017B39053D16EB153D3D3D4B
+S123EB00C7877C391E7C391C7B39197C391A7B39107C390E3DF6390E26013DC6013D793948
+S123EB20193D3B36B745E600C1FF2607B75416EC6C2055B6390E0420CDC1FE2244C1F32561
+S123EB400EC1F62221C0F38716F9CD4D3F3846C1CC6B802526C1D22222C0CC8716F9CD7F81
+S123EB6086867863716AC1FA6B80250FC1FE220BC0FA8716F9CD296F30373EE680C1C92798
+S123EB803A2062EC8116ECFF2060EC8116ED4D2059EC8116ECE52052EC8116EDA2204BEC62
+S123EBA08116ECC32044EC8116ECBF203DEC8116ECA52036EC8116EC95202FB75416EDE66B
+S123EBC02028EC8116EE292021EC8116EDCE201AEC8116EE842013EC8116EEAE200CEC81B6
+S123EBE016EEBC2005C62016EC5CF63919042105C61016EC5CC6017B3919CC39113BFC3928
+S123EC001A16EC091B821B833D3BEC843BEC8216EAE51B843D6CAD69822013EE8BE600EBBD
+S123EC20826B82EE89EC8B16F8ED6C8B6E89EC87EE85343B16F8F26C8B6E89C7873B3BEC97
+S123EC4084EE8616F8D41B8426D1E68287EE806C02C76C00521B833D79390F3D37C6FE7BA1
+S123EC603911327A391250877C391A3D07EACCFF017B390EC77C39111C3912107B39131C06
+S123EC8039130186087C3914527C39167B3918B7047C391A3D79390E07BEC6FF7B391150BD
+S123ECA0877C391A3D86FFC77C3911F6390F7B3913C7877C39147B3916C6067C391A3DC726
+S123ECC006EC5C1803E83B391EC7877C391C437C3911877C3913C6077C3917C77C3915C6E6
+S123ECE0087C391A3D3BC6FF7B3911EE80EC047C391CEC067C391EC601877C391A3A3D3B74
+S123ED0036B745E601C1072307C62216EC5C203ACD3912356B82C7873BFD391E35FD391CA6
+S123ED2035E68816EED91B88C6FF7B3911EE81E60187B745F3391E7C391ECC0000F9391D11
+S123ED40B9391C7C391C087E391A1B833D3BB745E601C1072307C62216EC5C2043ED047DF5
+S123ED60391C37EC067C391ECC39123BC7873BFC391E3B35E6888716EED91B88C6FF7B39B2
+S123ED8011EE81E60187B745F3391E7C391ECC0000F9391DB9391C7C391C087E391A1B81F9
+S123EDA03A3D3BC6FF7B3911FC391E3BFC391C3BEE84EC063BEC043BCC391516EC157B394A
+S123EDC012C7877C3913C6087C391A1B8A3D86FFC77C3911CE00087E3913877C39157B39D1
+S123EDE017097E391A3D3BFC391E3BFC391C3BC607873BC73BEC88C3000116F4A91B880469
+S123EE006107C63116EC5C201EC6FF7B3911FC391EC300077C391EFC391CC90089007C3921
+S123EE201CC601877C391A3A3D3BB745E601C1062304C622203086FF7A3911CD00017D390D
+S123EE401A04610816F4D50461382018FD391E35FD391C35873BC73B1902B7C616F4A91B39
+S123EE6088046107C63116EC5C2017EE80E60187F3391E7C391ECC0000F9391DB9391C7C70
+S123EE80391C3A3D3BFC391E3BFC391C3BEE84EC06EE0416F4BF1B84046107C63116EC5CCE
+S123EEA0200AC6FF7B391150877C391A3A3D16EF00C6FF7B391150877C391A3DC63106EC22
+S123EEC05C3B16F4D104410F16EAE416F4FDFCE7FE6C8015F300003A3D6CACEC8C6C82EEC5
+S123EEE088200DED82E6306B706D823416EAFF30ED80341A5F6E828D00003026E61B843DF8
+S123EF0006F5411B9D6982CCFF016B81507C39227C39207C3B267C3B241C010303F6010385
+S123EF20C403527B3D3E1D0103E36980E68087B745E68108B75613B745CC1F4018151AE10A
+S123EF40698E00302212E681C1082605A6808A408FA6807A0100201C6280E680C13F23CC64
+S123EF60E68204010FCCE9723BCC017CCE000016F6C41B821B833D1B983BFCE843ACF0108F
+S123EF8022442608FCE845ACF012223AECF012E38E3BEC8EE9F013A9F012B7453A16F8F2C5
+S123EFA03BFCE8DDF3E8E13BFCE8DBF9E8E0B9E8DFB7D43BEC8216F8F23B34EC88EE8416BB
+S123EFC0F8D41B862303C72061FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC828302006C00
+S123EFE0883AC20082006C84EDF014EEF012C60916F8C3B746C60916F8B26C8A6E88EE86AA
+S123F00034ACB3260BEC86AC822605CC3B242003CC39203BEEF01434EEF01434EE8634ECCF
+S123F020F016EEF01416F2CF1B881B8A3D1B943B34EDF014EEF012C60916F8C3B746C6090D
+S123F04016F8B26C8E6E8CBEE84318250099FCE843AC8C2607FCE845AC8E2238ECF014E31D
+S123F060823BEC82E9F015A9F014B7453A16F8F23BFCE8DDF3E8E13BFCE8DBF9E8E0B9E87C
+S123F080DFB7D43BEC8216F8F23B34EC88EE8416F8D41B862251ECF014A38E3BECF014E2E0
+S123F0A08FA28E3BEC82E3866C8C3AE983A9826C88C609EE88ED8A16F8C36C86EC8A840144
+S123F0C08C00001B822705EE84086E846D8A202E16EAFFC64037EC8F3BEC8F3BCC55AA169D
+S123F0E0F4521B85046103C7201CEC8EC302006C8EEC8CC90089006C8CEE8A086E8AEC8AD2
+S123F100AC8425CCC6011BF0103DC7876CACFE3B2604A509FE3B2404A503522051CE018019
+S123F1206E828737E383B745E6E23B2887E3816C813352C18025EB61816180EE80086E80BB
+S123F140FCE8DDF3E8E13BFCE8DBF9E8E0B9E8DF3BEC82830082B7453AC2008200343BC696
+S123F16002873BC73B1A8AB75416EF771B8A1B843D1B96C7876C88FCE8DDF3E8E13BFCE88A
+S123F180DBF9E8E0B9E8DF3BEC828300826C863AC20082006C82FCE8DDF3E8E16C80FCE8F6
+S123F1A0DBF9E8E0B9E8DF3BEC828300806C8A3AC20082006C86C71B828737E3873BCC008A
+S123F1C000E988A987B7453A16F40487E3896C893352C18025E3EC82EE8016F404B710C718
+S123F1E03BEC84EE8216F8ED16F40487E380E38A1B822603C60121C71B8A3DFC3B2604A434
+S123F20006FC3B24048409CC3B2416F38C044115FC392204A406FC392004840BCC392016B6
+S123F220F38C046102C73DC752C11625FBC6013D6CAD348401044403C72043EE87EC02AC76
+S123F240822606EC00AC802733EC806C00EC826C02D6306B84EC82EE8016F4215B30EE87DA
+S123F2601A0434C7873BEC86EE8416F42D3BC7873B860216EED91B88E6845B30C6011B856C
+S123F2803D3B34EC868C3B242607CC39206C862027FCE8DDAC822618FCE8DBAC802611CCBB
+S123F2A03B246C86FEE8DD6E82FEE8DB6E802008EC8616F38C04410FEC863BEC84EE821671
+S123F2C0F2301B82046103C7878FEC861B843D1B983B34EDF012EEF010C60916F8C3B7463C
+S123F2E0C60916F8B26C866E84EEF014EC0204A412EC0004A40D34EC88EE8616F2301B826B
+S123F300044160EEF014EC02AC862606EC00AC84270F34EC88EE8616F2811B826CF01427DB
+S123F32042EEF014ECF012A3021A041AE66E88EC8E6C8A16EAFFEEF0141904EC8835A3B173
+S123F3408C0200252634EC88C30200B745EC86C9008900B746B754B76516F2811B826CF0FD
+S123F360142603C72023C300046C88EE8AE630ED886B706D886E8AEC82EE8016F8F26C82F2
+S123F3806E800474AE26ACC6011B8C3D1B973BC6016B8AEE80EC0204A408EC0004A403C7C5
+S123F3A0205FC7876C88EC8859B746EE80E3026C84CC0000E901A9006C82B75419EEEC44EC
+S123F3C06C8616EAFFC62037EC853BEE8534EC8B16F4521B85044119EC84EE8216F404E128
+S123F3E086260EEC84EE8216F8ED16F404E1872704698A200AEE88086E888E010025A7E601
+S123F4008A1B8B3D3B34D63037EC8316F4215B30EC83EE8116F42DB745E600325A301B8458
+S123F4203D3B34C60EED8216F8C31B843D843FC380003D3BC787B74537E6E2E8E36BE23D10
+S123F440283352C11625EECC3D286C8015F300003A3D6CAC6982D6306B83EC88EE8607C1CE
+S123F4605B301D010303545451C403FA01037B0103C6307B0105B6010584808180261EEC34
+S123F48088EE8607A8EE80B7466E40E68A7B010607A11F010530022004C6016B82E6835B17
+S123F4A030E6821B843D06EF033BEC8A3BEC8A3BEC8A3BEC8A3BEC8816EF771B88303D3BA2
+S123F4C034EC883BEC883BEC8616F02D1B841B843D16F1713D16F10A0461013D16F1FB3DCE
+S123F4E016F4FD4C4001C6015B4EDC44C35DC05C504C4680C7877C3D417C3D3F3D79004C04
+S123F50079004679004D79004079004779004879004979004A79004B3D4F4E011AC6015BC8
+S123F5204EDC50C35DC05C50FC3D41FE3D3F16F8ED7C3D417E3D3F3D07DFFC3D41FE3D3FC7
+S123F5403DCF390016E82906E9DAFEE78005003DFEE78205003DFEE78405003DFEE7860507
+S123F560003DFEE78805003DFEE78A05003DFEE78C05003DFEE78E05003DFEE79005003DCB
+S123F580FEE79205003DFEE79405003DFEE79605003DFEE79805003DFEE79A05003DFEE7D1
+S123F5A09C05003DFEE79E05003DFEE7A005003DFEE7A205003DFEE7A405003DFEE7A605B9
+S123F5C0003DFEE7A805003DFEE7AA05003DFEE7AC05003DFEE7AE05003DFEE7B005003DCB
+S123F5E0FEE7B205003DFEE7B405003DFEE7B605003DFEE7B805003DFEE7BA05003DFEE7D1
+S123F600BC05003DFEE7BE05003DFEE7C005003DFEE7C205003DFEE7C405003DFEE7C60598
+S123F620003DFEE7C805003DFEE7CA05003DFEE7CC05003DFEE7CE05003DFEE7D005003DCA
+S123F640FEE7D205003DFEE7D405003DFEE7D605003DFEE7D805003DFEE7DA05003DFEE7D0
+S123F660DC05003DFEE7DE05003DFEE7E005003DFEE7E205003DFEE7E405003DFEE7E60578
+S123F680003DFEE7E805003DFEE7EA05003DFEE7EC05003DFEE7EE05003DFEE7F005003DCA
+S123F6A0FEE7F205003DFEE7F405003DFEE7F605003DFEE7F805003DFEE7FA05003DFEE7D0
+S123F6C0FC05003D3B34EC867C3D43EC827E3D457C3D4716EAFF20FB1B96C6017B01401F30
+S123F6E0014101FBC6807B0141CC01F43B1A82341A85B75416F8491B8404010ECCE9A73BAF
+S123F700C6F587B70516F6C41B82E6807B0142E6817B01431D014B30CC06676C88C7876CB0
+S123F720866C846C827B0150C6087B0151C60C7B0152C6CE7B01537A0154C6107B01557A07
+S123F74001567A0157C6CC7B0158C6E07B01597A015A7A015B7A015CC6077B015D7A015E9A
+S123F7607A015F1D0140011E014101FBC6017B014A1B8A3D371E0146010FCCE9A73BCC0171
+S123F78036CE000016F6C41B82CC20FC7B01707A0171790172790173E6807B017CC7201006
+S123F7A08737B746E384B745E6006BEA01743352E18025ECC6017B0146200316EAFF1F01B5
+S123F7C04601F8323D6CA869861F014401761E01610810FC016049494949496C84C7876C8D
+S123F7E0822030FE0162FC0160C4078749B7C54656CD00003BFC0160C4E03BC60334EE8211
+S123F80016F8C3EA85AA846C8AB754EA81AA806C881B86EC848C06672626EC822622C60119
+S123F8206B86B6016C840F6A87C720108737B745E381B746E6E201646B403352E18725EC44
+S123F8401D0144FEE6861B883D6CAC3B6984E6848759B745E6E2E8F987B746E6E2E8FA1982
+S123F860EE02B764ED8A136C80CC1F40B756EE80181004642ECC1F40EE801810B7516B85E6
+S123F8802721C140221D53EE886B00E6EAE8FA53861012A6EAE8F94337AAB0EE826A00C616
+S123F8A001200C16EAFF6284E684C11225A0C71B863D87D7B7C6270A59B7C55545B7C50490
+S123F8C036F63D87D7B7C6270AB7C549B7C546560436F63DAC84270E34B7C5E285A284B70C
+S123F8E0C510FB302002AE82311B84054004A401083D046401098300013D87C76C82EC8CC8
+S123F900261FEE8EED86EC8811280DEC86CD0000116D82B746EC88116D846C8887C76C860F
+S123F9203D972709EE86B7C5CD00002008EE8DE686ED87B7C61135ECF010133B35ECF0125F
+S123F940ED8413E3B130B7C5CD0000356581A38CB7C5E28BA28A310446113669AF3137323F
+S123F9603433EEF01011B76532201F252A046403044539E78E2706EE8E87C7200BB7C5360B
+S123F9803469AFEEF013313A1810083A34A3B1B74620A33102209F4151B7C5415104A401CE
+S123F9A008AE8E22EE2505ACF01024E7316D84698369826C886E863D3B341B9C16F8FA3092
+S117F9C0ECB5EDB505403BB704B7053A3D30E6E605E5000098
+S10FFEF0CF390016E82916EAF406E9DA16
+S123FF80F54AF550F556F55CF562F568F56EF574F57AF580F586F58CF592F598F59EF5A49D
+S123FFA0F5AAF5B0F5B6F5BCF5C2F5C8F5CEF5D4F5DAF5E0F5E6F5ECF5F2F5F8F5FEF6047C
+S123FFC0F60AF610F616F61CF622F628F62EF634F63AF640F646F64CF652F658F65EF6644D
+S123FFE0F66AF670F676F67CF682F688F68EF694F69AF6A0F6A6F6ACF6B2F6B8F6BEF541B1
S9030000FC
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.map b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.map
index 4d988fef..eac4f4af 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.map
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/bin/openblt_evbplus_dragon12p.map
@@ -24,10 +24,10 @@ cpu.c.o Model: SMALL, Lang: ANSI-C
flash.c.o Model: SMALL, Lang: ANSI-C
nvm.c.o Model: SMALL, Lang: ANSI-C
timer.c.o Model: SMALL, Lang: ANSI-C
-uart.c.o Model: SMALL, Lang: ANSI-C
start12.c.o Model: SMALL, Lang: ANSI-C
vectors.c.o Model: SMALL, Lang: ANSI-C
assert.c.o Model: SMALL, Lang: ANSI-C
+can.c.o Model: SMALL, Lang: ANSI-C
*********************************************************************************************
STARTUP SECTION
@@ -36,8 +36,8 @@ Entry point: 0xE829 (_Startup)
_startupData is allocated at 0xE831 and uses 6 Bytes
extern struct _tagStartup {
unsigned nofZeroOut 1
- _Range pZeroOut 0x3900 1276
- _Copy *toCopyDownBeg 0xF8C3
+ _Range pZeroOut 0x3900 1097
+ _Copy *toCopyDownBeg 0xF9D2
} _startupData;
*********************************************************************************************
@@ -46,10 +46,10 @@ Section Name Size Type From To Segment
---------------------------------------------------------------------------------------------
.init 49 R 0xE800 0xE830 ROM_C000
.startData 10 R 0xE831 0xE83A ROM_C000
-.rodata 190 R 0xE83B 0xE8F8 ROM_C000
-.rodata1 190 R 0xE8F9 0xE9B6 ROM_C000
-.text 3564 R 0xE9B7 0xF7A2 ROM_C000
-.copy 2 R 0xF8C3 0xF8C4 ROM_C000
+.rodata 226 R 0xE83B 0xE91C ROM_C000
+.rodata1 189 R 0xE91D 0xE9D9 ROM_C000
+.text 3800 R 0xE9DA 0xF8B1 ROM_C000
+.copy 2 R 0xF9D2 0xF9D3 ROM_C000
ENTRY 12 R 0xFEF0 0xFEFB ENTRY_SEG
.stack 256 R/W 0x3800 0x38FF RAM
.abs_section_8 1 N/I 0x8 0x8 .absSeg0
@@ -394,12 +394,12 @@ ENTRY 12 R 0xFEF0 0xFEFB ENTRY_SEG
.abs_section_2ae 2 N/I 0x2AE 0x2AF .absSeg339
.abs_section_2be 2 N/I 0x2BE 0x2BF .absSeg340
.abs_section_ff80 128 R 0xFF80 0xFFFF .absSeg341
-.bss 1276 R/W 0x3900 0x3DFB RAM
-RUNTIME 288 R 0xF7A3 0xF8C2 ROM_C000
+.bss 1097 R/W 0x3900 0x3D48 RAM
+RUNTIME 288 R 0xF8B2 0xF9D1 ROM_C000
Summary of section sizes per section type:
-READ_ONLY (R): 1151 (dec: 4433)
-READ_WRITE (R/W): 5FC (dec: 1532)
+READ_ONLY (R): 1260 (dec: 4704)
+READ_WRITE (R/W): 549 (dec: 1353)
NO_INIT (N/I): 190 (dec: 400)
*********************************************************************************************
@@ -413,15 +413,15 @@ OBJECT-ALLOCATION SECTION
---------------------------------------------------------------------------------------------
MODULE: -- rtshc12.c.o (ansisi.lib) --
- PROCEDURES:
- _LSHL F7A3 11 17 3 RUNTIME
- _LSHRU F7B4 11 17 5 RUNTIME
- _LCMP F7C5 19 25 4 RUNTIME
- _LINC F7DE 5 5 4 RUNTIME
- _LDEC F7E3 8 8 6 RUNTIME
- _lDivMod F7EB BE 190 1 RUNTIME
- _LDIVU F8A9 E 14 1 RUNTIME
- _ILSEXT F8B7 7 7 1 RUNTIME
- _CASE_DIRECT_BYTE F8BE 5 5 3 RUNTIME
+ _LSHL F8B2 11 17 3 RUNTIME
+ _LSHRU F8C3 11 17 6 RUNTIME
+ _LCMP F8D4 19 25 4 RUNTIME
+ _LINC F8ED 5 5 4 RUNTIME
+ _LDEC F8F2 8 8 6 RUNTIME
+ _lDivMod F8FA BE 190 1 RUNTIME
+ _LDIVU F9B8 E 14 1 RUNTIME
+ _ILSEXT F9C6 7 7 1 RUNTIME
+ _CASE_DIRECT_BYTE F9CD 5 5 3 RUNTIME
- VARIABLES:
MODULE: -- mc9s12dg256.c.o --
- PROCEDURES:
@@ -769,125 +769,113 @@ MODULE: -- mc9s12dg256.c.o --
_CAN4TXTSR 2BE 2 2 0 .abs_section_2be
MODULE: -- main.c.o --
- PROCEDURES:
- main E9B7 B 11 3 .text
- Init E9C2 79 121 1 .text
+ main E9DA B 11 3 .text
+ Init E9E5 79 121 1 .text
- VARIABLES:
- STRING.C..Work.software.Ope.1 E8F9 55 85 1 .rodata1
+ STRING.C..Work.software.Ope.1 E91D 55 85 1 .rodata1
MODULE: -- backdoor.c.o --
- PROCEDURES:
- BackDoorInit EA3B 11 17 1 .text
- BackDoorCheck EA4C 31 49 2 .text
+ BackDoorInit EA5E 11 17 1 .text
+ BackDoorCheck EA6F 31 49 2 .text
- VARIABLES:
backdoorOpen 3900 1 1 3 .bss
backdoorOpenTime 3901 4 4 4 .bss
MODULE: -- boot.c.o --
- PROCEDURES:
- BootInit EA7D F 15 1 .text
- BootTask EA8C C 12 1 .text
+ BootInit EAA0 F 15 1 .text
+ BootTask EAAF C 12 1 .text
- VARIABLES:
MODULE: -- com.c.o --
- PROCEDURES:
- ComInit EA98 19 25 1 .text
- ComTask EAB1 10 16 1 .text
- ComFree EAC1 1 1 1 .text
- ComTransmitPacket EAC2 F 15 1 .text
- ComSetConnectEntryState EAD1 6 6 1 .text
- ComIsConnected EAD7 4 4 1 .text
+ ComInit EABB 19 25 1 .text
+ ComTask EAD4 10 16 1 .text
+ ComFree EAE4 1 1 1 .text
+ ComTransmitPacket EAE5 F 15 1 .text
+ ComSetConnectEntryState EAF4 6 6 1 .text
+ ComIsConnected EAFA 4 4 1 .text
- VARIABLES:
comEntryStateConnect 3905 1 1 2 .bss
- xcpCtoReqPacket.1 3906 40 64 2 .bss
+ xcpCtoReqPacket.1 3906 8 8 2 .bss
MODULE: -- cop.c.o --
- PROCEDURES:
- CopInit EADB 1 1 1 .text
- CopService EADC 1 1 8 .text
+ CopInit EAFE 1 1 1 .text
+ CopService EAFF 1 1 8 .text
- VARIABLES:
MODULE: -- xcp.c.o --
- PROCEDURES:
- XcpInit EADD 15 21 1 .text
- XcpIsConnected EAF2 9 9 1 .text
- XcpPacketTransmitted EAFB 4 4 1 .text
- XcpPacketReceived EAFF E7 231 2 .text
- XcpTransmitPacket EBE6 C 12 1 .text
- XcpComputeChecksum EBF2 43 67 1 .text
- XcpProtectResources EC35 4 4 2 .text
- XcpSetCtoError EC39 10 16 9 .text
- XcpCmdConnect EC49 2A 42 1 .text
- XcpCmdDisconnect EC73 10 16 1 .text
- XcpCmdGetStatus EC83 1A 26 1 .text
- XcpCmdSynch EC9D 4 4 1 .text
- XcpCmdGetId ECA1 22 34 1 .text
- XcpCmdSetMta ECC3 1A 26 1 .text
- XcpCmdUpload ECDD 4E 78 1 .text
- XcpCmdShortUpload ED2B 55 85 1 .text
- XcpCmdBuildCheckSum ED80 2C 44 1 .text
- XcpCmdProgramStart EDAC 19 25 1 .text
- XcpCmdProgramMax EDC5 43 67 1 .text
- XcpCmdProgram EE08 5B 91 1 .text
- XcpCmdProgramClear EE63 2A 42 1 .text
- XcpCmdProgramReset EE8D E 14 1 .text
- XcpCmdProgramPrepare EE9B 5 5 1 .text
+ XcpInit EB00 15 21 1 .text
+ XcpIsConnected EB15 9 9 1 .text
+ XcpPacketTransmitted EB1E 4 4 1 .text
+ XcpPacketReceived EB22 E7 231 2 .text
+ XcpTransmitPacket EC09 C 12 1 .text
+ XcpComputeChecksum EC15 43 67 1 .text
+ XcpProtectResources EC58 4 4 2 .text
+ XcpSetCtoError EC5C 10 16 9 .text
+ XcpCmdConnect EC6C 29 41 1 .text
+ XcpCmdDisconnect EC95 10 16 1 .text
+ XcpCmdGetStatus ECA5 1A 26 1 .text
+ XcpCmdSynch ECBF 4 4 1 .text
+ XcpCmdGetId ECC3 22 34 1 .text
+ XcpCmdSetMta ECE5 1A 26 1 .text
+ XcpCmdUpload ECFF 4E 78 1 .text
+ XcpCmdShortUpload ED4D 55 85 1 .text
+ XcpCmdBuildCheckSum EDA2 2C 44 1 .text
+ XcpCmdProgramStart EDCE 18 24 1 .text
+ XcpCmdProgramMax EDE6 43 67 1 .text
+ XcpCmdProgram EE29 5B 91 1 .text
+ XcpCmdProgramClear EE84 2A 42 1 .text
+ XcpCmdProgramReset EEAE E 14 1 .text
+ XcpCmdProgramPrepare EEBC 5 5 1 .text
- VARIABLES:
xcpStationId E83B 8 8 1 .rodata
- xcpInfo 3946 4A 74 102 .bss
+ xcpInfo 390E 12 18 102 .bss
MODULE: -- cpu.c.o --
- PROCEDURES:
- CpuStartUserProgram EEA0 18 24 1 .text
- CpuMemCopy EEB8 27 39 4 .text
- CpuReset EEDF 3 3 1 .text
+ CpuStartUserProgram EEC1 18 24 1 .text
+ CpuMemCopy EED9 27 39 3 .text
+ CpuReset EF00 3 3 1 .text
- VARIABLES:
MODULE: -- flash.c.o --
- PROCEDURES:
- FlashInit EEE2 74 116 1 .text
- FlashWrite EF56 B6 182 2 .text
- FlashErase F00C DD 221 1 .text
- FlashWriteChecksum F0E9 67 103 1 .text
- FlashVerifyChecksum F150 8A 138 1 .text
- FlashDone F1DA 35 53 1 .text
- FlashInitBlock F20F 51 81 2 .text
- FlashSwitchBlock F260 4E 78 2 .text
- FlashAddToBlock F2AE BD 189 1 .text
- FlashWriteBlock F36B 78 120 3 .text
- FlashGetLinearAddrByte F3E3 1D 29 5 .text
- FlashGetPhysPage F400 C 12 3 .text
- FlashGetPhysAddr F40C 6 6 3 .text
- FlashExecuteCommand F412 1F 31 1 .text
- FlashOperate F431 54 84 2 .text
+ FlashInit EF03 74 116 1 .text
+ FlashWrite EF77 B6 182 2 .text
+ FlashErase F02D DD 221 1 .text
+ FlashWriteChecksum F10A 67 103 1 .text
+ FlashVerifyChecksum F171 8A 138 1 .text
+ FlashDone F1FB 35 53 1 .text
+ FlashInitBlock F230 51 81 2 .text
+ FlashSwitchBlock F281 4E 78 2 .text
+ FlashAddToBlock F2CF BD 189 1 .text
+ FlashWriteBlock F38C 78 120 3 .text
+ FlashGetLinearAddrByte F404 1D 29 5 .text
+ FlashGetPhysPage F421 C 12 3 .text
+ FlashGetPhysAddr F42D 6 6 3 .text
+ FlashExecuteCommand F433 1F 31 1 .text
+ FlashOperate F452 54 84 2 .text
- VARIABLES:
flashLayout E843 A0 160 39 .rodata
flashExecCmd E8E3 16 22 1 .rodata
- STRING.C..Work.software.Ope.1 E94E 35 53 1 .rodata1
- blockInfo 3990 204 516 7 .bss
- bootBlockInfo 3B94 204 516 11 .bss
- flashExecCmdRam 3D98 16 22 2 .bss
- flashMaxNrBlocks 3DAE 1 1 1 .bss
+ STRING.C..Work.software.Ope.1 E972 35 53 1 .rodata1
+ blockInfo 3920 204 516 7 .bss
+ bootBlockInfo 3B24 204 516 11 .bss
+ flashExecCmdRam 3D28 16 22 2 .bss
+ flashMaxNrBlocks 3D3E 1 1 1 .bss
MODULE: -- nvm.c.o --
- PROCEDURES:
- NvmInit F485 3 3 1 .text
- NvmWrite F488 16 22 2 .text
- NvmErase F49E 12 18 1 .text
- NvmVerifyChecksum F4B0 4 4 1 .text
- NvmDone F4B4 B 11 1 .text
+ NvmInit F4A6 3 3 1 .text
+ NvmWrite F4A9 16 22 2 .text
+ NvmErase F4BF 12 18 1 .text
+ NvmVerifyChecksum F4D1 4 4 1 .text
+ NvmDone F4D5 B 11 1 .text
- VARIABLES:
MODULE: -- timer.c.o --
- PROCEDURES:
- TimerInit F4BF 1D 29 1 .text
- TimerReset F4DC 1C 28 2 .text
- TimerUpdate F4F8 1F 31 2 .text
- TimerGet F517 9 9 2 .text
+ TimerInit F4E0 1D 29 1 .text
+ TimerReset F4FD 1C 28 2 .text
+ TimerUpdate F519 1F 31 2 .text
+ TimerGet F538 9 9 2 .text
- VARIABLES:
- millisecond_counter 3DAF 4 4 8 .bss
-MODULE: -- uart.c.o --
-- PROCEDURES:
- UartInit F520 19 25 1 .text
- UartTransmitPacket F539 5E 94 1 .text
- UartReceivePacket F597 50 80 1 .text
- UartReceiveByte F5E7 11 17 2 .text
- UartTransmitByte F5F8 14 20 2 .text
-- VARIABLES:
- STRING.C..Work.software.Ope.1 E983 34 52 3 .rodata1
- xcpCtoRxInProgress.4 3DB3 1 1 3 .bss
- xcpCtoReqPacket.2 3DB4 41 65 4 .bss
- xcpCtoRxLength.3 3DF5 1 1 5 .bss
+ millisecond_counter 3D3F 4 4 8 .bss
MODULE: -- start12.c.o --
- PROCEDURES:
Init E800 29 41 1 .init
@@ -898,79 +886,88 @@ MODULE: -- start12.c.o --
__SEG_END_SSTACK 3900 0 0 3
MODULE: -- vectors.c.o --
- PROCEDURES:
- reset_handler F60C 9 9 2 .text
- Vector0_handler F615 6 6 1 .text
- Vector1_handler F61B 6 6 1 .text
- Vector2_handler F621 6 6 1 .text
- Vector3_handler F627 6 6 1 .text
- Vector4_handler F62D 6 6 1 .text
- Vector5_handler F633 6 6 1 .text
- Vector6_handler F639 6 6 1 .text
- Vector7_handler F63F 6 6 1 .text
- Vector8_handler F645 6 6 1 .text
- Vector9_handler F64B 6 6 1 .text
- Vector10_handler F651 6 6 1 .text
- Vector11_handler F657 6 6 1 .text
- Vector12_handler F65D 6 6 1 .text
- Vector13_handler F663 6 6 1 .text
- Vector14_handler F669 6 6 1 .text
- Vector15_handler F66F 6 6 1 .text
- Vector16_handler F675 6 6 1 .text
- Vector17_handler F67B 6 6 1 .text
- Vector18_handler F681 6 6 1 .text
- Vector19_handler F687 6 6 1 .text
- Vector20_handler F68D 6 6 1 .text
- Vector21_handler F693 6 6 1 .text
- Vector22_handler F699 6 6 1 .text
- Vector23_handler F69F 6 6 1 .text
- Vector24_handler F6A5 6 6 1 .text
- Vector25_handler F6AB 6 6 1 .text
- Vector26_handler F6B1 6 6 1 .text
- Vector27_handler F6B7 6 6 1 .text
- Vector28_handler F6BD 6 6 1 .text
- Vector29_handler F6C3 6 6 1 .text
- Vector30_handler F6C9 6 6 1 .text
- Vector31_handler F6CF 6 6 1 .text
- Vector32_handler F6D5 6 6 1 .text
- Vector33_handler F6DB 6 6 1 .text
- Vector34_handler F6E1 6 6 1 .text
- Vector35_handler F6E7 6 6 1 .text
- Vector36_handler F6ED 6 6 1 .text
- Vector37_handler F6F3 6 6 1 .text
- Vector38_handler F6F9 6 6 1 .text
- Vector39_handler F6FF 6 6 1 .text
- Vector40_handler F705 6 6 1 .text
- Vector41_handler F70B 6 6 1 .text
- Vector42_handler F711 6 6 1 .text
- Vector43_handler F717 6 6 1 .text
- Vector44_handler F71D 6 6 1 .text
- Vector45_handler F723 6 6 1 .text
- Vector46_handler F729 6 6 1 .text
- Vector47_handler F72F 6 6 1 .text
- Vector48_handler F735 6 6 1 .text
- Vector49_handler F73B 6 6 1 .text
- Vector50_handler F741 6 6 1 .text
- Vector51_handler F747 6 6 1 .text
- Vector52_handler F74D 6 6 1 .text
- Vector53_handler F753 6 6 1 .text
- Vector54_handler F759 6 6 1 .text
- Vector55_handler F75F 6 6 1 .text
- Vector56_handler F765 6 6 1 .text
- Vector57_handler F76B 6 6 1 .text
- Vector58_handler F771 6 6 1 .text
- Vector59_handler F777 6 6 1 .text
- Vector60_handler F77D 6 6 1 .text
- Vector61_handler F783 6 6 1 .text
- Vector62_handler F789 6 6 1 .text
+ reset_handler F541 9 9 2 .text
+ Vector0_handler F54A 6 6 1 .text
+ Vector1_handler F550 6 6 1 .text
+ Vector2_handler F556 6 6 1 .text
+ Vector3_handler F55C 6 6 1 .text
+ Vector4_handler F562 6 6 1 .text
+ Vector5_handler F568 6 6 1 .text
+ Vector6_handler F56E 6 6 1 .text
+ Vector7_handler F574 6 6 1 .text
+ Vector8_handler F57A 6 6 1 .text
+ Vector9_handler F580 6 6 1 .text
+ Vector10_handler F586 6 6 1 .text
+ Vector11_handler F58C 6 6 1 .text
+ Vector12_handler F592 6 6 1 .text
+ Vector13_handler F598 6 6 1 .text
+ Vector14_handler F59E 6 6 1 .text
+ Vector15_handler F5A4 6 6 1 .text
+ Vector16_handler F5AA 6 6 1 .text
+ Vector17_handler F5B0 6 6 1 .text
+ Vector18_handler F5B6 6 6 1 .text
+ Vector19_handler F5BC 6 6 1 .text
+ Vector20_handler F5C2 6 6 1 .text
+ Vector21_handler F5C8 6 6 1 .text
+ Vector22_handler F5CE 6 6 1 .text
+ Vector23_handler F5D4 6 6 1 .text
+ Vector24_handler F5DA 6 6 1 .text
+ Vector25_handler F5E0 6 6 1 .text
+ Vector26_handler F5E6 6 6 1 .text
+ Vector27_handler F5EC 6 6 1 .text
+ Vector28_handler F5F2 6 6 1 .text
+ Vector29_handler F5F8 6 6 1 .text
+ Vector30_handler F5FE 6 6 1 .text
+ Vector31_handler F604 6 6 1 .text
+ Vector32_handler F60A 6 6 1 .text
+ Vector33_handler F610 6 6 1 .text
+ Vector34_handler F616 6 6 1 .text
+ Vector35_handler F61C 6 6 1 .text
+ Vector36_handler F622 6 6 1 .text
+ Vector37_handler F628 6 6 1 .text
+ Vector38_handler F62E 6 6 1 .text
+ Vector39_handler F634 6 6 1 .text
+ Vector40_handler F63A 6 6 1 .text
+ Vector41_handler F640 6 6 1 .text
+ Vector42_handler F646 6 6 1 .text
+ Vector43_handler F64C 6 6 1 .text
+ Vector44_handler F652 6 6 1 .text
+ Vector45_handler F658 6 6 1 .text
+ Vector46_handler F65E 6 6 1 .text
+ Vector47_handler F664 6 6 1 .text
+ Vector48_handler F66A 6 6 1 .text
+ Vector49_handler F670 6 6 1 .text
+ Vector50_handler F676 6 6 1 .text
+ Vector51_handler F67C 6 6 1 .text
+ Vector52_handler F682 6 6 1 .text
+ Vector53_handler F688 6 6 1 .text
+ Vector54_handler F68E 6 6 1 .text
+ Vector55_handler F694 6 6 1 .text
+ Vector56_handler F69A 6 6 1 .text
+ Vector57_handler F6A0 6 6 1 .text
+ Vector58_handler F6A6 6 6 1 .text
+ Vector59_handler F6AC 6 6 1 .text
+ Vector60_handler F6B2 6 6 1 .text
+ Vector61_handler F6B8 6 6 1 .text
+ Vector62_handler F6BE 6 6 1 .text
reset_connected_handler FEF0 C 12 0 ENTRY
- VARIABLES:
_vectab FF80 80 128 0 .abs_section_ff80
MODULE: -- assert.c.o --
- PROCEDURES:
- AssertFailure F78F 14 20 5 .text
+ AssertFailure F6C4 14 20 4 .text
- VARIABLES:
- assert_failure_file 3DF6 2 2 1 .bss
- assert_failure_line 3DF8 4 4 2 .bss
+ assert_failure_file 3D43 2 2 1 .bss
+ assert_failure_line 3D45 4 4 2 .bss
+MODULE: -- can.c.o --
+- PROCEDURES:
+ CanInit F6D8 9C 156 1 .text
+ CanTransmitPacket F774 51 81 1 .text
+ CanReceivePacket F7C5 84 132 1 .text
+ CanGetSpeedConfig F849 69 105 1 .text
+- VARIABLES:
+ canTiming E8F9 24 36 4 .rodata
+ STRING.C..Work.software.Ope.1 E9A7 33 51 2 .rodata1
*********************************************************************************************
MODULE STATISTIC
@@ -981,17 +978,17 @@ MODULE STATISTIC
main.c.o 0 132 85
backdoor.c.o 5 66 0
boot.c.o 0 27 0
- com.c.o 65 67 0
+ com.c.o 9 67 0
cop.c.o 0 2 0
- xcp.c.o 74 963 8
+ xcp.c.o 18 961 8
cpu.c.o 0 66 0
flash.c.o 1055 1443 235
nvm.c.o 0 58 0
timer.c.o 4 97 0
- uart.c.o 67 236 52
start12.c.o 0 49 0
vectors.c.o 0 399 128
assert.c.o 6 20 0
+ can.c.o 0 474 87
other 256 10 2
*********************************************************************************************
@@ -1010,8 +1007,7 @@ SECTION: ".text"
FlashVerifyChecksum FlashDone FlashInitBlock FlashSwitchBlock FlashAddToBlock
FlashWriteBlock FlashGetLinearAddrByte FlashGetPhysPage FlashGetPhysAddr
FlashExecuteCommand FlashOperate NvmInit NvmWrite NvmErase NvmVerifyChecksum
- NvmDone TimerInit TimerReset TimerUpdate TimerGet UartInit UartTransmitPacket
- UartReceivePacket UartReceiveByte UartTransmitByte reset_handler
+ NvmDone TimerInit TimerReset TimerUpdate TimerGet reset_handler
Vector0_handler Vector1_handler Vector2_handler Vector3_handler
Vector4_handler Vector5_handler Vector6_handler Vector7_handler
Vector8_handler Vector9_handler Vector10_handler Vector11_handler
@@ -1027,16 +1023,16 @@ SECTION: ".text"
Vector48_handler Vector49_handler Vector50_handler Vector51_handler
Vector52_handler Vector53_handler Vector54_handler Vector55_handler
Vector56_handler Vector57_handler Vector58_handler Vector59_handler
- Vector60_handler Vector61_handler Vector62_handler AssertFailure
+ Vector60_handler Vector61_handler Vector62_handler AssertFailure CanInit
+ CanTransmitPacket CanReceivePacket CanGetSpeedConfig
SECTION: ".bss"
backdoorOpen backdoorOpenTime comEntryStateConnect xcpCtoReqPacket.1 xcpInfo
blockInfo bootBlockInfo flashExecCmdRam flashMaxNrBlocks millisecond_counter
- xcpCtoRxInProgress.4 xcpCtoReqPacket.2 xcpCtoRxLength.3 assert_failure_file
- assert_failure_line
+ assert_failure_file assert_failure_line
SECTION: ".init"
Init _Startup
SECTION: ".rodata"
- xcpStationId flashLayout flashExecCmd
+ xcpStationId flashLayout flashExecCmd canTiming
SECTION: ".rodata1"
STRING.C..Work.software.Ope.1 STRING.C..Work.software.Ope.1
STRING.C..Work.software.Ope.1
@@ -2077,169 +2073,166 @@ OBJECT LIST SORTED BY ADDRESS
backdoorOpen 3900 1 1 3 .bss
backdoorOpenTime 3901 4 4 4 .bss
comEntryStateConnect 3905 1 1 2 .bss
- xcpCtoReqPacket.1 3906 40 64 2 .bss
- xcpInfo 3946 4A 74 102 .bss
- blockInfo 3990 204 516 7 .bss
- bootBlockInfo 3B94 204 516 11 .bss
- flashExecCmdRam 3D98 16 22 2 .bss
- flashMaxNrBlocks 3DAE 1 1 1 .bss
- millisecond_counter 3DAF 4 4 8 .bss
- xcpCtoRxInProgress.4 3DB3 1 1 3 .bss
- xcpCtoReqPacket.2 3DB4 41 65 4 .bss
- xcpCtoRxLength.3 3DF5 1 1 5 .bss
- assert_failure_file 3DF6 2 2 1 .bss
- assert_failure_line 3DF8 4 4 2 .bss
+ xcpCtoReqPacket.1 3906 8 8 2 .bss
+ xcpInfo 390E 12 18 102 .bss
+ blockInfo 3920 204 516 7 .bss
+ bootBlockInfo 3B24 204 516 11 .bss
+ flashExecCmdRam 3D28 16 22 2 .bss
+ flashMaxNrBlocks 3D3E 1 1 1 .bss
+ millisecond_counter 3D3F 4 4 8 .bss
+ assert_failure_file 3D43 2 2 1 .bss
+ assert_failure_line 3D45 4 4 2 .bss
Init E800 29 41 1 .init
_Startup E829 8 8 2 .init
xcpStationId E83B 8 8 1 .rodata
flashLayout E843 A0 160 39 .rodata
flashExecCmd E8E3 16 22 1 .rodata
- STRING.C..Work.software.Ope.1 E8F9 55 85 1 .rodata1
- STRING.C..Work.software.Ope.1 E94E 35 53 1 .rodata1
- STRING.C..Work.software.Ope.1 E983 34 52 3 .rodata1
- main E9B7 B 11 3 .text
- Init E9C2 79 121 1 .text
- BackDoorInit EA3B 11 17 1 .text
- BackDoorCheck EA4C 31 49 2 .text
- BootInit EA7D F 15 1 .text
- BootTask EA8C C 12 1 .text
- ComInit EA98 19 25 1 .text
- ComTask EAB1 10 16 1 .text
- ComFree EAC1 1 1 1 .text
- ComTransmitPacket EAC2 F 15 1 .text
- ComSetConnectEntryState EAD1 6 6 1 .text
- ComIsConnected EAD7 4 4 1 .text
- CopInit EADB 1 1 1 .text
- CopService EADC 1 1 8 .text
- XcpInit EADD 15 21 1 .text
- XcpIsConnected EAF2 9 9 1 .text
- XcpPacketTransmitted EAFB 4 4 1 .text
- XcpPacketReceived EAFF E7 231 2 .text
- XcpTransmitPacket EBE6 C 12 1 .text
- XcpComputeChecksum EBF2 43 67 1 .text
- XcpProtectResources EC35 4 4 2 .text
- XcpSetCtoError EC39 10 16 9 .text
- XcpCmdConnect EC49 2A 42 1 .text
- XcpCmdDisconnect EC73 10 16 1 .text
- XcpCmdGetStatus EC83 1A 26 1 .text
- XcpCmdSynch EC9D 4 4 1 .text
- XcpCmdGetId ECA1 22 34 1 .text
- XcpCmdSetMta ECC3 1A 26 1 .text
- XcpCmdUpload ECDD 4E 78 1 .text
- XcpCmdShortUpload ED2B 55 85 1 .text
- XcpCmdBuildCheckSum ED80 2C 44 1 .text
- XcpCmdProgramStart EDAC 19 25 1 .text
- XcpCmdProgramMax EDC5 43 67 1 .text
- XcpCmdProgram EE08 5B 91 1 .text
- XcpCmdProgramClear EE63 2A 42 1 .text
- XcpCmdProgramReset EE8D E 14 1 .text
- XcpCmdProgramPrepare EE9B 5 5 1 .text
- CpuStartUserProgram EEA0 18 24 1 .text
- CpuMemCopy EEB8 27 39 4 .text
- CpuReset EEDF 3 3 1 .text
- FlashInit EEE2 74 116 1 .text
- FlashWrite EF56 B6 182 2 .text
- FlashErase F00C DD 221 1 .text
- FlashWriteChecksum F0E9 67 103 1 .text
- FlashVerifyChecksum F150 8A 138 1 .text
- FlashDone F1DA 35 53 1 .text
- FlashInitBlock F20F 51 81 2 .text
- FlashSwitchBlock F260 4E 78 2 .text
- FlashAddToBlock F2AE BD 189 1 .text
- FlashWriteBlock F36B 78 120 3 .text
- FlashGetLinearAddrByte F3E3 1D 29 5 .text
- FlashGetPhysPage F400 C 12 3 .text
- FlashGetPhysAddr F40C 6 6 3 .text
- FlashExecuteCommand F412 1F 31 1 .text
- FlashOperate F431 54 84 2 .text
- NvmInit F485 3 3 1 .text
- NvmWrite F488 16 22 2 .text
- NvmErase F49E 12 18 1 .text
- NvmVerifyChecksum F4B0 4 4 1 .text
- NvmDone F4B4 B 11 1 .text
- TimerInit F4BF 1D 29 1 .text
- TimerReset F4DC 1C 28 2 .text
- TimerUpdate F4F8 1F 31 2 .text
- TimerGet F517 9 9 2 .text
- UartInit F520 19 25 1 .text
- UartTransmitPacket F539 5E 94 1 .text
- UartReceivePacket F597 50 80 1 .text
- UartReceiveByte F5E7 11 17 2 .text
- UartTransmitByte F5F8 14 20 2 .text
- reset_handler F60C 9 9 2 .text
- Vector0_handler F615 6 6 1 .text
- Vector1_handler F61B 6 6 1 .text
- Vector2_handler F621 6 6 1 .text
- Vector3_handler F627 6 6 1 .text
- Vector4_handler F62D 6 6 1 .text
- Vector5_handler F633 6 6 1 .text
- Vector6_handler F639 6 6 1 .text
- Vector7_handler F63F 6 6 1 .text
- Vector8_handler F645 6 6 1 .text
- Vector9_handler F64B 6 6 1 .text
- Vector10_handler F651 6 6 1 .text
- Vector11_handler F657 6 6 1 .text
- Vector12_handler F65D 6 6 1 .text
- Vector13_handler F663 6 6 1 .text
- Vector14_handler F669 6 6 1 .text
- Vector15_handler F66F 6 6 1 .text
- Vector16_handler F675 6 6 1 .text
- Vector17_handler F67B 6 6 1 .text
- Vector18_handler F681 6 6 1 .text
- Vector19_handler F687 6 6 1 .text
- Vector20_handler F68D 6 6 1 .text
- Vector21_handler F693 6 6 1 .text
- Vector22_handler F699 6 6 1 .text
- Vector23_handler F69F 6 6 1 .text
- Vector24_handler F6A5 6 6 1 .text
- Vector25_handler F6AB 6 6 1 .text
- Vector26_handler F6B1 6 6 1 .text
- Vector27_handler F6B7 6 6 1 .text
- Vector28_handler F6BD 6 6 1 .text
- Vector29_handler F6C3 6 6 1 .text
- Vector30_handler F6C9 6 6 1 .text
- Vector31_handler F6CF 6 6 1 .text
- Vector32_handler F6D5 6 6 1 .text
- Vector33_handler F6DB 6 6 1 .text
- Vector34_handler F6E1 6 6 1 .text
- Vector35_handler F6E7 6 6 1 .text
- Vector36_handler F6ED 6 6 1 .text
- Vector37_handler F6F3 6 6 1 .text
- Vector38_handler F6F9 6 6 1 .text
- Vector39_handler F6FF 6 6 1 .text
- Vector40_handler F705 6 6 1 .text
- Vector41_handler F70B 6 6 1 .text
- Vector42_handler F711 6 6 1 .text
- Vector43_handler F717 6 6 1 .text
- Vector44_handler F71D 6 6 1 .text
- Vector45_handler F723 6 6 1 .text
- Vector46_handler F729 6 6 1 .text
- Vector47_handler F72F 6 6 1 .text
- Vector48_handler F735 6 6 1 .text
- Vector49_handler F73B 6 6 1 .text
- Vector50_handler F741 6 6 1 .text
- Vector51_handler F747 6 6 1 .text
- Vector52_handler F74D 6 6 1 .text
- Vector53_handler F753 6 6 1 .text
- Vector54_handler F759 6 6 1 .text
- Vector55_handler F75F 6 6 1 .text
- Vector56_handler F765 6 6 1 .text
- Vector57_handler F76B 6 6 1 .text
- Vector58_handler F771 6 6 1 .text
- Vector59_handler F777 6 6 1 .text
- Vector60_handler F77D 6 6 1 .text
- Vector61_handler F783 6 6 1 .text
- Vector62_handler F789 6 6 1 .text
- AssertFailure F78F 14 20 5 .text
- _LSHL F7A3 11 17 3 RUNTIME
- _LSHRU F7B4 11 17 5 RUNTIME
- _LCMP F7C5 19 25 4 RUNTIME
- _LINC F7DE 5 5 4 RUNTIME
- _LDEC F7E3 8 8 6 RUNTIME
- _lDivMod F7EB BE 190 1 RUNTIME
- _LDIVU F8A9 E 14 1 RUNTIME
- _ILSEXT F8B7 7 7 1 RUNTIME
- _CASE_DIRECT_BYTE F8BE 5 5 3 RUNTIME
+ canTiming E8F9 24 36 4 .rodata
+ STRING.C..Work.software.Ope.1 E91D 55 85 1 .rodata1
+ STRING.C..Work.software.Ope.1 E972 35 53 1 .rodata1
+ STRING.C..Work.software.Ope.1 E9A7 33 51 2 .rodata1
+ main E9DA B 11 3 .text
+ Init E9E5 79 121 1 .text
+ BackDoorInit EA5E 11 17 1 .text
+ BackDoorCheck EA6F 31 49 2 .text
+ BootInit EAA0 F 15 1 .text
+ BootTask EAAF C 12 1 .text
+ ComInit EABB 19 25 1 .text
+ ComTask EAD4 10 16 1 .text
+ ComFree EAE4 1 1 1 .text
+ ComTransmitPacket EAE5 F 15 1 .text
+ ComSetConnectEntryState EAF4 6 6 1 .text
+ ComIsConnected EAFA 4 4 1 .text
+ CopInit EAFE 1 1 1 .text
+ CopService EAFF 1 1 8 .text
+ XcpInit EB00 15 21 1 .text
+ XcpIsConnected EB15 9 9 1 .text
+ XcpPacketTransmitted EB1E 4 4 1 .text
+ XcpPacketReceived EB22 E7 231 2 .text
+ XcpTransmitPacket EC09 C 12 1 .text
+ XcpComputeChecksum EC15 43 67 1 .text
+ XcpProtectResources EC58 4 4 2 .text
+ XcpSetCtoError EC5C 10 16 9 .text
+ XcpCmdConnect EC6C 29 41 1 .text
+ XcpCmdDisconnect EC95 10 16 1 .text
+ XcpCmdGetStatus ECA5 1A 26 1 .text
+ XcpCmdSynch ECBF 4 4 1 .text
+ XcpCmdGetId ECC3 22 34 1 .text
+ XcpCmdSetMta ECE5 1A 26 1 .text
+ XcpCmdUpload ECFF 4E 78 1 .text
+ XcpCmdShortUpload ED4D 55 85 1 .text
+ XcpCmdBuildCheckSum EDA2 2C 44 1 .text
+ XcpCmdProgramStart EDCE 18 24 1 .text
+ XcpCmdProgramMax EDE6 43 67 1 .text
+ XcpCmdProgram EE29 5B 91 1 .text
+ XcpCmdProgramClear EE84 2A 42 1 .text
+ XcpCmdProgramReset EEAE E 14 1 .text
+ XcpCmdProgramPrepare EEBC 5 5 1 .text
+ CpuStartUserProgram EEC1 18 24 1 .text
+ CpuMemCopy EED9 27 39 3 .text
+ CpuReset EF00 3 3 1 .text
+ FlashInit EF03 74 116 1 .text
+ FlashWrite EF77 B6 182 2 .text
+ FlashErase F02D DD 221 1 .text
+ FlashWriteChecksum F10A 67 103 1 .text
+ FlashVerifyChecksum F171 8A 138 1 .text
+ FlashDone F1FB 35 53 1 .text
+ FlashInitBlock F230 51 81 2 .text
+ FlashSwitchBlock F281 4E 78 2 .text
+ FlashAddToBlock F2CF BD 189 1 .text
+ FlashWriteBlock F38C 78 120 3 .text
+ FlashGetLinearAddrByte F404 1D 29 5 .text
+ FlashGetPhysPage F421 C 12 3 .text
+ FlashGetPhysAddr F42D 6 6 3 .text
+ FlashExecuteCommand F433 1F 31 1 .text
+ FlashOperate F452 54 84 2 .text
+ NvmInit F4A6 3 3 1 .text
+ NvmWrite F4A9 16 22 2 .text
+ NvmErase F4BF 12 18 1 .text
+ NvmVerifyChecksum F4D1 4 4 1 .text
+ NvmDone F4D5 B 11 1 .text
+ TimerInit F4E0 1D 29 1 .text
+ TimerReset F4FD 1C 28 2 .text
+ TimerUpdate F519 1F 31 2 .text
+ TimerGet F538 9 9 2 .text
+ reset_handler F541 9 9 2 .text
+ Vector0_handler F54A 6 6 1 .text
+ Vector1_handler F550 6 6 1 .text
+ Vector2_handler F556 6 6 1 .text
+ Vector3_handler F55C 6 6 1 .text
+ Vector4_handler F562 6 6 1 .text
+ Vector5_handler F568 6 6 1 .text
+ Vector6_handler F56E 6 6 1 .text
+ Vector7_handler F574 6 6 1 .text
+ Vector8_handler F57A 6 6 1 .text
+ Vector9_handler F580 6 6 1 .text
+ Vector10_handler F586 6 6 1 .text
+ Vector11_handler F58C 6 6 1 .text
+ Vector12_handler F592 6 6 1 .text
+ Vector13_handler F598 6 6 1 .text
+ Vector14_handler F59E 6 6 1 .text
+ Vector15_handler F5A4 6 6 1 .text
+ Vector16_handler F5AA 6 6 1 .text
+ Vector17_handler F5B0 6 6 1 .text
+ Vector18_handler F5B6 6 6 1 .text
+ Vector19_handler F5BC 6 6 1 .text
+ Vector20_handler F5C2 6 6 1 .text
+ Vector21_handler F5C8 6 6 1 .text
+ Vector22_handler F5CE 6 6 1 .text
+ Vector23_handler F5D4 6 6 1 .text
+ Vector24_handler F5DA 6 6 1 .text
+ Vector25_handler F5E0 6 6 1 .text
+ Vector26_handler F5E6 6 6 1 .text
+ Vector27_handler F5EC 6 6 1 .text
+ Vector28_handler F5F2 6 6 1 .text
+ Vector29_handler F5F8 6 6 1 .text
+ Vector30_handler F5FE 6 6 1 .text
+ Vector31_handler F604 6 6 1 .text
+ Vector32_handler F60A 6 6 1 .text
+ Vector33_handler F610 6 6 1 .text
+ Vector34_handler F616 6 6 1 .text
+ Vector35_handler F61C 6 6 1 .text
+ Vector36_handler F622 6 6 1 .text
+ Vector37_handler F628 6 6 1 .text
+ Vector38_handler F62E 6 6 1 .text
+ Vector39_handler F634 6 6 1 .text
+ Vector40_handler F63A 6 6 1 .text
+ Vector41_handler F640 6 6 1 .text
+ Vector42_handler F646 6 6 1 .text
+ Vector43_handler F64C 6 6 1 .text
+ Vector44_handler F652 6 6 1 .text
+ Vector45_handler F658 6 6 1 .text
+ Vector46_handler F65E 6 6 1 .text
+ Vector47_handler F664 6 6 1 .text
+ Vector48_handler F66A 6 6 1 .text
+ Vector49_handler F670 6 6 1 .text
+ Vector50_handler F676 6 6 1 .text
+ Vector51_handler F67C 6 6 1 .text
+ Vector52_handler F682 6 6 1 .text
+ Vector53_handler F688 6 6 1 .text
+ Vector54_handler F68E 6 6 1 .text
+ Vector55_handler F694 6 6 1 .text
+ Vector56_handler F69A 6 6 1 .text
+ Vector57_handler F6A0 6 6 1 .text
+ Vector58_handler F6A6 6 6 1 .text
+ Vector59_handler F6AC 6 6 1 .text
+ Vector60_handler F6B2 6 6 1 .text
+ Vector61_handler F6B8 6 6 1 .text
+ Vector62_handler F6BE 6 6 1 .text
+ AssertFailure F6C4 14 20 4 .text
+ CanInit F6D8 9C 156 1 .text
+ CanTransmitPacket F774 51 81 1 .text
+ CanReceivePacket F7C5 84 132 1 .text
+ CanGetSpeedConfig F849 69 105 1 .text
+ _LSHL F8B2 11 17 3 RUNTIME
+ _LSHRU F8C3 11 17 6 RUNTIME
+ _LCMP F8D4 19 25 4 RUNTIME
+ _LINC F8ED 5 5 4 RUNTIME
+ _LDEC F8F2 8 8 6 RUNTIME
+ _lDivMod F8FA BE 190 1 RUNTIME
+ _LDIVU F9B8 E 14 1 RUNTIME
+ _ILSEXT F9C6 7 7 1 RUNTIME
+ _CASE_DIRECT_BYTE F9CD 5 5 3 RUNTIME
reset_connected_handler FEF0 C 12 0 ENTRY
_vectab FF80 80 128 0 .abs_section_ff80
@@ -2262,7 +2255,7 @@ rtshc12.c.o (ansisi.lib):
*********************************************************************************************
COPYDOWN SECTION
---------------------------------------------------------------------------------------------
-------- ROM-ADDRESS: 0xF8C3 ---- SIZE 2 ---
+------- ROM-ADDRESS: 0xF9D2 ---- SIZE 2 ---
Filling bytes inserted
0000
@@ -2280,11 +2273,11 @@ BackDoorCheck USES ComIsConnected backdoorOpen TimerGet
backdoorOpenTime _LCMP CpuStartUserProgram
BootInit USES CopInit TimerInit NvmInit ComInit BackDoorInit
BootTask USES CopService TimerUpdate ComTask BackDoorCheck
-ComInit USES XcpInit UartInit comEntryStateConnect
+ComInit USES XcpInit CanInit comEntryStateConnect
XcpPacketReceived
-ComTask USES xcpCtoReqPacket.1 UartReceivePacket
+ComTask USES xcpCtoReqPacket.1 CanReceivePacket
XcpPacketReceived
-ComTransmitPacket USES UartTransmitPacket XcpPacketTransmitted
+ComTransmitPacket USES CanTransmitPacket XcpPacketTransmitted
ComSetConnectEntryState USES comEntryStateConnect
ComIsConnected USES XcpIsConnected
XcpInit USES xcpInfo
@@ -2347,14 +2340,15 @@ NvmDone USES FlashWriteChecksum FlashDone
TimerInit USES TimerReset millisecond_counter
TimerUpdate USES millisecond_counter _LINC
TimerGet USES TimerUpdate millisecond_counter
-UartTransmitPacket USES STRING.C..Work.software.Ope.1 AssertFailure
- UartTransmitByte CopService
-UartReceivePacket USES xcpCtoRxInProgress.4 xcpCtoReqPacket.2
- UartReceiveByte xcpCtoRxLength.3 CpuMemCopy
-UartTransmitByte USES CopService
reset_handler USES __SEG_END_SSTACK _Startup main
AssertFailure USES assert_failure_file assert_failure_line
CopService
+CanInit USES CanGetSpeedConfig STRING.C..Work.software.Ope.1
+ AssertFailure
+CanTransmitPacket USES STRING.C..Work.software.Ope.1 AssertFailure
+ CopService
+CanReceivePacket USES _LSHRU
+CanGetSpeedConfig USES canTiming CopService
_LDIVU USES _lDivMod
reset_connected_handler USES __SEG_END_SSTACK _Startup
ComSetConnectEntryState main
@@ -2418,8 +2412,14 @@ DEPENDENCY TREE
| | | |
| | | +- XcpInit
| | | |
- | | | +- UartInit
- | | | |
+ | | | +- CanInit
+ | | | | |
+ | | | | +- CanGetSpeedConfig
+ | | | | | |
+ | | | | | +- CopService (see above)
+ | | | | |
+ | | | | +- AssertFailure (see above)
+ | | | |
| | | +- XcpPacketReceived (recursive dependency)
| | | |
| | | +- XcpCmdConnect
@@ -2588,14 +2588,10 @@ DEPENDENCY TREE
| | | |
| | | +- ComTransmitPacket
| | | |
- | | | +- UartTransmitPacket
+ | | | +- CanTransmitPacket
| | | | |
| | | | +- AssertFailure (see above)
| | | | |
- | | | | +- UartTransmitByte
- | | | | | |
- | | | | | +- CopService (see above)
- | | | | |
| | | | +- CopService (see above)
| | | |
| | | +- XcpPacketTransmitted
@@ -2640,11 +2636,9 @@ DEPENDENCY TREE
| |
| +- ComTask
| | |
- | | +- UartReceivePacket
+ | | +- CanReceivePacket
| | | |
- | | | +- UartReceiveByte
- | | | |
- | | | +- CpuMemCopy (see above)
+ | | | +- _LSHRU (see above)
| | |
| | +- XcpPacketReceived (see above) (recursive dependency)
| |
@@ -2797,5 +2791,5 @@ STATISTIC SECTION
ExeFile:
--------
Number of blocks to be downloaded: 7
-Total size of all blocks to be downloaded: 4433
+Total size of all blocks to be downloaded: 4704
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/blt_conf.h b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/blt_conf.h
index faa32ccd..a820e7d0 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/blt_conf.h
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/blt_conf.h
@@ -61,6 +61,33 @@
/****************************************************************************************
* 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 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. 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)
+/** \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)
+/** \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)
+
/* 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
@@ -70,7 +97,7 @@
*
*/
/** \brief Enable/disable UART transport layer. */
-#define BOOT_COM_UART_ENABLE (1)
+#define BOOT_COM_UART_ENABLE (0)
/** \brief Configure the desired communication speed. */
#define BOOT_COM_UART_BAUDRATE (57600)
/** \brief Configure number of bytes in the target->host data packet. */
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12.mcp b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12.mcp
index 62ee82fa..e5243522 100644
Binary files a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12.mcp and b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12.mcp differ
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/CWSettingsWindows.stg b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/CWSettingsWindows.stg
index bc0bc92b..6ab5086e 100644
Binary files a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/CWSettingsWindows.stg and b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/CWSettingsWindows.stg differ
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/Standard/TargetDataWindows.tdt b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/Standard/TargetDataWindows.tdt
index 7e6a1c89..cc44f0b5 100644
Binary files a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/Standard/TargetDataWindows.tdt and b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/ide/hcs12_Data/Standard/TargetDataWindows.tdt differ
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/main.c b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/main.c
index 41b3267c..8fdc36e6 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/main.c
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Boot/main.c
@@ -52,11 +52,6 @@ static void Init(void);
****************************************************************************************/
void main(void)
{
- /* ##Vg TODO basic bootloader works, including the timed backdoor. next steps:
- * - bootloader activation from user program
- * - support for CAN
- */
-
/* initialize the microcontroller */
Init();
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs
index e4125047..7f6b1052 100644
Binary files a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs and b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs differ
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs.sx b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs.sx
index 45afe593..d8480501 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs.sx
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.abs.sx
@@ -1,21 +1,30 @@
S0730000433A5C576F726B5C736F6674776172655C4F70656E424C545C5461726765745C44656D6F5C48435331325F457662706C75735F447261676F6E3132705F436F646557617272696F725C50726F675C62696E5C64656D6F70726F675F657662706C75735F647261676F6E3132702E616273F8
S2240FC000FEC033FDC031270E35ED31EC3169700434FB310326F2FEC035EC31270BED3118B8
-S2240FC0200A30700434F920F13DCF110007D206C1120001C037C1AC1100004C3B16C147CC4A
-S2240FC040FEF06C8015F300003A3D7900CB7900CA7900C87900C9C61A873B5AC85BC94CCB6A
-S2240FC060043A3DF611002612CC110116C0A7042135C6017B11007911423DF6114287C3004E
-S2240FC0800187C3110116C0A704211B721142F61142F111012610791100F6110204A107F6F6
-S2240FC0A01103260207953D3B4FCC2009D6CFEE806B00C60121C7303D10EF3D1C026A021D5B
-S2240FC0C00268024C03014D01013D1B9C16C16A6C826E80B31146B7C5F21145B21144CD018D
-S2240FC0E0F435B746C7873BB754B76516C18E251FF61143260AC6017B11434C0101200679B0
-S2240FC10011434D0101EC827C1146EC807C11441B843D16C12016C04A16C0CA16C06320F806
-S2240FC12016C0BB16C12906C0B816C1474C4001C6015B4EDC44C35DC05C504C4C014C46806A
-S2240FC140C787B74506C16379004C79004679004D79004079004779004879004979004A79D5
-S2240FC160004B3D7C114A7E11483DFC114AFE11483DC6015B4EDC50C35DC05C50FC114AFED0
-S2240FC180114816C1A77C114A7E11480B20FEAC84270E34B7C5E285A284B7C510FB30200262
-S2120FC1A0AE82311B84054004A401083D00004A
-S2240FE77EAA55C18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CE5
-S2240FE79EC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18C77
-S2240FE7BEC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18CC18C57
-S2240FE7DEC18CC18CC18CC18CC18CC18CC18CC18CC171C18CC18CC18CC18CC18CC18CC18C52
+S2240FC0200A30700434F920F13DCF110007D206C2280001C037C2D31100000905020602065E
+S2240FC0400307030803090309040A040B040C040C050D050E050F050F061006100710083B8F
+S2240FC06016C25DCCFEF06C8015F300003A3D6CAC3B6984E6848759B745E6E2C03B87B74685
+S2240FC080E6E2C03C19EE02B764ED8A136C80CC1F40B756EE80181004642ECC1F40EE801819
+S2240FC0A010B7516B852721C140221D53EE886B00E6EAC03C53861012A6EAC03B4337AAB082
+S2240FC0C0EE826A00C60120096284E684C11225A3C71B863D1B96C6017B01401F014101FB61
+S2240FC0E0C6807B0141CC01F43B1A82341A85B75416C06E1B8404210AE6807B0142E6817B9B
+S2240FC10001431D014B101D014B20C7876C886C8653436C84861F6C82790150C6087B015113
+S2240FC120790152790153C6FF7B0154C6F77B0155C6FF7B0156587B0157790158790159794F
+S2240FC140015A79015B577B015CC6E77B015D79015E79015F1D0140011E014101FB1B8A3D98
+S2240FC1601B9C1F014401641E01610810FC016049494949496C82C7876C80202EFE0162FCF6
+S2240FC1800160C4078749B7C54656CD00003BFC0160C4E03BC60334EE8216C2A4EA85AA84AD
+S2240FC1A06C88B754EA81AA806CA5EC828C06672616EC802612F6016404A10CF601652607EA
+S2240FC1C01D0144FE16C05F1D0144FE1B843D10EF3D1C026A021D0268024C03014D01013D4F
+S2240FC1E01B9C16C2806C826E80B31103B7C5F21102B21101CD01F435B746C7873BB754B7F5
+S2240FC2006516C2B5251FF61100260AC6017B11004C010120067911004D0101EC827C1103FF
+S2240FC220EC807C11011B843D16C23616C0D416C1E016C16020F816C1D116C23F06C1CE16EC
+S2240FC240C25D4C4001C6015B4EDC44C35DC05C504C4C014C4680C787B74506C27979004C07
+S2240FC26079004679004D79004079004779004879004979004A79004B3D7C11077E11053D00
+S2240FC280FC1107FE11053DC6015B4EDC50C35DC05C50FC1107FE110516C2CE7C11077E110C
+S2240FC2A0050B20FE87D7B7C6270AB7C549B7C546560436F63DAC84270E34B7C5E285A28444
+S2190FC2C0B7C510FB302002AE82311B84054004A401083D000049
+S2240FE77EAA55C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A28C
+S2240FE79EC2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A207
+S2240FE7BEC2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2E7
+S2240FE7DEC2A2C2A2C2A2C2A2C2A2C2A2C2A2C2A2C287C2A2C2A2C2A2C2A2C2A2C2A2C2A2E2
S2060FE7FEC0291C
S9030000FC
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.map b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.map
index 637abcab..e2eeb233 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.map
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/bin/demoprog_evbplus_dragon12p.map
@@ -29,8 +29,8 @@ Entry point: 0xC029 (_Startup)
_startupData is allocated at 0xC031 and uses 6 Bytes
extern struct _tagStartup {
unsigned nofZeroOut 1
- _Range pZeroOut 0x1100 76
- _Copy *toCopyDownBeg 0xC1AC
+ _Range pZeroOut 0x1100 9
+ _Copy *toCopyDownBeg 0xC2D3
} _startupData;
*********************************************************************************************
@@ -39,8 +39,9 @@ Section Name Size Type From To Segment
---------------------------------------------------------------------------------------------
.init 49 R 0xC000 0xC030 ROM_C000
.startData 10 R 0xC031 0xC03A ROM_C000
-.text 339 R 0xC03B 0xC18D ROM_C000
-.copy 2 R 0xC1AC 0xC1AD ROM_C000
+.rodata 36 R 0xC03B 0xC05E ROM_C000
+.text 581 R 0xC05F 0xC2A3 ROM_C000
+.copy 2 R 0xC2D3 0xC2D4 ROM_C000
.stack 256 R/W 0x1000 0x10FF RAM
.abs_section_8 1 N/I 0x8 0x8 .absSeg0
.abs_section_9 1 N/I 0x9 0x9 .absSeg1
@@ -384,12 +385,12 @@ Section Name Size Type From To Segment
.abs_section_2ae 2 N/I 0x2AE 0x2AF .absSeg339
.abs_section_2be 2 N/I 0x2BE 0x2BF .absSeg340
.abs_section_e77e 130 R 0xE77E 0xE7FF .absSeg341
-.bss 76 R/W 0x1100 0x114B RAM
-RUNTIME 30 R 0xC18E 0xC1AB ROM_C000
+.bss 9 R/W 0x1100 0x1108 RAM
+RUNTIME 47 R 0xC2A4 0xC2D2 ROM_C000
Summary of section sizes per section type:
-READ_ONLY (R): 230 (dec: 560)
-READ_WRITE (R/W): 14C (dec: 332)
+READ_ONLY (R): 357 (dec: 855)
+READ_WRITE (R/W): 109 (dec: 265)
NO_INIT (N/I): 190 (dec: 400)
*********************************************************************************************
@@ -403,8 +404,9 @@ OBJECT-ALLOCATION SECTION
---------------------------------------------------------------------------------------------
MODULE: -- rtshc12.c.o (ansisi.lib) --
- PROCEDURES:
- _LCMP C18E 19 25 1 RUNTIME
- _LINC C1A7 5 5 1 RUNTIME
+ _LSHRU C2A4 11 17 1 RUNTIME
+ _LCMP C2B5 19 25 1 RUNTIME
+ _LINC C2CE 5 5 1 RUNTIME
- VARIABLES:
MODULE: -- mc9s12dg256.c.o --
- PROCEDURES:
@@ -484,12 +486,12 @@ MODULE: -- mc9s12dg256.c.o --
_PWMSCLA A8 1 1 0 .abs_section_a8
_PWMSCLB A9 1 1 0 .abs_section_a9
_PWMSDN C4 1 1 0 .abs_section_c4
- _SCI0CR1 CA 1 1 1 .abs_section_ca
- _SCI0CR2 CB 1 1 2 .abs_section_cb
- _SCI0SR1 CC 1 1 1 .abs_section_cc
+ _SCI0CR1 CA 1 1 0 .abs_section_ca
+ _SCI0CR2 CB 1 1 0 .abs_section_cb
+ _SCI0SR1 CC 1 1 0 .abs_section_cc
_SCI0SR2 CD 1 1 0 .abs_section_cd
_SCI0DRH CE 1 1 0 .abs_section_ce
- _SCI0DRL CF 1 1 1 .abs_section_cf
+ _SCI0DRL CF 1 1 0 .abs_section_cf
_SCI1CR1 D2 1 1 0 .abs_section_d2
_SCI1CR2 D3 1 1 0 .abs_section_d3
_SCI1SR1 D4 1 1 0 .abs_section_d4
@@ -532,42 +534,42 @@ MODULE: -- mc9s12dg256.c.o --
_ATD1STAT1 12B 1 1 0 .abs_section_12b
_ATD1DIEN 12D 1 1 0 .abs_section_12d
_PORTAD1 12F 1 1 0 .abs_section_12f
- _CAN0CTL0 140 1 1 0 .abs_section_140
- _CAN0CTL1 141 1 1 0 .abs_section_141
- _CAN0BTR0 142 1 1 0 .abs_section_142
- _CAN0BTR1 143 1 1 0 .abs_section_143
- _CAN0RFLG 144 1 1 0 .abs_section_144
+ _CAN0CTL0 140 1 1 2 .abs_section_140
+ _CAN0CTL1 141 1 1 3 .abs_section_141
+ _CAN0BTR0 142 1 1 1 .abs_section_142
+ _CAN0BTR1 143 1 1 1 .abs_section_143
+ _CAN0RFLG 144 1 1 3 .abs_section_144
_CAN0RIER 145 1 1 0 .abs_section_145
_CAN0TFLG 146 1 1 0 .abs_section_146
_CAN0TIER 147 1 1 0 .abs_section_147
_CAN0TARQ 148 1 1 0 .abs_section_148
_CAN0TAAK 149 1 1 0 .abs_section_149
_CAN0TBSEL 14A 1 1 0 .abs_section_14a
- _CAN0IDAC 14B 1 1 0 .abs_section_14b
+ _CAN0IDAC 14B 1 1 2 .abs_section_14b
_CAN0RXERR 14E 1 1 0 .abs_section_14e
_CAN0TXERR 14F 1 1 0 .abs_section_14f
- _CAN0IDAR0 150 1 1 0 .abs_section_150
- _CAN0IDAR1 151 1 1 0 .abs_section_151
- _CAN0IDAR2 152 1 1 0 .abs_section_152
- _CAN0IDAR3 153 1 1 0 .abs_section_153
- _CAN0IDMR0 154 1 1 0 .abs_section_154
- _CAN0IDMR1 155 1 1 0 .abs_section_155
- _CAN0IDMR2 156 1 1 0 .abs_section_156
- _CAN0IDMR3 157 1 1 0 .abs_section_157
- _CAN0IDAR4 158 1 1 0 .abs_section_158
- _CAN0IDAR5 159 1 1 0 .abs_section_159
- _CAN0IDAR6 15A 1 1 0 .abs_section_15a
- _CAN0IDAR7 15B 1 1 0 .abs_section_15b
- _CAN0IDMR4 15C 1 1 0 .abs_section_15c
- _CAN0IDMR5 15D 1 1 0 .abs_section_15d
- _CAN0IDMR6 15E 1 1 0 .abs_section_15e
- _CAN0IDMR7 15F 1 1 0 .abs_section_15f
- _CAN0RXIDR0 160 1 1 0 .abs_section_160
- _CAN0RXIDR1 161 1 1 0 .abs_section_161
+ _CAN0IDAR0 150 1 1 1 .abs_section_150
+ _CAN0IDAR1 151 1 1 1 .abs_section_151
+ _CAN0IDAR2 152 1 1 1 .abs_section_152
+ _CAN0IDAR3 153 1 1 1 .abs_section_153
+ _CAN0IDMR0 154 1 1 1 .abs_section_154
+ _CAN0IDMR1 155 1 1 1 .abs_section_155
+ _CAN0IDMR2 156 1 1 1 .abs_section_156
+ _CAN0IDMR3 157 1 1 1 .abs_section_157
+ _CAN0IDAR4 158 1 1 1 .abs_section_158
+ _CAN0IDAR5 159 1 1 1 .abs_section_159
+ _CAN0IDAR6 15A 1 1 1 .abs_section_15a
+ _CAN0IDAR7 15B 1 1 1 .abs_section_15b
+ _CAN0IDMR4 15C 1 1 1 .abs_section_15c
+ _CAN0IDMR5 15D 1 1 1 .abs_section_15d
+ _CAN0IDMR6 15E 1 1 1 .abs_section_15e
+ _CAN0IDMR7 15F 1 1 1 .abs_section_15f
+ _CAN0RXIDR0 160 1 1 4 .abs_section_160
+ _CAN0RXIDR1 161 1 1 1 .abs_section_161
_CAN0RXIDR2 162 1 1 0 .abs_section_162
_CAN0RXIDR3 163 1 1 0 .abs_section_163
- _CAN0RXDSR0 164 1 1 0 .abs_section_164
- _CAN0RXDSR1 165 1 1 0 .abs_section_165
+ _CAN0RXDSR0 164 1 1 1 .abs_section_164
+ _CAN0RXDSR1 165 1 1 1 .abs_section_165
_CAN0RXDSR2 166 1 1 0 .abs_section_166
_CAN0RXDSR3 167 1 1 0 .abs_section_167
_CAN0RXDSR4 168 1 1 0 .abs_section_168
@@ -734,7 +736,7 @@ MODULE: -- mc9s12dg256.c.o --
_PWMDTY23 BE 2 2 0 .abs_section_be
_PWMDTY45 C0 2 2 0 .abs_section_c0
_PWMDTY67 C2 2 2 0 .abs_section_c2
- _SCI0BD C8 2 2 4 .abs_section_c8
+ _SCI0BD C8 2 2 0 .abs_section_c8
_SCI1BD D0 2 2 0 .abs_section_d0
_ATD1CTL23 122 2 2 0 .abs_section_122
_ATD1CTL45 124 2 2 0 .abs_section_124
@@ -752,29 +754,27 @@ MODULE: -- mc9s12dg256.c.o --
_CAN4TXTSR 2BE 2 2 0 .abs_section_2be
MODULE: -- boot.c.o --
- PROCEDURES:
- BootActivate C03B F 15 1 .text
- BootComInit C04A 19 25 1 .text
- BootComCheckActivationRequest C063 44 68 1 .text
- UartReceiveByte C0A7 11 17 2 .text
+ BootActivate C05F F 15 1 .text
+ CanGetSpeedConfig C06E 66 102 1 .text
+ BootComInit C0D4 8C 140 1 .text
+ BootComCheckActivationRequest C160 6E 110 1 .text
- VARIABLES:
- xcpCtoRxInProgress.3 1100 1 1 3 .bss
- xcpCtoReqPacket.1 1101 41 65 5 .bss
- xcpCtoRxLength.2 1142 1 1 4 .bss
+ canTiming C03B 24 36 4 .rodata
MODULE: -- irq.c.o --
- PROCEDURES:
- IrqInterruptEnable C0B8 3 3 1 .text
+ IrqInterruptEnable C1CE 3 3 1 .text
- VARIABLES:
MODULE: -- led.c.o --
- PROCEDURES:
- LedInit C0BB F 15 1 .text
- LedToggle C0CA 48 72 1 .text
+ LedInit C1D1 F 15 1 .text
+ LedToggle C1E0 48 72 1 .text
- VARIABLES:
- led_toggle_state.1 1143 1 1 3 .bss
- timer_counter_last.2 1144 4 4 5 .bss
+ led_toggle_state.1 1100 1 1 3 .bss
+ timer_counter_last.2 1101 4 4 5 .bss
MODULE: -- main.c.o --
- PROCEDURES:
- main C112 E 14 1 .text
- Init C120 9 9 1 .text
+ main C228 E 14 1 .text
+ Init C236 9 9 1 .text
- VARIABLES:
MODULE: -- start12.c.o --
- PROCEDURES:
@@ -786,16 +786,16 @@ MODULE: -- start12.c.o --
__SEG_END_SSTACK 1100 0 0 1
MODULE: -- time.c.o --
- PROCEDURES:
- TimeInit C129 1E 30 1 .text
- TimeDeinit C147 1C 28 2 .text
- TimeSet C163 7 7 1 .text
- TimeGet C16A 7 7 1 .text
- TimeISRHandler C171 1B 27 1 .text
+ TimeInit C23F 1E 30 1 .text
+ TimeDeinit C25D 1C 28 2 .text
+ TimeSet C279 7 7 1 .text
+ TimeGet C280 7 7 1 .text
+ TimeISRHandler C287 1B 27 1 .text
- VARIABLES:
- millisecond_counter 1148 4 4 8 .bss
+ millisecond_counter 1105 4 4 8 .bss
MODULE: -- vectors.c.o --
- PROCEDURES:
- UnusedISR C18C 2 2 62 .text
+ UnusedISR C2A2 2 2 62 .text
- VARIABLES:
_vectab E77E 82 130 0 .abs_section_e77e
@@ -803,9 +803,9 @@ MODULE: -- vectors.c.o --
MODULE STATISTIC
Name Data Code Const
---------------------------------------------------------------------------------------------
- rtshc12.c.o (ansisi.lib) 0 30 0
+ rtshc12.c.o (ansisi.lib) 0 47 0
mc9s12dg256.c.o 400 0 0
- boot.c.o 67 125 0
+ boot.c.o 0 367 36
irq.c.o 0 3 0
led.c.o 5 87 0
main.c.o 0 23 0
@@ -818,16 +818,17 @@ MODULE STATISTIC
SECTION USE IN OBJECT-ALLOCATION SECTION
---------------------------------------------------------------------------------------------
SECTION: ".text"
- BootActivate BootComInit BootComCheckActivationRequest UartReceiveByte
+ BootActivate CanGetSpeedConfig BootComInit BootComCheckActivationRequest
IrqInterruptEnable LedInit LedToggle main Init TimeInit TimeDeinit TimeSet
TimeGet TimeISRHandler UnusedISR
SECTION: ".bss"
- xcpCtoRxInProgress.3 xcpCtoReqPacket.1 xcpCtoRxLength.2 led_toggle_state.1
- timer_counter_last.2 millisecond_counter
+ led_toggle_state.1 timer_counter_last.2 millisecond_counter
SECTION: ".init"
Init _Startup
+SECTION: ".rodata"
+ canTiming
SECTION: "RUNTIME"
- _LCMP _LINC
+ _LSHRU _LCMP _LINC
SECTION: ".abs_section_8"
_PORTE
SECTION: ".abs_section_9"
@@ -1635,13 +1636,13 @@ OBJECT LIST SORTED BY ADDRESS
_PWMDTY45 C0 2 2 0 .abs_section_c0
_PWMDTY67 C2 2 2 0 .abs_section_c2
_PWMSDN C4 1 1 0 .abs_section_c4
- _SCI0BD C8 2 2 4 .abs_section_c8
- _SCI0CR1 CA 1 1 1 .abs_section_ca
- _SCI0CR2 CB 1 1 2 .abs_section_cb
- _SCI0SR1 CC 1 1 1 .abs_section_cc
+ _SCI0BD C8 2 2 0 .abs_section_c8
+ _SCI0CR1 CA 1 1 0 .abs_section_ca
+ _SCI0CR2 CB 1 1 0 .abs_section_cb
+ _SCI0SR1 CC 1 1 0 .abs_section_cc
_SCI0SR2 CD 1 1 0 .abs_section_cd
_SCI0DRH CE 1 1 0 .abs_section_ce
- _SCI0DRL CF 1 1 1 .abs_section_cf
+ _SCI0DRL CF 1 1 0 .abs_section_cf
_SCI1BD D0 2 2 0 .abs_section_d0
_SCI1CR1 D2 1 1 0 .abs_section_d2
_SCI1CR2 D3 1 1 0 .abs_section_d3
@@ -1695,42 +1696,42 @@ OBJECT LIST SORTED BY ADDRESS
_ATD1DR5 13A 2 2 0 .abs_section_13a
_ATD1DR6 13C 2 2 0 .abs_section_13c
_ATD1DR7 13E 2 2 0 .abs_section_13e
- _CAN0CTL0 140 1 1 0 .abs_section_140
- _CAN0CTL1 141 1 1 0 .abs_section_141
- _CAN0BTR0 142 1 1 0 .abs_section_142
- _CAN0BTR1 143 1 1 0 .abs_section_143
- _CAN0RFLG 144 1 1 0 .abs_section_144
+ _CAN0CTL0 140 1 1 2 .abs_section_140
+ _CAN0CTL1 141 1 1 3 .abs_section_141
+ _CAN0BTR0 142 1 1 1 .abs_section_142
+ _CAN0BTR1 143 1 1 1 .abs_section_143
+ _CAN0RFLG 144 1 1 3 .abs_section_144
_CAN0RIER 145 1 1 0 .abs_section_145
_CAN0TFLG 146 1 1 0 .abs_section_146
_CAN0TIER 147 1 1 0 .abs_section_147
_CAN0TARQ 148 1 1 0 .abs_section_148
_CAN0TAAK 149 1 1 0 .abs_section_149
_CAN0TBSEL 14A 1 1 0 .abs_section_14a
- _CAN0IDAC 14B 1 1 0 .abs_section_14b
+ _CAN0IDAC 14B 1 1 2 .abs_section_14b
_CAN0RXERR 14E 1 1 0 .abs_section_14e
_CAN0TXERR 14F 1 1 0 .abs_section_14f
- _CAN0IDAR0 150 1 1 0 .abs_section_150
- _CAN0IDAR1 151 1 1 0 .abs_section_151
- _CAN0IDAR2 152 1 1 0 .abs_section_152
- _CAN0IDAR3 153 1 1 0 .abs_section_153
- _CAN0IDMR0 154 1 1 0 .abs_section_154
- _CAN0IDMR1 155 1 1 0 .abs_section_155
- _CAN0IDMR2 156 1 1 0 .abs_section_156
- _CAN0IDMR3 157 1 1 0 .abs_section_157
- _CAN0IDAR4 158 1 1 0 .abs_section_158
- _CAN0IDAR5 159 1 1 0 .abs_section_159
- _CAN0IDAR6 15A 1 1 0 .abs_section_15a
- _CAN0IDAR7 15B 1 1 0 .abs_section_15b
- _CAN0IDMR4 15C 1 1 0 .abs_section_15c
- _CAN0IDMR5 15D 1 1 0 .abs_section_15d
- _CAN0IDMR6 15E 1 1 0 .abs_section_15e
- _CAN0IDMR7 15F 1 1 0 .abs_section_15f
- _CAN0RXIDR0 160 1 1 0 .abs_section_160
- _CAN0RXIDR1 161 1 1 0 .abs_section_161
+ _CAN0IDAR0 150 1 1 1 .abs_section_150
+ _CAN0IDAR1 151 1 1 1 .abs_section_151
+ _CAN0IDAR2 152 1 1 1 .abs_section_152
+ _CAN0IDAR3 153 1 1 1 .abs_section_153
+ _CAN0IDMR0 154 1 1 1 .abs_section_154
+ _CAN0IDMR1 155 1 1 1 .abs_section_155
+ _CAN0IDMR2 156 1 1 1 .abs_section_156
+ _CAN0IDMR3 157 1 1 1 .abs_section_157
+ _CAN0IDAR4 158 1 1 1 .abs_section_158
+ _CAN0IDAR5 159 1 1 1 .abs_section_159
+ _CAN0IDAR6 15A 1 1 1 .abs_section_15a
+ _CAN0IDAR7 15B 1 1 1 .abs_section_15b
+ _CAN0IDMR4 15C 1 1 1 .abs_section_15c
+ _CAN0IDMR5 15D 1 1 1 .abs_section_15d
+ _CAN0IDMR6 15E 1 1 1 .abs_section_15e
+ _CAN0IDMR7 15F 1 1 1 .abs_section_15f
+ _CAN0RXIDR0 160 1 1 4 .abs_section_160
+ _CAN0RXIDR1 161 1 1 1 .abs_section_161
_CAN0RXIDR2 162 1 1 0 .abs_section_162
_CAN0RXIDR3 163 1 1 0 .abs_section_163
- _CAN0RXDSR0 164 1 1 0 .abs_section_164
- _CAN0RXDSR1 165 1 1 0 .abs_section_165
+ _CAN0RXDSR0 164 1 1 1 .abs_section_164
+ _CAN0RXDSR1 165 1 1 1 .abs_section_165
_CAN0RXDSR2 166 1 1 0 .abs_section_166
_CAN0RXDSR3 167 1 1 0 .abs_section_167
_CAN0RXDSR4 168 1 1 0 .abs_section_168
@@ -1858,31 +1859,30 @@ OBJECT LIST SORTED BY ADDRESS
_CAN4TXDLR 2BC 1 1 0 .abs_section_2bc
_CAN4TXTBPR 2BD 1 1 0 .abs_section_2bd
_CAN4TXTSR 2BE 2 2 0 .abs_section_2be
- xcpCtoRxInProgress.3 1100 1 1 3 .bss
- xcpCtoReqPacket.1 1101 41 65 5 .bss
- xcpCtoRxLength.2 1142 1 1 4 .bss
- led_toggle_state.1 1143 1 1 3 .bss
- timer_counter_last.2 1144 4 4 5 .bss
- millisecond_counter 1148 4 4 8 .bss
+ led_toggle_state.1 1100 1 1 3 .bss
+ timer_counter_last.2 1101 4 4 5 .bss
+ millisecond_counter 1105 4 4 8 .bss
Init C000 29 41 1 .init
_Startup C029 8 8 1 .init
- BootActivate C03B F 15 1 .text
- BootComInit C04A 19 25 1 .text
- BootComCheckActivationRequest C063 44 68 1 .text
- UartReceiveByte C0A7 11 17 2 .text
- IrqInterruptEnable C0B8 3 3 1 .text
- LedInit C0BB F 15 1 .text
- LedToggle C0CA 48 72 1 .text
- main C112 E 14 1 .text
- Init C120 9 9 1 .text
- TimeInit C129 1E 30 1 .text
- TimeDeinit C147 1C 28 2 .text
- TimeSet C163 7 7 1 .text
- TimeGet C16A 7 7 1 .text
- TimeISRHandler C171 1B 27 1 .text
- UnusedISR C18C 2 2 62 .text
- _LCMP C18E 19 25 1 RUNTIME
- _LINC C1A7 5 5 1 RUNTIME
+ canTiming C03B 24 36 4 .rodata
+ BootActivate C05F F 15 1 .text
+ CanGetSpeedConfig C06E 66 102 1 .text
+ BootComInit C0D4 8C 140 1 .text
+ BootComCheckActivationRequest C160 6E 110 1 .text
+ IrqInterruptEnable C1CE 3 3 1 .text
+ LedInit C1D1 F 15 1 .text
+ LedToggle C1E0 48 72 1 .text
+ main C228 E 14 1 .text
+ Init C236 9 9 1 .text
+ TimeInit C23F 1E 30 1 .text
+ TimeDeinit C25D 1C 28 2 .text
+ TimeSet C279 7 7 1 .text
+ TimeGet C280 7 7 1 .text
+ TimeISRHandler C287 1B 27 1 .text
+ UnusedISR C2A2 2 2 62 .text
+ _LSHRU C2A4 11 17 1 RUNTIME
+ _LCMP C2B5 19 25 1 RUNTIME
+ _LINC C2CE 5 5 1 RUNTIME
_vectab E77E 82 130 0 .abs_section_e77e
*********************************************************************************************
@@ -1890,8 +1890,8 @@ UNUSED-OBJECTS SECTION
---------------------------------------------------------------------------------------------
NOT USED PROCEDURES
rtshc12.c.o (ansisi.lib):
- _BSHL _BSHRS _BSHRU _BDIVMODU _BDIVMODS _ISHL _ISHRU _ISHRS _LSHL _LSHRU
- _LSHRS _LADD _LSUB _LAND _LOR _LXOR _LCMP_P _LCMP_PP _LNEG _LCOM _LDEC _LMUL
+ _BSHL _BSHRS _BSHRU _BDIVMODU _BDIVMODS _ISHL _ISHRU _ISHRS _LSHL _LSHRS
+ _LADD _LSUB _LAND _LOR _LXOR _LCMP_P _LCMP_PP _LNEG _LCOM _LDEC _LMUL
_LMULU16x32 _LMULS16x32 _lDivMod _LDIVU _NEG_P _LDIVS _LMODU _LMODS _ILSEXT
_COPY _CASE_DIRECT _CASE_DIRECT_BYTE _CASE_CHECKED _CASE_CHECKED_BYTE
_CASE_SEARCH _CASE_SEARCH_BYTE _CASE_SEARCH_8 _CASE_SEARCH_8_BYTE _FCALL
@@ -1907,7 +1907,7 @@ irq.c.o:
*********************************************************************************************
COPYDOWN SECTION
---------------------------------------------------------------------------------------------
-------- ROM-ADDRESS: 0xC1AC ---- SIZE 2 ---
+------- ROM-ADDRESS: 0xC2D3 ---- SIZE 2 ---
Filling bytes inserted
0000
@@ -1917,10 +1917,14 @@ OBJECT-DEPENDENCIES SECTION
Init USES _startupData
_Startup USES __SEG_END_SSTACK Init main
BootActivate USES TimeDeinit
-BootComInit USES _SCI0CR2 _SCI0CR1 _SCI0BD
-BootComCheckActivationRequest USES xcpCtoRxInProgress.3 xcpCtoReqPacket.1
- UartReceiveByte xcpCtoRxLength.2 BootActivate
-UartReceiveByte USES _SCI0SR1 _SCI0DRL
+CanGetSpeedConfig USES canTiming
+BootComInit USES _CAN0CTL0 _CAN0CTL1 CanGetSpeedConfig _CAN0BTR0
+ _CAN0BTR1 _CAN0IDAC _CAN0IDAR0 _CAN0IDAR1 _CAN0IDAR2
+ _CAN0IDAR3 _CAN0IDMR0 _CAN0IDMR1 _CAN0IDMR2 _CAN0IDMR3
+ _CAN0IDAR4 _CAN0IDAR5 _CAN0IDAR6 _CAN0IDAR7 _CAN0IDMR4
+ _CAN0IDMR5 _CAN0IDMR6 _CAN0IDMR7
+BootComCheckActivationRequest USES _CAN0RFLG _CAN0RXIDR1 _CAN0RXIDR0 _LSHRU
+ _CAN0RXDSR0 _CAN0RXDSR1 BootActivate
LedInit USES _DDRJ _PTJ _DDRAB _PORTAB
LedToggle USES TimeGet timer_counter_last.2 _LCMP
led_toggle_state.1 _PORTAB
@@ -1956,7 +1960,9 @@ DEPENDENCY TREE
| | +- IrqInterruptEnable
| |
| +- BootComInit
- | |
+ | | |
+ | | +- CanGetSpeedConfig
+ | |
| +- LedToggle
| | |
| | +- TimeGet
@@ -1965,7 +1971,7 @@ DEPENDENCY TREE
| |
| +- BootComCheckActivationRequest
| |
- | +- UartReceiveByte
+ | +- _LSHRU
| |
| +- BootActivate
| |
@@ -1994,5 +2000,5 @@ STATISTIC SECTION
ExeFile:
--------
Number of blocks to be downloaded: 6
-Total size of all blocks to be downloaded: 560
+Total size of all blocks to be downloaded: 855
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/boot.c b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/boot.c
index 845f449e..aeaf440e 100644
--- a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/boot.c
+++ b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/boot.c
@@ -166,4 +166,225 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */
+#if (BOOT_COM_CAN_ENABLE > 0)
+/****************************************************************************************
+* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
+****************************************************************************************/
+
+/****************************************************************************************
+* Type definitions
+****************************************************************************************/
+/** \brief Structure type with the layout of the CAN bus timing registers. */
+typedef struct
+{
+ unsigned char tseg1; /**< CAN time segment 1 */
+ unsigned char tseg2; /**< CAN time segment 2 */
+} tCanBusTiming;
+
+
+/****************************************************************************************
+* Macro definitions
+****************************************************************************************/
+#define CONVERT_STD_ID_TO_REG0(id) ((unsigned char)(((unsigned short)id & 0x07f8) >> 3))
+#define CONVERT_STD_ID_TO_REG1(id) ((unsigned char)(id & 0x07) << 5)
+#define CONVERT_STD_ID_TO_REG2(id) (0)
+#define CONVERT_STD_ID_TO_REG3(id) (0)
+#define CONVERT_EXT_ID_TO_REG0(id) ((unsigned char)(id >> 21))
+#define CONVERT_EXT_ID_TO_REG1(id) ((((unsigned char)(id >> 15)) & 0x07) | \
+ (((unsigned char)(id >> 13)) & 0xe0) | CAN0RXIDR1_IDE_MASK)
+#define CONVERT_EXT_ID_TO_REG2(id) ((unsigned char)(((unsigned short)id & 0x7f80) >> 7))
+#define CONVERT_EXT_ID_TO_REG3(id) ((unsigned char)(id & 0x7f) << 1)
+
+
+/****************************************************************************************
+* Local constant declarations
+****************************************************************************************/
+/**
+* \brief Array with possible time quanta configurations.
+* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
+* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
+* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2)
+* * 100%. This array contains possible and valid time quanta configurations
+* with a sample point between 68..78%.
+*/
+static const tCanBusTiming canTiming[] =
+{ /* TQ | TSEG1 | TSEG2 | SP */
+ /* ------------------------- */
+ { 5, 2 }, /* 8 | 5 | 2 | 75% */
+ { 6, 2 }, /* 9 | 6 | 2 | 78% */
+ { 6, 3 }, /* 10 | 6 | 3 | 70% */
+ { 7, 3 }, /* 11 | 7 | 3 | 73% */
+ { 8, 3 }, /* 12 | 8 | 3 | 75% */
+ { 9, 3 }, /* 13 | 9 | 3 | 77% */
+ { 9, 4 }, /* 14 | 9 | 4 | 71% */
+ { 10, 4 }, /* 15 | 10 | 4 | 73% */
+ { 11, 4 }, /* 16 | 11 | 4 | 75% */
+ { 12, 4 }, /* 17 | 12 | 4 | 76% */
+ { 12, 5 }, /* 18 | 12 | 5 | 72% */
+ { 13, 5 }, /* 19 | 13 | 5 | 74% */
+ { 14, 5 }, /* 20 | 14 | 5 | 75% */
+ { 15, 5 }, /* 21 | 15 | 5 | 76% */
+ { 15, 6 }, /* 22 | 15 | 6 | 73% */
+ { 16, 6 }, /* 23 | 16 | 6 | 74% */
+ { 16, 7 }, /* 24 | 16 | 7 | 71% */
+ { 16, 8 } /* 25 | 16 | 8 | 68% */
+};
+
+
+/************************************************************************************//**
+** \brief Search algorithm to match the desired baudrate to a possible bus timing
+** configuration.
+** \param baud The desired baudrate in kbps. Valid values are 10..1000.
+** \param btr0 Pointer to where the value for register CANxBTR0 will be stored.
+** \param btr1 Pointer to where the value for register CANxBTR1 will be stored.
+** \return 1 if the CAN bustiming register values were found, 0 otherwise.
+**
+****************************************************************************************/
+static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned char *btr0, unsigned char *btr1)
+{
+ unsigned char prescaler;
+ unsigned char cnt;
+
+ /* loop through all possible time quanta configurations to find a match */
+ for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
+ {
+ if ((BOOT_CPU_XTAL_SPEED_KHZ % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
+ {
+ /* compute the prescaler that goes with this TQ configuration */
+ prescaler = (unsigned char)(BOOT_CPU_XTAL_SPEED_KHZ/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1)));
+
+ /* make sure the prescaler is valid */
+ if ( (prescaler > 0) && (prescaler <= 64) )
+ {
+ /* store the MSCAN bustiming register values */
+ *btr0 = prescaler - 1;
+ *btr1 = ((canTiming[cnt].tseg2 - 1) << 4) | (canTiming[cnt].tseg1 - 1);
+ /* found a good bus timing configuration */
+ return 1;
+ }
+ }
+ }
+ /* could not find a good bus timing configuration */
+ return 0;
+} /*** end of CanGetSpeedConfig ***/
+
+
+/************************************************************************************//**
+** \brief Initializes the CAN communication interface.
+** \return none.
+**
+****************************************************************************************/
+void BootComInit(void)
+{
+ unsigned char btrRegValues[2];
+ unsigned long accept_code;
+ unsigned long accept_mask;
+
+ /* enter initialization mode. note that this automatically disables CAN interrupts */
+ CAN0CTL0 = CAN0CTL0_INITRQ_MASK;
+ /* wait for initialization mode entry handshake from the hardware */
+ while ((CAN0CTL1 & CAN0CTL1_INITAK_MASK) == 0)
+ {
+ ;
+ }
+
+ /* enable the CAN controller, disable wake up and listen modes and set the
+ * crystal oscillator as the clock source.
+ */
+ CAN0CTL1 = CAN0CTL1_CANE_MASK;
+
+ /* configure baudrate */
+ if (CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &btrRegValues[0], &btrRegValues[1]) == 1)
+ {
+ /* configure the baudrate */
+ CAN0BTR0 = btrRegValues[0];
+ CAN0BTR1 = btrRegValues[1];
+ }
+
+ /* enable 2 32-bit acceptance filters. both will be configured for the same code and
+ * mask. the only difference is that filter 0 will be setup to receive extended 29-bit
+ * identifiers and filter 0 to receive standard 11-bit identifiers.
+ */
+ CAN0IDAC_IDAM0 = 0;
+ CAN0IDAC_IDAM1 = 0;
+
+ /* set the acceptance filter code and mask to receive all messages */
+ accept_code = 0x00000000;
+ accept_mask = 0x1fffffff;
+
+ /* configure acceptance filter 0 for 29-bit extended identifiers */
+ CAN0IDAR0 = CONVERT_EXT_ID_TO_REG0(accept_code);
+ CAN0IDAR1 = CONVERT_EXT_ID_TO_REG1(accept_code);
+ CAN0IDAR2 = CONVERT_EXT_ID_TO_REG2(accept_code);
+ CAN0IDAR3 = CONVERT_EXT_ID_TO_REG3(accept_code);
+ CAN0IDMR0 = CONVERT_EXT_ID_TO_REG0(accept_mask);
+ CAN0IDMR1 = (CONVERT_EXT_ID_TO_REG1(accept_mask) | 0x10) & (unsigned char)(~0x08);
+ CAN0IDMR2 = CONVERT_EXT_ID_TO_REG2(accept_mask);
+ CAN0IDMR3 = CONVERT_EXT_ID_TO_REG3(accept_mask);
+
+ /* configure acceptance filter 1 for 11-bit standard identifiers */
+ CAN0IDAR4 = CONVERT_STD_ID_TO_REG0(accept_code);
+ CAN0IDAR5 = CONVERT_STD_ID_TO_REG1(accept_code);
+ CAN0IDAR6 = CONVERT_STD_ID_TO_REG2(accept_code);
+ CAN0IDAR7 = CONVERT_STD_ID_TO_REG3(accept_code);
+ CAN0IDMR4 = CONVERT_STD_ID_TO_REG0(accept_mask);
+ CAN0IDMR5 = CONVERT_STD_ID_TO_REG1(accept_mask) | (0x04 | 0x02 | 0x01);
+ CAN0IDMR6 = CONVERT_STD_ID_TO_REG2(accept_mask);
+ CAN0IDMR7 = CONVERT_STD_ID_TO_REG3(accept_mask);
+
+ /* leave initialization mode and synchronize to the CAN bus */
+ CAN0CTL0_INITRQ = 0;
+ /* wait for CAN bus synchronization handshake from the hardware */
+ while ((CAN0CTL1 & CAN0CTL1_INITAK_MASK) != 0)
+ {
+ ;
+ }
+} /*** end of BootComInit ***/
+
+
+/************************************************************************************//**
+** \brief Receives the CONNECT request from the host, which indicates that the
+** bootloader should be activated and, if so, activates it.
+** \return none.
+**
+****************************************************************************************/
+void BootComCheckActivationRequest(void)
+{
+ unsigned long rxMsgId;
+
+ /* check if a new message was received */
+ if ((CAN0RFLG & CAN0RFLG_RXF_MASK) == CAN0RFLG_RXF_MASK)
+ {
+ /* check IDE-bit to determine if it is a 11-bit or 29-bit identifier */
+ if ((CAN0RXIDR1 & CAN0RXIDR1_IDE_MASK) == 0)
+ {
+ /* 11-bit id */
+ rxMsgId = (*(unsigned short*)(&CAN0RXIDR0)) >> 5;
+ }
+ else
+ {
+ /* 29-bit id */
+ rxMsgId = (unsigned long)(((*(unsigned long*)(&CAN0RXIDR0)) & 0x0007ffff) >> 1) |
+ (unsigned long)(((*(unsigned long*)(&CAN0RXIDR0)) & 0xffe00000) >> 3);
+ }
+ /* is this the packet identifier? */
+ if (rxMsgId == BOOT_COM_CAN_RX_MSG_ID)
+ {
+ /* check if this was an XCP CONNECT command */
+ if ( (CAN0RXDSR0 == 0xff) && (CAN0RXDSR1 == 0x00) )
+ {
+ /* release the receive object by clearing the rx flag */
+ CAN0RFLG &= CAN0RFLG_RXF_MASK;
+ /* connection request received so start the bootloader */
+ BootActivate();
+ }
+
+ }
+ /* release the receive object by clearing the rx flag */
+ CAN0RFLG &= CAN0RFLG_RXF_MASK;
+ }
+} /*** end of BootComCheckActivationRequest ***/
+#endif /* BOOT_COM_CAN_ENABLE > 0 */
+
+
/*********************************** end of boot.c *************************************/
diff --git a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/ide/hcs12_Data/Standard/TargetDataWindows.tdt b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/ide/hcs12_Data/Standard/TargetDataWindows.tdt
index d0187ce1..6735bcc6 100644
Binary files a/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/ide/hcs12_Data/Standard/TargetDataWindows.tdt and b/Target/Demo/HCS12_Evbplus_Dragon12p_CodeWarrior/Prog/ide/hcs12_Data/Standard/TargetDataWindows.tdt differ
diff --git a/Target/Source/HCS12/can.c b/Target/Source/HCS12/can.c
new file mode 100644
index 00000000..836d7c97
--- /dev/null
+++ b/Target/Source/HCS12/can.c
@@ -0,0 +1,442 @@
+/************************************************************************************//**
+* \file Source\HCS12\can.c
+* \brief Bootloader CAN communication interface source file.
+* \ingroup Target_HCS12
+* \internal
+*----------------------------------------------------------------------------------------
+* C O P Y R I G H T
+*----------------------------------------------------------------------------------------
+* Copyright (c) 2013 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 should have received a copy of the GNU General Public License along with OpenBLT.
+* If not, see .
+*
+* A special exception to the GPL is included to allow you to distribute a combined work
+* that includes OpenBLT without being obliged to provide the source code for any
+* proprietary components. The exception text is included at the bottom of the license
+* file .
+*
+* \endinternal
+****************************************************************************************/
+
+
+/****************************************************************************************
+* Include files
+****************************************************************************************/
+#include "boot.h" /* bootloader generic header */
+
+
+#if (BOOT_COM_CAN_ENABLE > 0)
+/****************************************************************************************
+* Type definitions
+****************************************************************************************/
+/** \brief Structure type with the layout of a CAN reception message slot. */
+typedef volatile struct
+{
+ volatile blt_int8u idr[4]; /**< identifier register 0..3 */
+ volatile blt_int8u dsr[8]; /**< data segment register 0..7 */
+ volatile blt_int8u dlr; /**< data length register */
+ volatile blt_int8u dummy; /**< unused */
+ volatile blt_int16u tstamp; /**< timestamp register */
+} tCanRxMsgSlot;
+
+/** \brief Structure type with the layout of a CAN transmit message slot. */
+typedef volatile struct
+{
+ volatile blt_int8u idr[4]; /**< identifier register 0..3 */
+ volatile blt_int8u dsr[8]; /**< data segment register 0..7 */
+ volatile blt_int8u dlr; /**< data length register */
+ volatile blt_int8u tbpr; /**< transmit buffer priority register */
+ volatile blt_int16u tstamp; /**< timestamp register */
+} tCanTxMsgSlot;
+
+/** \brief Structure type with the layout of the CAN related control registers. */
+typedef volatile struct
+{
+ volatile blt_int8u cctl0; /**< control register 0 */
+ volatile blt_int8u cctl1; /**< control register 1 */
+ volatile blt_int8u cbtr0; /**< bus timing register 0 */
+ volatile blt_int8u cbtr1; /**< bus timing register 1 */
+ volatile blt_int8u crflg; /**< receiver flag register */
+ volatile blt_int8u crier; /**< receiver interrupt enable register */
+ volatile blt_int8u ctflg; /**< transmitter flag register */
+ volatile blt_int8u ctier; /**< transmitter interrupt enable register */
+ volatile blt_int8u ctarq; /**< transmitter message abort control */
+ volatile blt_int8u ctaak; /**< transmitter message abort control */
+ volatile blt_int8u ctbsel; /**< transmit buffer selection */
+ volatile blt_int8u cidac; /**< identifier acceptance control register */
+ volatile blt_int8u dummy1[2]; /**< reserved (2) */
+ volatile blt_int8u crxerr; /**< receive error counter */
+ volatile blt_int8u ctxerr; /**< transmit error counter */
+ volatile blt_int8u cidar0; /**< identifier acceptance register 0 */
+ volatile blt_int8u cidar1; /**< identifier acceptance register 1 */
+ volatile blt_int8u cidar2; /**< identifier acceptance register 2 */
+ volatile blt_int8u cidar3; /**< identifier acceptance register 3 */
+ volatile blt_int8u cidmr0; /**< identifier mask register 0 */
+ volatile blt_int8u cidmr1; /**< identifier mask register 1 */
+ volatile blt_int8u cidmr2; /**< identifier mask register 2 */
+ volatile blt_int8u cidmr3; /**< identifier mask register 3 */
+ volatile blt_int8u cidar4; /**< identifier acceptance register 4 */
+ volatile blt_int8u cidar5; /**< identifier acceptance register 5 */
+ volatile blt_int8u cidar6; /**< identifier acceptance register 6 */
+ volatile blt_int8u cidar7; /**< identifier acceptance register 7 */
+ volatile blt_int8u cidmr4; /**< identifier mask register 4 */
+ volatile blt_int8u cidmr5; /**< identifier mask register 5 */
+ volatile blt_int8u cidmr6; /**< identifier mask register 6 */
+ volatile blt_int8u cidmr7; /**< identifier mask register 7 */
+ volatile tCanRxMsgSlot rxSlot; /**< foreground receive message slot */
+ volatile tCanTxMsgSlot txSlot; /**< foreground transmit message slot */
+} tCanRegs;
+
+
+/** \brief Structure type with the layout of the CAN bus timing registers. */
+typedef struct
+{
+ blt_int8u tseg1; /**< CAN time segment 1 */
+ blt_int8u tseg2; /**< CAN time segment 2 */
+} tCanBusTiming;
+
+
+/****************************************************************************************
+* Macro definitions
+****************************************************************************************/
+#if (BOOT_COM_CAN_CHANNEL_INDEX == 0)
+/** \brief Set CAN base address to CAN0. */
+#define CAN_REGS_BASE_ADDRESS (0x0140)
+#elif (BOOT_COM_CAN_CHANNEL_INDEX == 1)
+/** \brief Set CAN base address to CAN1. */
+#define CAN_REGS_BASE_ADDRESS (0x0180)
+#elif (BOOT_COM_CAN_CHANNEL_INDEX == 2)
+/** \brief Set CAN base address to CAN2. */
+#define CAN_REGS_BASE_ADDRESS (0x01c0)
+#elif (BOOT_COM_CAN_CHANNEL_INDEX == 3)
+/** \brief Set CAN base address to CAN3. */
+#define CAN_REGS_BASE_ADDRESS (0x0200)
+#elif (BOOT_COM_CAN_CHANNEL_INDEX == 4)
+/** \brief Set CAN base address to CAN4. */
+#define CAN_REGS_BASE_ADDRESS (0x0280)
+#endif
+/** \brief Macro for accessing the CAN related control registers. */
+#define CAN ((volatile tCanRegs *)CAN_REGS_BASE_ADDRESS)
+/** \brief Configures a CAN message id for 29-bit (extended). */
+#define EXTIDMASK_BIT (0x80000000)
+/* macros for conveniently converting standard and extended message identifiers to the
+ * format specified by the MSCAN message slot.
+ */
+#define CONVERT_STD_ID_TO_REG0(id) ((blt_int8u)(((blt_int16u)id & 0x07f8) >> 3))
+#define CONVERT_STD_ID_TO_REG1(id) ((blt_int8u)(id & 0x07) << 5)
+#define CONVERT_STD_ID_TO_REG2(id) (0)
+#define CONVERT_STD_ID_TO_REG3(id) (0)
+#define CONVERT_EXT_ID_TO_REG0(id) ((blt_int8u)(id >> 21))
+#define CONVERT_EXT_ID_TO_REG1(id) ((((blt_int8u)(id >> 15)) & 0x07) | \
+ (((blt_int8u)(id >> 13)) & 0xe0) | (IDE_BIT))
+#define CONVERT_EXT_ID_TO_REG2(id) ((blt_int8u)(((blt_int16u)id & 0x7f80) >> 7))
+#define CONVERT_EXT_ID_TO_REG3(id) ((blt_int8u)(id & 0x7f) << 1)
+
+
+/****************************************************************************************
+* Register definitions
+****************************************************************************************/
+/** \brief Initialization mode request bit. */
+#define INITRQ_BIT (0x01)
+/** \brief Initialization mode handshake bit. */
+#define INITAK_BIT (0x01)
+/** \brief CAN controller enable bit. */
+#define CANE_BIT (0x80)
+/** \brief Filter mode bit 0. */
+#define IDAM0_BIT (0x10)
+/** \brief Filter mode bit 1. */
+#define IDAM1_BIT (0x20)
+/** \brief Transmit buffer 0 select bit. */
+#define TX0_BIT (0x01)
+/** \brief Transmit buffer 0 empty bit. */
+#define TXE0_BIT (0x01)
+/** \brief 29-bit extended id bit. */
+#define IDE_BIT (0x08)
+/** \brief Receive buffer full flag bit. */
+#define RXF_BIT (0x01)
+
+
+/****************************************************************************************
+* Function prototypes
+****************************************************************************************/
+static blt_bool CanGetSpeedConfig(blt_int16u baud, blt_int8u *btr0, blt_int8u *btr1);
+
+
+/****************************************************************************************
+* Local constant declarations
+****************************************************************************************/
+/**
+* \brief Array with possible time quanta configurations.
+* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
+* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
+* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2)
+* * 100%. This array contains possible and valid time quanta configurations
+* with a sample point between 68..78%.
+*/
+static const tCanBusTiming canTiming[] =
+{ /* TQ | TSEG1 | TSEG2 | SP */
+ /* ------------------------- */
+ { 5, 2 }, /* 8 | 5 | 2 | 75% */
+ { 6, 2 }, /* 9 | 6 | 2 | 78% */
+ { 6, 3 }, /* 10 | 6 | 3 | 70% */
+ { 7, 3 }, /* 11 | 7 | 3 | 73% */
+ { 8, 3 }, /* 12 | 8 | 3 | 75% */
+ { 9, 3 }, /* 13 | 9 | 3 | 77% */
+ { 9, 4 }, /* 14 | 9 | 4 | 71% */
+ { 10, 4 }, /* 15 | 10 | 4 | 73% */
+ { 11, 4 }, /* 16 | 11 | 4 | 75% */
+ { 12, 4 }, /* 17 | 12 | 4 | 76% */
+ { 12, 5 }, /* 18 | 12 | 5 | 72% */
+ { 13, 5 }, /* 19 | 13 | 5 | 74% */
+ { 14, 5 }, /* 20 | 14 | 5 | 75% */
+ { 15, 5 }, /* 21 | 15 | 5 | 76% */
+ { 15, 6 }, /* 22 | 15 | 6 | 73% */
+ { 16, 6 }, /* 23 | 16 | 6 | 74% */
+ { 16, 7 }, /* 24 | 16 | 7 | 71% */
+ { 16, 8 } /* 25 | 16 | 8 | 68% */
+};
+
+
+/************************************************************************************//**
+** \brief Initializes the CAN controller and synchronizes it to the CAN bus.
+** \return none.
+**
+****************************************************************************************/
+void CanInit(void)
+{
+ blt_int8u btrRegValues[2];
+ blt_bool result;
+ blt_int32u accept_code;
+ blt_int32u accept_mask;
+
+ /* the current implementation supports CAN0..4. throw an assertion error in case a
+ * different CAN channel is configured.
+ */
+ ASSERT_CT((BOOT_COM_CAN_CHANNEL_INDEX >= 0) && (BOOT_COM_CAN_CHANNEL_INDEX <= 4));
+
+ /* enter initialization mode. note that this automatically disables CAN interrupts */
+ CAN->cctl0 = INITRQ_BIT;
+ /* wait for initialization mode entry handshake from the hardware */
+ while ((CAN->cctl1 & INITAK_BIT) == 0)
+ {
+ ;
+ }
+
+ /* enable the CAN controller, disable wake up and listen modes and set the
+ * crystal oscillator as the clock source.
+ */
+ CAN->cctl1 = CANE_BIT;
+
+ /* configure baudrate */
+ result = CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &btrRegValues[0], &btrRegValues[1]);
+ ASSERT_RT(result == BLT_TRUE);
+
+ /* configure the baudrate */
+ CAN->cbtr0 = btrRegValues[0];
+ CAN->cbtr1 = btrRegValues[1];
+
+ /* enable 2 32-bit acceptance filters. both will be configured for the same code and
+ * mask. the only difference is that filter 0 will be setup to receive extended 29-bit
+ * identifiers and filter 0 to receive standard 11-bit identifiers.
+ */
+ CAN->cidac &= ~(IDAM1_BIT | IDAM0_BIT);
+
+ /* set the acceptance filter code and mask to a value that only BOOT_COM_CAN_RX_MSG_ID
+ * is received.
+ */
+ accept_code = BOOT_COM_CAN_RX_MSG_ID;
+ accept_mask = 0;
+
+ /* configure acceptance filter 0 for 29-bit extended identifiers */
+ CAN->cidar0 = CONVERT_EXT_ID_TO_REG0(accept_code);
+ CAN->cidar1 = CONVERT_EXT_ID_TO_REG1(accept_code);
+ CAN->cidar2 = CONVERT_EXT_ID_TO_REG2(accept_code);
+ CAN->cidar3 = CONVERT_EXT_ID_TO_REG3(accept_code);
+ CAN->cidmr0 = CONVERT_EXT_ID_TO_REG0(accept_mask);
+ CAN->cidmr1 = (CONVERT_EXT_ID_TO_REG1(accept_mask) | 0x10) & ~IDE_BIT;
+ CAN->cidmr2 = CONVERT_EXT_ID_TO_REG2(accept_mask);
+ CAN->cidmr3 = CONVERT_EXT_ID_TO_REG3(accept_mask);
+
+ /* configure acceptance filter 1 for 11-bit standard identifiers */
+ CAN->cidar4 = CONVERT_STD_ID_TO_REG0(accept_code);
+ CAN->cidar5 = CONVERT_STD_ID_TO_REG1(accept_code);
+ CAN->cidar6 = CONVERT_STD_ID_TO_REG2(accept_code);
+ CAN->cidar7 = CONVERT_STD_ID_TO_REG3(accept_code);
+ CAN->cidmr4 = CONVERT_STD_ID_TO_REG0(accept_mask);
+ CAN->cidmr5 = CONVERT_STD_ID_TO_REG1(accept_mask) | (0x04 | 0x02 | 0x01);
+ CAN->cidmr6 = CONVERT_STD_ID_TO_REG2(accept_mask);
+ CAN->cidmr7 = CONVERT_STD_ID_TO_REG3(accept_mask);
+
+ /* leave initialization mode and synchronize to the CAN bus */
+ CAN->cctl0 &= ~INITRQ_BIT;
+ /* wait for CAN bus synchronization handshake from the hardware */
+ while ((CAN->cctl1 & INITAK_BIT) != 0)
+ {
+ ;
+ }
+
+ /* bring transmit buffer 0 in the foreground as this is the only one used by this
+ * driver.
+ */
+ CAN->ctbsel = TX0_BIT;
+} /*** end of CanInit ***/
+
+
+/************************************************************************************//**
+** \brief Transmits a packet formatted for the communication interface.
+** \param data Pointer to byte array with data that it to be transmitted.
+** \param len Number of bytes that are to be transmitted.
+** \return none.
+**
+****************************************************************************************/
+void CanTransmitPacket(blt_int8u *data, blt_int8u len)
+{
+ blt_int8u byte_idx;
+
+ /* double check that the transmit slot is really available */
+ ASSERT_RT((CAN->ctflg & TXE0_BIT) != 0);
+
+ /* is this a message with an 11-bit identifier? */
+ if ((BOOT_COM_CAN_TX_MSG_ID & EXTIDMASK_BIT) == 0)
+ {
+ /* store the identifier */
+ CAN->txSlot.idr[0] = CONVERT_STD_ID_TO_REG0(BOOT_COM_CAN_TX_MSG_ID);
+ CAN->txSlot.idr[1] = CONVERT_STD_ID_TO_REG1(BOOT_COM_CAN_TX_MSG_ID);
+ CAN->txSlot.idr[2] = CONVERT_STD_ID_TO_REG2(BOOT_COM_CAN_TX_MSG_ID);
+ CAN->txSlot.idr[3] = CONVERT_STD_ID_TO_REG3(BOOT_COM_CAN_TX_MSG_ID);
+ }
+ else
+ {
+ /* store the identifier */
+ CAN->txSlot.idr[0] = CONVERT_EXT_ID_TO_REG0(BOOT_COM_CAN_TX_MSG_ID);
+ CAN->txSlot.idr[1] = CONVERT_EXT_ID_TO_REG1(BOOT_COM_CAN_TX_MSG_ID);
+ CAN->txSlot.idr[2] = CONVERT_EXT_ID_TO_REG2(BOOT_COM_CAN_TX_MSG_ID);
+ CAN->txSlot.idr[3] = CONVERT_EXT_ID_TO_REG3(BOOT_COM_CAN_TX_MSG_ID);
+ }
+
+ /* store the data length code */
+ CAN->txSlot.dlr = len;
+
+ /* store the message data */
+ for (byte_idx=0; byte_idxtxSlot.dsr[byte_idx] = data[byte_idx];
+ }
+
+ /* start the transmission by clearing the buffer empty flag. must be done
+ * by writing a 1 value.
+ */
+ CAN->ctflg = TXE0_BIT;
+
+ /* wait for transmit completion */
+ while ((CAN->ctflg & TXE0_BIT) == 0)
+ {
+ /* keep the watchdog happy */
+ CopService();
+ }
+} /*** end of CanTransmitPacket ***/
+
+
+/************************************************************************************//**
+** \brief Receives a communication interface packet if one is present.
+** \param data Pointer to byte array where the data is to be stored.
+** \return BLT_TRUE is a packet was received, BLT_FALSE otherwise.
+**
+****************************************************************************************/
+blt_bool CanReceivePacket(blt_int8u *data)
+{
+ blt_int32u rxMsgId;
+ blt_int8u rxMsgLen;
+ blt_int8u byte_idx;
+ blt_bool result = BLT_FALSE;
+
+ /* check if a new message was received */
+ if ((CAN->crflg & RXF_BIT) == RXF_BIT)
+ {
+ /* check IDE-bit to determine if it is a 11-bit or 29-bit identifier */
+ if ((CAN->rxSlot.idr[1] & IDE_BIT) == 0)
+ {
+ /* 11-bit id */
+ rxMsgId = (*(blt_int16u*)(&CAN->rxSlot.idr[0])) >> 5;
+ }
+ else
+ {
+ /* 29-bit id */
+ rxMsgId = (blt_int32u)(((*(blt_int32u*)(&CAN->rxSlot.idr[0])) & 0x0007ffff) >> 1) |
+ (blt_int32u)(((*(blt_int32u*)(&CAN->rxSlot.idr[0])) & 0xffe00000) >> 3);
+ }
+ /* is this the packet identifier? */
+ if (rxMsgId == BOOT_COM_CAN_RX_MSG_ID)
+ {
+ result = BLT_TRUE;
+ /* store the dlc */
+ rxMsgLen = CAN->rxSlot.dlr & 0xf;
+ /* copy message data */
+ for (byte_idx=0; byte_idxrxSlot.dsr[byte_idx];
+ }
+ }
+ /* release the receive object by clearing the rx flag */
+ CAN->crflg &= RXF_BIT;
+ }
+ return result;
+} /*** end of CanReceivePacket ***/
+
+
+/************************************************************************************//**
+** \brief Search algorithm to match the desired baudrate to a possible bus timing
+** configuration.
+** \param baud The desired baudrate in kbps. Valid values are 10..1000.
+** \param btr0 Pointer to where the value for register CANxBTR0 will be stored.
+** \param btr1 Pointer to where the value for register CANxBTR1 will be stored.
+** \return BLT_TRUE if the CAN bustiming register values were found, BLT_FALSE
+** otherwise.
+**
+****************************************************************************************/
+static blt_bool CanGetSpeedConfig(blt_int16u baud, blt_int8u *btr0, blt_int8u *btr1)
+{
+ blt_int8u prescaler;
+ blt_int8u cnt;
+
+ /* loop through all possible time quanta configurations to find a match */
+ for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
+ {
+ if ((BOOT_CPU_XTAL_SPEED_KHZ % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
+ {
+ /* compute the prescaler that goes with this TQ configuration */
+ prescaler = (blt_int8u)(BOOT_CPU_XTAL_SPEED_KHZ/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1)));
+
+ /* make sure the prescaler is valid */
+ if ( (prescaler > 0) && (prescaler <= 64) )
+ {
+ /* store the MSCAN bustiming register values */
+ *btr0 = prescaler - 1;
+ *btr1 = ((canTiming[cnt].tseg2 - 1) << 4) | (canTiming[cnt].tseg1 - 1);
+ /* found a good bus timing configuration */
+ return BLT_TRUE;
+ }
+ }
+ /* service the watchdog */
+ CopService();
+ }
+ /* could not find a good bus timing configuration */
+ return BLT_FALSE;
+} /*** end of CanGetSpeedConfig ***/
+#endif /* BOOT_COM_CAN_ENABLE > 0 */
+
+
+/*********************************** end of can.c **************************************/
diff --git a/Target/Source/HCS12/can.h b/Target/Source/HCS12/can.h
new file mode 100644
index 00000000..de5debe8
--- /dev/null
+++ b/Target/Source/HCS12/can.h
@@ -0,0 +1,47 @@
+/************************************************************************************//**
+* \file Source\HCS12\can.h
+* \brief Bootloader CAN communication interface header file.
+* \ingroup Target_HCS12
+* \internal
+*----------------------------------------------------------------------------------------
+* C O P Y R I G H T
+*----------------------------------------------------------------------------------------
+* Copyright (c) 2013 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 should have received a copy of the GNU General Public License along with OpenBLT.
+* If not, see .
+*
+* A special exception to the GPL is included to allow you to distribute a combined work
+* that includes OpenBLT without being obliged to provide the source code for any
+* proprietary components. The exception text is included at the bottom of the license
+* file .
+*
+* \endinternal
+****************************************************************************************/
+#ifndef CAN_H
+#define CAN_H
+
+#if (BOOT_COM_CAN_ENABLE > 0)
+/****************************************************************************************
+* Function prototypes
+****************************************************************************************/
+void CanInit(void);
+void CanTransmitPacket(blt_int8u *data, blt_int8u len);
+blt_bool CanReceivePacket(blt_int8u *data);
+#endif /* BOOT_COM_CAN_ENABLE > 0 */
+
+
+#endif /* CAN_H */
+/*********************************** end of can.h **************************************/
diff --git a/Target/Source/HCS12/uart.c b/Target/Source/HCS12/uart.c
index 4f91e6c9..95b22c8d 100644
--- a/Target/Source/HCS12/uart.c
+++ b/Target/Source/HCS12/uart.c
@@ -41,7 +41,7 @@
/****************************************************************************************
* Type definitions
****************************************************************************************/
-/** \brief Structure type with the layout of the UART related controler registers. */
+/** \brief Structure type with the layout of the UART related control registers. */
typedef volatile struct
{
volatile blt_int8u scibdh; /**< baudrate control register [SBR 12..8] */