//Тестирование скорости операции DA= DX*DY через uDSC
#define tcnt2 (*(volatile uint16_t*)0xB1)
#define tcnt3 (*(volatile uint16_t*)0x94)
#include "lgtx8p.h"
#define DSCR 0x00
#define DSIR 0x01
#define DSSD 0x02
#define DSDX 0x10
#define DSDY 0x11
#define DSAL 0x38
#define DSAH 0x39
#define DSCR_D1 (1<<5) //Флаг завершения деления, 1 - Операция завершена
volatile uint32_t data; //для результата ариф. операций
void setup() {
Serial.begin(115200);
Serial.println ("Start..");
TCCR2A = 0; TCCR2B = 1 << CS20; //запустить таймер
TCCR3A = 0; TCCR3B = 1 << CS30; //запустить таймер
TCKSR = 0; TIMSK1 = 0; TCCR1A = 0; TCCR1B = 0; //обнулить лишнее
OCR1A = 65535u; OCR1B = 65535u; // чтоб удобнее читать регистр флагов
}
void loop() {
cli();
TCNT1 = 0; TIFR1 = TIFR1;
uint32_t da = (uint32_t)tcnt2;
da<<=10;
uint16_t dy = tcnt3;
data = uDSC(da, dy);
sei();
Serial.print("Test uDSC ");
if (TIFR1) {
Serial.println("Timer overload");
}
else {
Serial.print(TCNT1); Serial.println(" tic mk ");
}
Serial.print("da="); Serial.print(da);
Serial.print(" dy="); Serial.print(dy);
Serial.print(" da / dy ="); Serial.println (data);
Serial.println("..");
Serial.println("..");
delay(5000);
}
#if 0
volatile uint32_t uDSC(uint16_t dx, uint16_t dy) {
TCCR1B = 1; //пошёл счёт времени!
uint32_t rv = 0;
#if 1
asm volatile(
"ldi r18, 0x80;" "\n\t"
"out 0x00, r18;" "\n\t"
"out 0x10, %[dsdx];" "\n\t"
"out 0x11, %[dsdy];" "\n\t"
"ldi r18, %[opc];" "\n\t"
"out 0x01, r18;" "\n\t"
"in %A0, 0x38;" "\n\t"
"in %C0, 0x39;" "\n\t"
: "=r" (rv)
: [dsdx] "r" (dx), [dsdy] "r" (dy), [opc] "i" (0x44)
:"r18"
) ;
#endif
#if 0
rv = (uint32_t)dx * (uint32_t)dy;
#endif
TCCR1B = 0; //стоп таймер
return rv;
}
#endif
#if 1
volatile uint32_t uDSC(uint32_t da, uint16_t dy) {
TCCR1B = 1; //пошёл счёт времени!
uint32_t rv = 0;
#if 0
asm volatile(
"ldi r18, 0x80;" "\n\t"
"out 0x00, r18;" "\n\t"
"out 0x38, %A1;" "\n\t"
"out 0x39, %C1;" "\n\t"
"out 0x11, %[dsdy];" "\n\t"
"ldi r18, %[opc];" "\n\t"
"out 0x01, r18;" "\n\t"
"chk_dc%=: " "\n\t"
"nop;" "\n\t"
"nop;" "\n\t"
"nop;" "\n\t"
"in r18, 0x00;" "\n\t"
"andi r18, 0x20;" "\n\t"
"brbc 1, chk_dc%=;" "\n\t"
"nop;" "\n\t"
"in %A0, 0x38;" "\n\t"
"in %C0, 0x39;" "\n\t"
: "=r" (rv)
: "r" (da), [dsdy] "r" (dy), [opc] "i" (0xb0)
:"r18"
) ;
#endif
#if 1
rv = da / dy;
#endif
TCCR1B = 0; //стоп таймер
return rv;
}
#endif
Ly/QotC10YHRgtC40YDQvtCy0LDQvdC40LUg0YHQutC+0YDQvtGB0YLQuCDQvtC/0LXRgNCw0YbQuNC4IERBPSBEWCpEWSAg0YfQtdGA0LXQtyB1RFNDCiNkZWZpbmUgdGNudDIgKCoodm9sYXRpbGUgdWludDE2X3QqKTB4QjEpCiNkZWZpbmUgdGNudDMgKCoodm9sYXRpbGUgdWludDE2X3QqKTB4OTQpCiNpbmNsdWRlICJsZ3R4OHAuaCIKCiNkZWZpbmUgRFNDUiAgMHgwMAojZGVmaW5lIERTSVIgIDB4MDEKI2RlZmluZSBEU1NEICAweDAyCiNkZWZpbmUgRFNEWCAgMHgxMAojZGVmaW5lIERTRFkgIDB4MTEKI2RlZmluZSBEU0FMICAweDM4CiNkZWZpbmUgRFNBSCAgMHgzOQoKI2RlZmluZSBEU0NSX0QxICgxPDw1KSAgICAvL9Ck0LvQsNCzINC30LDQstC10YDRiNC10L3QuNGPINC00LXQu9C10L3QuNGPLCAxIC0g0J7Qv9C10YDQsNGG0LjRjyDQt9Cw0LLQtdGA0YjQtdC90LAKCnZvbGF0aWxlIHVpbnQzMl90IGRhdGE7IC8v0LTQu9GPINGA0LXQt9GD0LvRjNGC0LDRgtCwINCw0YDQuNGELiDQvtC/0LXRgNCw0YbQuNC5CnZvaWQgc2V0dXAoKSB7CiAgU2VyaWFsLmJlZ2luKDExNTIwMCk7CiAgU2VyaWFsLnByaW50bG4gKCJTdGFydC4uIik7CiAgVENDUjJBID0gMDsgVENDUjJCID0gMSA8PCBDUzIwOyAvL9C30LDQv9GD0YHRgtC40YLRjCDRgtCw0LnQvNC10YAKICBUQ0NSM0EgPSAwOyBUQ0NSM0IgPSAxIDw8IENTMzA7IC8v0LfQsNC/0YPRgdGC0LjRgtGMINGC0LDQudC80LXRgAogIFRDS1NSID0gMDsgVElNU0sxID0gMDsgVENDUjFBID0gMDsgVENDUjFCID0gMDsgLy/QvtCx0L3Rg9C70LjRgtGMINC70LjRiNC90LXQtQogIE9DUjFBID0gNjU1MzV1OyBPQ1IxQiA9IDY1NTM1dTsgLy8g0YfRgtC+0LEg0YPQtNC+0LHQvdC10LUg0YfQuNGC0LDRgtGMINGA0LXQs9C40YHRgtGAINGE0LvQsNCz0L7Qsgp9Cgp2b2lkIGxvb3AoKSB7CiAgY2xpKCk7CiAgVENOVDEgPSAwOyBUSUZSMSA9IFRJRlIxOwogIHVpbnQzMl90IGRhID0gKHVpbnQzMl90KXRjbnQyOwogIGRhPDw9MTA7CiAgdWludDE2X3QgZHkgPSB0Y250MzsKICBkYXRhICA9IHVEU0MoZGEsIGR5KTsKICBzZWkoKTsKICBTZXJpYWwucHJpbnQoIlRlc3QgdURTQyAgIik7CiAgaWYgKFRJRlIxKSB7CiAgICBTZXJpYWwucHJpbnRsbigiVGltZXIgb3ZlcmxvYWQiKTsKICB9CiAgZWxzZSB7CiAgICBTZXJpYWwucHJpbnQoVENOVDEpOyBTZXJpYWwucHJpbnRsbigiICB0aWMgbWsgIik7CiAgfQogIFNlcmlhbC5wcmludCgiZGE9Iik7IFNlcmlhbC5wcmludChkYSk7CiAgU2VyaWFsLnByaW50KCIgZHk9Iik7IFNlcmlhbC5wcmludChkeSk7CiAgU2VyaWFsLnByaW50KCIgZGEgLyBkeSA9Iik7IFNlcmlhbC5wcmludGxuIChkYXRhKTsKICBTZXJpYWwucHJpbnRsbigiLi4iKTsKICBTZXJpYWwucHJpbnRsbigiLi4iKTsKICBkZWxheSg1MDAwKTsKCn0KCiNpZiAwCnZvbGF0aWxlIHVpbnQzMl90IHVEU0ModWludDE2X3QgZHgsIHVpbnQxNl90IGR5KSB7CiAgVENDUjFCID0gMTsgLy/Qv9C+0YjRkdC7INGB0YfRkdGCINCy0YDQtdC80LXQvdC4IQogIHVpbnQzMl90IHJ2ID0gMDsKI2lmIDEKICBhc20gdm9sYXRpbGUoCiAgICAibGRpIHIxOCwgMHg4MDsiICAgICAiXG5cdCIKICAgICJvdXQgMHgwMCwgcjE4OyIgICAgICJcblx0IgogICAgIm91dCAweDEwLCAlW2RzZHhdOyIgIlxuXHQiCiAgICAib3V0IDB4MTEsICVbZHNkeV07IiAiXG5cdCIKICAgICJsZGkgcjE4LCAlW29wY107IiAgICJcblx0IgogICAgIm91dCAweDAxLCByMTg7IiAgICAgIlxuXHQiCiAgICAiaW4gJUEwLCAweDM4OyIgICAgICAiXG5cdCIKICAgICJpbiAlQzAsIDB4Mzk7IiAgICAgICJcblx0IgogICAgOiAiPXIiIChydikKICAgIDogW2RzZHhdICJyIiAoZHgpLCBbZHNkeV0gInIiIChkeSksIFtvcGNdICJpIiAoMHg0NCkKICAgIDoicjE4IgogICkgOwojZW5kaWYKI2lmIDAKICBydiA9ICh1aW50MzJfdClkeCAqICh1aW50MzJfdClkeTsKI2VuZGlmCiAgVENDUjFCID0gMDsgLy/RgdGC0L7QvyDRgtCw0LnQvNC10YAKICByZXR1cm4gcnY7Cn0KI2VuZGlmCgojaWYgMQp2b2xhdGlsZSB1aW50MzJfdCB1RFNDKHVpbnQzMl90IGRhLCB1aW50MTZfdCBkeSkgewogIFRDQ1IxQiA9IDE7IC8v0L/QvtGI0ZHQuyDRgdGH0ZHRgiDQstGA0LXQvNC10L3QuCEKICB1aW50MzJfdCBydiA9IDA7CiNpZiAwCiAgYXNtIHZvbGF0aWxlKAogICAgImxkaSByMTgsIDB4ODA7IiAgICAgICAgICJcblx0IgogICAgIm91dCAweDAwLCByMTg7IiAgICAgICAgICJcblx0IgogICAgIm91dCAweDM4LCAlQTE7IiAgICAgICAgICJcblx0IgogICAgIm91dCAweDM5LCAlQzE7IiAgICAgICAgICJcblx0IgogICAgIm91dCAweDExLCAlW2RzZHldOyIgICAgICJcblx0IgogICAgImxkaSByMTgsICVbb3BjXTsiICAgICAgICJcblx0IgogICAgIm91dCAweDAxLCByMTg7IiAgICAgICAgICJcblx0IgogICAgImNoa19kYyU9OiAiICAgICAgICAgICAgICJcblx0IgogICAgIm5vcDsiICAgICAgICAgICAgICAgICAgICJcblx0IgogICAgIm5vcDsiICAgICAgICAgICAgICAgICAgICJcblx0IgogICAgIm5vcDsiICAgICAgICAgICAgICAgICAgICJcblx0IgogICAgImluIHIxOCwgMHgwMDsiICAgICAgICAgICJcblx0IgogICAgImFuZGkgcjE4LCAweDIwOyIgICAgICAgICJcblx0IgogICAgImJyYmMgMSwgY2hrX2RjJT07IiAgICAgICJcblx0IgogICAgIm5vcDsiICAgICAgICAgICAgICAgICAgICJcblx0IgogICAgImluICVBMCwgMHgzODsiICAgICAgICAgICJcblx0IgogICAgImluICVDMCwgMHgzOTsiICAgICAgICAgICJcblx0IgogICAgOiAiPXIiIChydikKICAgIDogInIiIChkYSksIFtkc2R5XSAiciIgKGR5KSwgW29wY10gImkiICgweGIwKQogICAgOiJyMTgiCiAgKSA7CiNlbmRpZgojaWYgMQogIHJ2ID0gZGEgLyBkeTsKI2VuZGlmCiAgVENDUjFCID0gMDsgLy/RgdGC0L7QvyDRgtCw0LnQvNC10YAKICByZXR1cm4gcnY7Cn0KI2VuZGlmCg==