-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathmaixgo.py
106 lines (85 loc) · 3.01 KB
/
maixgo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# -----------------------------------------------------------------------------
"""
Sipeed MAiX Go Debugger
http://www.sipeed.com/
CPU: STM32F103C8T6
"""
# -----------------------------------------------------------------------------
import cli
import cortexm
import mem
import soc
import flash
import gpio
import rtt
import vendor.st.st as vendor
import vendor.st.flash as flash_driver
import vendor.st.gpio as gpio_driver
# -----------------------------------------------------------------------------
soc_name = 'STM32F103x8'
prompt = 'maixgo'
# -----------------------------------------------------------------------------
# using a 3rd party stlinkv2 dongle
default_itf = {
'name': 'stlink',
'vid': 0x0483,
'pid': 0x3748,
'itf': 1,
}
# -----------------------------------------------------------------------------
# gpio configuration
# pin, mode, pupd, otype, ospeed, name
gpio_cfg = (
)
# -----------------------------------------------------------------------------
class target(object):
"""maixgo- Sipeed MAiX Go Board Debugger with STM32F103x8 SoC"""
def __init__(self, ui, dbgio):
self.ui = ui
self.dbgio = dbgio
self.device = vendor.get_device(self.ui, soc_name)
self.dbgio.connect(self.device.cpu_info.name, 'swd')
self.cpu = cortexm.cortexm(self, ui, self.dbgio, self.device)
self.device.bind_cpu(self.cpu)
self.mem = mem.mem(self.cpu)
self.flash = flash.flash(flash_driver.stm32f0xx(self.device), self.device, self.mem)
gpio_drv = (gpio_driver.drv(self.device, gpio_cfg))
self.gpio = gpio.gpio(gpio_drv)
# setup the rtt client
ram = self.device.sram
self.rtt = rtt.rtt(self.cpu, mem.region('ram', ram.address, ram.size))
self.menu_root = (
('cpu', self.cpu.menu, 'cpu functions'),
('da', self.cpu.cmd_disassemble, cortexm.help_disassemble),
('debugger', self.dbgio.menu, 'debugger functions'),
('exit', self.cmd_exit),
('flash', self.flash.menu, 'flash functions'),
('go', self.cpu.cmd_go),
('gpio', self.gpio.menu, 'gpio functions'),
('halt', self.cpu.cmd_halt),
('help', self.ui.cmd_help),
('history', self.ui.cmd_history, cli.history_help),
('map', self.device.cmd_map),
('mem', self.mem.menu, 'memory functions'),
('program', self.flash.cmd_program, flash.help_program),
('regs', self.cmd_regs, soc.help_regs),
('rtt', self.rtt.menu, 'rtt client functions'),
('vtable', self.cpu.cmd_vtable),
)
self.ui.cli.set_root(self.menu_root)
self.set_prompt()
self.dbgio.cmd_info(self.ui, None)
def cmd_regs(self, ui, args):
"""display registers"""
if len(args) == 0:
self.cpu.cmd_regs(ui, args)
else:
self.device.cmd_regs(ui, args)
def set_prompt(self):
indicator = ('*', '')[self.dbgio.is_halted()]
self.ui.cli.set_prompt('%s%s> ' % (prompt, indicator))
def cmd_exit(self, ui, args):
"""exit application"""
self.dbgio.disconnect()
ui.exit()
# -----------------------------------------------------------------------------