Library for Trinamic TMC2209 stepper modules to drive bipolar stepper motors. Ported and adapted from https://github.com/teemuatlut/TMCStepper

Dependents:   TMC2209-Test2

Revision:
0:f4343071c8b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TMC2209_bitfields.h	Thu Mar 18 20:50:27 2021 +0000
@@ -0,0 +1,247 @@
+#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