Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

175 linhas
5.3KB

  1. uint8_t A[13][13] = {{28, 122, 80, 42, 54, 122, 98, 42, 99, 58, 124, 29, 21},
  2. {113, 85, 30, 35, 41, 98, 103, 68, 15, 50, 31, 80, 54},
  3. {47, 37, 23, 96, 59, 47, 84, 26, 84, 72, 51, 118, 119},
  4. {38, 121, 45, 21, 87, 91, 20, 69, 98, 119, 15, 89, 47},
  5. {40, 71, 105, 76, 31, 65, 109, 30, 127, 110, 17, 64, 64},
  6. {45, 20, 113, 86, 86, 51, 104, 115, 61, 103, 60, 113, 44},
  7. {101, 107, 33, 63, 39, 47, 120, 20, 41, 64, 102, 59, 86},
  8. {9, 42, 118, 26, 83, 123, 10, 82, 47, 108, 127, 4, 66},
  9. {75, 26, 117, 80, 47, 111, 38, 22, 98, 101, 92, 100, 48},
  10. {90, 9, 71, 36, 90, 95, 4, 94, 72, 29, 77, 118, 78},
  11. {81, 75, 97, 127, 22, 8, 96, 80, 100, 88, 69, 114, 16},
  12. {25, 109, 74, 3, 126, 56, 99, 15, 69, 73, 76, 19, 97},
  13. {59, 84, 102, 53, 30, 34, 33, 105, 75, 102, 60, 121, 93}};
  14. uint8_t B[13][13] = {{102, 61, 111, 79, 99, 3, 25, 50, 33, 48, 5, 94, 28},
  15. {106, 89, 35, 37, 112, 51, 13, 70, 3, 110, 31, 7, 99},
  16. {65, 115, 94, 68, 95, 114, 34, 34, 64, 1, 11, 66, 126},
  17. {114, 37, 42, 3, 88, 35, 124, 50, 74, 95, 25, 34, 24},
  18. {25, 111, 4, 116, 54, 90, 11, 32, 121, 20, 26, 62, 60},
  19. {45, 41, 20, 33, 89, 75, 89, 2, 28, 19, 96, 46, 119},
  20. {39, 68, 87, 59, 33, 82, 94, 14, 115, 0, 0, 92, 85},
  21. {58, 62, 122, 106, 93, 39, 86, 80, 75, 23, 57, 89, 7},
  22. {119, 75, 20, 42, 1, 120, 83, 24, 62, 78, 20, 25, 126},
  23. {121, 42, 78, 45, 8, 17, 52, 38, 44, 13, 104, 57, 62},
  24. {29, 96, 0, 64, 47, 50, 22, 17, 88, 63, 108, 78, 101},
  25. {70, 108, 69, 12, 0, 80, 115, 107, 71, 54, 5, 57, 3},
  26. {123, 72, 56, 5, 30, 45, 2, 11, 124, 84, 63, 47, 104}};
  27. uint32_t C[13][13] ={{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  28. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  29. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  30. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  31. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  32. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  33. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  34. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  35. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  36. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  37. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  38. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  39. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  40. #define LOADCOLUMN \
  41. "ld r13,Y+;\n"\
  42. "out 0x0A,r28; write to IOregister \n"\
  43. "out 0x0B,r29; write to IOregister \n"\
  44. "ldd r14,Y+(12);\n"\
  45. "ldd r15,Y+25;\n"\
  46. "ldd r16,Y+38;\n"\
  47. "adiw Y,(51);\n"\
  48. "ld r17, Y;\n"\
  49. "ldd r18,Y+13;\n"\
  50. "ldd r19,Y+26;\n"\
  51. "ldd r20,Y+39;\n"\
  52. "adiw Y,52;\n"\
  53. "ld r21,Y;\n"\
  54. "ldd r22,Y+13;\n"\
  55. "ldd r23,Y+26;\n"\
  56. "ldd r24,Y+39;\n"\
  57. "ldd r25,Y+52;\n"\
  58. "in r28,0x0A; read from IOregister \n"\
  59. "in r29,0x0B; read from IOregister \n"
  60. #define MULROW \
  61. "ld r12,X+; eerste\n"\
  62. "mul r13,r12;\n"\
  63. "movw r2,r0; copy naar sum1\n"\
  64. "ld r12,X+; tweede\n"\
  65. "mul r14,r12;\n"\
  66. "add r2,r0;\n"\
  67. "adc r3,r1;\n"\
  68. "ld r12,X+; drie\n"\
  69. "mul r15,r12; \n"\
  70. "add r2,r0;\n"\
  71. "adc r3,r1;\n"\
  72. "ld r12,X+; vier\n"\
  73. "mul r16,r12;\n"\
  74. "add r2,r0;\n"\
  75. "adc r3,r1;\n"\
  76. "ld r12,X+; vijf\n"\
  77. "mul r17,r12;\n"\
  78. "movw r4,r0; copy naar sum2\n"\
  79. "ld r12,X+; zes\n"\
  80. "mul r18,r12;\n"\
  81. "add r4,r0;\n"\
  82. "adc r5,r1;\n"\
  83. "ld r12,X+; load 7\n"\
  84. "mul r19,r12;\n"\
  85. "add r4,r0;\n"\
  86. "adc r5,r1;\n"\
  87. "ld r12,X+; load 8\n"\
  88. "mul r20,r12;\n"\
  89. "add r2,r0;\n"\
  90. "adc r3,r1;\n"\
  91. "ld r12,X+; load9\n"\
  92. "mul r21,r12; \n"\
  93. "movw r6,r0; copy naar sum3\n"\
  94. "ld r12,X+; load 10\n"\
  95. "mul r22,r12;\n"\
  96. "add r6,r0;\n"\
  97. "adc r7,r1;\n"\
  98. "ld r12,X+;load 11\n"\
  99. "mul r23,r12; \n"\
  100. "add r6,r0;\n"\
  101. "adc r7,r1;\n"\
  102. "ld r12,X+; load 12\n"\
  103. "mul r24,r12;\n"\
  104. "add r6,r0;\n"\
  105. "adc r7,r1;\n"\
  106. "ld r12,X+; load 13\n"\
  107. "mul r25,r12;\n"\
  108. "movw r8,r0; copy naar sum4\n"
  109. #define SUBSUM \
  110. "add r2,r4;\n"\
  111. "adc r3,r5;\n"\
  112. "clr r4;\n"\
  113. "clr r5;\n"\
  114. "adc r4,r4;\n"\
  115. "add r2,r6;\n"\
  116. "adc r3,r7;\n"\
  117. "adc r4,r5;\n"\
  118. "add r2,r8;\n"\
  119. "adc r3,r9;\n"\
  120. "adc r4,r5;\n"
  121. #define DOROW \
  122. LOADCOLUMN \
  123. MULROW \
  124. SUBSUM
  125. void print_mat(uint32_t mat[13][13]) {
  126. int i, j;
  127. for (i = 0; i < 13; i++)
  128. {
  129. for (j = 0; j < 13; j++)
  130. {
  131. Serial.print(mat[i][j]);
  132. Serial.print(" ");
  133. }
  134. Serial.println("");
  135. }
  136. }
  137. void setup() {
  138. Serial.begin(115200);
  139. uint8_t *B_ptr = &B[0][0];
  140. uint8_t out = 0;
  141. //print_mat(C);
  142. // Serial.println(B_ptr);
  143. asm volatile( //"ld r2,Y+;\n"
  144. //"ld r1,Y+;\n"
  145. //"mov %0,r4;\n"
  146. DOROW
  147. "st Z, r2;\n"
  148. "std Z+1,r3;\n"
  149. "std Z+2,r4;\n"
  150. :
  151. : "z"(&(C[0][0])),"y" (&(B[0][0])), "x"(&(A[0][0]))
  152. : "memory","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r11","r12","r13","r14","r15","r16","r17","r18","r19","r20","r21","r22","r23","r24","r25");
  153. Serial.println(out);
  154. Serial.println("test\n");
  155. Serial.println(out);
  156. Serial.println("dit werkt:\n");
  157. print_mat(C);
  158. Serial.println("\n\n");
  159. Serial.println(out,HEX);
  160. Serial.println(out,DEC);
  161. }
  162. void loop() {}