Вывод через SWO

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Вывод через SWO

Сообщение dosikus »

Есть хорошая фича у ARM - SWO .
Минимум как можно использовать -это вывод строк .
Подключаем в своем проекте.

swo.h
Спойлер

Код: Выделить всё

 
#ifndef _SWO_H       
#define _SWO_H  



/***********************************************************************************
*
* Prototypes (to be placed in a header file such as SWO.h)
*/
void SWO_PrintChar (char c);
void SWO_PrintString(const char *s);

#endif
 


swo.c
Спойлер

Код: Выделить всё

/***********************************************************************************
*
*
* Defines for Cortex-M debug unit
*/
#define ITM_STIM_U32 (*(volatile unsigned int*)0xE0000000) // STIM word acces
#define ITM_STIM_U8 (*(volatile char*)0xE0000000) // STIM byte acces 
#define ITM_ENA (*(volatile unsigned int*)0xE0000E00) // ITM Enable
#define ITM_TCR (*(volatile unsigned int*)0xE0000E80) // ITM Trace Control Reg.
#define DHCSR (*(volatile unsigned int*)0xE000EDF0) // Debug register
#define DEMCR (*(volatile unsigned int*)0xE000EDFC) // Debug register
/************************************************************************************
*
* Function description
* Prints a character to the ITM_STIM register in order to provide data for SWO
*/
void SWO_PrintChar(char c) {
//
// Check if SWO is set up. If it is not, return to avoid that a program
// hangs if no debugger is connected.
//
//
// Check if DEBUGEN in DHCSR is set
//
if ((DHCSR & 1)!= 1) {
return;
}
//
// Check if TRACENA in DEMCR is set
//
if ((DEMCR & (<< 24)) == 0) {
return;
}
//
// Check if ITM_TRC is enabled
//
if ((ITM_TCR & (<< 22)) == 1) {
return;
}
//
// Check if stimulus port 0 is enabled
//
if ((ITM_ENA & 1) == 0) {
return;
}
//
// Wait until STIMx is ready to accept at least 1 word
//
while ((ITM_STIM_U8 & 1) == 0);

ITM_STIM_U8 = c;
}
/************************************************************************************
*
* SWO_PrintString
*
* Function description
* Prints a string via SWO
*
*/
void SWO_PrintString(const char *s) {
//
// Print out character per character
//
while (*s) {
SWO_PrintChar(*s++);
}
}


Подключаем выводы SWO таргета и JLink .
Для STM32F103 - PB3 , JLink - 13pin .

Изображение
Изображение
Изображение



Запускаем JLink SWO Viewer
Пользуем...


Изображение
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Re: Вывод через SWO

Сообщение balmer »

Есть еще у ARM другая фича, называется semihosting. Она работает через JTAG или SWD.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Вывод через SWO

Сообщение dosikus »

dosikus писал(а):
Запускаем JLink SWO Viewer
Пользуем...


Для особо пытливо_щепетильных пионЭров дополняю :

Скрины хоть и с Eclipse но работает и в Keil и Iar .
Инфа честно скрадена с мануала Segger ...
Vipper
Родился
Сообщения: 8
Зарегистрирован: Пн фев 10, 2014 14:18:12

Re: Вывод через SWO

Сообщение Vipper »

А объясните, пожалуйста, еще раз, что такое SWO?
Я правильно понимаю, что это типа одностороннего UART, который работает только через подключенный программатор?

И заодно, объясните, зачем нужен вывод в программаторе TRST, если запросто можно обойтись и без него?
Vipper
Родился
Сообщения: 8
Зарегистрирован: Пн фев 10, 2014 14:18:12

Re: Вывод через SWO

Сообщение Vipper »

Что, никто не знает ответа на мой вопрос?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Вывод через SWO

Сообщение dosikus »

Все ждут когда вы научитесь читать...
Ответить

Вернуться в «ARM»