QUOTE
4.5 это нормальный результат. В идеале надо 9.
Можно и 9. На асме и с считыванием кратно 3м байтам.
CODE
SECTION `.textrw`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, SHF_WRITE | SHF_EXECINSTR
ARM
// 189 __ramfunc unsigned int GetScanLine(unsigned char *dest, unsigned long volatile *port)
// 190 {
// 191 unsigned int v;
// 192 unsigned char *d=dest;
GetScanLine:
MOV R2,R0
// 193 while(!((*port) & 0x400000));
??GetScanLine_0:
LDR R3,[R1, #+0]
TST R3,#0x400000
BEQ ??GetScanLine_0
// 194 while(!((*port) & 0x800000));
??GetScanLine_1:
LDR R3,[R1, #+0]
TST R3,#0x800000
BEQ ??GetScanLine_1
// 195 do
// 196 {
// 197 v=*port;
??GetScanLine_2:
LDR R3,[R1, #+0]
// 198 *d++=v;
STRB R3,[R2], #+1
// 199 if (!(v&0x800000)) {v=*port;}
TST R3,#0x800000
LDREQ R3,[R1, #+0]
// 200 v=*port;
LDR R3,[R1, #+0]
// 201 *d++=v;
STRB R3,[R2], #+1
TST R3,#0x400000
// 203 __no_operation();
Nop
// 204 __no_operation();
Nop
// 205 v=*port;
LDR R3,[R1, #+0]
// 206 *d++=v;
STRB R3,[R2], #+1
// 207 }
// 208 while(v & 0x400000);
BNE ??GetScanLine_2
// 209 return d-dest;
SUB R0,R2,R0
BX LR ;; return
// 210 }
Смысл в том, что в одном цикле считывается три байта и доп. действия распределены так - на первом байте - ФАПЧ, на втором - проверка конца строки, на третьем - собственно цикл. Обратите внимание, что собственно чтение с порта выполняется всегда на точке, кратной 8ми тактам, т.е. 72/8=9МГц.
QUOTE
А правильный memcpy это какой???
Который не по байту копирует, а пачками слов через LDM/STM.
QUOTE
У меня память подключена по 16 бит.
Ну уже хуже.
QUOTE
Прилогаю usermanual:
Ну и? Вам еще и начальные настройки разжевывать? Учить азам ремесла? Уж извините, молодой человек, но Вам уже все на блюдечке принесли. Дальше - за деньги, или включайте собственный мозг, учите матчасть.