avr: add attiny1616 support

This is just support for the chip, no boards are currently supported.
However, you can use this target on a custom board.

Notes:

  - This required a new runtime and machine implementation, because the
    hardware is actually very different (and much nicer than older
    AVRs!).
  - I had to update gen-device-avr to support this chip. This also
    affects the generated output of other AVRs, but I checked all chips
    we support and there shouldn't be any backwards incompatible
    changes.
  - I did not implement peripherals like UART, I2C, SPI, etc because I
    don't need them. That is left to do in the future.

You can flash these chips with only a UART and a 1kOhm resistor, which
is really nice (no special hardware needed). Here is the program I've
used for this purpose: https://pypi.org/project/pymcuprog/
This commit is contained in:
Ayke van Laethem
2023-05-18 00:13:43 +02:00
committed by Ron Evans
parent 4d11d552db
commit 2fb866ca86
12 changed files with 472 additions and 2 deletions
+13
View File
@@ -333,6 +333,15 @@ func readATDF(path string) (*Device, error) {
}
}
// Flash that is mapped into the data address space (attiny10, attiny1616,
// etc).
mappedFlashStart := int64(0)
for _, name := range []string{"MAPPED_PROGMEM", "MAPPED_FLASH"} {
if segment, ok := memorySizes["data"].Segments[name]; ok {
mappedFlashStart = segment.start
}
}
flashSize, err := strconv.ParseInt(memorySizes["prog"].Size, 0, 32)
if err != nil {
return nil, err
@@ -379,6 +388,7 @@ func readATDF(path string) (*Device, error) {
"flashSize": int(flashSize),
"ramStart": ramStart,
"ramSize": ramSize,
"mappedFlashStart": mappedFlashStart,
"numInterrupts": len(device.Interrupts),
},
interrupts: interrupts,
@@ -629,6 +639,9 @@ func writeLD(outdir string, device *Device) error {
/* Generated by gen-device-avr.go from {{.file}}, see {{.descriptorSource}} */
__flash_size = 0x{{printf "%x" .flashSize}};
{{if .mappedFlashStart -}}
__mapped_flash_start = 0x{{printf "%x" .mappedFlashStart}};
{{end -}}
__ram_start = 0x{{printf "%x" .ramStart}};
__ram_size = 0x{{printf "%x" .ramSize}};
__num_isrs = {{.numInterrupts}};