giomba
d91201dcfd
actually this does not work, because polling requires: in andi brne which takes 4 clock cycles, that, on average, means a 2 clock offset, while interrupts occur during a rjmp, which takes 2 clocks, which means, on average, only 1 clock cycle of offset I am not interested in higher or lower overhead: I am just interested in minimizing its variance. Being late of a few clock cycles, is not a problem: it just means that the picture will be slightly shifted toward the right border; but, starting the picture 1 or 2 clock cycles before (on one line), and 1 or 2 clock cycles after, on another line, means that it just wiggles sligthly left and right
47 lines
1.8 KiB
C
47 lines
1.8 KiB
C
#include <avr/io.h>
|
|
#include <avr/interrupt.h>
|
|
#include "const.h"
|
|
#include <string.h>
|
|
|
|
volatile uint16_t frame;
|
|
volatile uint16_t line;
|
|
volatile char line_buffer[LINE_BUFFER_SIZE];
|
|
|
|
void setup_c() {
|
|
for (int i = 0; i < LINE_BUFFER_SIZE; ++i) {
|
|
line_buffer[i] = (i > 50 && i < 100) ? '1' : 'A';
|
|
}
|
|
}
|
|
|
|
/*
|
|
|
|
void loop_c() {
|
|
for (;;) {
|
|
const int current_line = line;
|
|
switch (current_line) {
|
|
case 76: case 134: memcpy(line_buffer, "AAAAAAAAAAAAAAAAAAAAAA", 22); break;
|
|
case 80: memcpy(line_buffer, "11111111AAAA1111111111", 22); break;
|
|
case 84: memcpy(line_buffer, "111111111AAA1111111111", 22); break;
|
|
case 88: case 98: memcpy(line_buffer, "11AAAAA111AA11AAAAAAAA", 22); break;
|
|
case 92: memcpy(line_buffer, "11AAAAAA11AA11AAAAAAAA", 22); break;
|
|
case 102: memcpy(line_buffer, "111111111AAA11111111AA", 22); break;
|
|
case 106: memcpy(line_buffer, "11111111AAAA11111111AA", 22); break;
|
|
case 110: memcpy(line_buffer, "11A111AAAAAA11AAAAAAAA", 22); break;
|
|
case 114: memcpy(line_buffer, "11AA111AAAAA11AAAAAAAA", 22); break;
|
|
case 118: memcpy(line_buffer, "11AAA111AAAA11AAAAAAAA", 22); break;
|
|
case 122: memcpy(line_buffer, "11AAAA111AAA11AAAAAAAA", 22); break;
|
|
case 126: memcpy(line_buffer, "11AAAAA111AA1111111111", 22); break;
|
|
case 130: memcpy(line_buffer, "11AAAAAA11AA1111111111", 22); break;
|
|
}
|
|
line_buffer[60] = (current_line > 50 && current_line < 100) ? WHITE : BLACK;
|
|
|
|
if (current_line > 200 && current_line % 8 == 0) {
|
|
const uint8_t current_number = frame >> 2;
|
|
for (uint8_t i = 0; i < 8; ++i) {
|
|
line_buffer[i] = ((current_number >> i) & 0x1) ? WHITE : BLACK;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|