I developed a board that makes use of a Teensy 3.6. The purpose of the board is to provide a general platform to creat CNC controller applications. Not motion control but syncronized linear movement of up to three axis. The board has these:
1) 3 x step/dir channels
2) 3 x PWM 0-10V outputs, fully buffered
3) 3 x Encoder/linear scale inputs. TTL and RS422 selectable
4) 8 x open collector 24V inductive drivers for output (I2C)
5) 8 x 24V opto isolated inputs (I2C)
6) 7.0" 4D systems LCD interface
7) 1 x RS485 channel

The idea is that I will have all the drivers written and then just do the custom application to control whatever with the board everytime.
So my question is this:
What is the best way to go about creating the drivers or base package to enable me to just write the top level stuff? Do I create classes for every hardware function or is there a better way?

What would other developers do?