void mbed_itm_init(void) { static bool do_init = true; if (do_init) { do_init = false; itm_init(); /* Enable write access to ITM registers. */ ITM->LAR = ITM_ENABLE_WRITE; /* Trace Port Interface Selected Pin Protocol Register. */ TPI->SPPR = (SWO_NRZ << TPI_SPPR_TXMODE_Pos); /* Trace Port Interface Formatter and Flush Control Register */ TPI->FFCR = (1 << TPI_FFCR_TrigIn_Pos); /* Data Watchpoint and Trace Control Register */ DWT->CTRL = (1 << DWT_CTRL_CYCTAP_Pos) | (0xF << DWT_CTRL_POSTINIT_Pos) | (0xF << DWT_CTRL_POSTPRESET_Pos) | (1 << DWT_CTRL_CYCCNTENA_Pos); /* Trace Privilege Register. * Disable access to trace channel configuration from non-privileged mode. */ ITM->TPR = 0x0; /* Trace Control Register */ ITM->TCR = (1 << ITM_TCR_TraceBusID_Pos) | (1 << ITM_TCR_DWTENA_Pos) | (1 << ITM_TCR_SYNCENA_Pos) | (1 << ITM_TCR_ITMENA_Pos); /* Trace Enable Register */ ITM->TER = SWO_STIMULUS_PORT; } }
int main(void) { /* Unbuffered standard IO */ setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); #ifdef USE_ITM itm_init(); printf("STM32F0xx Blinkenlights Demo\n"); #endif xTaskCreate(blinky_task, (signed portCHAR *) "blinkenlights", configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 2), NULL); vTaskStartScheduler(); return 0; }