fork download
  1. //Тестирование скорости операции DA= DX*DY через uDSC
  2. #define tcnt2 (*(volatile uint16_t*)0xB1)
  3. #define tcnt3 (*(volatile uint16_t*)0x94)
  4. #include "lgtx8p.h"
  5.  
  6. #define DSCR 0x00
  7. #define DSIR 0x01
  8. #define DSSD 0x02
  9. #define DSDX 0x10
  10. #define DSDY 0x11
  11. #define DSAL 0x38
  12. #define DSAH 0x39
  13.  
  14. #define DSCR_D1 (1<<5) //Флаг завершения деления, 1 - Операция завершена
  15.  
  16. volatile uint32_t data; //для результата ариф. операций
  17. void setup() {
  18. Serial.begin(115200);
  19. Serial.println ("Start..");
  20. TCCR2A = 0; TCCR2B = 1 << CS20; //запустить таймер
  21. TCCR3A = 0; TCCR3B = 1 << CS30; //запустить таймер
  22. TCKSR = 0; TIMSK1 = 0; TCCR1A = 0; TCCR1B = 0; //обнулить лишнее
  23. OCR1A = 65535u; OCR1B = 65535u; // чтоб удобнее читать регистр флагов
  24. }
  25.  
  26. void loop() {
  27. cli();
  28. TCNT1 = 0; TIFR1 = TIFR1;
  29. uint32_t da = (uint32_t)tcnt2;
  30. da<<=10;
  31. uint16_t dy = tcnt3;
  32. data = uDSC(da, dy);
  33. sei();
  34. Serial.print("Test uDSC ");
  35. if (TIFR1) {
  36. Serial.println("Timer overload");
  37. }
  38. else {
  39. Serial.print(TCNT1); Serial.println(" tic mk ");
  40. }
  41. Serial.print("da="); Serial.print(da);
  42. Serial.print(" dy="); Serial.print(dy);
  43. Serial.print(" da / dy ="); Serial.println (data);
  44. Serial.println("..");
  45. Serial.println("..");
  46. delay(5000);
  47.  
  48. }
  49.  
  50. #if 0
  51. volatile uint32_t uDSC(uint16_t dx, uint16_t dy) {
  52. TCCR1B = 1; //пошёл счёт времени!
  53. uint32_t rv = 0;
  54. #if 1
  55. asm volatile(
  56. "ldi r18, 0x80;" "\n\t"
  57. "out 0x00, r18;" "\n\t"
  58. "out 0x10, %[dsdx];" "\n\t"
  59. "out 0x11, %[dsdy];" "\n\t"
  60. "ldi r18, %[opc];" "\n\t"
  61. "out 0x01, r18;" "\n\t"
  62. "in %A0, 0x38;" "\n\t"
  63. "in %C0, 0x39;" "\n\t"
  64. : "=r" (rv)
  65. : [dsdx] "r" (dx), [dsdy] "r" (dy), [opc] "i" (0x44)
  66. :"r18"
  67. ) ;
  68. #endif
  69. #if 0
  70. rv = (uint32_t)dx * (uint32_t)dy;
  71. #endif
  72. TCCR1B = 0; //стоп таймер
  73. return rv;
  74. }
  75. #endif
  76.  
  77. #if 1
  78. volatile uint32_t uDSC(uint32_t da, uint16_t dy) {
  79. TCCR1B = 1; //пошёл счёт времени!
  80. uint32_t rv = 0;
  81. #if 0
  82. asm volatile(
  83. "ldi r18, 0x80;" "\n\t"
  84. "out 0x00, r18;" "\n\t"
  85. "out 0x38, %A1;" "\n\t"
  86. "out 0x39, %C1;" "\n\t"
  87. "out 0x11, %[dsdy];" "\n\t"
  88. "ldi r18, %[opc];" "\n\t"
  89. "out 0x01, r18;" "\n\t"
  90. "chk_dc%=: " "\n\t"
  91. "nop;" "\n\t"
  92. "nop;" "\n\t"
  93. "nop;" "\n\t"
  94. "in r18, 0x00;" "\n\t"
  95. "andi r18, 0x20;" "\n\t"
  96. "brbc 1, chk_dc%=;" "\n\t"
  97. "nop;" "\n\t"
  98. "in %A0, 0x38;" "\n\t"
  99. "in %C0, 0x39;" "\n\t"
  100. : "=r" (rv)
  101. : "r" (da), [dsdy] "r" (dy), [opc] "i" (0xb0)
  102. :"r18"
  103. ) ;
  104. #endif
  105. #if 1
  106. rv = da / dy;
  107. #endif
  108. TCCR1B = 0; //стоп таймер
  109. return rv;
  110. }
  111. #endif
  112.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:4:10: fatal error: lgtx8p.h: No such file or directory
 #include "lgtx8p.h"
          ^~~~~~~~~~
compilation terminated.
stdout
Standard output is empty