2016-02-12 3 views
1

Я пытаюсь прочитать регистр ADC MCU с использованием GDB, но я не могу найти, как это делается.Чтение периферийного регистра Cortex M0 MCU с использованием JLink и GDB

Использование x\10x 0x40012708 в gdb просто возвращает нули, как и любой зарегистрированный периферийный регистр памяти, который я пытаюсь прочитать.

Это это можно сделать? Если да, то как это делается?

Спасибо!

ответ

3

Я бы предложил проверить, что ваша установка работает в первую очередь. Например, вы можете попробовать прочитать регистр CPUID, который присутствует на всех процессорах Cortex-M0 - см. Раздел 4.3 раздела Cortex™-M0 DevicesGeneric User Guide.

Он расположен по адресу 0xE000ED00 и должен содержать значение 0x410CC200. Если вы можете прочитать это, это будет хороший знак.

Сначала вы должны попробовать использовать команду J-Link, затем с GDB-сервером и GDB. Я выполнил процедуру в дальнейшем на плате Olimex, используя LPC1114/301 Cortex-M0. Я использовал программное обеспечение J-Link V5.10n и версию arm-none-eabi-gdb 7.10.1.20151217-cvs, которая является частью Linaro gcc 5.2 для пакета процессоров ARM Cortex-M.

Start JLink.exe, используя следующие параметры:

jlink.exe -if SWD -speed 4000 -AutoConnect 1 -device Cortex-M0 

Вы должны увидеть что-то подобное:

SEGGER J-Link Commander V5.10n (Compiled Feb 19 2016 18:39:46) 
DLL version V5.10n, compiled Feb 19 2016 18:39:11<br/> 
Connecting to J-Link via USB...O.K. 
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46 
Hardware version: V8.00 
S/N: [My J-Link EDU Serial Number] 
License(s): FlashBP, GDB 
OEM: SEGGER-EDU 
Emulator has Trace capability 
VTref = 3.313V 
Device "CORTEX-M0" selected. 

Found SWD-DP with ID 0x0BB11477 
Found Cortex-M0 r0p0, Little endian. 
FPUnit: 4 code (BP) slots and 0 literal slots 
CoreSight components: 
ROMTbl 0 @ E00FF000 
ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB008 SCS 
ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 000BB00A DWT 
ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 000BB00B FPB 
Cortex-M0 identified. 
J-Link> 

Теперь вы можете прочитать регистр CPUID с помощью команды командира J-Link mem32, и проверьте, что регистр CPUID содержит ожидаемое значение:

J-Link>mem32 0xE000ED00,1 

Вы должны получить:

E000ED00 = 410CC200 

Если это так, то я бы сказал, что настроить ваш J-Link/Cortex-M0, скорее всего, функциональна. Теперь мы можем проверить, что GDB Server и GDB работают отлично.

Launch JLinkGDBServerCL.exe со следующими параметрами:
JLinkGDBServerCL.exe -if SWD -speed 4000 -device Cortex-M0
SEGGER J-Link GDB сервер V5.10n командной строки версии JLinkARM.dll V5.10n (DLL скомпилирован 19 февраля 2016 18:39:11)

-----GDB Server start settings----- 
GDBInit file:     none 
GDB Server Listening port:  2331 
SWO raw output listening port: 2332 
Terminal I/O port:    2333 
Accept remote connection:  localhost only 
Generate logfile:    off 
Verify download:    off 
Init regs on start:   off 
Silent mode:     off 
Single run mode:    off 
Target connection timeout:  0 ms 
------J-Link related settings------ 
J-Link Host interface:   USB 
J-Link script:     none 
J-Link settings file:   none 
------Target related settings------ 
Target device:     Cortex-M0 
Target interface:    SWD 
Target interface speed:  4000kHz 
Target endian:     little 

Connecting to J-Link... 
J-Link is connected. 
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46 
Hardware: V8.00 
S/N: [My J-Link EDU Serial Number] 
OEM: SEGGER-EDU 
Feature(s): FlashBP, GDB 
Checking target voltage... 
Target voltage: 3.31 V 
Listening on TCP/IP port 2331 
Connecting to target...Connected to target 
Waiting for GDB connection... 

Не останавливайте сервер GDB и запустить GDB в другом сеансе консоли для Windows:

arm-none-eabi-gdb 
GNU gdb (GNU Tools for ARM Embedded Processors) 7.10.1.20151217-cvs 
Copyright (C) 2015 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "--host=i686-w64-mingw32 --target=arm-none-eabi". 
Type "show configuration" for configuration details. 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Find the GDB manual and other documentation resources online at: 
<http://www.gnu.org/software/gdb/documentation/>. 
For help, type "help". 
Type "apropos word" to search for commands related to "word". 

Теперь мы можем подключиться к БГДУ сервер и попытка отобразить содержимое регистра CPUID снова:

(gdb) target remote localhost:2331 
Remote debugging using localhost:2331 
0xfffffffe in ??() 
(gdb) monitor halt 
(gdb) monitor reset 
Resetting target 
(gdb) x/1xw 0xE000ED00 
0xe000ed00:  0x410cc200 
(gdb) 

Если вы снова получаете 0x410cc200, ваш J-Link/Cortex-M0/GDB Server/установка GDB должен быть ФУНКЦИИ NAL, и теперь вы должны попробовать еще раз, чтобы читать ваш регистр АЦП, используя следующую команду:

x/1xw 0x40012708 

Если бы вы были в состоянии прочитать CPUID регистр, но не регистр ADC, и если адрес регистра АЦП Правильно, у меня не было бы объяснения этого поведения прямо сейчас - знание точного бренда/модели для MCU, которое вы используете, может, конечно, помочь дальше.

Обратите внимание, что с этого момента вы должны указать точную модель вашего MCU в качестве аргумента для параметра -device J-Link Commander/GDB Server вместо Cortex-M0. Вы можете получить список, введя команду? в командной строке J-Link Commander.

Смежные вопросы