Releases: SpenceKonde/DxCore
1.5.11 - Critical Bugfixes
This corrects two critical bugs, both of which are thought to date to 1.5.9 but were not reported until post-1.5.10 - disabled millis was busted... and... so was PWM, on 6 or 12 pins (depending on pincount) DA/DB series, leaving only 5, 6 or 7 pins capable of PWM, and most of those were the worst pins for PWM. At some point after I ran the pwm tester last, and 1.5.10, the pwm broke, while I think the millis one must have been much more recent, as I use disabled millis all the time, plus making several other assorted improvements.
Also fixes excessively bloated windows toolchain package and bad versions of eeprom.h and power.h builtin libraries.
1.5.10 - Emergency fix to 1.5.9
1.5.9 was no good. Use 1.5.10
1.5.9 - Buncha Bugfixes
We had been planning to wait on completion of a few new features for the next release, but too many changes have accumulated and people need to get the new version with all the fixes in, so this is being released now.
As you can see (reordered from changelog) we have a lot of fixes and maintenance.
* Bugfix - Correct Flash.h issues.
* Bugfix - Remove boot_opt.h which is not applicable to modern AVRs.
* Bugfix - Remove the useless dummy app that forced us to use avr-size -A to see the size of the bootloader separated from the app, and switch avr-size -A to normal avr-size to take advantage of this.
* Bugfix - Correct critical defect in disabled millis.
* Bugfix - Optiboot did not honor entry conditions (#452), bump optiboot version to 0x1A02.
* Bugfixes, several, for SerialUPDI, and improvements in error messages.
* Bugfix - Correct compilation when analogWrite() was used on AVR EA.
* Bugfix - Add missing API extensions on EA-series for ADC.
* Bugfix - Fix Comparator, Event, and SPI and Wire up well enough that things at least compile on EA. And in the case of comparator, SPI, and Wire, I'm pretty sure they work too.
* Bugfix - Optiboot boards did not honor the FLMAP option.
* Bugfix - in several cases it was possible to, using third party IDEs, pass incompatible options to the core. This now produces a more helpful error message. (#477)
* Maintenance - Correct CI testing to specify valid option for flmap menu.
* Maintenance - add CI testing for EA-series parts.
* Maintenance - Rebuilt all bootloaders in support of above fix. [flash.h fixes]
* Maintenance - Rebuilt all bootloaders again. [for entry condition fixes]
And very few new features:
* Docs: Major updates across the board, some long files have a ToC now.
* Enhancement - implement `_getCurrentMillisTimer()` and `_getCurrentMillisState()` which are/will be required for sleepTime.h
* Enhancement - Add the 16k and 32k EA-series parts. Still no 8k ones or headers for them either.
* Enhancement - (also makes the CI easier) Lay ground work for future library support for a Flash.h for Ex-series.
* Enhancement - Update forward looking EB-series defines now that headers have escaped (here's the bad news: 4 independent channels only, half of the WO channels are inverted waveforms with dead time insertion for PSC and BLDC drive applications - and TCF at most gets you 2 8-bit channels through a TCB-like method - it's meant for generating square waves or periodic pulses. The quality of the 4 good PWM channels we get may be unmatched (we'll need to see the docs - but it looks like 19-bit PWM resolution may be in the cards with HIRES. That will have to wait until we have datasheets though.
* Enhancement Add CORE_HAS_ERRORFUNS #define. Add CORE_HAS_MILLISSTATE
1.5.8 - EA-series support in, New Toolchain build
Support for EA-series should be considered beta quality at best. New toolchain should not break anything. bunch of assorted significant bugfixes, some rather serious. Get out and kick the tires on this, See if you can get any joy with the actual hardware
1.5.6 - Critical Bugfixes
This corrects a number of critical bugs:
- Critical Bugfix - analogWrite was totally hosed on all parts and would rarely output values. A number of distinct bugs were involved here.
- Critical Bugfix - TCA PWM worked on some 32-pin parts but not others. Behavior was furthermore found to be inconsistent between the DB and DD-series parts
- Critical Bugfix - DAC was not functional when used through analogWrite.
- Critical Bugfix - Third party libraries which used digitalPinTo____ macros could get back invalid values when negative numbers were passed instead of NOT_A_PIN
- Serious Bugfix: Correct issue with the USART corrupting the low bit of GPIOR3 and USERSIG corrupting bit 3 of the same due to leftover debug code.
- Bugfix: MILLIS_VECTOR did the same thing, and was implemented at an earlier time for the same reason. We've returned to using that old, documented name.
- Bugfix: Large portions of advertised functionality missing from DxCore.h were added.
- Spelling, grammar and typographical fixes.
1.5.5 fix for critical regression in wire and regression in pinConfigure()
Critical Bugfix Wire "master and slave" mode malfunctioned in 1.5.x versions. This is corrected.
Bugfix USERSIG library never worked correctly. This is corrected.
Bugfix pinConfigure functionality had major regression and failed to work under many circumstances due to a typo, that is corrected.
Bugfix Eliminate use of RAMPZ in attach ISR on parts with 64k flash or less, saving 4 instruction words and 5 clocks.
Bugfix Correct Azduino board bootloader names and options.
Enhancement Experimentation has found that some E-spec 48 MHz parts actually run as "expected" , if your expectations tend towards optimism.... Yeah, it seemed to work fine shrug So the core now has that as an option (for crystal. not just clock)
Enhancement The optimization level menu was brought over from mTC. In addition to letting you choose -O3, it's been found that a large but unpredictable impact on binary size can be realized by turning off GCSE. Whether this makes the binary larger or smaller is hard to predict, but the effect can be over 5%.
Bugfix Issues with converting between analog and digital pins on some DD-series parts resolved. Optiboot DD28's were improperly using the 32-pin variant, too, and an assortment of parts was using wrong settings due to copy-paste errors
1.5.4 - Fix for attachInterrupt on PORTC
Attempting to use attachInterrupt() with the "new" mechanism on PORTC (you know, the MVIO port) would cause a reset when the interrupt fired, because the ISR was not being defined (so it would jump to BADISR, which jumps to 0x0000, which would begin initialization, but when it got to .init3, the core would notice that no reset had actually occurred and identify this as a dirty reset, and trigger a clean software reset to recover)
This release corrects this serious bug.
Thanks to @M65649 for discovering and providing a PR.
1.5.3 - CRITICAL bugfix for 1.5.2
In 1.5.2. "burn bootloader" was improperly configuring the pins on AVR DD-series parts that did not use optiboot in a maximally hostile and perverse manner, resulting in UPDI always being disabled, and hence, unless one has one of the small number of high voltage updi programmers that support the DD-series parts (programming tools treating them as if they were tinyAVRs would if one was lucky and/or careful, fail to work, and if one was careless and unlucky, instead cause hardware damage). Most of us do not have the appropriate HV programming tools, and hence would simply observe that "burn bootloader" would brick the chip.
It was a single letter typo, placing the pin configuration bitfields 1 position to the right of the correct one... and the higher bit which was thus always 0 which corresponds to disabling UPDI functionality. This error was only present on the non-optiboot definition, which is also the case in which the user is least likely to have any way to reprogram the device (the-less-flagrantly
Sorry about that...
1.5.2 - Bugfixes for 1.5.x
This fixes a slew of bugs - some introduced very late, but most of which just weren't being caught by CI because until a release was in board manager, it was using the old toolchain version with no support for the 16dd and 32dd and out of date headers for the 64dd.
- Correct issue with event library for DD-series. (it was totally busted, even when it did compile)
- Correct issue with ADC on PORTD of 20 pin devices (they gave an error as if they weren't analog pins)
- Correct issue with SPI on 14-pin parts (It wouldn't compile)
- Correct timekeeping (Thanks @MX682X) with TCA0 at 24 MHz
- Correct linting issues relating to libraries.
- Correct issue with uploading via programmer through avrdude. (Thanks @MX682X)
I would recommend still treating this as beta, but it should be a lot more usable.
1.5.1 - the big one! (treat as beta for now)
This release brings in more changes than any other DxCore or megaTinyCore release ever has.
1.5.1 quick fix for a find-and-replace gone wild in 1.5.0.
1.5.0
- Major Enhancement: Support the AVR DD-series parts!!
- Major Enhancement: Update to latest version of Wire
- Related to other libraries
- Bugfix: Fix issue with SSD bit being cleared when using beginTransaction().
- Bugfix: Fix bug in Logic with pin inputs being handled improperly.
- Bugfix: Remove multiple signatures for Wire.requestFrom to fix issues with Wire with certain libraries.
- Bugfix:
long_soft_event
method did not work correctly. - Bugfix: Correct bug(s) when waking from sleep mode via TWI (aka I2C/Wire) address match (Thanks @MX682X. You are one of our MVPs). TWI slaves should now reliably wake on address match and other wake sources from all sleep modes.
- The big improvement is that if you don't attach an interrupt using the
attachInterrupt()
method, you can make your own interrupt, or just save the flash. - Bugfix: Logic, Event, Comparator and ZCD no longer fight if multiple are used at the same time.
- boards.txt menu related
- Enhancement: Improvements for menu options for all boards.
- Enhancement: Add flash spm options for DD-series parts.
- Bugfix: Remove notice in that MVIO requires bootloader burn to apply for non-optiboot parts (where it is not required), and add it to optiboot parts (where it is - yes, these were backwards)
- Bugfix: Correct issue with the menu options for AVR DD-series parts, which resulting in burn bootloader bricking these chips to all who don't have an NV UPDI programmer, of which I believe only one is currently available, from Microchip, for an arm and a leg. (Special thanks to the folks who reported this before I had a chance to brick any of my own hardware)
- Enhancement: Add WDT menu options to set the WDT fuse to forcibly enable the watchdog timer on start.
- PWM related
- Enhancement: Largely reimplemented the first half of analogWrite(). On parts with a TCA1, all PORTMUX options should now work, even those with only 3 pins.
- Enhancement: Enable PORTMUX detection for TCD0 on the DD's (and it can be enabled easily for DA and DB parts if they ever fix the errata)
- Bugfix: Correct bad pwm-related macros on 28, 32, and 20 pin DD-series parts.
- SerialUPDI related
- Bugfix: Fix issue with SerialUPDI uploads on updated versions of linux
- Bugfix: Correct issue with SerialUPDI and PROGMEM_SECTIONn directives (it was tripping over the hole in the binary).
- Serial related
- Major Enhancement: Change class hierarchy for hardware serial ports. This results in some flash size reduction since unused virtual functions now don't have to exist. (The same thing was done for Two_Wire (Wire.h) on a very early version of megaTinyCore due to complaints about the fact that stock version of Wire wouldn't fit onto a 4k part. The Wire library has since seen a near total rewrite which further reduced flash usage). Thus, rather than pulling in api/HardwareSerial.h, and subclassing that definition of HardwareSerial (itself a subclass of Stream) to derive UartClass, we instead subclass Stream directly. This has been accompanied by changing the name of the class to HardwareSerial to ensure code compatibility (so a library could ask for a pointer to a HardwareSerial port, using that name like it would on classic AVRs) and it still works (it always did, but only because UARTclass was a subclass of HardwareSerial, which was a subclass of Stream). This saves yet more flash on top of the reduction from the 1.4.x series of versions where the ISRs were merged and rewritten in asm.
- Enhancement: Improvement to stream timed read to make it work when millis is disabled, and to save 4 bytes of RAM.
- Bugfix: Correct issue introduced in 1.4.x which could cause problems when receiving data over Serial.
- Enhancement: Implement generic autobaud for Serial and some associated functionality.
- Bootloader related
- Enhancement: Implement a greater variety of entry conditions for the bootloader. This combined with DD increases the number of binaries I distribute to 325 for this core from 65 to 330 (the entry conditions alone would have brought it to 198. The new parts added 132 more).
- Enhancement: Add new entry condition menu for optiboot boards.
- Bugfix: Correct issue with spurious verification error on 128k parts using the bootloader when uploading a sketch of 64513-64024 bytes.
- Bugfix: Correct internal flaw in the bootloader that meant the compiler could legally output a bootloader binary which would only write 314 bytes per 512 byte page, leaving the rest blank. This happened to not manifest for the previous bootloader binaries. This was purely dumb luck though, and the new ones didn't work.
- Bugfix: Correct issue with serial on alt pins in Optiboot that never should have worked.
- Bugfix: Account for the fact that there is no acceptable LED pin on a 14-pin DD that is viable for all serial port and mux options. We pick PD6, unless using USART1, in which case we assume the LED is on PD4.
- Related to errors that may occur at hidden locations when using LTO (".text+0")
- Enhancement: Add Ref_LTO to explain what LTO is, and how to disable it when you receive an error pointing .text+0 (often specifying a function that isn't even defined in the file it mentioned) so that you can get the actual location of the error. This is a pain in the ass to do, and usually you can figure it out without doing this, but uh, well sometimes you can't. That was the case for me which led to me writing this up and providing a mechanism by which the core can be made to compile (we still disable uploading if LTO is disabled - in some cases the things done to make it compile with LTO disabled do not preserve functionality).
- Enhancement: Add clean copies of platform.txt and platform.txt without LTO/uploading, for both manual and board manager installations to extras.
- Other
- Enhancement: Add more part information macros (See the define list)
- Enhancement: New Toolchain version:
Azduino5Azduino6 for DD support. Added about 4000 lines of code to core_devices.h to ensure compatibility with people who manually install on instance with the old ATPACK - Bugfix: Undesired quote stripping bug workaround for windows cmd /C
- Bugfix: Correct bug with MVIO enable/disable behavior always being treated as disabled by the application code (this had little impact on actual behavior)
- Actually make it impossible to disable warnings.
- Enhancement: Add the MCUDude version of pinConfigure, arguments can now be separated by commas not bitwise OR's (though the old way will work).
- Bugfix: Add the missing #defines for peripheral count and reorganize core_devices to make porting easier
- Enhancement: Port asm millis from mTC.
- Documentation: Document what we know about the newly announced AVR EB-series, pencil in variants for the EA and EB-series.
- Enhancement: Rearrange Arduino.h for readability