Advertisement
Guest User

Untitled

a guest
Jun 19th, 2023
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.26 KB | None | 0 0
  1. #include <stdint.h>
  2.  
  3.  
  4. struct StepperInterface {
  5.     uint32_t target_pos;
  6.     uint32_t current_pos;
  7.     uint32_t speed;
  8.     bool halt_requested;
  9.     bool moving;
  10. };
  11.  
  12. far struct StepperInterface shmem __attribute__((location(0x000000))) = {};
  13. //StepperInterface shmem __attribute__((cregister("LOCAL",near))) = {};
  14.  
  15.  
  16. // define some r30 bits
  17. #define CW  (1 << 3)
  18. #define CCW (1 << 7)
  19.  
  20. volatile register uint32_t __R30;
  21.  
  22.  
  23. #define delay_us(n) __delay_cycles((n) * 200u)
  24. #define delay_ms(n) delay_us((n) * 1000u)
  25.  
  26. int main() {
  27.  
  28.     uint32_t pos = shmem.current_pos;
  29.     __R30 = 0;
  30.     delay_us(1);
  31.     while ( !shmem.halt_requested ) {
  32.         uint32_t speed = shmem.speed;  
  33.         int32_t delta = shmem.target_pos - pos;
  34.         if ( delta == 0 ) {
  35.             shmem.moving = false;
  36.             continue;
  37.         }
  38.         if ( delta < 0 ) {
  39.             --pos;
  40.             __R30 |= CCW;
  41.             delta *= -1;
  42.             shmem.moving = true;
  43.         } else {
  44.             ++pos;
  45.             __R30 |= CW;
  46.             shmem.moving = true;
  47.         }
  48.         shmem.current_pos = pos;
  49.             switch(speed){ 
  50.                 case 1:
  51.                     delay_us(50);
  52.                     __R30 = 0;
  53.                     delay_us(50);
  54.                     break;
  55.                 case 2:
  56.                     delay_us(100);
  57.                     __R30 = 0;
  58.                     delay_us(100);
  59.                     break;
  60.                 default:
  61.                     delay_us(500);
  62.                     __R30 = 0;
  63.                     delay_us(500);
  64.             }
  65.  
  66.     }
  67.     __halt();
  68. }
  69.  
  70.  
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement