ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
601499 Топик полностью
Vit (01.06.2015 20:57, просмотров: 193) ответил ASDFS на Вроде бы во всех потомках Energy Micro. Потрошить сотни даташитов в поисках исключений лениво.
В EFM32G880F128 прописывается магические буквы, генерируемые их студией, и после этого получается выхлоп через стандартную ITM_SendChar(ch);, для которого в SWO-viewer нужно устанавливать частоту 1/16 от частоты ядра. Насчет отдельного UART не в https://www.silabs.com/Support%20Documents/TechnicalDocs/AN0043.pdf
курсе. Генерилка в 3-й студии с полутыка что-то не находится /**************************************************************************//** * @brief Configure SWO *****************************************************************************/ void setupSWOForPrint(void) { uint32_t *dwt_ctrl = (uint32_t *) 0xE0001000; uint32_t *tpiu_prescaler = (uint32_t *) 0xE0040010; uint32_t *tpiu_protocol = (uint32_t *) 0xE00400F0; uint32_t *tpiu_ffcr = (uint32_t *) 0xE0040304; /* Enable GPIO clock. */ CMU->HFPERCLKEN0 |= CMU_HFPERCLKEN0_GPIO; /* Enable Serial wire output pin */ GPIO->ROUTE |= GPIO_ROUTE_SWOPEN; #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_LEOPARD_FAMILY) || defined(_EFM32_WONDER_FAMILY) /* Set location 0 */ GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) | GPIO_ROUTE_SWLOCATION_LOC0; /* Enable output on pin - GPIO Port F, Pin 2 */ GPIO->P[5].MODEL &= ~(_GPIO_P_MODEL_MODE2_MASK); GPIO->P[5].MODEL |= GPIO_P_MODEL_MODE2_PUSHPULL; #else /* Set location 1 */ GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) |GPIO_ROUTE_SWLOCATION_LOC1; /* Enable output on pin */ GPIO->P[2].MODEH &= ~(_GPIO_P_MODEH_MODE15_MASK); GPIO->P[2].MODEH |= GPIO_P_MODEH_MODE15_PUSHPULL; #endif /* Enable debug clock AUXHFRCO */ CMU->OSCENCMD = CMU_OSCENCMD_AUXHFRCOEN; /* Wait until clock is ready */ while (!(CMU->STATUS & CMU_STATUS_AUXHFRCORDY)); #ifdef SIMPLIGEN /* Enable trace in core debug */ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; ITM->LAR = 0xC5ACCE55; ITM->TER = 0x0; ITM->TCR = 0x0; TPI->SPPR = 2; TPI->ACPR = 0xf; ITM->TPR = 0x0; DWT->CTRL = 0x400003FE; ITM->TCR = 0x0001000D; TPI->FFCR = 0x00000100; ITM->TER = 0x1; #else // /* Enable trace in core debug */ CoreDebug->DHCSR |= 1; CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; /* Enable PC and IRQ sampling output */ *dwt_ctrl = 0x400113FF; /* Set TPIU prescaler to 16 (14 MHz / 16 = 875 kHz SWO speed) */ *tpiu_prescaler = 0xf; /* Set protocol to NRZ */ *tpiu_protocol = 2; *tpiu_ffcr = 0x100; /* Unlock ITM and output data */ ITM->LAR = 0xC5ACCE55; ITM->TCR = 0x10009; /* ITM Channel 0 is used for UART output */ ITM->TER |= (1UL << 0); #endif }