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