ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
911413
Mebius (19.03.2019 17:19 - 17:22, просмотров: 719)
Пытаюсь выводить отладочные сообщения через ITM. Лишние байты на выходе. Как избавиться? Внутри подробнее. Функция инициализации:
static  inline void SWO_Init(uint32_t portBits, uint32_t SWOSpeed)
{
	uint32_t SWOPrescaler = (SystemCoreClock / SWOSpeed) - 1; /* SWOSpeed in Hz, note that cpuCoreFreqHz is expected to be match the CPU core clock */
	
	TPI->SPPR = 0x00000002; /* "Selected PIN Protocol Register": Select which protocol to use for trace output (2: SWO NRZ, 1: SWO Manchester encoding) */
	TPI->ACPR = SWOPrescaler; /* "Async Clock Prescaler Register". Scale the baud rate of the asynchronous output */
	
	ITM->LAR = 0xC5ACCE55; /* ITM Lock Access Register, C5ACCE55 enables more write access to Control Register 0xE00 :: 0xFFC */
	ITM->TCR = /*ITM_TCR_TraceBusID_Msk |*/ ITM_TCR_SWOENA_Msk /*| ITM_TCR_SYNCENA_Msk*/ | ITM_TCR_ITMENA_Msk; /* ITM Trace Control Register */
	ITM->TPR = ITM_TPR_PRIVMASK_Msk; /* ITM Trace Privilege Register */
	ITM->TER = portBits; /* ITM Trace Enable Register. Enabled tracing on stimulus ports. One bit per stimulus port. */
	
	DWT->CTRL = 0x400003FE; /* DWT_CTRL */
	TPI->FFCR = 0x00000100; /* Formatter and Flush Control Register (TrigOnTrigIn)*/
}
Функция вывода:
__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)
{
  if ((ITM->TCR & ITM_TCR_ITMENA_Msk)                  &&      /* ITM enabled */
      (ITM->TER & (1UL << 0)        )                    )     /* ITM Port #0 enabled */
  {
    while (ITM->PORT[0].u32 == 0);
    ITM->PORT[0].u8 = (uint8_t) ch;
  }
  return (ch);
}
OpenOCD вызывается командой:
@$(OPENOCD) -s $(OPENOCD_SCRIPTS_DIR) -f ./openocd/mdr32f9q2_jlink.cfg -c init -c "tpiu config internal print.log uart off 80000000 64000" -c "reset halt" &
В файле print.log что-то вроде: \2H\0\2e\0\2l\0\2l\0\2o\0\2!\0 Как победить?