Skip to content

Instantly share code, notes, and snippets.

@Novakov
Created October 27, 2022 08:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Novakov/1380db909b78e2621b45612758360c6c to your computer and use it in GitHub Desktop.
Save Novakov/1380db909b78e2621b45612758360c6c to your computer and use it in GitHub Desktop.
#include "em_gpio.h"
#include "trace/arm.hpp"
#include "trace/efm.hpp"
namespace trace::efm
{
void SetupClock()
{
CMU_OscillatorEnable(cmuOsc_HFXO, true, true);
CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO);
CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_HFCLK);
CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_HFCLKLE);
CMU_ClockSelectSet(cmuClock_DBG, cmuSelect_HFCLK);
/* EFM32 specific configuration to enable the TRACESWO IO pin */
CMU_AUXHFRCOBandSet(cmuAUXHFRCOBand_14MHz);
CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true);
SystemCoreClockUpdate();
CMU_ClockEnable(cmuClock_HFPER, true);
CMU_ClockEnable(cmuClock_DBG, true);
CMU_ClockEnable(cmuClock_GPIO, true);
CMU_ClockEnable(cmuClock_DBG, true);
}
void SetupGPIOForParallelTrace()
{
// NOTE: Track clock is enabled right after setting GPIO_ROUTE_TCLKPEN
auto route = GPIO->ROUTE;
route &= ~_GPIO_ROUTE_ETMLOCATION_MASK;
route |= GPIO_ROUTE_ETMLOCATION_LOC0;
route |= GPIO_ROUTE_TCLKPEN;
route |= GPIO_ROUTE_TD0PEN;
route |= GPIO_ROUTE_TD1PEN;
route |= GPIO_ROUTE_TD2PEN;
route |= GPIO_ROUTE_TD3PEN;
GPIO->ROUTE = route;
// ETM location 0:
// CLK - PD7
// D0 - PD6
// D1 - PD3
// D2 - PD4
// D3 - PD5
GPIO_PinModeSet(gpioPortD, 3, gpioModePushPull, 0);
GPIO_PinModeSet(gpioPortD, 4, gpioModePushPull, 0);
GPIO_PinModeSet(gpioPortD, 5, gpioModePushPull, 0);
GPIO_PinModeSet(gpioPortD, 6, gpioModePushPull, 0);
GPIO_PinModeSet(gpioPortD, 7, gpioModePushPull, 0);
}
}
int main()
{
trace::efm::SetupClock();
trace::efm::SetupGPIOForParallelTrace();
TpiuOptions tpiu = {
.Protocol = TpiuProtocolParallel,
.FormattingEnabled = true,
.TracePortWidth = 4,
};
ITMOptions itm = {
.TraceBusID = 1,
.GlobalTimestampFrequency = ITMGlobalTimestampFrequencyDisabled,
.LocalTimestampPrescaler = ITMLocalTimestampPrescalerNoPrescaling,
.EnableLocalTimestamp = true,
.ForwardDWT = false,
.EnableSyncPacket = false,
.EnabledStimulusPorts = ITM_ENABLE_STIMULUS_PORTS_ALL,
};
TpiuSetup(&tpiu);
ITMSetup(&itm);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment