Testprogram for TMC2209-Library. Uses Speed-Control via VACTUAL instead of Step/Dir

Dependencies:   TMCStepper mRotaryEncoder-os

Files at this revision

API Documentation at this revision

Comitter:
charly
Date:
Sun Mar 21 13:31:53 2021 +0000
Parent:
4:12bfa2c1729f
Child:
6:6ad7bc10ac20
Commit message:
Speed limit; Show direction on leds

Changed in this revision

TMCStepper.lib Show annotated file Show diff for this revision Revisions of this file
TMCStepper/CHOPCONF.cpp Show diff for this revision Revisions of this file
TMCStepper/DRV_STATUS.cpp Show diff for this revision Revisions of this file
TMCStepper/GCONF.cpp Show diff for this revision Revisions of this file
TMCStepper/IHOLD_IRUN.cpp Show diff for this revision Revisions of this file
TMCStepper/PWMCONF.cpp Show diff for this revision Revisions of this file
TMCStepper/TMC2208Stepper.cpp Show diff for this revision Revisions of this file
TMCStepper/TMC2208_bitfields.h Show diff for this revision Revisions of this file
TMCStepper/TMC2209Stepper.cpp Show diff for this revision Revisions of this file
TMCStepper/TMC2209_bitfields.h Show diff for this revision Revisions of this file
TMCStepper/TMCStepper.cpp Show diff for this revision Revisions of this file
TMCStepper/TMCStepper.h Show diff for this revision Revisions of this file
TMCStepper/TMC_MACROS.h Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TMCStepper.lib	Sun Mar 21 13:31:53 2021 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/charly/code/TMCStepper/#f4343071c8b1
--- a/TMCStepper/CHOPCONF.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-#include "TMCStepper.h"
-#include "TMC_MACROS.h"
-
-#define SET_REG(SETTING) CHOPCONF_register.SETTING = B; write(CHOPCONF_register.address, CHOPCONF_register.sr)
-
-// CHOPCONF
-/*
-uint32_t TMC2130Stepper::CHOPCONF() {
-    return read(CHOPCONF_register.address);
-}
-void TMC2130Stepper::CHOPCONF(uint32_t input) {
-    CHOPCONF_register.sr = input;
-    write(CHOPCONF_register.address, CHOPCONF_register.sr);
-}
-
-void TMC2130Stepper::toff(      uint8_t B ) { SET_REG(toff);    }
-void TMC2130Stepper::hstrt(     uint8_t B ) { SET_REG(hstrt);   }
-void TMC2130Stepper::hend(      uint8_t B ) { SET_REG(hend);    }
-//void TMC2130Stepper::fd(      uint8_t B ) { SET_REG(fd);      }
-void TMC2130Stepper::disfdcc(   bool    B ) { SET_REG(disfdcc); }
-void TMC2130Stepper::rndtf(     bool    B ) { SET_REG(rndtf);   }
-void TMC2130Stepper::chm(       bool    B ) { SET_REG(chm);     }
-void TMC2130Stepper::tbl(       uint8_t B ) { SET_REG(tbl);     }
-void TMC2130Stepper::vsense(    bool    B ) { SET_REG(vsense);  }
-void TMC2130Stepper::vhighfs(   bool    B ) { SET_REG(vhighfs); }
-void TMC2130Stepper::vhighchm(  bool    B ) { SET_REG(vhighchm);}
-void TMC2130Stepper::sync(      uint8_t B ) { SET_REG(sync);    }
-void TMC2130Stepper::mres(      uint8_t B ) { SET_REG(mres);    }
-void TMC2130Stepper::intpol(    bool    B ) { SET_REG(intpol);  }
-void TMC2130Stepper::dedge(     bool    B ) { SET_REG(dedge);   }
-void TMC2130Stepper::diss2g(    bool    B ) { SET_REG(diss2g);  }
-
-uint8_t TMC2130Stepper::toff()      { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.toff;    }
-uint8_t TMC2130Stepper::hstrt()     { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.hstrt;   }
-uint8_t TMC2130Stepper::hend()      { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.hend;    }
-//uint8_t TMC2130Stepper::fd()      { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.fd;      }
-bool    TMC2130Stepper::disfdcc()   { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.disfdcc; }
-bool    TMC2130Stepper::rndtf()     { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.rndtf;   }
-bool    TMC2130Stepper::chm()       { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.chm;     }
-uint8_t TMC2130Stepper::tbl()       { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.tbl;     }
-bool    TMC2130Stepper::vsense()    { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.vsense;  }
-bool    TMC2130Stepper::vhighfs()   { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.vhighfs; }
-bool    TMC2130Stepper::vhighchm()  { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.vhighchm;}
-uint8_t TMC2130Stepper::sync()      { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.sync;    }
-uint8_t TMC2130Stepper::mres()      { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.mres;    }
-bool    TMC2130Stepper::intpol()    { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.intpol;  }
-bool    TMC2130Stepper::dedge()     { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.dedge;   }
-bool    TMC2130Stepper::diss2g()    { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.diss2g;  }
-
-void TMC5160Stepper::diss2vs(bool B){ SET_REG(diss2vs); }
-void TMC5160Stepper::tpfd(uint8_t B){ SET_REG(tpfd);    }
-bool TMC5160Stepper::diss2vs()      { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.diss2vs; }
-uint8_t TMC5160Stepper::tpfd()      { CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.tpfd;    }
-*/
-void TMC2208Stepper::CHOPCONF(uint32_t input) {
-    CHOPCONF_register.sr = input;
-    write(CHOPCONF_register.address, CHOPCONF_register.sr);
-}
-uint32_t TMC2208Stepper::CHOPCONF() {
-    return read(CHOPCONF_register.address);
-}
-void TMC2208Stepper::toff   ( uint8_t  B )  { SET_REG(toff);    }
-void TMC2208Stepper::hstrt  ( uint8_t  B )  { SET_REG(hstrt);   }
-void TMC2208Stepper::hend   ( uint8_t  B )  { SET_REG(hend);    }
-void TMC2208Stepper::tbl    ( uint8_t  B )  { SET_REG(tbl);     }
-void TMC2208Stepper::vsense ( bool     B )  { SET_REG(vsense);  }
-void TMC2208Stepper::mres   ( uint8_t  B )  { SET_REG(mres);    }
-void TMC2208Stepper::intpol ( bool     B )  { SET_REG(intpol);  }
-void TMC2208Stepper::dedge  ( bool     B )  { SET_REG(dedge);   }
-void TMC2208Stepper::diss2g ( bool     B )  { SET_REG(diss2g);  }
-void TMC2208Stepper::diss2vs( bool     B )  { SET_REG(diss2vs); }
-
-uint8_t TMC2208Stepper::toff()      { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.toff;     }
-uint8_t TMC2208Stepper::hstrt()     { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.hstrt;    }
-uint8_t TMC2208Stepper::hend()      { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.hend;     }
-uint8_t TMC2208Stepper::tbl()       { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.tbl;      }
-bool    TMC2208Stepper::vsense()    { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.vsense;   }
-uint8_t TMC2208Stepper::mres()      { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.mres;     }
-bool    TMC2208Stepper::intpol()    { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.intpol;   }
-bool    TMC2208Stepper::dedge()     { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.dedge;    }
-bool    TMC2208Stepper::diss2g()    { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.diss2g;   }
-bool    TMC2208Stepper::diss2vs()   { TMC2208_n::CHOPCONF_t r{0}; r.sr = CHOPCONF(); return r.diss2vs;  }
-/*
-#define GET_REG_2660(SETTING) return CHOPCONF_register.SETTING;
-
-uint32_t TMC2660Stepper::CHOPCONF() { return CHOPCONF_register.sr; }
-void TMC2660Stepper::CHOPCONF(uint32_t data) {
-  CHOPCONF_register.sr = data;
-  write(CHOPCONF_register.address, CHOPCONF_register.sr);
-}
-
-void TMC2660Stepper::toff(uint8_t B)    {
-    SET_REG(toff);
-    if (B>0) _savedToff = B;
-}
-void TMC2660Stepper::hstrt(uint8_t B)   { SET_REG(hstrt);   }
-void TMC2660Stepper::hend(uint8_t B)    { SET_REG(hend);    }
-void TMC2660Stepper::hdec(uint8_t B)    { SET_REG(hdec);    }
-void TMC2660Stepper::rndtf(bool B)  { SET_REG(rndtf);   }
-void TMC2660Stepper::chm(bool B)    { SET_REG(chm); }
-void TMC2660Stepper::tbl(uint8_t B)     { SET_REG(tbl); }
-
-uint8_t TMC2660Stepper::toff()  { GET_REG_2660(toff);   }
-uint8_t TMC2660Stepper::hstrt()     { GET_REG_2660(hstrt);  }
-uint8_t TMC2660Stepper::hend() { GET_REG_2660(hend);    }
-uint8_t TMC2660Stepper::hdec()  { GET_REG_2660(hdec);   }
-bool TMC2660Stepper::rndtf() { GET_REG_2660(rndtf); }
-bool TMC2660Stepper::chm()  { GET_REG_2660(chm);    }
-uint8_t TMC2660Stepper::tbl() { GET_REG_2660(tbl);  }
-*/
\ No newline at end of file
--- a/TMCStepper/DRV_STATUS.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-#include "TMCStepper.h"
-#include "TMC_MACROS.h"
-
-#define GET_REG(NS, SETTING) NS::DRV_STATUS_t r{0}; r.sr = DRV_STATUS(); return r.SETTING
-/*
-uint32_t TMC2130Stepper::DRV_STATUS() { return read(DRV_STATUS_t::address); }
-
-uint16_t TMC2130Stepper::sg_result(){ GET_REG(TMC2130_n, sg_result);    }
-bool TMC2130Stepper::fsactive()     { GET_REG(TMC2130_n, fsactive);     }
-uint8_t TMC2130Stepper::cs_actual() { GET_REG(TMC2130_n, cs_actual);    }
-bool TMC2130Stepper::stallguard()   { GET_REG(TMC2130_n, stallGuard);   }
-bool TMC2130Stepper::ot()           { GET_REG(TMC2130_n, ot);           }
-bool TMC2130Stepper::otpw()         { GET_REG(TMC2130_n, otpw);         }
-bool TMC2130Stepper::s2ga()         { GET_REG(TMC2130_n, s2ga);         }
-bool TMC2130Stepper::s2gb()         { GET_REG(TMC2130_n, s2gb);         }
-bool TMC2130Stepper::ola()          { GET_REG(TMC2130_n, ola);          }
-bool TMC2130Stepper::olb()          { GET_REG(TMC2130_n, olb);          }
-bool TMC2130Stepper::stst()         { GET_REG(TMC2130_n, stst);         }
-*/
-uint32_t TMC2208Stepper::DRV_STATUS() {
-    return read(TMC2208_n::DRV_STATUS_t::address);
-}
-
-bool        TMC2208Stepper::otpw()      { GET_REG(TMC2208_n, otpw);         }
-bool        TMC2208Stepper::ot()        { GET_REG(TMC2208_n, ot);           }
-bool        TMC2208Stepper::s2ga()      { GET_REG(TMC2208_n, s2ga);         }
-bool        TMC2208Stepper::s2gb()      { GET_REG(TMC2208_n, s2gb);         }
-bool        TMC2208Stepper::s2vsa()     { GET_REG(TMC2208_n, s2vsa);        }
-bool        TMC2208Stepper::s2vsb()     { GET_REG(TMC2208_n, s2vsb);        }
-bool        TMC2208Stepper::ola()       { GET_REG(TMC2208_n, ola);          }
-bool        TMC2208Stepper::olb()       { GET_REG(TMC2208_n, olb);          }
-bool        TMC2208Stepper::t120()      { GET_REG(TMC2208_n, t120);         }
-bool        TMC2208Stepper::t143()      { GET_REG(TMC2208_n, t143);         }
-bool        TMC2208Stepper::t150()      { GET_REG(TMC2208_n, t150);         }
-bool        TMC2208Stepper::t157()      { GET_REG(TMC2208_n, t157);         }
-uint16_t    TMC2208Stepper::cs_actual() { GET_REG(TMC2208_n, cs_actual);    }
-bool        TMC2208Stepper::stealth()   { GET_REG(TMC2208_n, stealth);      }
-bool        TMC2208Stepper::stst()      { GET_REG(TMC2208_n, stst);         }
\ No newline at end of file
--- a/TMCStepper/GCONF.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-#include "TMCStepper.h"
-#include "TMC_MACROS.h"
-
-#define SET_REG(SETTING) GCONF_register.SETTING = B; write(GCONF_register.address, GCONF_register.sr)
-
-// GCONF
-/*
-uint32_t TMC2130Stepper::GCONF() {
-    return read(GCONF_register.address);
-}
-void TMC2130Stepper::GCONF(uint32_t input) {
-    GCONF_register.sr = input;
-    write(GCONF_register.address, GCONF_register.sr);
-}
-
-void TMC2130Stepper::I_scale_analog(bool B)         { SET_REG(i_scale_analog);          }
-void TMC2130Stepper::internal_Rsense(bool B)        { SET_REG(internal_rsense);         }
-void TMC2130Stepper::en_pwm_mode(bool B)            { SET_REG(en_pwm_mode);             }
-void TMC2130Stepper::enc_commutation(bool B)        { SET_REG(enc_commutation);         }
-void TMC2130Stepper::shaft(bool B)                  { SET_REG(shaft);                   }
-void TMC2130Stepper::diag0_error(bool B)            { SET_REG(diag0_error);             }
-void TMC2130Stepper::diag0_otpw(bool B)             { SET_REG(diag0_otpw);              }
-void TMC2130Stepper::diag0_stall(bool B)            { SET_REG(diag0_stall);             }
-void TMC2130Stepper::diag1_stall(bool B)            { SET_REG(diag1_stall);             }
-void TMC2130Stepper::diag1_index(bool B)            { SET_REG(diag1_index);             }
-void TMC2130Stepper::diag1_onstate(bool B)          { SET_REG(diag1_onstate);           }
-void TMC2130Stepper::diag1_steps_skipped(bool B)    { SET_REG(diag1_steps_skipped);     }
-void TMC2130Stepper::diag0_int_pushpull(bool B)     { SET_REG(diag0_int_pushpull);      }
-void TMC2130Stepper::diag1_pushpull(bool B)         { SET_REG(diag1_poscomp_pushpull);  }
-void TMC2130Stepper::small_hysteresis(bool B)       { SET_REG(small_hysteresis);        }
-void TMC2130Stepper::stop_enable(bool B)            { SET_REG(stop_enable);             }
-void TMC2130Stepper::direct_mode(bool B)            { SET_REG(direct_mode);             }
-
-bool TMC2130Stepper::I_scale_analog()               { GCONF_t r{0}; r.sr = GCONF(); return r.i_scale_analog;        }
-bool TMC2130Stepper::internal_Rsense()              { GCONF_t r{0}; r.sr = GCONF(); return r.internal_rsense;       }
-bool TMC2130Stepper::en_pwm_mode()                  { GCONF_t r{0}; r.sr = GCONF(); return r.en_pwm_mode;           }
-bool TMC2130Stepper::enc_commutation()              { GCONF_t r{0}; r.sr = GCONF(); return r.enc_commutation;       }
-bool TMC2130Stepper::shaft()                        { GCONF_t r{0}; r.sr = GCONF(); return r.shaft;                 }
-bool TMC2130Stepper::diag0_error()                  { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_error;           }
-bool TMC2130Stepper::diag0_otpw()                   { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_otpw;            }
-bool TMC2130Stepper::diag0_stall()                  { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_stall;           }
-bool TMC2130Stepper::diag1_stall()                  { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_stall;           }
-bool TMC2130Stepper::diag1_index()                  { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_index;           }
-bool TMC2130Stepper::diag1_onstate()                { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_onstate;         }
-bool TMC2130Stepper::diag1_steps_skipped()          { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_steps_skipped;   }
-bool TMC2130Stepper::diag0_int_pushpull()           { GCONF_t r{0}; r.sr = GCONF(); return r.diag0_int_pushpull;    }
-bool TMC2130Stepper::diag1_pushpull()               { GCONF_t r{0}; r.sr = GCONF(); return r.diag1_poscomp_pushpull;}
-bool TMC2130Stepper::small_hysteresis()             { GCONF_t r{0}; r.sr = GCONF(); return r.small_hysteresis;      }
-bool TMC2130Stepper::stop_enable()                  { GCONF_t r{0}; r.sr = GCONF(); return r.stop_enable;           }
-bool TMC2130Stepper::direct_mode()                  { GCONF_t r{0}; r.sr = GCONF(); return r.direct_mode;           }
-*/
-/*
-bit 18 not implemented:
-test_mode 0:
-Normal operation 1:
-Enable analog test output on pin DCO. IHOLD[1..0] selects the function of DCO:
-0…2: T120, DAC, VDDH Attention:
-Not for user, set to 0 for normal operation!
-*/
-/*
-void TMC5160Stepper::recalibrate(bool B)            { SET_REG(recalibrate);             }
-void TMC5160Stepper::faststandstill(bool B)         { SET_REG(faststandstill);          }
-void TMC5160Stepper::multistep_filt(bool B)         { SET_REG(multistep_filt);          }
-bool TMC5160Stepper::recalibrate()                  { GCONF_t r{0}; r.sr = GCONF(); return r.recalibrate;   }
-bool TMC5160Stepper::faststandstill()               { GCONF_t r{0}; r.sr = GCONF(); return r.faststandstill;    }
-bool TMC5160Stepper::multistep_filt()               { GCONF_t r{0}; r.sr = GCONF(); return r.multistep_filt;    }
-*/
-uint32_t TMC2208Stepper::GCONF() {
-    return read(GCONF_register.address);
-}
-void TMC2208Stepper::GCONF(uint32_t input) {
-    GCONF_register.sr = input;
-    write(GCONF_register.address, GCONF_register.sr);
-}
-
-void TMC2208Stepper::I_scale_analog(bool B)     { SET_REG(i_scale_analog);  }
-void TMC2208Stepper::internal_Rsense(bool B)    { SET_REG(internal_rsense); }
-void TMC2208Stepper::en_spreadCycle(bool B)     { SET_REG(en_spreadcycle);  }
-void TMC2208Stepper::shaft(bool B)              { SET_REG(shaft);           }
-void TMC2208Stepper::index_otpw(bool B)         { SET_REG(index_otpw);      }
-void TMC2208Stepper::index_step(bool B)         { SET_REG(index_step);      }
-void TMC2208Stepper::pdn_disable(bool B)        { SET_REG(pdn_disable);     }
-void TMC2208Stepper::mstep_reg_select(bool B)   { SET_REG(mstep_reg_select);}
-void TMC2208Stepper::multistep_filt(bool B)     { SET_REG(multistep_filt);  }
-
-bool TMC2208Stepper::I_scale_analog()   { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.i_scale_analog;     }
-bool TMC2208Stepper::internal_Rsense()  { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.internal_rsense;    }
-bool TMC2208Stepper::en_spreadCycle()   { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.en_spreadcycle;     }
-bool TMC2208Stepper::shaft()            { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.shaft;              }
-bool TMC2208Stepper::index_otpw()       { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.index_otpw;         }
-bool TMC2208Stepper::index_step()       { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.index_step;         }
-bool TMC2208Stepper::pdn_disable()      { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.pdn_disable;        }
-bool TMC2208Stepper::mstep_reg_select() { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.mstep_reg_select;   }
-bool TMC2208Stepper::multistep_filt()   { TMC2208_n::GCONF_t r{0}; r.sr = GCONF(); return r.multistep_filt;     }
\ No newline at end of file
--- a/TMCStepper/IHOLD_IRUN.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#include "TMCStepper.h"
-#include "TMC_MACROS.h"
-
-#define SET_REG(SETTING) IHOLD_IRUN_register.SETTING = B; write(IHOLD_IRUN_register.address, IHOLD_IRUN_register.sr);
-#define GET_REG(SETTING) return IHOLD_IRUN_register.SETTING;
-
-// IHOLD_IRUN
-uint32_t TMCStepper::IHOLD_IRUN() { return IHOLD_IRUN_register.sr; }
-void TMCStepper::IHOLD_IRUN(uint32_t input) {
-    IHOLD_IRUN_register.sr = input;
-    write(IHOLD_IRUN_register.address, IHOLD_IRUN_register.sr);
-}
-
-void    TMCStepper::ihold(uint8_t B)        { SET_REG(ihold);       }
-void    TMCStepper::irun(uint8_t B)         { SET_REG(irun);        }
-void    TMCStepper::iholddelay(uint8_t B)   { SET_REG(iholddelay);  }
-
-uint8_t TMCStepper::ihold()                 { GET_REG(ihold);       }
-uint8_t TMCStepper::irun()                  { GET_REG(irun);        }
-uint8_t TMCStepper::iholddelay()            { GET_REG(iholddelay);  }
\ No newline at end of file
--- a/TMCStepper/PWMCONF.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-#include "TMCStepper.h"
-#include "TMC_MACROS.h"
-
-#define SET_REG(SETTING) PWMCONF_register.SETTING = B; write(PWMCONF_register.address, PWMCONF_register.sr)
-#define GET_REG(SETTING) return PWMCONF_register.SETTING
-
-// PWMCONF
-/*
-uint32_t TMC2130Stepper::PWMCONF() { return PWMCONF_register.sr; }
-void TMC2130Stepper::PWMCONF(uint32_t input) {
-	PWMCONF_register.sr = input;
-	write(PWMCONF_register.address, PWMCONF_register.sr);
-}
-
-void TMC2130Stepper::pwm_ampl(		uint8_t B )	{ SET_REG(pwm_ampl);		}
-void TMC2130Stepper::pwm_grad(		uint8_t B )	{ SET_REG(pwm_grad);		}
-void TMC2130Stepper::pwm_freq(		uint8_t B )	{ SET_REG(pwm_freq);		}
-void TMC2130Stepper::pwm_autoscale(	bool 	B )	{ SET_REG(pwm_autoscale);	}
-void TMC2130Stepper::pwm_symmetric(	bool 	B )	{ SET_REG(pwm_symmetric);	}
-void TMC2130Stepper::freewheel(		uint8_t B )	{ SET_REG(freewheel);		}
-
-uint8_t TMC2130Stepper::pwm_ampl()		{ GET_REG(pwm_ampl);		}
-uint8_t TMC2130Stepper::pwm_grad()		{ GET_REG(pwm_grad);		}
-uint8_t TMC2130Stepper::pwm_freq()		{ GET_REG(pwm_freq);		}
-bool 	TMC2130Stepper::pwm_autoscale()	{ GET_REG(pwm_autoscale);	}
-bool 	TMC2130Stepper::pwm_symmetric()	{ GET_REG(pwm_symmetric);	}
-uint8_t TMC2130Stepper::freewheel()		{ GET_REG(freewheel);		}
-
-uint32_t TMC2160Stepper::PWMCONF() {
-	return PWMCONF_register.sr;
-}
-void TMC2160Stepper::PWMCONF(uint32_t input) {
-	PWMCONF_register.sr = input;
-	write(PWMCONF_register.address, PWMCONF_register.sr);
-}
-
-void TMC2160Stepper::pwm_ofs		( uint8_t B ) { PWMCONF_register.pwm_ofs = B; 		write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2160Stepper::pwm_grad		( uint8_t B ) { PWMCONF_register.pwm_grad = B; 		write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2160Stepper::pwm_freq		( uint8_t B ) { PWMCONF_register.pwm_freq = B; 		write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2160Stepper::pwm_autoscale	( bool 	  B ) { PWMCONF_register.pwm_autoscale = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2160Stepper::pwm_autograd	( bool    B ) { PWMCONF_register.pwm_autograd = B; 	write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2160Stepper::freewheel		( uint8_t B ) { PWMCONF_register.freewheel = B; 	write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2160Stepper::pwm_reg		( uint8_t B ) { PWMCONF_register.pwm_reg = B; 		write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2160Stepper::pwm_lim		( uint8_t B ) { PWMCONF_register.pwm_lim = B; 		write(PWMCONF_register.address, PWMCONF_register.sr); }
-
-uint8_t TMC2160Stepper::pwm_ofs()		{ return PWMCONF_register.pwm_ofs;		}
-uint8_t TMC2160Stepper::pwm_grad()		{ return PWMCONF_register.pwm_grad;		}
-uint8_t TMC2160Stepper::pwm_freq()		{ return PWMCONF_register.pwm_freq;		}
-bool 	TMC2160Stepper::pwm_autoscale()	{ return PWMCONF_register.pwm_autoscale;}
-bool 	TMC2160Stepper::pwm_autograd()	{ return PWMCONF_register.pwm_autograd;	}
-uint8_t TMC2160Stepper::freewheel()		{ return PWMCONF_register.freewheel;	}
-uint8_t TMC2160Stepper::pwm_reg()		{ return PWMCONF_register.pwm_reg;		}
-uint8_t TMC2160Stepper::pwm_lim()		{ return PWMCONF_register.pwm_lim;		}
-*/
-uint32_t TMC2208Stepper::PWMCONF() {
-	return read(PWMCONF_register.address);
-}
-void TMC2208Stepper::PWMCONF(uint32_t input) {
-	PWMCONF_register.sr = input;
-	write(PWMCONF_register.address, PWMCONF_register.sr);
-}
-
-void TMC2208Stepper::pwm_ofs		( uint8_t B ) { PWMCONF_register.pwm_ofs = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2208Stepper::pwm_grad		( uint8_t B ) { PWMCONF_register.pwm_grad = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2208Stepper::pwm_freq		( uint8_t B ) { PWMCONF_register.pwm_freq = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2208Stepper::pwm_autoscale	( bool 	  B ) { PWMCONF_register.pwm_autoscale = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2208Stepper::pwm_autograd	( bool    B ) { PWMCONF_register.pwm_autograd = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2208Stepper::freewheel		( uint8_t B ) { PWMCONF_register.freewheel = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2208Stepper::pwm_reg		( uint8_t B ) { PWMCONF_register.pwm_reg = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-void TMC2208Stepper::pwm_lim		( uint8_t B ) { PWMCONF_register.pwm_lim = B; write(PWMCONF_register.address, PWMCONF_register.sr); }
-
-uint8_t TMC2208Stepper::pwm_ofs()		{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.pwm_ofs;		}
-uint8_t TMC2208Stepper::pwm_grad()		{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.pwm_grad;		}
-uint8_t TMC2208Stepper::pwm_freq()		{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.pwm_freq;		}
-bool 	TMC2208Stepper::pwm_autoscale()	{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.pwm_autoscale;	}
-bool 	TMC2208Stepper::pwm_autograd()	{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.pwm_autograd;	}
-uint8_t TMC2208Stepper::freewheel()		{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.freewheel;		}
-uint8_t TMC2208Stepper::pwm_reg()		{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.pwm_reg;		}
-uint8_t TMC2208Stepper::pwm_lim()		{ TMC2208_n::PWMCONF_t r{0}; r.sr = PWMCONF(); return r.pwm_lim;		}
-
--- a/TMCStepper/TMC2208Stepper.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,459 +0,0 @@
-#include "TMCStepper.h"
-#include "TMC_MACROS.h"
-//#include "SERIAL_SWITCH.h"
-
-// Protected
-// addr needed for TMC2209
-TMC2208Stepper::TMC2208Stepper(Stream * SerialPort, float RS, uint8_t addr) :
-    TMCStepper(RS),
-    slave_address(addr)
-    {
-        HWSerial = SerialPort;
-        defaults();
-    }
-
-TMC2208Stepper::TMC2208Stepper(Stream * SerialPort, float RS, uint8_t addr, uint16_t mul_pin1, uint16_t mul_pin2) :
-    TMC2208Stepper(SerialPort, RS)
-    {
-//        SSwitch *SMulObj = new SSwitch(mul_pin1, mul_pin2, addr);
-//        sswitch = SMulObj;
-    }
-
-#if SW_CAPABLE_PLATFORM
-    // Protected
-    // addr needed for TMC2209
-    TMC2208Stepper::TMC2208Stepper(PinName SW_RX_pin, PinName SW_TX_pin, float RS, uint8_t addr) :
-        TMCStepper(RS),
-        RXTX_pin(SW_RX_pin == SW_TX_pin ? SW_RX_pin : 0),
-        slave_address(addr)
-        {
-            BufferedSerial *SWSerialObj = new BufferedSerial(SW_TX_pin, SW_RX_pin);
-            SWSerial = SWSerialObj;
-            defaults();
-        }
-
-    void TMC2208Stepper::beginSerial(uint32_t baudrate) {
-        if (SWSerial != nullptr)
-        {
-            //SWSerial->begin(baudrate);
-            //SWSerial->end();
-            SWSerial->set_baud(baudrate);
-            SWSerial->set_format(
-                        /* bits */ 8,
-                        /* parity */ BufferedSerial::None,
-                        /* stop bit */ 1
-                    );
-            SWSerial->set_blocking(true);
-        }
-//        #if defined(ARDUINO_ARCH_AVR)
-//            if (RXTX_pin > 0) {
-//                digitalWrite(RXTX_pin, HIGH);
-//                pinMode(RXTX_pin, OUTPUT);
-//           }
-//        #endif
-    }
-#endif
-
-void TMC2208Stepper::begin() {
-    #if SW_CAPABLE_PLATFORM
-        beginSerial(115200);
-        //beginSerial(9600);
-    #endif
-    pdn_disable(true);
-    mstep_reg_select(true);
-    //Wait to initialize
-    wait_us(replyDelay*1000);
-
-}
-
-void TMC2208Stepper::defaults() {
-    GCONF_register.i_scale_analog = 1;
-    GCONF_register.internal_rsense = 0; // OTP
-    GCONF_register.en_spreadcycle = 0; // OTP
-    GCONF_register.multistep_filt = 1; // OTP
-    IHOLD_IRUN_register.iholddelay = 1; // OTP
-    TPOWERDOWN_register.sr = 20;
-    CHOPCONF_register.sr = 0x10000053;
-    PWMCONF_register.sr = 0xC10D0024;
-  //MSLUT0_register.sr = ???;
-  //MSLUT1_register.sr = ???;
-  //MSLUT2_register.sr = ???;
-  //MSLUT3_register.sr = ???;
-  //MSLUT4_register.sr = ???;
-  //MSLUT5_register.sr = ???;
-  //MSLUT6_register.sr = ???;
-  //MSLUT7_register.sr = ???;
-  //MSLUTSTART_register.start_sin90 = 247;
-}
-
-void TMC2208Stepper::push() {
-    GCONF(GCONF_register.sr);
-    IHOLD_IRUN(IHOLD_IRUN_register.sr);
-    SLAVECONF(SLAVECONF_register.sr);
-    TPOWERDOWN(TPOWERDOWN_register.sr);
-    TPWMTHRS(TPWMTHRS_register.sr);
-    VACTUAL(VACTUAL_register.sr);
-    CHOPCONF(CHOPCONF_register.sr);
-    PWMCONF(PWMCONF_register.sr);
-}
-
-bool TMC2208Stepper::isEnabled() { return !enn() && toff(); }
-
-uint8_t TMC2208Stepper::calcCRC(uint8_t datagram[], uint8_t len) {
-    uint8_t crc = 0;
-    for (uint8_t i = 0; i < len; i++) {
-        uint8_t currentByte = datagram[i];
-        for (uint8_t j = 0; j < 8; j++) {
-            if ((crc >> 7) ^ (currentByte & 0x01)) {
-                crc = (crc << 1) ^ 0x07;
-            } else {
-                crc = (crc << 1);
-            }
-            crc &= 0xff;
-            currentByte = currentByte >> 1;
-        }
-    }
-    return crc;
-}
-
-__attribute__((weak))
-int TMC2208Stepper::available() {
-    int out = 0;
-    #if SW_CAPABLE_PLATFORM
-        if (SWSerial != nullptr) {
-//            out = SWSerial->available();
-out = 1;
-        } else
-    #endif
-        if (HWSerial != nullptr) {
-//            out = HWSerial->available();
-out = 1;
-        }
-
-    return out;
-}
-
-__attribute__((weak))
-void TMC2208Stepper::preWriteCommunication() {
-    if (HWSerial != nullptr) {
-//        if (sswitch != nullptr)
-//            sswitch->active();
-    }
-}
-
-__attribute__((weak))
-void TMC2208Stepper::preReadCommunication() {
-    #if SW_CAPABLE_PLATFORM
-        if (SWSerial != nullptr) {
-//            SWSerial->listen();
-        } else
-    #endif
-        if (HWSerial != nullptr) {
-//            if (sswitch != nullptr)
-//                sswitch->active();
-        }
-}
-
-__attribute__((weak))
-int16_t TMC2208Stepper::serial_read() {
-    int16_t out = 0;
-    int16_t count = 0;
-     
-    #if SW_CAPABLE_PLATFORM
-        if (SWSerial != nullptr) {
-//            out = SWSerial->read();
-            count = SWSerial->read(&out, 1); // read one character
-//            if (SWSerial->readable()) {
-//                SWSerial->read(&out, 1); // read one character
-//            }
-
-        } else
-    #endif
-        if (HWSerial != nullptr) {
-//            out = HWSerial->read();
-            HWSerial->read(&out, 1); // read one character
-        }
-    if (count >= 1) {
-//       printf("<%02X|",out);
-       return out;
-    } else {
-        return -1;
-    }
-}
-
-__attribute__((weak))
-uint8_t TMC2208Stepper::serial_write(const uint8_t data) {
-    int out = 0;
-    #if SW_CAPABLE_PLATFORM
-        if (SWSerial != nullptr) {
-//            printf(">%02X|",data);
-            return SWSerial->write(&data,1);
-        } else
-    #endif
-        if (HWSerial != nullptr) {
-            return HWSerial->write(&data,1);
-        }
-
-    return out;
-}
-
-__attribute__((weak))
-void TMC2208Stepper::postWriteCommunication() {}
-
-__attribute__((weak))
-void TMC2208Stepper::postReadCommunication() {
-    #if SW_CAPABLE_PLATFORM
-//        if (SWSerial != nullptr) {
-//            SWSerial->end();
-//        }
-    #endif
-}
-
-void TMC2208Stepper::write(uint8_t addr, uint32_t regVal) {
-    uint8_t len = 7;
-    addr |= TMC_WRITE;
-    uint8_t datagram[] = {TMC2208_SYNC, slave_address, addr, (uint8_t)(regVal>>24), (uint8_t)(regVal>>16), (uint8_t)(regVal>>8), (uint8_t)(regVal>>0), 0x00};
-
-    datagram[len] = calcCRC(datagram, len);
-
-    preWriteCommunication();
-
-    for(uint8_t i=0; i<=len; i++) {
-        bytesWritten += serial_write(datagram[i]);
-    }
-    postWriteCommunication();
-
-    //delay(replyDelay);
-    wait_us(replyDelay*1000);
-}
-
-uint64_t TMC2208Stepper::_sendDatagram(uint8_t datagram[], const uint8_t len, uint16_t timeout) {
-
-//  while (available() > 0) serial_read(); // Flush
-    SWSerial->sync();
-/*    uint8_t dummy;
-    while (SWSerial->readable()) {
-        SWSerial->read(&dummy, 1); // read one character
-    }
-*/    
-/*    uint8_t dummy;
-    while (SWSerial->read(&dummy, 1) >= 0) {
-        ;
-    }    
-*/
-
-    #if defined(ARDUINO_ARCH_AVR)
-        if (RXTX_pin > 0) {
-            digitalWrite(RXTX_pin, HIGH);
-            pinMode(RXTX_pin, OUTPUT);
-        }
-    #endif
-
-    for(int i=0; i<=len; i++) serial_write(datagram[i]);
-
-    #if defined(ARDUINO_ARCH_AVR)
-        if (RXTX_pin > 0) {
-            pinMode(RXTX_pin, INPUT_PULLUP);
-        }
-    #endif
-
-    //delay(this->replyDelay);
-    wait_us(this->replyDelay*1000);
-
-    // scan for the rx frame and read it
-
-//    uint32_t ms = millis();
-    uint32_t sync_target = (static_cast<uint32_t>(datagram[0])<<16) | 0xFF00 | datagram[2];
-    uint32_t sync = 0;
-
-
-    do {
-/*        uint32_t ms2 = millis();
-        if (ms2 != ms) {
-            // 1ms tick
-            ms = ms2;
-            timeout--;
-        }
-        if (!timeout) return 0;
-*/
-        int16_t res = serial_read();
-        if (res < 0) continue;
-
-        sync <<= 8;
-        sync |= res & 0xFF;
-        sync &= 0xFFFFFF;
-
-    } while (sync != sync_target);
-
-    uint64_t out = sync;
- //   ms = millis();
- //   timeout = this->abort_window;
-
-    for(uint8_t i=0; i<5;) {
-/*        uint32_t ms2 = millis();
-        if (ms2 != ms) {
-            // 1ms tick
-            ms = ms2;
-            timeout--;
-        }
-        if (!timeout) return 0;
-*/
-        int16_t res = serial_read();
-        if (res < 0) continue;
-
-        out <<= 8;
-        out |= res & 0xFF;
-
-        i++;
-    }
-
-    #if defined(ARDUINO_ARCH_AVR)
-        if (RXTX_pin > 0) {
-            digitalWrite(RXTX_pin, HIGH);
-            pinMode(RXTX_pin, OUTPUT);
-        }
-    #endif
-
-//    while (available() > 0) serial_read(); // Flush
-    SWSerial->sync();
-
-    return out;
-
-
-}
-
-uint32_t TMC2208Stepper::read(uint8_t addr) {
-    constexpr uint8_t len = 3;
-    addr |= TMC_READ;
-    uint8_t datagram[] = {TMC2208_SYNC, slave_address, addr, 0x00};
-    datagram[len] = calcCRC(datagram, len);
-    uint64_t out = 0x00000000UL;
-
-    for (uint8_t i = 0; i < max_retries; i++) {
-        preReadCommunication();
-        out = _sendDatagram(datagram, len, abort_window);
-        postReadCommunication();
-
-//        delay(replyDelay);
-//        wait_us(replyDelay*1000);
-
-        CRCerror = false;
-        uint8_t out_datagram[] = {
-            static_cast<uint8_t>(out>>56),
-            static_cast<uint8_t>(out>>48),
-            static_cast<uint8_t>(out>>40),
-            static_cast<uint8_t>(out>>32),
-            static_cast<uint8_t>(out>>24),
-            static_cast<uint8_t>(out>>16),
-            static_cast<uint8_t>(out>> 8),
-            static_cast<uint8_t>(out>> 0)
-        };
-        uint8_t crc = calcCRC(out_datagram, 7);
-        if ((crc != static_cast<uint8_t>(out)) || crc == 0 ) {
-            CRCerror = true;
-            out = 0;
-        } else {
-            break;
-        }
-    }
-
-    return out>>8;
-}
-
-uint8_t TMC2208Stepper::IFCNT() {
-    return read(IFCNT_t::address);
-}
-
-void TMC2208Stepper::SLAVECONF(uint16_t input) {
-    SLAVECONF_register.sr = input&0xF00;
-    write(SLAVECONF_register.address, SLAVECONF_register.sr);
-}
-uint16_t TMC2208Stepper::SLAVECONF() {
-    return SLAVECONF_register.sr;
-}
-void TMC2208Stepper::senddelay(uint8_t B)   { SLAVECONF_register.senddelay = B; write(SLAVECONF_register.address, SLAVECONF_register.sr); }
-uint8_t TMC2208Stepper::senddelay()         { return SLAVECONF_register.senddelay; }
-
-void TMC2208Stepper::OTP_PROG(uint16_t input) {
-    write(OTP_PROG_t::address, input);
-}
-
-uint32_t TMC2208Stepper::OTP_READ() {
-    return read(OTP_READ_t::address);
-}
-
-uint32_t TMC2208Stepper::IOIN() {
-    return read(TMC2208_n::IOIN_t::address);
-}
-bool TMC2208Stepper::enn()          { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.enn;      }
-bool TMC2208Stepper::ms1()          { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.ms1;      }
-bool TMC2208Stepper::ms2()          { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.ms2;      }
-bool TMC2208Stepper::diag()         { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.diag;     }
-bool TMC2208Stepper::pdn_uart()     { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.pdn_uart; }
-bool TMC2208Stepper::step()         { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.step;     }
-bool TMC2208Stepper::sel_a()        { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.sel_a;    }
-bool TMC2208Stepper::dir()          { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.dir;      }
-uint8_t TMC2208Stepper::version()   { TMC2208_n::IOIN_t r{0}; r.sr = IOIN(); return r.version;  }
-
-/*
-uint32_t TMC2224Stepper::IOIN() {
-    return read(TMC2224_n::IOIN_t::address);
-}
-bool TMC2224Stepper::enn()          { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.enn;      }
-bool TMC2224Stepper::ms1()          { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.ms1;      }
-bool TMC2224Stepper::ms2()          { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.ms2;      }
-bool TMC2224Stepper::pdn_uart()     { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.pdn_uart; }
-bool TMC2224Stepper::spread()       { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.spread;   }
-bool TMC2224Stepper::step()         { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.step;     }
-bool TMC2224Stepper::sel_a()        { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.sel_a;    }
-bool TMC2224Stepper::dir()          { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.dir;      }
-uint8_t TMC2224Stepper::version()   { TMC2224_n::IOIN_t r{0}; r.sr = IOIN(); return r.version;  }
-*/
-uint16_t TMC2208Stepper::FACTORY_CONF() {
-    return read(FACTORY_CONF_register.address);
-}
-void TMC2208Stepper::FACTORY_CONF(uint16_t input) {
-    FACTORY_CONF_register.sr = input;
-    write(FACTORY_CONF_register.address, FACTORY_CONF_register.sr);
-}
-void TMC2208Stepper::fclktrim(uint8_t B){ FACTORY_CONF_register.fclktrim = B; write(FACTORY_CONF_register.address, FACTORY_CONF_register.sr); }
-void TMC2208Stepper::ottrim(uint8_t B)  { FACTORY_CONF_register.ottrim = B; write(FACTORY_CONF_register.address, FACTORY_CONF_register.sr); }
-uint8_t TMC2208Stepper::fclktrim()      { FACTORY_CONF_t r{0}; r.sr = FACTORY_CONF(); return r.fclktrim; }
-uint8_t TMC2208Stepper::ottrim()        { FACTORY_CONF_t r{0}; r.sr = FACTORY_CONF(); return r.ottrim; }
-
-void TMC2208Stepper::VACTUAL(uint32_t input) {
-    VACTUAL_register.sr = input;
-    write(VACTUAL_register.address, VACTUAL_register.sr);
-}
-uint32_t TMC2208Stepper::VACTUAL() {
-    return VACTUAL_register.sr;
-}
-
-uint32_t TMC2208Stepper::PWM_SCALE() {
-    return read(TMC2208_n::PWM_SCALE_t::address);
-}
-uint8_t TMC2208Stepper::pwm_scale_sum() {
-    TMC2208_n::PWM_SCALE_t r{0};
-    r.sr = PWM_SCALE();
-    return r.pwm_scale_sum;
-}
-
-int16_t TMC2208Stepper::pwm_scale_auto() {
-    TMC2208_n::PWM_SCALE_t r{0};
-    r.sr = PWM_SCALE();
-    return r.pwm_scale_auto;
-    // Not two's complement? 9nth bit determines sign
-    /*
-    uint32_t d = PWM_SCALE();
-    int16_t response = (d>>PWM_SCALE_AUTO_bp)&0xFF;
-    if (((d&PWM_SCALE_AUTO_bm) >> 24) & 0x1) return -response;
-    else return response;
-    */
-}
-
-// R: PWM_AUTO
-uint32_t TMC2208Stepper::PWM_AUTO() {
-    return read(PWM_AUTO_t::address);
-}
-uint8_t TMC2208Stepper::pwm_ofs_auto()  { PWM_AUTO_t r{0}; r.sr = PWM_AUTO(); return r.pwm_ofs_auto; }
-uint8_t TMC2208Stepper::pwm_grad_auto() { PWM_AUTO_t r{0}; r.sr = PWM_AUTO(); return r.pwm_grad_auto; }
\ No newline at end of file
--- a/TMCStepper/TMC2208_bitfields.h	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-#pragma once
-#pragma pack(push, 1)
-
-namespace TMC2208_n {
-  struct GCONF_t {
-    constexpr static uint8_t address = 0x00;
-    union {
-      uint16_t sr : 10;
-      struct {
-        bool  i_scale_analog : 1,
-              internal_rsense : 1,
-              en_spreadcycle : 1,
-              shaft : 1,
-              index_otpw : 1,
-              index_step : 1,
-              pdn_disable : 1,
-              mstep_reg_select : 1,
-              multistep_filt : 1,
-              test_mode : 1;
-      };
-    };
-  };
-}
-
-namespace TMC2208_n {
-  struct IOIN_t {
-    constexpr static uint8_t address = 0x06;
-    union {
-      uint32_t sr;
-      struct {
-        bool  enn : 1,
-              : 1,
-              ms1 : 1,
-              ms2 : 1,
-              diag : 1,
-              : 1,
-              pdn_uart : 1,
-              step : 1,
-              sel_a : 1,
-              dir : 1;
-        uint16_t : 14;
-        uint8_t version : 8;
-      };
-    };
-  };
-}
-
-namespace TMC2224_n {
-  struct IOIN_t {
-    constexpr static uint8_t address = 0x06;
-    union {
-      uint32_t sr;
-      struct {
-        bool  : 1,
-              pdn_uart : 1,
-              spread : 1,
-              dir : 1,
-              enn : 1,
-              step : 1,
-              ms1 : 1,
-              ms2 : 1,
-              sel_a : 1;
-        uint16_t : 15;
-        uint8_t version : 8;
-      };
-    };
-  };
-}
-
-struct FACTORY_CONF_t {
-  constexpr static uint8_t address = 0x07;
-  union {
-    uint16_t sr;
-    struct {
-        uint8_t fclktrim : 5,
-                         : 3,
-                ottrim : 2;
-    };
-  };
-};
-
-namespace TMC2208_n {
-  struct VACTUAL_t {
-    constexpr static uint8_t address = 0x22;
-    uint32_t sr;
-  };
-}
-
-struct MSCURACT_t {
-  constexpr static uint8_t address = 0x6B;
-  union {
-    uint32_t sr : 25;
-    struct {
-      int16_t cur_a : 9,
-                    : 7,
-              cur_b : 9;
-    };
-  };
-};
-
-namespace TMC2208_n {
-  struct CHOPCONF_t {
-    constexpr static uint8_t address = 0x6C;
-    union {
-      uint32_t sr;
-      struct {
-        uint8_t toff : 4,
-                hstrt : 3,
-                hend : 4,
-                     : 4,
-                tbl : 2;
-        bool    vsense : 1;
-        uint8_t : 6,
-                mres : 4;
-        bool    intpol : 1,
-                dedge : 1,
-                diss2g : 1,
-                diss2vs : 1;
-      };
-    };
-  };
-
-  struct PWMCONF_t {
-    constexpr static uint8_t address = 0x70;
-    union {
-      uint32_t sr;
-      struct {
-        uint8_t pwm_ofs : 8,
-                pwm_grad : 8,
-                pwm_freq : 2;
-        bool pwm_autoscale : 1,
-             pwm_autograd : 1;
-        uint8_t freewheel : 2,
-                          : 2,
-                pwm_reg : 4,
-                pwm_lim : 4;
-      };
-    };
-  };
-
-  struct DRV_STATUS_t {
-    constexpr static uint8_t address = 0x6F;
-    union {
-      uint32_t sr;
-      struct {
-        bool otpw : 1,
-             ot : 1,
-             s2ga : 1,
-             s2gb : 1,
-             s2vsa : 1,
-             s2vsb : 1,
-             ola : 1,
-             olb : 1,
-             t120 : 1,
-             t143 : 1,
-             t150 : 1,
-             t157 : 1;
-        uint8_t : 4,
-                cs_actual : 5,
-                : 3,
-                : 6;
-        bool stealth : 1,
-             stst : 1;
-      };
-    };
-  };
-
-  struct PWM_SCALE_t {
-    constexpr static uint8_t address = 0x71;
-    union {
-      uint32_t sr;
-      struct {
-        uint8_t pwm_scale_sum : 8,
-                : 8;
-        int16_t pwm_scale_auto : 9;
-      };
-    };
-  };
-}
-
-#pragma pack(pop)
\ No newline at end of file
--- a/TMCStepper/TMC2209Stepper.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#include "TMCStepper.h"
-
-uint32_t TMC2209Stepper::IOIN() {
-    return read(TMC2209_n::IOIN_t::address);
-}
-bool TMC2209Stepper::enn()          { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.enn;      }
-bool TMC2209Stepper::ms1()          { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.ms1;      }
-bool TMC2209Stepper::ms2()          { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.ms2;      }
-bool TMC2209Stepper::diag()         { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.diag;     }
-bool TMC2209Stepper::pdn_uart()     { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.pdn_uart; }
-bool TMC2209Stepper::step()         { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.step;     }
-bool TMC2209Stepper::spread_en()    { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.spread_en;}
-bool TMC2209Stepper::dir()          { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.dir;      }
-uint8_t TMC2209Stepper::version()   { TMC2209_n::IOIN_t r{0}; r.sr = IOIN(); return r.version;  }
-
-void TMC2209Stepper::push() {
-    IHOLD_IRUN(IHOLD_IRUN_register.sr);
-    TPOWERDOWN(TPOWERDOWN_register.sr);
-    TPWMTHRS(TPWMTHRS_register.sr);
-    GCONF(GCONF_register.sr);
-    SLAVECONF(SLAVECONF_register.sr);
-    VACTUAL(VACTUAL_register.sr);
-    CHOPCONF(CHOPCONF_register.sr);
-    PWMCONF(PWMCONF_register.sr);
-    TCOOLTHRS(TCOOLTHRS_register.sr);
-}
-
-void TMC2209Stepper::SGTHRS(uint8_t input) {
-    SGTHRS_register.sr = input;
-    write(SGTHRS_register.address, SGTHRS_register.sr);
-}
-uint8_t TMC2209Stepper::SGTHRS() {
-    return SGTHRS_register.sr;
-}
-
-// W: TCOOLTHRS
-uint32_t TMC2209Stepper::TCOOLTHRS() { return TCOOLTHRS_register.sr; }
-void TMC2209Stepper::TCOOLTHRS(uint32_t input) {
-  TCOOLTHRS_register.sr = input;
-  write(TCOOLTHRS_register.address, TCOOLTHRS_register.sr);
-}
-
-uint16_t TMC2209Stepper::SG_RESULT() {
-    return read(TMC2209_n::SG_RESULT_t::address);
-}
\ No newline at end of file
--- a/TMCStepper/TMC2209_bitfields.h	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,247 +0,0 @@
-#pragma once
-#pragma pack(push, 1)
-
-namespace TMC2209_n {
-  struct IOIN_t {
-    constexpr static uint8_t address = 0x06;
-    union {
-      uint32_t sr;
-      struct {
-        bool  enn : 1,
-                  : 1,
-              ms1 : 1,
-              ms2 : 1,
-              diag : 1,
-                   : 1,
-              pdn_uart : 1,
-              step : 1,
-              spread_en : 1,
-              dir : 1;
-        uint16_t : 14;
-        uint8_t version : 8;
-      };
-    };
-  };
-
-  struct SGTHRS_t {
-    constexpr static uint8_t address = 0x40;
-    uint8_t sr : 8;
-  };
-
-  struct SG_RESULT_t {
-    constexpr static uint8_t address = 0x41;
-    uint16_t sr : 10;
-  };
-
-  struct COOLCONF_t {
-    constexpr static uint8_t address = 0x42;
-    union {
-      uint16_t sr;
-      struct {
-        uint8_t semin : 4,
-                      : 1,
-                seup : 2,
-                      : 1,
-                semax : 4,
-                      : 1,
-                sedn : 2;
-        bool    seimin : 1;
-      };
-    };
-  };
-
-} //namespace 
-//////////////////////////////////////////////////////
-struct SLAVECONF_t {
-  constexpr static uint8_t address = 0x03;
-  union {
-    uint16_t sr : 12;
-    struct {
-      uint8_t slaveaddr : 8;
-      uint8_t senddelay : 4;
-    };
-  };
-};
-
-struct PWM_AUTO_t {
-  constexpr static uint8_t address = 0x72;
-  union {
-    uint32_t sr : 24;
-    struct {
-      uint8_t pwm_ofs_auto : 8,
-                           : 8,
-              pwm_grad_auto : 8;
-    };
-  };
-};
-
-struct GCONF_t {
-  constexpr static uint8_t address = 0x00;
-  union {
-    uint32_t sr : 18;
-    struct {
-      bool  i_scale_analog : 1, // 2130, 5130
-            internal_rsense : 1, // 2130, 5130
-            en_pwm_mode : 1,
-            enc_commutation : 1, // 2130, 5130
-            shaft : 1,
-            diag0_error : 1,
-            diag0_otpw : 1,
-            diag0_stall : 1,
-            diag1_stall : 1,
-            diag1_index : 1,
-            diag1_onstate : 1,
-            diag1_steps_skipped : 1,
-            diag0_int_pushpull : 1,
-            diag1_pushpull : 1,
-            small_hysteresis : 1,
-            stop_enable : 1,
-            direct_mode : 1;
-    };
-    struct { // TMC5160
-      bool recalibrate : 1,
-           faststandstill : 1,
-                          : 1,
-           multistep_filt : 1,
-                    : 3,
-           diag0_step : 1,
-           diag1_dir : 1,
-                 : 4,
-           diag1_poscomp_pushpull : 1;
-    };
-  };
-};
-
-struct IHOLD_IRUN_t {
-  constexpr static uint8_t address = 0x10;
-  union {
-    uint32_t sr : 20;
-    struct {
-      uint8_t ihold : 5,
-                    : 3,
-              irun : 5,
-                   : 3,
-              iholddelay : 4;
-    };
-  };
-};
-
-struct GSTAT_t {
-  constexpr static uint8_t address = 0x01;
-  union {
-    uint8_t sr : 3;
-    struct {
-      bool  reset : 1,
-            drv_err : 1,
-            uv_cp : 1;
-    };
-  };
-};
-
-struct TPOWERDOWN_t {
-  constexpr static uint8_t address = 0x11;
-  uint8_t sr : 8;
-};
-
-struct TPWMTHRS_t {
-  constexpr static uint8_t address = 0x13;
-  uint32_t sr : 20;
-};
-
-struct TCOOLTHRS_t {
-  constexpr static uint8_t address = 0x14;
-  uint32_t sr : 20;
-};
-
-struct THIGH_t {
-  constexpr static uint8_t address = 0x15;
-  uint32_t sr : 20;
-};
-
-struct XDIRECT_t {
-  constexpr static uint8_t address = 0x2D;
-  union {
-    uint32_t sr : 25;
-    struct {
-      int16_t coil_A : 9;
-      int8_t         : 7;
-      int16_t coil_B : 9;
-    };
-  };
-};
-
-struct VDCMIN_t {
-  constexpr static uint8_t address = 0x33;
-  uint32_t sr : 23;
-};
-
-struct CHOPCONF_t {
-  constexpr static uint8_t address = 0x6C;
-  union {
-    uint32_t sr : 32;
-    struct {
-      uint8_t toff : 4,
-              hstrt : 3,
-              hend : 4,
-                   : 1;
-      bool    disfdcc : 1,
-              rndtf : 1,
-              chm : 1;
-      uint8_t tbl : 2;
-      bool    vsense : 1,
-              vhighfs : 1,
-              vhighchm : 1;
-      uint8_t sync : 4, // 2130, 5130
-              mres : 4;
-      bool    intpol : 1,
-              dedge : 1,
-              diss2g : 1;
-    };
-    struct { // TMC5160
-      uint32_t     : 20;
-      uint8_t tpfd : 4; // 5160
-      uint16_t     : 7;
-      bool diss2vs : 1; // TMC5160 only
-    };
-  };
-};
-
-struct DCCTRL_t {
-    constexpr static uint8_t address = 0x6E;
-    union {
-        uint32_t sr : 24;
-        struct {
-            uint16_t dc_time : 10,
-                : 6;
-            uint8_t dc_sg : 8;
-        };
-    };
-};
-
-struct PWMCONF_t {
-  constexpr static uint8_t address = 0x70;
-  union {
-    uint32_t sr : 22;
-    struct {
-      uint8_t pwm_ampl : 8,
-              pwm_grad : 8,
-              pwm_freq : 2;
-      bool pwm_autoscale : 1,
-           pwm_symmetric : 1;
-      uint8_t freewheel : 2;
-    };
-  };
-};
-
-struct ENCM_CTRL_t {
-  constexpr static uint8_t address = 0x72;
-  union {
-    uint8_t sr : 2;
-    struct {
-      bool  inv : 1,
-            maxspeed : 1;
-    };
-  };
-};  
-  
-#pragma pack(pop)
\ No newline at end of file
--- a/TMCStepper/TMCStepper.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-#include "TMCStepper.h"
-
-
-/*
-  Requested current = mA = I_rms/1000
-  Equation for current:
-  I_rms = (CS+1)/32 * V_fs/(R_sense+0.02ohm) * 1/sqrt(2)
-  Solve for CS ->
-  CS = 32*sqrt(2)*I_rms*(R_sense+0.02)/V_fs - 1
-
-  Example:
-  vsense = 0b0 -> V_fs = 0.325V
-  mA = 1640mA = I_rms/1000 = 1.64A
-  R_sense = 0.10 Ohm
-  ->
-  CS = 32*sqrt(2)*1.64*(0.10+0.02)/0.325 - 1 = 26.4
-  CS = 26
-*/
-
-uint16_t TMCStepper::cs2rms(uint8_t CS) {
-  return (float)(CS+1)/32.0 * (vsense() ? 0.180 : 0.325)/(Rsense+0.02) / 1.41421 * 1000;
-}
-
-void TMCStepper::rms_current(uint16_t mA) {
-  uint8_t CS = 32.0*1.41421*mA/1000.0*(Rsense+0.02)/0.325 - 1;
-  // If Current Scale is too low, turn on high sensitivity R_sense and calculate again
-  if (CS < 16) {
-    vsense(true);
-    CS = 32.0*1.41421*mA/1000.0*(Rsense+0.02)/0.180 - 1;
-  } else { // If CS >= 16, turn off high_sense_r
-    vsense(false);
-  }
-
-  if (CS > 31)
-    CS = 31;
-
-  irun(CS);
-  ihold(CS*holdMultiplier);
-  //val_mA = mA;
-}
-void TMCStepper::rms_current(uint16_t mA, float mult) {
-  holdMultiplier = mult;
-  rms_current(mA);
-}
-
-uint16_t TMCStepper::rms_current() {
-  return cs2rms(irun());
-}
-
-uint8_t TMCStepper::test_connection() {
-  uint32_t drv_status = DRV_STATUS();
-  switch (drv_status) {
-      case 0xFFFFFFFF: return 1;
-      case 0: return 2;
-      default: return 0;
-  }
-}
-
-void TMCStepper::hysteresis_end(int8_t value) { hend(value+3); }
-int8_t TMCStepper::hysteresis_end() { return hend()-3; };
-
-void TMCStepper::hysteresis_start(uint8_t value) { hstrt(value-1); }
-uint8_t TMCStepper::hysteresis_start() { return hstrt()+1; }
-
-void TMCStepper::microsteps(uint16_t ms) {
-  switch(ms) {
-    case 256: mres(0); break;
-    case 128: mres(1); break;
-    case  64: mres(2); break;
-    case  32: mres(3); break;
-    case  16: mres(4); break;
-    case   8: mres(5); break;
-    case   4: mres(6); break;
-    case   2: mres(7); break;
-    case   1: mres(8); break;
-    default: break;
-  }
-}
-
-uint16_t TMCStepper::microsteps() {
-  switch(mres()) {
-    case 0: return 256;
-    case 1: return 128;
-    case 2: return  64;
-    case 3: return  32;
-    case 4: return  16;
-    case 5: return   8;
-    case 6: return   4;
-    case 7: return   2;
-    case 8: return   1;
-  }
-  return 1;
-}
-
-void TMCStepper::blank_time(uint8_t value) {
-  switch (value) {
-    case 16: tbl(0b00); break;
-    case 24: tbl(0b01); break;
-    case 36: tbl(0b10); break;
-    case 54: tbl(0b11); break;
-  }
-}
-
-uint8_t TMCStepper::blank_time() {
-  switch (tbl()) {
-    case 0b00: return 16;
-    case 0b01: return 24;
-    case 0b10: return 36;
-    case 0b11: return 54;
-  }
-  return 0;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-// R+C: GSTAT
-uint8_t TMCStepper::GSTAT()  { return read(GSTAT_t::address); }
-void  TMCStepper::GSTAT(uint8_t){ write(GSTAT_t::address, 0b111); }
-bool  TMCStepper::reset()    { GSTAT_t r; r.sr = GSTAT(); return r.reset; }
-bool  TMCStepper::drv_err()  { GSTAT_t r; r.sr = GSTAT(); return r.drv_err; }
-bool  TMCStepper::uv_cp()    { GSTAT_t r; r.sr = GSTAT(); return r.uv_cp; }
-///////////////////////////////////////////////////////////////////////////////////////
-// W: TPOWERDOWN
-uint8_t TMCStepper::TPOWERDOWN() { return TPOWERDOWN_register.sr; }
-void TMCStepper::TPOWERDOWN(uint8_t input) {
-  TPOWERDOWN_register.sr = input;
-  write(TPOWERDOWN_register.address, TPOWERDOWN_register.sr);
-}
-///////////////////////////////////////////////////////////////////////////////////////
-// R: TSTEP
-uint32_t TMCStepper::TSTEP() { return read(TSTEP_t::address); }
-///////////////////////////////////////////////////////////////////////////////////////
-// W: TPWMTHRS
-uint32_t TMCStepper::TPWMTHRS() { return TPWMTHRS_register.sr; }
-void TMCStepper::TPWMTHRS(uint32_t input) {
-  TPWMTHRS_register.sr = input;
-  write(TPWMTHRS_register.address, TPWMTHRS_register.sr);
-}
-
-uint16_t TMCStepper::MSCNT() {
-  return read(MSCNT_t::address);
-}
-
-uint32_t TMCStepper::MSCURACT() { return read(MSCURACT_t::address); }
-int16_t TMCStepper::cur_a() {
-  MSCURACT_t r{0};
-  r.sr = MSCURACT();
-  int16_t value = r.cur_a;
-  if (value > 255) value -= 512;
-  return value;
-}
-int16_t TMCStepper::cur_b() {
-  MSCURACT_t r{0};
-  r.sr = MSCURACT();
-  int16_t value = r.cur_b;
-  if (value > 255) value -= 512;
-  return value;
-}
\ No newline at end of file
--- a/TMCStepper/TMCStepper.h	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,383 +0,0 @@
-#pragma once
-
-//#define TMCDEBUG
-
-#include "mbed.h"
-
-#define SW_CAPABLE_PLATFORM true
-
-//#include "TMC2130_bitfields.h"
-//#include "TMC2160_bitfields.h"
-//#include "TMC5130_bitfields.h"
-//#include "TMC5160_bitfields.h"
-#include "TMC2208_bitfields.h"
-#include "TMC2209_bitfields.h"
-//#include "TMC2660_bitfields.h"
-
-#define INIT_REGISTER(REG) REG##_t REG##_register = REG##_t
-//#define INIT2130_REGISTER(REG) TMC2130_n::REG##_t REG##_register = TMC2130_n::REG##_t
-//#define INIT2160_REGISTER(REG) TMC2160_n::REG##_t REG##_register = TMC2160_n::REG##_t
-//#define INIT5130_REGISTER(REG) TMC5130_n::REG##_t REG##_register = TMC5130_n::REG##_t
-//#define INIT5160_REGISTER(REG) TMC5160_n::REG##_t REG##_register = TMC5160_n::REG##_t
-//#define INIT2660_REGISTER(REG) TMC2660_n::REG##_t REG##_register = TMC2660_n::REG##_t
-#define INIT2208_REGISTER(REG) TMC2208_n::REG##_t REG##_register = TMC2208_n::REG##_t
-//#define INIT2224_REGISTER(REG) TMC2224_n::REG##_t REG##_register = TMC2224_n::REG##_t
-#define SET_ALIAS(TYPE, DRIVER, NEW, ARG, OLD) TYPE (DRIVER::*NEW)(ARG) = &DRIVER::OLD
-
-#define TMCSTEPPER_VERSION 0x000701 // v0.7.1
-
-#if SW_CAPABLE_PLATFORM
-    #include <BufferedSerial.h>
-    #include <Stream.h>
-#endif
-class TMCStepper {
-    public:
-        uint16_t cs2rms(uint8_t CS);
-        void rms_current(uint16_t mA);
-        void rms_current(uint16_t mA, float mult);
-        uint16_t rms_current();
-        void hold_multiplier(float val) { holdMultiplier = val; }
-        float hold_multiplier() { return holdMultiplier; }
-        uint8_t test_connection();
-
-        // Helper functions
-        void microsteps(uint16_t ms);
-        uint16_t microsteps();
-        void blank_time(uint8_t value);
-        uint8_t blank_time();
-        void hysteresis_end(int8_t value);
-        int8_t hysteresis_end();
-        void hysteresis_start(uint8_t value);
-        uint8_t hysteresis_start();
-
-        // R+WC: GSTAT
-        void    GSTAT(                          uint8_t input);
-        uint8_t GSTAT();
-        bool    reset();
-        bool    drv_err();
-        bool    uv_cp();
-
-        // W: IHOLD_IRUN
-        void IHOLD_IRUN(                    uint32_t input);
-        uint32_t IHOLD_IRUN();
-        void    ihold(                          uint8_t B);
-        void    irun(                               uint8_t B);
-        void    iholddelay(                 uint8_t B);
-        uint8_t ihold();
-        uint8_t irun();
-        uint8_t iholddelay();
-
-        // W: TPOWERDOWN
-        uint8_t TPOWERDOWN();
-        void TPOWERDOWN(                    uint8_t input);
-
-        // R: TSTEP
-        uint32_t TSTEP();
-
-        // W: TPWMTHRS
-        uint32_t TPWMTHRS();
-        void TPWMTHRS(                      uint32_t input);
-
-        // R: MSCNT
-        uint16_t MSCNT();
-
-        // R: MSCURACT
-        uint32_t MSCURACT();
-        int16_t cur_a();
-        int16_t cur_b();
-
-    protected:
-        TMCStepper(float RS) : Rsense(RS) {};
-        INIT_REGISTER(IHOLD_IRUN){{.sr=0}}; // 32b
-        INIT_REGISTER(TPOWERDOWN){.sr=0};       // 8b
-        INIT_REGISTER(TPWMTHRS){.sr=0};         // 32b
-
-        static constexpr uint8_t TMC_READ = 0x00,
-                                                        TMC_WRITE = 0x80;
-
-        struct TSTEP_t { constexpr static uint8_t address = 0x12; };
-        struct MSCNT_t { constexpr static uint8_t address = 0x6A; };
-
-        virtual void write(uint8_t, uint32_t) = 0;
-        virtual uint32_t read(uint8_t) = 0;
-        virtual void vsense(bool) = 0;
-        virtual bool vsense(void) = 0;
-        virtual uint32_t DRV_STATUS() = 0;
-        virtual void hend(uint8_t) = 0;
-        virtual uint8_t hend() = 0;
-        virtual void hstrt(uint8_t) = 0;
-        virtual uint8_t hstrt() = 0;
-        virtual void mres(uint8_t) = 0;
-        virtual uint8_t mres() = 0;
-        virtual void tbl(uint8_t) = 0;
-        virtual uint8_t tbl() = 0;
-
-        const float Rsense;
-        float holdMultiplier = 0.5;
-};
-
-
-class TMC2208Stepper : public TMCStepper {
-    public:
-        TMC2208Stepper(Stream * SerialPort, float RS, uint8_t addr, uint16_t mul_pin1, uint16_t mul_pin2);
-        TMC2208Stepper(Stream * SerialPort, float RS) :
-            TMC2208Stepper(SerialPort, RS, TMC2208_SLAVE_ADDR)
-            {}
-        #if SW_CAPABLE_PLATFORM
-            TMC2208Stepper(PinName SW_RX_pin, PinName SW_TX_pin, float RS) :
-                TMC2208Stepper(SW_RX_pin, SW_TX_pin, RS, TMC2208_SLAVE_ADDR)
-                {}
-
-            __attribute__((deprecated("Boolean argument has been deprecated and does nothing")))
-            TMC2208Stepper(PinName SW_RX_pin, PinName SW_TX_pin, float RS, bool) :
-                TMC2208Stepper(SW_RX_pin, SW_TX_pin, RS, TMC2208_SLAVE_ADDR)
-                {};
-        #else
-            TMC2208Stepper(PinName, PinName, float) = delete; // Your platform does not currently support Software Serial
-        #endif
-        void defaults();
-        void push();
-        void begin();
-        #if SW_CAPABLE_PLATFORM
-            void beginSerial(uint32_t baudrate) __attribute__((weak));
-        #else
-            void beginSerial(uint32_t) = delete; // Your platform does not currently support Software Serial
-        #endif
-        bool isEnabled();
-
-        // RW: GCONF
-        void GCONF(uint32_t input);
-        void I_scale_analog(bool B);
-        void internal_Rsense(bool B);
-        void en_spreadCycle(bool B);
-        void shaft(bool B);
-        void index_otpw(bool B);
-        void index_step(bool B);
-        void pdn_disable(bool B);
-        void mstep_reg_select(bool B);
-        void multistep_filt(bool B);
-        uint32_t GCONF();
-        bool I_scale_analog();
-        bool internal_Rsense();
-        bool en_spreadCycle();
-        bool shaft();
-        bool index_otpw();
-        bool index_step();
-        bool pdn_disable();
-        bool mstep_reg_select();
-        bool multistep_filt();
-
-        // R: IFCNT
-        uint8_t IFCNT();
-
-        // W: SLAVECONF
-        void SLAVECONF(uint16_t input);
-        uint16_t SLAVECONF();
-        void senddelay(uint8_t B);
-        uint8_t senddelay();
-
-        // W: OTP_PROG
-        void OTP_PROG(uint16_t input);
-
-        // R: OTP_READ
-        uint32_t OTP_READ();
-
-        // R: IOIN
-        uint32_t IOIN();
-        bool enn();
-        bool ms1();
-        bool ms2();
-        bool diag();
-        bool pdn_uart();
-        bool step();
-        bool sel_a();
-        bool dir();
-        uint8_t version();
-
-        // RW: FACTORY_CONF
-        void FACTORY_CONF(uint16_t input);
-        uint16_t FACTORY_CONF();
-        void fclktrim(uint8_t B);
-        void ottrim(uint8_t B);
-        uint8_t fclktrim();
-        uint8_t ottrim();
-
-        // W: VACTUAL
-        void VACTUAL(uint32_t input);
-        uint32_t VACTUAL();
-
-        // RW: CHOPCONF
-        void CHOPCONF(uint32_t input);
-        void toff(uint8_t B);
-        void hstrt(uint8_t B);
-        void hend(uint8_t B);
-        void tbl(uint8_t B);
-        void vsense(bool B);
-        void mres(uint8_t B);
-        void intpol(bool B);
-        void dedge(bool B);
-        void diss2g(bool B);
-        void diss2vs(bool B);
-        uint32_t CHOPCONF();
-        uint8_t toff();
-        uint8_t hstrt();
-        uint8_t hend();
-        uint8_t tbl();
-        bool vsense();
-        uint8_t mres();
-        bool intpol();
-        bool dedge();
-        bool diss2g();
-        bool diss2vs();
-
-        // R: DRV_STATUS
-        uint32_t DRV_STATUS();
-        bool otpw();
-        bool ot();
-        bool s2ga();
-        bool s2gb();
-        bool s2vsa();
-        bool s2vsb();
-        bool ola();
-        bool olb();
-        bool t120();
-        bool t143();
-        bool t150();
-        bool t157();
-        uint16_t cs_actual();
-        bool stealth();
-        bool stst();
-
-        // RW: PWMCONF
-        void PWMCONF(uint32_t input);
-        void pwm_ofs(uint8_t B);
-        void pwm_grad(uint8_t B);
-        void pwm_freq(uint8_t B);
-        void pwm_autoscale(bool B);
-        void pwm_autograd(bool B);
-        void freewheel(uint8_t B);
-        void pwm_reg(uint8_t B);
-        void pwm_lim(uint8_t B);
-        uint32_t PWMCONF();
-        uint8_t pwm_ofs();
-        uint8_t pwm_grad();
-        uint8_t pwm_freq();
-        bool pwm_autoscale();
-        bool pwm_autograd();
-        uint8_t freewheel();
-        uint8_t pwm_reg();
-        uint8_t pwm_lim();
-
-        // R: PWM_SCALE
-        uint32_t PWM_SCALE();
-        uint8_t pwm_scale_sum();
-        int16_t pwm_scale_auto();
-
-        // R: PWM_AUTO (0x72)
-        uint32_t PWM_AUTO();
-        uint8_t pwm_ofs_auto();
-        uint8_t pwm_grad_auto();
-
-        uint16_t bytesWritten = 0;
-        float Rsense = 0.11;
-        bool CRCerror = false;
-    protected:
-        INIT2208_REGISTER(GCONF)            {{.sr=0}};
-        INIT_REGISTER(SLAVECONF)            {{.sr=0}};
-        INIT_REGISTER(FACTORY_CONF)     {{.sr=0}};
-        INIT2208_REGISTER(VACTUAL)      {.sr=0};
-        INIT2208_REGISTER(CHOPCONF)     {{.sr=0}};
-        INIT2208_REGISTER(PWMCONF)      {{.sr=0}};
-
-        struct IFCNT_t      { constexpr static uint8_t address = 0x02; };
-        struct OTP_PROG_t   { constexpr static uint8_t address = 0x04; };
-        struct OTP_READ_t   { constexpr static uint8_t address = 0x05; };
-
-        TMC2208Stepper(Stream * SerialPort, float RS, uint8_t addr);
-        #if SW_CAPABLE_PLATFORM
-            TMC2208Stepper(PinName SW_RX_pin, PinName SW_TX_pin, float RS, uint8_t addr);
-        #endif
-
-        Stream * HWSerial = nullptr;
-        #if SW_CAPABLE_PLATFORM
-            BufferedSerial * SWSerial = nullptr;
-            const uint16_t RXTX_pin = 0; // Half duplex
-        #endif
-
-//        SSwitch *sswitch = nullptr;
-
-        int available();
-        void preWriteCommunication();
-        void preReadCommunication();
-        int16_t serial_read();
-        uint8_t serial_write(const uint8_t data);
-        void postWriteCommunication();
-        void postReadCommunication();
-        void write(uint8_t, uint32_t);
-        uint32_t read(uint8_t);
-        const uint8_t slave_address;
-        uint8_t calcCRC(uint8_t datagram[], uint8_t len);
-        static constexpr uint8_t  TMC2208_SYNC = 0x05,
-                                  TMC2208_SLAVE_ADDR = 0x00;
-        static constexpr uint8_t replyDelay = 2;  //ms
-        static constexpr uint8_t abort_window = 5;
-        static constexpr uint8_t max_retries = 2;
-
-        uint64_t _sendDatagram(uint8_t [], const uint8_t, uint16_t);
-};
-
-class TMC2209Stepper : public TMC2208Stepper {
-    public:
-        TMC2209Stepper(Stream * SerialPort, float RS, uint8_t addr) :
-            TMC2208Stepper(SerialPort, RS, addr) {}
-
-        #if SW_CAPABLE_PLATFORM
-            TMC2209Stepper(PinName SW_RX_pin, PinName SW_TX_pin, float RS, uint8_t addr) :
-                TMC2208Stepper(SW_RX_pin, SW_TX_pin, RS, addr) {}
-        #else
-            TMC2209Stepper(PinName, PinName, float, uint8_t) = delete; // Your platform does not currently support Software Serial
-        #endif
-        void push();
-
-        // R: IOIN
-        uint32_t IOIN();
-        bool enn();
-        bool ms1();
-        bool ms2();
-        bool diag();
-        bool pdn_uart();
-        bool step();
-        bool spread_en();
-        bool dir();
-        uint8_t version();
-
-        // W: TCOOLTHRS
-        uint32_t TCOOLTHRS();
-        void TCOOLTHRS(uint32_t input);
-
-        // W: SGTHRS
-        void SGTHRS(uint8_t B);
-        uint8_t SGTHRS();
-
-        // R: SG_RESULT
-        uint16_t SG_RESULT();
-
-        // W: COOLCONF
-        void COOLCONF(uint16_t B);
-        uint16_t COOLCONF();
-        void semin(uint8_t B);
-        void seup(uint8_t B);
-        void semax(uint8_t B);
-        void sedn(uint8_t B);
-        void seimin(bool B);
-        uint8_t semin();
-        uint8_t seup();
-        uint8_t semax();
-        uint8_t sedn();
-        bool seimin();
-
-    protected:
-        INIT_REGISTER(TCOOLTHRS){.sr=0};
-        TMC2209_n::SGTHRS_t SGTHRS_register{.sr=0};
-        TMC2209_n::COOLCONF_t COOLCONF_register{{.sr=0}};
-};
--- a/TMCStepper/TMC_MACROS.h	Thu Mar 18 20:48:31 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#pragma once
-
-#define DEBUG_PRINT(CFG, VAL) Serial.print(CFG); Serial.print('('); Serial.print(VAL, HEX); Serial.println(')')
-//#define WRITE_REG(R) write(R##_register.address, R##_register.sr)
-//#define READ_REG(R) read(R##_register.address)
\ No newline at end of file
--- a/main.cpp	Thu Mar 18 20:48:31 2021 +0000
+++ b/main.cpp	Sun Mar 21 13:31:53 2021 +0000
@@ -12,12 +12,14 @@
 */
 
 
-DigitalOut ledDir(LED2);
+DigitalOut ledCW(LED1);  // Show totation clockwise
+DigitalOut ledCCW(LED2); // Show rotation counterclockwise
+
 //Virtual serial port over USB with 15200 baud 8N1
 static BufferedSerial host(USBTX, USBRX,115200);
 
 //mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000)
-mRotaryEncoder  wheel(p16, p17, p18,PullUp,1500);
+mRotaryEncoder  wheel(p16, p17, p18,PullUp,3000); // default 1500
 
 // hardware parameters:
 // MOTOR Steps per Revolution ( 1/8 Microsteps, 200Steps per Rev / 1.8 degrees per FullStep)
@@ -26,16 +28,18 @@
 #define GR 288
 
 #define DRIVER_ADDRESS 0b00 // TMC2209 Driver address according to MS1 and MS2
-#define R_SENSE 0.11f   // R-Sense in OHM.Match to your driver
+#define R_SENSE 0.11f   // R-Sense in OHM. Match to your driver
 #define MICROSTEPS 128  // # of microsteps
-#define RMSCURRENT 600  // RMS current of Stepper Coil in mA
+#define RMSCURRENT 800  // RMS current of Stepper Coil in mA
+#define MAXSPEED 5000   // Maximaum speed (5000 with RMS800 @12V/06Amax)
 
 // A TMCStepper-object with UART and given address and R-Sense
 //RX, TX, RS, Addr 
 TMC2209Stepper stepper(p14, p13, R_SENSE, DRIVER_ADDRESS);
 
-bool enc_pressed = false;      // Button of rotaryencoder was pressed
-bool enc_rotated = false;      // rotary encoder was totaded left or right
+volatile bool enc_pressed = false;      // Button of rotaryencoder was pressed
+volatile bool enc_rotated = false;      // rotary encoder was totaded left or right
+volatile bool enc_action  = false;      // any change happened
 int lastGet;
 int thisGet;
 
@@ -69,7 +73,7 @@
  {
     printf("\r\nConnected to mbed\r\n");
     
-    //Int-Handler for RotaryEncoder
+    //Intitiallize RotaryEncoder
     // call trigger_sw() when button of rotary-encoder is pressed
     wheel.attachSW(&trigger_sw);
     // call trigger_rot() when the shaft is rotaded left or right
@@ -77,20 +81,30 @@
     lastGet = 0;
     // set encrotated, so startup
     enc_rotated = true;
-    
+    enc_action = true;
+    ledCW = 1;
+    ledCCW = 1;
+        
+    // Initialize Stepper
+    printf("connecting to TMC-Module...\r\n");
     stepper.begin();                    // UART: Init SW UART (if selected) with default baudrate
+    printf("TMC-Version: %02X\r\n",stepper.version());
     stepper.toff(3);                    // Enables driver in software - 3, 5 ????
     stepper.rms_current(RMSCURRENT);    // Set motor RMS current in mA / min 500 for 24V/speed:3000
                                         // 1110, 800
+                                        // working: 800 12V/0,6Amax,  Speed up to 5200=4U/min
+                                        
     stepper.microsteps(MICROSTEPS);   // Set microsteps to 1:Fullstep ... 256: 1/256th
     stepper.en_spreadCycle(true);     // Toggle spreadCycle on TMC2208/2209/2224: default false, true: much faster!!!!
     stepper.pwm_autoscale(true);      // Needed for stealthChop
-    printf("TMC-Version: %02X\r\n",stepper.version());
     
-    bool shaft = false;  //direction CW or CCW
+    uint32_t status = stepper.DRV_STATUS();
+    printf("DRV_STATUS(): "); printBits(sizeof(status),&status);printf("\r\n");
+    
+    //bool shaft = false;  //direction CW or CCW
     
     while(1) {
-/*        
+/*  Spped-UP/Down-Cycles      
 //        printf("TSTEP(): %i\r\n", stepper.TSTEP());
         uint32_t status = stepper.DRV_STATUS();
         printf("DRV_STATUS(): "); printBits(sizeof(status),&status);printf("\r\n");
@@ -135,22 +149,51 @@
         printf("IFCNT(): %zu \r\n",stepper.IFCNT());
         printf("...\r\n");
 */
+////// Control motor-speed by rotary-encoder
+    
     // shaft has been rotated?
     if (enc_rotated) {
         enc_rotated = false;
+        enc_action = true;
         thisGet = wheel.Get();
+        if (thisGet*100 > MAXSPEED) { //on upper limit?
+            wheel.Set( MAXSPEED/100);
+            thisGet = wheel.Get();
+        }
+        if (thisGet*100 < MAXSPEED*(-1)) { //on lower limit?
+            wheel.Set( MAXSPEED*(-1)/100);
+            thisGet = wheel.Get();
+        } 
         stepper.VACTUAL(thisGet*100*MICROSTEPS);// Set Speed to value
         printf("actspeed: %i\r\n",thisGet*100);
-
+        
     }
     // Button pressed?
     if (enc_pressed) {
         enc_pressed = false;
+        enc_action = true;
         wheel.Set(0);
         thisGet = wheel.Get();
         stepper.VACTUAL(thisGet*100*MICROSTEPS);// Set Speed to value
         printf("actspeed: %i\r\n",thisGet*100);
 
     }        
+    // anything changed?
+    if (enc_action) {
+        enc_action = false;
+        // show direction of motor on leds
+        if (thisGet > 0) {
+            ledCW = 1;
+            ledCCW= 0;
+        }
+        if (thisGet < 0) {
+            ledCW = 0;
+            ledCCW= 1;
+        }
+        if (thisGet == 0) {
+            ledCW = 1;
+            ledCCW= 1;
+        }
+    }
    } // while 1
  }
\ No newline at end of file