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