SAMD21 Raw Pulse-Width Modulation (PWM) using CMSIS @ShawnHymel @MicrochipMakes
Digging deep into the Microchip SAMD21 microcontroller documentation, Shawn Hymel documents how to output waveforms of specific frequency with the chip clock controller and associated registers. Not for the faint of heart!
I’ve spent the last few days digging through the SAMD21 datasheet and online examples to get some insight into using CMSIS. On the surface, it’s not too bad: you just need to set some values in some registers to get a pin to output a square wave. In reality, it requires a good amount of code to perform this simple action.
The work is much more complex than the 8 bit counters on simple Microchip boards like the Arduino Uno.
Let’s walk through an example of outputting a 1 MHz square wave on pin PA18. Note that PA18 is D10 on the Arduino Zero, Adafruit Feather M0, and the SparkFun SAMD21 Mini Breakout board. If you don’t have one of these boards, check your schematic to see where PA18 goes. Also, note that there are lots of ways to output a 1 MHz square wave on a pin. We’ll be doing this using a 50% duty cycle PWM and the 48 MHz system clock.
A great read for understanding this topic. Read more here.