Advertisement
Guest User

Untitled

a guest
May 18th, 2023
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.25 KB | None | 0 0
  1. #include <stdint.h>
  2. #include <stddev.h>
  3.  
  4. #include "sys_gpio.h"
  5. struct StepperInterface {
  6.     uint32_t target_pos;
  7.     uint32_t current_pos;
  8.     bool halt_requested;
  9. };
  10. StepperInterface shmem __attribute__((cregister("LOCAL", near))) = {};
  11. volatile register uint32_t __R30;
  12.  
  13. // define some r30 bits
  14. #define CW  (1u << 0)
  15. #define CCW (1u << 1)
  16.  
  17. #define delay_us(n) __delay_cycles((n) * 200u)
  18. #define delay_ms(n) delay_us((n) * 1000u)
  19.  
  20. static inline void deassert_CW_CCW() { __R30 = 0; }
  21. static inline void assert_CW() { __R30 = CW; }
  22. static inline void assert_CCW() { __R30 = CCW; }
  23.  
  24. int main() {
  25.         uint32_t pos = shmem.current_pos;
  26.         deassert_CW_CCW();
  27.         delay_us(1);
  28.  
  29.         while ( !shmem.halt_requested ) {
  30.                 int32_t delta = shmem.target_pos - pos;
  31.                 if ( delta == 0 )
  32.                         continue;
  33.                 if ( delta < 0 ) {
  34.                         --pos;
  35.                         assert_CCW();
  36.                 } else {
  37.                         ++pos;
  38.                         assert_CW();
  39.                 }
  40.  
  41.                 shmem.current_pos = pos;
  42.                 delay_us(1);
  43.                 deassert_CW_CCW();
  44.                 delay_us(1);
  45.         }
  46.         __halt();
  47. }
  48.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement