SWO ve VS Code
Miroslav Mraz
mrazik na volny.cz
Sobota Říjen 23 12:43:39 CEST 2021
Sice jsem to použil jen jednou a nezaujalo mne to, ale v poznámce k tomu
mám toto:
/** @file
* @brief Trasování pomocí SWO.
*
* Na jádrech Cortex-M4 je poměrně složitá jednotka pro výpisy ladících
informací.
* Zde je provedeno její nastavení do režimu USART, dá se tedy připojit
SWO na převodník
* USB-serial a vypisovat ladící informace podobně jako přes USART. Má
to jednu nevýhodu -
* jednotka před každý vypisovaný znak umístí "číslo kanálu" (zde byte
0x01), který se
* při výpisu plete. Takže se to musí programově filtrovat.
* Funkce TraceEnable() se musí použít pokud debug adaptér tuto
funkcionalitu nepodporuje,
* pokud ano (např. st-link + openocd nastavením např.
* "tpiu config internal trace.log uart off 4000000 250000"), pak tato
funkce není nutná.
* V podstatě je to několik zápisů do systémových registrů Cortex-M4,
které lze udělat
* i přes SWD rozhraní.
* */
a vlastní funkce pak vypadá takto:
void TraceEnable () {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
TPI->ACPR = 0x0Fu; // 4MHz / 16 = 250 kBd
TPI->CSPSR = 1u;
TPI->FFCR = 0x100u; // neformátovat
TPI->SPPR = 2u; // Example: 0x2 for asynchronous NRZ mode (UART like)
DBGMCU->CR.B.TRACE_IOEN = 1u;
//DBGMCU->CR.B.TRACE_MODE = 0u; // default
ITM->LAR = 0xC5ACCE55; // unlock ITM
ITM->TCR = 0x00010001; // Bit 2 = SYNCENA není potřeba
ITM->TER = 1u;
ITM->TPR = 1u;
}
Můžete to zkusit, je to pár řádek a když to bude fungovat, tak je to
lepší než se několik hodin rýpat v konfiguraci. Problém může nastat,
když se to s tou konfigurací nějak pomíchá a popere. A jak tak koukám,
tak tohle počítalo se systémovými hodinami 4MHz.
Mrazík
Dne 23. 10. 21 v 11:53 Marek Sembol napsal(a):
> Zdravim,
> snazim se prestehovat s vyvojem pro STM do VS Code. Funguje mi preklad,
> nahrani do MCU i debugovani.
> MCU: STM32G431
> Pro debugovani pouzivam 'cinsky klon' ST-Linku s upravou pro SWO
> A to je presne vec, ktera se mi nedari. Kdyz se pokusim neco vypsat pres
> SWO, nic se nevypise a program v MCU vytuhne (nekonecna smycka pri
> pokusu odeslat druhy znak)
> Podotykam, ze kdyz se pripojim pomoci STM32CubeProgrammer, tak
> vypisy pres SWO normalne vidim.
> Pro vypis pouzivam printf, v kodu mam:
>
> int _write(int file, char *ptr, int len)
> {
> int DataIdx;
>
> for (DataIdx = 0; DataIdx < len; DataIdx++)
> {
> ITM_SendChar(*ptr++);
> }
> return len;
> }
> ----------------------------------------------------------------
> Muj launch.json:
> {
> // Use IntelliSense to learn about possible attributes.
> // Hover to view descriptions of existing attributes.
> // For more information, visit:
> https://go.microsoft.com/fwlink/?linkid=830387
> "version": "0.2.0",
> "configurations": [
> {
> "name": "Cortex Debug (OpenOCD)",
> "cwd": "${workspaceRoot}",
> "executable": "./build/Rts2000Stm32Test.elf",
> "request": "launch",
> "type": "cortex-debug",
> "servertype": "openocd",
> "device": "STM32G431KB",
> "svdFile": "${workspaceRoot}/STM32G431xx.svd",
> "configFiles": [
> "interface/stlink.cfg",
> "target/stm32g4x.cfg"
> ],
> "swoConfig": {
> "enabled": true,
> "cpuFrequency": 144000000,
> "swoFrequency": 2000000,
> "source": "probe",
> "decoders": [
> {
> "type": "console",
> "label": "ITM",
> "port": 0,
> "showOnStartup": true
> }
> ]
> }
> }
> ]
> }
>
> ---------------------------------------
> Jsem na windows, pouzivam OpenOCD:
> C:\Temp\VsCodeSTMtest>openocd --version
> Open On-Chip Debugger 0.11.0 (2021-07-29)
> [https://github.com/sysprogs/openocd]
> Licensed under GNU GPL v2
> libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
> For bug reports, read
> http://openocd.org/doc/doxygen/bugs.html
>
> ------------------------------------------
> Mate to nekdo rozchozene? Hraju si s tim uz pulden a dochazeji mi
> napady. Goodle neporadil (nebo se neumim zeptat)
> BR,
> Marek
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list