Skip to content

Commit fe2e523

Browse files
committed
Adding more Microchip ATSAM chip support.
1 parent 04f5cb5 commit fe2e523

File tree

7 files changed

+371
-0
lines changed

7 files changed

+371
-0
lines changed

soc.py

+4
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,10 @@ def wr(self, val, idx=0):
313313
"""write a register"""
314314
return self.cpu.wr(self.adr(idx, self.size), val, self.size)
315315

316+
def wr8(self, val, idx=0):
317+
"""write a register as a byte"""
318+
return self.cpu.wr(self.adr(idx, 8), val, 8)
319+
316320
def set_bit(self, val, idx=0):
317321
"""set bits in a register"""
318322
self.wr(self.rd(idx) | val, idx)

target/samd21.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# -----------------------------------------------------------------------------
2+
"""
3+
4+
Makerfabs Maduino Zero (ATSAMD21G18A)
5+
6+
"""
7+
# -----------------------------------------------------------------------------
8+
9+
import cli
10+
import cortexm
11+
import mem
12+
import soc
13+
import flash
14+
15+
import vendor.atmel.atmel as atmel
16+
import vendor.atmel.flash as flash_driver
17+
18+
# -----------------------------------------------------------------------------
19+
20+
soc_name = 'ATSAMD21G18A'
21+
prompt = 'samd21'
22+
23+
# -----------------------------------------------------------------------------
24+
25+
# jlink device
26+
default_itf = {
27+
'name': 'jlink',
28+
'vid': 0x1366,
29+
'pid': 0x0101,
30+
'itf': 0,
31+
}
32+
33+
# -----------------------------------------------------------------------------
34+
35+
class target(object):
36+
"""samd21 - Makerfabs Maduino Zero"""
37+
38+
def __init__(self, ui, dbgio):
39+
self.ui = ui
40+
self.dbgio = dbgio
41+
self.device = atmel.get_device(self.ui, soc_name)
42+
self.dbgio.connect(self.device.cpu_info.name, 'swd')
43+
self.cpu = cortexm.cortexm(self, ui, self.dbgio, self.device)
44+
self.device.bind_cpu(self.cpu)
45+
self.mem = mem.mem(self.cpu)
46+
self.flash = flash.flash(flash_driver.flash(self.device), self.device, self.mem)
47+
48+
self.menu_root = (
49+
('cpu', self.cpu.menu, 'cpu functions'),
50+
('da', self.cpu.cmd_disassemble, cortexm.help_disassemble),
51+
('debugger', self.dbgio.menu, 'debugger functions'),
52+
('exit', self.cmd_exit),
53+
('flash', self.flash.menu, 'flash functions'),
54+
('go', self.cpu.cmd_go),
55+
('halt', self.cpu.cmd_halt),
56+
('help', self.ui.cmd_help),
57+
('history', self.ui.cmd_history, cli.history_help),
58+
('map', self.device.cmd_map),
59+
('mem', self.mem.menu, 'memory functions'),
60+
('program', self.flash.cmd_program, flash.help_program),
61+
('regs', self.cmd_regs, soc.help_regs),
62+
('vtable', self.cpu.cmd_vtable),
63+
)
64+
65+
self.ui.cli.set_root(self.menu_root)
66+
self.set_prompt()
67+
self.dbgio.cmd_info(self.ui, None)
68+
69+
def cmd_regs(self, ui, args):
70+
"""display registers"""
71+
if len(args) == 0:
72+
self.cpu.cmd_regs(ui, args)
73+
else:
74+
self.device.cmd_regs(ui, args)
75+
76+
def set_prompt(self):
77+
indicator = ('*', '')[self.dbgio.is_halted()]
78+
self.ui.cli.set_prompt('%s%s> ' % (prompt, indicator))
79+
80+
def cmd_exit(self, ui, args):
81+
"""exit application"""
82+
self.dbgio.disconnect()
83+
ui.exit()
84+
85+
# -----------------------------------------------------------------------------

target/saml21.py

+76
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
import mem
1212
import soc
1313
import flash
14+
import gpio
1415

1516
import vendor.atmel.atmel as atmel
1617
import vendor.atmel.flash as flash_driver
18+
import vendor.atmel.gpio as gpio_driver
1719

1820
# -----------------------------------------------------------------------------
1921

@@ -30,6 +32,77 @@
3032
'itf': 0,
3133
}
3234

35+
# -----------------------------------------------------------------------------
36+
# gpio configuration
37+
38+
# pin, mode, name
39+
gpio_cfg = (
40+
('PA00', None, ''),
41+
('PA01', None, ''),
42+
('PA02', None, ''),
43+
('PA03', None, ''),
44+
('PA04', None, ''),
45+
('PA05', None, ''),
46+
('PA06', None, ''),
47+
('PA07', None, ''),
48+
('PA08', None, ''),
49+
('PA09', None, ''),
50+
('PA10', None, ''),
51+
('PA11', None, ''),
52+
('PA12', None, ''),
53+
('PA13', None, ''),
54+
('PA14', None, ''),
55+
('PA15', None, ''),
56+
('PA16', None, ''),
57+
('PA17', None, ''),
58+
('PA18', None, ''),
59+
('PA19', None, ''),
60+
('PA20', None, ''),
61+
('PA21', None, ''),
62+
('PA22', None, ''),
63+
('PA23', None, ''),
64+
('PA24', None, ''),
65+
('PA25', None, ''),
66+
('PA26', None, ''),
67+
('PA27', None, ''),
68+
('PA28', None, ''),
69+
('PA29', None, ''),
70+
('PA30', None, ''),
71+
('PA31', None, ''),
72+
('PB00', None, ''),
73+
('PB01', None, ''),
74+
('PB02', None, ''),
75+
('PB03', None, ''),
76+
('PB04', None, ''),
77+
('PB05', None, ''),
78+
('PB06', None, ''),
79+
('PB07', None, ''),
80+
('PB08', None, ''),
81+
('PB09', None, ''),
82+
('PB10', 'o', 'LED0'),
83+
('PB11', None, ''),
84+
('PB12', None, ''),
85+
('PB13', None, ''),
86+
('PB14', None, ''),
87+
('PB15', None, ''),
88+
('PB16', None, ''),
89+
('PB17', None, ''),
90+
('PB18', None, ''),
91+
('PB19', None, ''),
92+
('PB20', None, ''),
93+
('PB21', None, ''),
94+
('PB22', None, ''),
95+
('PB23', None, ''),
96+
('PB24', None, ''),
97+
('PB25', None, ''),
98+
('PB26', None, ''),
99+
('PB27', None, ''),
100+
('PB28', None, ''),
101+
('PB29', None, ''),
102+
('PB30', None, ''),
103+
('PB31', None, ''),
104+
)
105+
33106
# -----------------------------------------------------------------------------
34107

35108
class target(object):
@@ -44,6 +117,8 @@ def __init__(self, ui, dbgio):
44117
self.device.bind_cpu(self.cpu)
45118
self.mem = mem.mem(self.cpu)
46119
self.flash = flash.flash(flash_driver.flash(self.device), self.device, self.mem)
120+
gpio_drv = (gpio_driver.drv(self.device, gpio_cfg))
121+
self.gpio = gpio.gpio(gpio_drv)
47122

48123
self.menu_root = (
49124
('cpu', self.cpu.menu, 'cpu functions'),
@@ -52,6 +127,7 @@ def __init__(self, ui, dbgio):
52127
('exit', self.cmd_exit),
53128
('flash', self.flash.menu, 'flash functions'),
54129
('go', self.cpu.cmd_go),
130+
('gpio', self.gpio.menu, 'gpio functions'),
55131
('halt', self.cpu.cmd_halt),
56132
('help', self.ui.cmd_help),
57133
('history', self.ui.cmd_history, cli.history_help),

vendor/atmel/atmel.py

+18
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,24 @@ def ATSAML21J18B_fixup(d):
7878
s.fixups = (ATSAML21J18B_fixup, cmregs.cm0plus_fixup)
7979
soc_db[s.name] = s
8080

81+
#-----------------------------------------------------------------------------
82+
# ATSAMD21G18A
83+
84+
def ATSAMD21G18A_fixup(d):
85+
d.soc_name = 'ATSAMD21G18A'
86+
d.cpu_info.deviceNumInterrupts = 32
87+
# memory and misc periperhals
88+
d.insert(soc.make_peripheral('flash', 0x00000000, 256 << 10, None, 'Flash'))
89+
d.insert(soc.make_peripheral('sram', 0x20000000, 32 << 10, None, 'SRAM'))
90+
#d.insert(soc.make_peripheral('lp_sram', 0x30000000, 8 << 10, None, 'Low Power SRAM'))
91+
#d.insert(soc.make_peripheral('NVMUR', 0x00804000, 8, _nvm_user_row_regset, 'NVM User Row'))
92+
93+
s = soc_info()
94+
s.name = 'ATSAMD21G18A'
95+
s.svd = 'ATSAMD21G18A'
96+
s.fixups = (ATSAMD21G18A_fixup, cmregs.cm0plus_fixup)
97+
soc_db[s.name] = s
98+
8199
#-----------------------------------------------------------------------------
82100

83101
def get_device(ui, name):

vendor/atmel/flash.py

+5
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@
2525
('flash', (256,) * 1024),
2626
)
2727

28+
ATSAMD21G18A_flash = (
29+
('flash', (64,) * 4096),
30+
)
31+
2832
# map device.soc_name to the flash map
2933
flash_map = {
3034
'ATSAML21J18B': ATSAML21J18B_flash,
35+
'ATSAMD21G18A': ATSAMD21G18A_flash,
3136
}
3237

3338
#-----------------------------------------------------------------------------

0 commit comments

Comments
 (0)