Skip to content

2.6.11 - New Toolchain, and fixes for mostly-PWM-related issues

Latest
Compare
Choose a tag to compare
@SpenceKonde SpenceKonde released this 03 Sep 05:11
· 5 commits to master since this release

This is an interim release. Do not be alarmed if issues with installation are encountered.

  • New toolchain version.
  • Make wiring.c have the functions referred to in the doc.
  • Split the three ugly functions that constituted 60% of wiring.c into a separate file, because finding anything else with those #ifdef-hell-spawned abominations is awful.
  • General cleanup of wiring.c and timers.h for maintainability.
  • Fix some of the constants for timers so that all timers can still get uniform codes specifying the portmux and (for non-TCA's) which pin within the mux it is, which matters for the other core.
  • Documentation improvements.
  • Study of the state of 20 MHz timekeeping is ongoing. By my calculations it resulted in time passing 1/51th too fast
  • Corrected critical bug in the TCD0 millis option (the default on 1-series parts) (#1243)
  • Corrected bug sometimes encountered when using serial under atypical cases the causes of which remain mysterious), where it would complain about __poll_dre_done. (#1226)
  • Correct bug with Comparator (#1236)
  • Correct numerous issues with the microchip board defs. Clearly nobody is using them - since 2 of them didn't compile, and none of the optiboot ones would ever be able to successfully be programmed over the bootloader because selfprogramming wasn't enabled (BOOTEND = 0).
  • Major Bugfix: Correct issue #1164 thanks to John Vasileff. This would cause Serial.flush() to hang in one-wire mode.
  • Major Bugfix: Correct buffered PWM on all parts.
  • Major Bugfix: Correct PWM on non-default pins on all parts; digitalPinHasPWM() macro.
  • Fix bug with CCL clock source selection options.
  • Correct some ambiguities with the clock specification defines for RTC Millis using external clock; we don't support it,
  • Enhance documentation
  • Correct critical problem with timekeeping on parts with a TCD. (#1243)
  • Removed example of exactly the sort of boneheaded and strictly-worse code I rail against in a trivial part of Wire. While it was merely a bad example at the time it was written, it is now known to be a bad, dangerous example, because it featured code that demonstrated Strictly Worse access to registers, by loading a vport register to a pointer register, and using that - not only is it stupid and just a less-featureful PORT when accessed that way, avoiding pointer access to the I/O space (64 addresses, - 28 VPORTs and 4 GPIORs in low I/O and SP, RAMPZ (if applicable), CCP (the register used for __PROTECTED_WRITE()}), and of course the SREG) is necessary due to an erratum effecting all AVRxm parts. And indeed, none of those are registers that anyone should ever access using a pointer, even if it didn't wasn't safe against an incredibly scary bug - the low I/O is all about the bitwise instructions, which need both the register and bit compile time known. VPORT_t* is not a type you should ever declare - if you have had to declare it, you get no benefit from faster access to it (like you do if you use the compile-time known VPORT's and access them without pointing. )
  • Enhance error messages from wrong-part on upload.