1*2fd737d3SMatthias Ringwald/********************************************************************* 2*2fd737d3SMatthias Ringwald* (c) SEGGER Microcontroller GmbH * 3*2fd737d3SMatthias Ringwald* The Embedded Experts * 4*2fd737d3SMatthias Ringwald* www.segger.com * 5*2fd737d3SMatthias Ringwald********************************************************************** 6*2fd737d3SMatthias Ringwald 7*2fd737d3SMatthias RingwaldFile : 8*2fd737d3SMatthias RingwaldCreated : 21 May 2020 21:39 9*2fd737d3SMatthias RingwaldOzone Version : V3.10j 10*2fd737d3SMatthias Ringwald*/ 11*2fd737d3SMatthias Ringwald 12*2fd737d3SMatthias Ringwald/********************************************************************* 13*2fd737d3SMatthias Ringwald* 14*2fd737d3SMatthias Ringwald* OnProjectLoad 15*2fd737d3SMatthias Ringwald* 16*2fd737d3SMatthias Ringwald* Function description 17*2fd737d3SMatthias Ringwald* Project load routine. Required. 18*2fd737d3SMatthias Ringwald* 19*2fd737d3SMatthias Ringwald********************************************************************** 20*2fd737d3SMatthias Ringwald*/ 21*2fd737d3SMatthias Ringwaldvoid OnProjectLoad (void) { 22*2fd737d3SMatthias Ringwald // 23*2fd737d3SMatthias Ringwald // Dialog-generated settings 24*2fd737d3SMatthias Ringwald // 25*2fd737d3SMatthias Ringwald Project.SetDevice ("STM32L451RE"); 26*2fd737d3SMatthias Ringwald Project.SetHostIF ("USB", "600106917"); 27*2fd737d3SMatthias Ringwald Project.SetTargetIF ("SWD"); 28*2fd737d3SMatthias Ringwald Project.SetTIFSpeed ("Automatic"); 29*2fd737d3SMatthias Ringwald Project.AddPathSubstitute ("/Users/mringwal/Projects/sx1280-ble", "$(ProjectDir)"); 30*2fd737d3SMatthias Ringwald Project.AddPathSubstitute ("/users/mringwal/projects/sx1280-ble", "$(ProjectDir)"); 31*2fd737d3SMatthias Ringwald Project.AddSvdFile ("/Applications/SEGGER/Ozone/Ozone.app/Contents/MacOS/Config/CPU/Cortex-M4F.svd"); 32*2fd737d3SMatthias Ringwald // 33*2fd737d3SMatthias Ringwald // User settings 34*2fd737d3SMatthias Ringwald // 35*2fd737d3SMatthias Ringwald File.Open ("$(ProjectDir)/EXAMPLE.elf"); 36*2fd737d3SMatthias Ringwald} 37*2fd737d3SMatthias Ringwald 38*2fd737d3SMatthias Ringwald/********************************************************************* 39*2fd737d3SMatthias Ringwald* 40*2fd737d3SMatthias Ringwald* OnSnapshotLoad 41*2fd737d3SMatthias Ringwald* 42*2fd737d3SMatthias Ringwald* Function description 43*2fd737d3SMatthias Ringwald* Called upon loading a snapshot. Optional. 44*2fd737d3SMatthias Ringwald* 45*2fd737d3SMatthias Ringwald* Additional information 46*2fd737d3SMatthias Ringwald* This function is used to restore the target state in cases 47*2fd737d3SMatthias Ringwald* where values cannot simply be written to the target. 48*2fd737d3SMatthias Ringwald* Typical use: GPIO clock needs to be enabled, before 49*2fd737d3SMatthias Ringwald* GPIO is configured. 50*2fd737d3SMatthias Ringwald* 51*2fd737d3SMatthias Ringwald********************************************************************** 52*2fd737d3SMatthias Ringwald*/ 53*2fd737d3SMatthias Ringwald//void OnSnapshotLoad (void) { 54*2fd737d3SMatthias Ringwald//} 55*2fd737d3SMatthias Ringwald 56*2fd737d3SMatthias Ringwald/********************************************************************* 57*2fd737d3SMatthias Ringwald* 58*2fd737d3SMatthias Ringwald* OnSnapshotSave 59*2fd737d3SMatthias Ringwald* 60*2fd737d3SMatthias Ringwald* Function description 61*2fd737d3SMatthias Ringwald* Called upon saving a snapshot. Optional. 62*2fd737d3SMatthias Ringwald* 63*2fd737d3SMatthias Ringwald* Additional information 64*2fd737d3SMatthias Ringwald* This function is usually used to save values of the target 65*2fd737d3SMatthias Ringwald* state which can either not be trivially read, 66*2fd737d3SMatthias Ringwald* or need to be restored in a specific way or order. 67*2fd737d3SMatthias Ringwald* Typically use: Memory Mapped Registers, 68*2fd737d3SMatthias Ringwald* such as PLL and GPIO configuration. 69*2fd737d3SMatthias Ringwald* 70*2fd737d3SMatthias Ringwald********************************************************************** 71*2fd737d3SMatthias Ringwald*/ 72*2fd737d3SMatthias Ringwald//void OnSnapshotSave (void) { 73*2fd737d3SMatthias Ringwald//} 74*2fd737d3SMatthias Ringwald 75*2fd737d3SMatthias Ringwald/********************************************************************* 76*2fd737d3SMatthias Ringwald* 77*2fd737d3SMatthias Ringwald* OnError 78*2fd737d3SMatthias Ringwald* 79*2fd737d3SMatthias Ringwald* Function description 80*2fd737d3SMatthias Ringwald* Called when an error or unexpected condition ocurred. Optional. 81*2fd737d3SMatthias Ringwald* 82*2fd737d3SMatthias Ringwald********************************************************************** 83*2fd737d3SMatthias Ringwald*/ 84*2fd737d3SMatthias Ringwald//void OnError (const char* sErrorMsg) { 85*2fd737d3SMatthias Ringwald//} 86*2fd737d3SMatthias Ringwald 87*2fd737d3SMatthias Ringwald/********************************************************************* 88*2fd737d3SMatthias Ringwald* 89*2fd737d3SMatthias Ringwald* TargetReset 90*2fd737d3SMatthias Ringwald* 91*2fd737d3SMatthias Ringwald* Function description 92*2fd737d3SMatthias Ringwald* Replaces the default target device reset routine. Optional. 93*2fd737d3SMatthias Ringwald* 94*2fd737d3SMatthias Ringwald* Notes 95*2fd737d3SMatthias Ringwald* This example demonstrates the usage when 96*2fd737d3SMatthias Ringwald* debugging a RAM program on a Cortex-M target device 97*2fd737d3SMatthias Ringwald* 98*2fd737d3SMatthias Ringwald********************************************************************** 99*2fd737d3SMatthias Ringwald*/ 100*2fd737d3SMatthias Ringwald//void TargetReset (void) { 101*2fd737d3SMatthias Ringwald// 102*2fd737d3SMatthias Ringwald// unsigned int SP; 103*2fd737d3SMatthias Ringwald// unsigned int PC; 104*2fd737d3SMatthias Ringwald// unsigned int VectorTableAddr; 105*2fd737d3SMatthias Ringwald// 106*2fd737d3SMatthias Ringwald// VectorTableAddr = Program.GetBaseAddr(); 107*2fd737d3SMatthias Ringwald// 108*2fd737d3SMatthias Ringwald// if (VectorTableAddr != 0xFFFFFFFF) { 109*2fd737d3SMatthias Ringwald// SP = Target.ReadU32(VectorTableAddr); 110*2fd737d3SMatthias Ringwald// Target.SetReg("SP", SP); 111*2fd737d3SMatthias Ringwald// } else { 112*2fd737d3SMatthias Ringwald// Util.Log("Project file error: failed to get program base"); 113*2fd737d3SMatthias Ringwald// } 114*2fd737d3SMatthias Ringwald// 115*2fd737d3SMatthias Ringwald// PC = Elf.GetEntryPointPC(); 116*2fd737d3SMatthias Ringwald// 117*2fd737d3SMatthias Ringwald// if (PC != 0xFFFFFFFF) { 118*2fd737d3SMatthias Ringwald// Target.SetReg("PC", PC); 119*2fd737d3SMatthias Ringwald// } else if (VectorTableAddr != 0xFFFFFFFF) { 120*2fd737d3SMatthias Ringwald// PC = Target.ReadU32(VectorTableAddr + 4); 121*2fd737d3SMatthias Ringwald// Target.SetReg("PC", PC); 122*2fd737d3SMatthias Ringwald//} 123*2fd737d3SMatthias Ringwald/********************************************************************* 124*2fd737d3SMatthias Ringwald* 125*2fd737d3SMatthias Ringwald* BeforeTargetReset 126*2fd737d3SMatthias Ringwald* 127*2fd737d3SMatthias Ringwald* Function description 128*2fd737d3SMatthias Ringwald* Event handler routine. Optional. 129*2fd737d3SMatthias Ringwald* 130*2fd737d3SMatthias Ringwald********************************************************************** 131*2fd737d3SMatthias Ringwald*/ 132*2fd737d3SMatthias Ringwald//void BeforeTargetReset (void) { 133*2fd737d3SMatthias Ringwald//} 134*2fd737d3SMatthias Ringwald 135*2fd737d3SMatthias Ringwald/********************************************************************* 136*2fd737d3SMatthias Ringwald* 137*2fd737d3SMatthias Ringwald* AfterTargetReset 138*2fd737d3SMatthias Ringwald* 139*2fd737d3SMatthias Ringwald* Function description 140*2fd737d3SMatthias Ringwald* Event handler routine. 141*2fd737d3SMatthias Ringwald* - Sets the PC register to program reset value. 142*2fd737d3SMatthias Ringwald* - Sets the SP register to program reset value on Cortex-M. 143*2fd737d3SMatthias Ringwald* 144*2fd737d3SMatthias Ringwald********************************************************************** 145*2fd737d3SMatthias Ringwald*/ 146*2fd737d3SMatthias Ringwaldvoid AfterTargetReset (void) { 147*2fd737d3SMatthias Ringwald unsigned int SP; 148*2fd737d3SMatthias Ringwald unsigned int PC; 149*2fd737d3SMatthias Ringwald unsigned int VectorTableAddr; 150*2fd737d3SMatthias Ringwald 151*2fd737d3SMatthias Ringwald VectorTableAddr = Elf.GetBaseAddr(); 152*2fd737d3SMatthias Ringwald 153*2fd737d3SMatthias Ringwald if (VectorTableAddr != 0xFFFFFFFF) { 154*2fd737d3SMatthias Ringwald SP = Target.ReadU32(VectorTableAddr); 155*2fd737d3SMatthias Ringwald Target.SetReg("SP", SP); 156*2fd737d3SMatthias Ringwald } else { 157*2fd737d3SMatthias Ringwald Util.Log("Project file error: failed to get program base"); 158*2fd737d3SMatthias Ringwald } 159*2fd737d3SMatthias Ringwald 160*2fd737d3SMatthias Ringwald PC = Elf.GetEntryPointPC(); 161*2fd737d3SMatthias Ringwald 162*2fd737d3SMatthias Ringwald if (PC != 0xFFFFFFFF) { 163*2fd737d3SMatthias Ringwald Target.SetReg("PC", PC); 164*2fd737d3SMatthias Ringwald } else if (VectorTableAddr != 0xFFFFFFFF) { 165*2fd737d3SMatthias Ringwald PC = Target.ReadU32(VectorTableAddr + 4); 166*2fd737d3SMatthias Ringwald Target.SetReg("PC", PC); 167*2fd737d3SMatthias Ringwald } 168*2fd737d3SMatthias Ringwald} 169*2fd737d3SMatthias Ringwald 170*2fd737d3SMatthias Ringwald/********************************************************************* 171*2fd737d3SMatthias Ringwald* 172*2fd737d3SMatthias Ringwald* DebugStart 173*2fd737d3SMatthias Ringwald* 174*2fd737d3SMatthias Ringwald* Function description 175*2fd737d3SMatthias Ringwald* Replaces the default debug session startup routine. Optional. 176*2fd737d3SMatthias Ringwald* 177*2fd737d3SMatthias Ringwald********************************************************************** 178*2fd737d3SMatthias Ringwald*/ 179*2fd737d3SMatthias Ringwald//void DebugStart (void) { 180*2fd737d3SMatthias Ringwald//} 181*2fd737d3SMatthias Ringwald 182*2fd737d3SMatthias Ringwald/********************************************************************* 183*2fd737d3SMatthias Ringwald* 184*2fd737d3SMatthias Ringwald* TargetConnect 185*2fd737d3SMatthias Ringwald* 186*2fd737d3SMatthias Ringwald* Function description 187*2fd737d3SMatthias Ringwald* Replaces the default target IF connection routine. Optional. 188*2fd737d3SMatthias Ringwald* 189*2fd737d3SMatthias Ringwald********************************************************************** 190*2fd737d3SMatthias Ringwald*/ 191*2fd737d3SMatthias Ringwald//void TargetConnect (void) { 192*2fd737d3SMatthias Ringwald//} 193*2fd737d3SMatthias Ringwald 194*2fd737d3SMatthias Ringwald/********************************************************************* 195*2fd737d3SMatthias Ringwald* 196*2fd737d3SMatthias Ringwald* BeforeTargetConnect 197*2fd737d3SMatthias Ringwald* 198*2fd737d3SMatthias Ringwald* Function description 199*2fd737d3SMatthias Ringwald* Event handler routine. Optional. 200*2fd737d3SMatthias Ringwald* 201*2fd737d3SMatthias Ringwald********************************************************************** 202*2fd737d3SMatthias Ringwald*/ 203*2fd737d3SMatthias Ringwald//void BeforeTargetConnect (void) { 204*2fd737d3SMatthias Ringwald//} 205*2fd737d3SMatthias Ringwald 206*2fd737d3SMatthias Ringwald/********************************************************************* 207*2fd737d3SMatthias Ringwald* 208*2fd737d3SMatthias Ringwald* AfterTargetConnect 209*2fd737d3SMatthias Ringwald* 210*2fd737d3SMatthias Ringwald* Function description 211*2fd737d3SMatthias Ringwald* Event handler routine. Optional. 212*2fd737d3SMatthias Ringwald* 213*2fd737d3SMatthias Ringwald********************************************************************** 214*2fd737d3SMatthias Ringwald*/ 215*2fd737d3SMatthias Ringwald//void AfterTargetConnect (void) { 216*2fd737d3SMatthias Ringwald//} 217*2fd737d3SMatthias Ringwald 218*2fd737d3SMatthias Ringwald/********************************************************************* 219*2fd737d3SMatthias Ringwald* 220*2fd737d3SMatthias Ringwald* TargetDownload 221*2fd737d3SMatthias Ringwald* 222*2fd737d3SMatthias Ringwald* Function description 223*2fd737d3SMatthias Ringwald* Replaces the default program download routine. Optional. 224*2fd737d3SMatthias Ringwald* 225*2fd737d3SMatthias Ringwald********************************************************************** 226*2fd737d3SMatthias Ringwald*/ 227*2fd737d3SMatthias Ringwald//void TargetDownload (void) { 228*2fd737d3SMatthias Ringwald//} 229*2fd737d3SMatthias Ringwald 230*2fd737d3SMatthias Ringwald/********************************************************************* 231*2fd737d3SMatthias Ringwald* 232*2fd737d3SMatthias Ringwald* BeforeTargetDownload 233*2fd737d3SMatthias Ringwald* 234*2fd737d3SMatthias Ringwald* Function description 235*2fd737d3SMatthias Ringwald* Event handler routine. Optional. 236*2fd737d3SMatthias Ringwald* 237*2fd737d3SMatthias Ringwald********************************************************************** 238*2fd737d3SMatthias Ringwald*/ 239*2fd737d3SMatthias Ringwald//void BeforeTargetDownload (void) { 240*2fd737d3SMatthias Ringwald//} 241*2fd737d3SMatthias Ringwald 242*2fd737d3SMatthias Ringwald/********************************************************************* 243*2fd737d3SMatthias Ringwald* 244*2fd737d3SMatthias Ringwald* AfterTargetDownload 245*2fd737d3SMatthias Ringwald* 246*2fd737d3SMatthias Ringwald* Function description 247*2fd737d3SMatthias Ringwald* Event handler routine. 248*2fd737d3SMatthias Ringwald* - Sets the PC register to program reset value. 249*2fd737d3SMatthias Ringwald* - Sets the SP register to program reset value on Cortex-M. 250*2fd737d3SMatthias Ringwald* 251*2fd737d3SMatthias Ringwald********************************************************************** 252*2fd737d3SMatthias Ringwald*/ 253*2fd737d3SMatthias Ringwaldvoid AfterTargetDownload (void) { 254*2fd737d3SMatthias Ringwald unsigned int SP; 255*2fd737d3SMatthias Ringwald unsigned int PC; 256*2fd737d3SMatthias Ringwald unsigned int VectorTableAddr; 257*2fd737d3SMatthias Ringwald 258*2fd737d3SMatthias Ringwald VectorTableAddr = Elf.GetBaseAddr(); 259*2fd737d3SMatthias Ringwald 260*2fd737d3SMatthias Ringwald if (VectorTableAddr != 0xFFFFFFFF) { 261*2fd737d3SMatthias Ringwald SP = Target.ReadU32(VectorTableAddr); 262*2fd737d3SMatthias Ringwald Target.SetReg("SP", SP); 263*2fd737d3SMatthias Ringwald } else { 264*2fd737d3SMatthias Ringwald Util.Log("Project file error: failed to get program base"); 265*2fd737d3SMatthias Ringwald } 266*2fd737d3SMatthias Ringwald 267*2fd737d3SMatthias Ringwald PC = Elf.GetEntryPointPC(); 268*2fd737d3SMatthias Ringwald 269*2fd737d3SMatthias Ringwald if (PC != 0xFFFFFFFF) { 270*2fd737d3SMatthias Ringwald Target.SetReg("PC", PC); 271*2fd737d3SMatthias Ringwald } else if (VectorTableAddr != 0xFFFFFFFF) { 272*2fd737d3SMatthias Ringwald PC = Target.ReadU32(VectorTableAddr + 4); 273*2fd737d3SMatthias Ringwald Target.SetReg("PC", PC); 274*2fd737d3SMatthias Ringwald } 275*2fd737d3SMatthias Ringwald} 276*2fd737d3SMatthias Ringwald 277*2fd737d3SMatthias Ringwald/********************************************************************* 278*2fd737d3SMatthias Ringwald* 279*2fd737d3SMatthias Ringwald* BeforeTargetDisconnect 280*2fd737d3SMatthias Ringwald* 281*2fd737d3SMatthias Ringwald* Function description 282*2fd737d3SMatthias Ringwald* Event handler routine. Optional. 283*2fd737d3SMatthias Ringwald* 284*2fd737d3SMatthias Ringwald********************************************************************** 285*2fd737d3SMatthias Ringwald*/ 286*2fd737d3SMatthias Ringwald//void BeforeTargetDisconnect (void) { 287*2fd737d3SMatthias Ringwald//} 288*2fd737d3SMatthias Ringwald 289*2fd737d3SMatthias Ringwald/********************************************************************* 290*2fd737d3SMatthias Ringwald* 291*2fd737d3SMatthias Ringwald* AfterTargetDisconnect 292*2fd737d3SMatthias Ringwald* 293*2fd737d3SMatthias Ringwald* Function description 294*2fd737d3SMatthias Ringwald* Event handler routine. Optional. 295*2fd737d3SMatthias Ringwald* 296*2fd737d3SMatthias Ringwald********************************************************************** 297*2fd737d3SMatthias Ringwald*/ 298*2fd737d3SMatthias Ringwald//void AfterTargetDisconnect (void) { 299*2fd737d3SMatthias Ringwald//} 300*2fd737d3SMatthias Ringwald 301*2fd737d3SMatthias Ringwald/********************************************************************* 302*2fd737d3SMatthias Ringwald* 303*2fd737d3SMatthias Ringwald* AfterTargetHalt 304*2fd737d3SMatthias Ringwald* 305*2fd737d3SMatthias Ringwald* Function description 306*2fd737d3SMatthias Ringwald* Event handler routine. Optional. 307*2fd737d3SMatthias Ringwald* 308*2fd737d3SMatthias Ringwald********************************************************************** 309*2fd737d3SMatthias Ringwald*/ 310*2fd737d3SMatthias Ringwald//void AfterTargetHalt (void) { 311*2fd737d3SMatthias Ringwald//} 312