<div dir="ltr"><div>I would like to offer support for the relatively new AVR 8-bit subarchitecture avrxmega3 which includes the following series: megaAVR 0, tinyAVR 0 and 1.  This adds 35 new controllers to FPC's repertoire.  The current state can be viewed in a git branch (<a href="https://github.com/ccrause/freepascal/tree/avrxmega3">https://github.com/ccrause/freepascal/tree/avrxmega3</a>).  I can also prepare a patch (perhaps two: compiler and rtl separately) if it is accepted into trunk.</div><div><br></div><div>There are very few differences between the classical avr8 and this new architecture.  The only differences I have picked up and included in the compiler so far:</div><div>* Memory map excludes core register file, so I/O register addresses start at offset 0.</div><div>* 16-bit I/O register read/write order is different.  Both read and write operations should access low register first.</div><div><br></div><div>Notes on controller units:<br></div><div>* Some interrupt names have aliases, I don't know how to specify an alias for interrupt vectors so I picked the first name in the device file.</div><div>* The I/O registers are grouped per peripheral, this naturally leads to using records to group the individual registers.  There are a whole bunch of bit names with clashes between registers. To work around name clashes I decided to use objects and included the named bits inside the objects. An example of writing named bits to a register:</div><div>  ADC0.CTRLC := TADC.SAMPCAPbm or TADC.REFSEL_VDDREF or TADC.PRESC_DIV256;</div><div><br></div><div>Best wishes,</div><div>Christo<br></div></div>