The most precise way to control the speed of the motor is to drive the STEP signal from a hardware timer. If I just need steady-state speed control I can avoid the overhead of using interrupts by using a PWM timer to output a pulse on the STEP pin. This has the advantage of being completely "fire and forget", I configure the timer and just let it go. The downside is that I need to have some sort of external timer or sensor to let me know when to change the speed.
The maximum speed with the NEMA-8 motor is 180/20, which is a 172us period and 19us pulse, 5.85KHz. Any shorter than this and the motor will stall. In 1/8 microstepping mode (1600 steps per revolution) this is 3.6RPM. This also gives the actual SM clock, 1.05MHz (0.95us). This is off from the theoretical 1MHz due to the sloppy 32KHz crystal. In full step mode, the minimum period is about 1440 (180*8). This is nowhere close to the A3967 specification of 500KHz (2us).
The Fixed Off-Time is defined as RtCt (20K*680pF= 14us). The RC Blanking is defined as 1400Ct (1400*680pF= 980ns). This adds up to 15us. If this is applied to every step, this would limit the stepping frequency to 67KHz.
Both STEP_X (P1.4) and STEP_Y (P1.5) use TA0, so they will both run at the same speed in PWM mode. STEP_Z (P2.4) uses TA2. I changed STEP_Y to use TA1.1 (P2.0) in CtrlMtr so they can all be run independently.