/**************************************************************************//** * @brief Configure trace output for energyAware Profiler * @note Enabling trace will add 80uA current for the EFM32_Gxxx_STK. * DK's needs to be initialized with SPI-mode: * @verbatim BSP_Init(BSP_INIT_DK_SPI); @endverbatim *****************************************************************************/ void BSP_TraceSwoSetup(void) { /* Enable GPIO clock */ CMU->HFPERCLKEN0 |= CMU_HFPERCLKEN0_GPIO; /* Enable Serial wire output pin */ GPIO->ROUTE |= GPIO_ROUTE_SWOPEN; /* Set correct location */ GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) | BSP_TRACE_SWO_LOCATION; /* Enable output on correct pin. */ TRACE_ENABLE_PINS(); /* Enable debug clock AUXHFRCO */ CMU->OSCENCMD = CMU_OSCENCMD_AUXHFRCOEN; /* Wait until clock is ready */ while (!(CMU->STATUS & CMU_STATUS_AUXHFRCORDY)) ; // Check if trace already enabled, if so assume that an external debugger // is in control and skip further setup. if ( !( CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk ) ) { /* Enable trace in core debug */ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; /* Enable PC and IRQ sampling output */ DWT->CTRL = 0x400113FF; /* Set TPIU prescaler to 16. */ TPI->ACPR = 0xf; /* Set protocol to NRZ */ TPI->SPPR = 2; /* Disable continuous formatting */ TPI->FFCR = 0x100; /* Unlock ITM and output data */ ITM->LAR = 0xC5ACCE55; ITM->TCR = 0x10009; } }
/**************************************************************************//** * @brief Configure trace output for energyAware Profiler * @note Enabling trace will add a 80uA current for the EFM32_Gxxx_STK. * DK's needs to be initialized with SPI-mode: * @verbatim BSP_Init(BSP_Init_SPI); @endverbatim *****************************************************************************/ void BSP_TraceSwoSetup(void) { /* Debug logic registers */ volatile uint32_t *dwt_ctrl = (uint32_t *) 0xE0001000; volatile uint32_t *tpiu_prescaler = (uint32_t *) 0xE0040010; volatile uint32_t *tpiu_protocol = (uint32_t *) 0xE00400F0; /* Enable GPIO clock */ CMU->HFPERCLKEN0 |= CMU_HFPERCLKEN0_GPIO; /* Enable Serial wire output pin */ GPIO->ROUTE |= GPIO_ROUTE_SWOPEN; /* Set correct location */ GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) | BSP_TRACE_SWO_LOCATION; /* Enable output on correct pin. */ TRACE_ENABLE_PINS(); /* Enable debug clock AUXHFRCO */ CMU->OSCENCMD = CMU_OSCENCMD_AUXHFRCOEN; /* Wait until clock is ready */ while (!(CMU->STATUS & CMU_STATUS_AUXHFRCORDY)) ; /* Enable trace in core debug */ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; /* Enable PC and IRQ sampling output */ *dwt_ctrl = 0x400113FF; /* Set TPIU prescaler to 16. */ *tpiu_prescaler = 0xf; /* Set protocol to NRZ */ *tpiu_protocol = 2; /* Unlock ITM and output data */ ITM->LAR = 0xC5ACCE55; ITM->TCR = 0x10009; }