ARM Support

From dmon

DMON v2 integrates the Segger J Link debug link and adds proof of concept support for a single ARM target - STM32L152VB. The Segger J Link supports a huge number of processors, see https://www.segger.com/jlink_supported_devices.html . DMON2 customers can request support for additional ARM devices.

The following command line options must be passed to DMON for this mode:

-arm Start DMON in ARM mode and load ARM specific commands
-segger Use Segger J-Link
-device STM32L152VB specify the device for Segger
-swd Use the Serial Wire Debug interface (SWD). If not specified then Segger will use JTAG to communicate with the target. The use of SWD is optional but recommended.


When DMON is started with the appropriate ARM switches information about the link discovered is displayed (as below).

The device configuration for the ARM target is read from an ARM CSMIS SVD file which describes the peripheral devices and their registers. In this version this SVD file is included as part of the built DMON and only this file is loaded and used. The output below shows device and peripheral information.

File:Gui-armstart.gif

Name of the device                STM32L152VB
Core id of the device             0x4BA00477
CPU core                          CORTEX_M3
Device manufacturer               ST
Start address of flash area       0x08000000
Start address of RAM area         0x20000000
0=Little, 1=Big, 2=Both           0
Total flash size in bytes         132 KB
Total RAM size in bytes           16 KB
Flash regions :
  Start Address:                  0x08000000 
  Size:                           128 KB
  Start Address:                  0x08080000 
  Size:                           4 KB
RAM regions :
  Start Address :                 0x20000000 
  Size :                          16 KB

OEM : IAR
Target Voltage = 3.338 V

Connected with SWD

Identified ::: Cortex-M3 core
Target interface speed: 1000 kHz
Peripheral Devices:
C_ADC     Common ADC registers                                        N/A  
COMP      Comparators                                                 N/A  
CRC       CRC calculation unit                                        N/A  
DAC       Digital-to-analog converter                                 N/A  
DMA1      Direct memory access controller                             N/A  
EXTI      External interrupt/event controller                         N/A  
Flash     Flash                                                       N/A  
GPIOA     General-purpose I/Os                                        N/A  
GPIOB     General-purpose I/Os                                        N/A  
GPIOC     General-purpose I/Os                                        N/A  
GPIOD     General-purpose I/Os                                        N/A  
GPIOE     General-purpose I/Os                                        N/A  
GPIOH     General-purpose I/Os                                        N/A  
I2C1      Inter-integrated circuit                                    N/A  
I2C2      Inter-integrated circuit                                    N/A  
IWDG      Independent watchdog                                        N/A  
LCD       Liquid crystal display controller                           N/A  
PWR       Power control                                               N/A  
RCC       Reset and clock control                                     N/A  
RI        Routing interface                                           N/A  
RTC       Real-time clock                                             N/A  
SPI1      Serial peripheral interface                                 N/A  
SPI2      Serial peripheral interface                                 N/A  
SYSCFG    System configuration controller                             N/A  
TIM10     General-purpose timers                                      N/A  
TIM11     General-purpose timers                                      N/A  
TIM2      General-purpose timers                                      N/A  
TIM3      General-purpose timers                                      N/A  
TIM4      General-purpose timers                                      N/A  
TIM6      Basic timers                                                N/A  
TIM7      Basic timers                                                N/A  
TIM9      General-purpose timers                                      N/A  
USART1    Universal synchronous asynchronous receiver transmitter     N/A  
USART2    Universal synchronous asynchronous receiver transmitter     N/A  
USART3    Universal synchronous asynchronous receiver transmitter     N/A  
USB       Universal serial bus full-speed device interface            N/A  
USB_SRAM  Universal serial bus full-speed device interface            N/A  
WWDG      Window watchdog                                             N/A  
ADC       Analog-to-digital converter                                 N/A  
NVIC      Nested Vectored Interrupt Controller                        N/A  
DBG       Debug support                                               N/A  
 


The SVD is used create objects for each peripheral device, to build a layout diagram for the SoC with the same functionality as for SPARC devices, and a widget with a drop down list of the registers for each peripheral. There is also an object and widget for the CPU (see below).

File:Gui-armlayout.gif

File:Gui-armregister.gif

On-chip IP blocks can be selected and their registers viewed and modified through the GUI.


ARM supported DMON commands[edit | edit source]

When in ARM mode the console supports the following commands:

Command Description
about display information about DMON version
breakh <addr|symbol> display breakpoints or add hardware breakpoint
breaks <addr|symbol> display or add software breakpoint
clear <num|address> delete all breakpoints or breakpoint at number or address
cls clear console
code <addr|PC> <length> <mode> Disassemble <length> instructions starting at <address> or current PC using <mode> (ARM or Thumb).Default mode is the currently set mode, this will normally correctly recognise whether the instruction is ARM or Thumb.
continue continue execution
datamon load [filename] load a DataSet from an xml file
datamon save [filename] save the current DataSet to an xml file
datamon start Validate the current DataSet if successful, start monitoring
datamon stop stop monitoring
datamon xsd [filename] save schema for DataSet to the specified file
devreg list available devices
devreg <name> display registers in <name>
devreg <name> <regname> display register detail for <regname> in <name>
devreg <name> <regname> <value> Write <value> to <regname> in <name>
devreg <name> list list register names in <name>
dmon Use only DMON commands. Ignored if already in DMON mode
echo [string] display string in the console (and log file if active)
examine [addr] <length> display memory
exec [command] execute shell command in OS
flash erase erase flash device
font show current font
font list list system fonts
font reset reset the font to the default
font set [value] set font
gb2312 Use GB2312 character set for displaying memory data
getb [address] <count> Returns a byte or array of <count> bytes in the command response (for scripting in Tcl)
getstate returns 1 if an application is running on the target, 0 otherwise. (for scripting in Tcl)
getw [address] <count> Returns a word or array of <count> words in the command response
halt stop program on board
help <command> display commands or command
info dev list devices available for info dev command
info dev <name> display information for device <name>
info sys display basic system information
log [file_name] open log file or create new and output some system information
loglevel [level] set internal logging to level. Possible levels [verbose|restore|info|warn|error]
logoff stop output to file
lookup [hex value] show the ELF symbol matching the hex address
lookup [symbol or expression] show the value of the symbol (internal or ELF)
pause -1 pause script until processor stops
pause [duration in ms] pause script until duration has elapsed or processor stops
precont [filename] append a script to the user scripts executed before continuing/stepping a program
precont insert [index] [filename] insert a script at [index] in the user scripts executed before continuing/stepping a program
precont list list the user scripts executed before continuing/stepping a program
precont remove [index|all] remove the script at [index] in the user scripts or all scripts executed before continuing/stepping a program
prerun [filename] append a script to the user scripts executed before starting a program
prerun insert [index] [filename] insert a script at [index] in the user scripts executed before starting a program
prerun list list the user scripts executed before starting a program
prerun remove [index|all] remove the script at [index] in the user scripts or all scripts executed before starting a program
printreg display system registers
python Interpret command input as Python commands. Ignored if in Python mode
quit exit DMON
reg show values for all available CPU registers
reg <name> show register named
reg <name> <value> write value to register named
reg show show available register names
run <pc> start the CPU from <pc>
runscript [filename] set the user script executed during program execution
runscript list list the user script executed during program execution
runscript remove clear the user script executed during program execution
save [addr] [addr] [file] <bin> dump target memory to file in srecord (or binary) format
script [file_name] execute a batch file of DMON commands
setv [label] [expression] Sets a DMON label to have a 64 bit integer value
shell In a startup script activate the language specified by command line option. Otherwise, display the langauge in use.
step <n> single step one or <n> times
stop Invoked on CTRL-C. Abort DMON command,stop program on board
symbols <file> show/load symbols
tcl Interpret command input as Tcl commands. Ignored if in Tcl mode
utf8 Use UTF-8 character set for displaying memory and UART data
watch <addr|symbol> display all breakpoint or add data watchpoint on read or write
watchr <addr|symbol> display all breakpoint or add data watchpoint on read
watchw <addr|symbol> display all breakpoint or add data watchpoint on write
write [addr] [data] <number words> write one word of data to "number words" starting from addr

ARM specific commands[edit | edit source]

The devreg commands are specific to ARM peripherals, and display or modify the registers in a specified peripheral:


DMON > devreg

Available devices:
ADC            COMP           CRC            C_ADC          
DAC            DBG            DMA1           EXTI           
FLASH          GPIOA          GPIOB          GPIOC          
GPIOD          GPIOE          GPIOH          I2C1           
I2C2           IWDG           LCD            NVIC           
PWR            RCC            RI             RTC            
SPI1           SPI2           SYSCFG         TIM10          
TIM11          TIM2           TIM3           TIM4           
TIM6           TIM7           TIM9           USART1         
USART2         USART3         USB            USB_SRAM       
WWDG           

DMON > devreg gpioe

GPIOE
 0x40021000   GPIO port mode (MODER)                   0x00500000 
 0x40021004   GPIO port output type (OTYPER)           0x00000000 
 0x40021008   GPIO port output speed (OSPEEDER)        0x00f00000 
 0x4002100c   GPIO port pull-up/pull-down (PUPDR)      0x00000000 
 0x40021010   GPIO port input data (IDR)               0x00001000 
 0x40021014   GPIO port output data (ODR)              0x00000000 
 0x40021018   GPIO port bit set/reset (BSRR)           0x00000000 
 0x4002101c   GPIO port configuration lock (LCKR)      0x00000000 
 0x40021020   AFRL (AFRL)                              0x00000000 
 0x40021024   GPIO alternate function high (AFRH)      0x00000000 

DMON > devreg gpioe odr 0xffffffff

Wrote value 0xffffffff to odr

DMON > devreg gpioe

GPIOE
 0x40021000   GPIO port mode (MODER)                   0x00500000 
 0x40021004   GPIO port output type (OTYPER)           0x00000000 
 0x40021008   GPIO port output speed (OSPEEDER)        0x00f00000 
 0x4002100c   GPIO port pull-up/pull-down (PUPDR)      0x00000000 
 0x40021010   GPIO port input data (IDR)               0x00001c00 
 0x40021014   GPIO port output data (ODR)              0x0000ffff 
 0x40021018   GPIO port bit set/reset (BSRR)           0x00000000 
 0x4002101c   GPIO port configuration lock (LCKR)      0x00000000 
 0x40021020   AFRL (AFRL)                              0x00000000 
 0x40021024   GPIO alternate function high (AFRH)      0x00000000