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