Цитата(Rst7 @ May 22 2009, 16:51)

А листинг FIQ?
Может там что-то не так?
Он довольно приличный по объёму.
Пока кину начало и конец.
Если с Вашей помощью ничего не найду, то урежу до немогу и выложу проект
CODE
799 __fiq __arm void FIQ_Handler() // ╬ЄюсЁрцхэшх ърЁЄшэъш Master, Slave
800 {
\ FIQ_Handler:
\ 00000000 04E04EE2 SUB LR,LR,#+4
\ 00000004 FF402DE9 PUSH {R0-R7,LR}
\ 00000008 04D04DE2 SUB SP,SP,#+4
\ 0000000C 68039FE5 LDR R0,??FIQ_Handler_0 ;; MinX + 20
\ 00000010 000090E5 LDR R0,[R0, #+0]
\ 00000014 010010E3 TST R0,#0x1
\ 00000018 0C00001A BNE ??FIQ_Handler_1
\ 0000001C E014A0E3 MOV R1,#-536870912
\ 00000020 A01B81E3 ORR R1,R1,#0x28000
\ 00000024 001091E5 LDR R1,[R1, #+0]
\ 00000028 400B11E3 TST R1,#0x10000
\ 0000002C 0700001A BNE ??FIQ_Handler_1
801
.....
897 if(Flag.RMaster)
\ 0000035C 010010E3 TST R0,#0x1
898 {
899 T0IR = (unsigned)-1; // сбросить флаги прерываний таймера
\ 00000360 900B4912 SUBNE R0,R9,#+147456
\ 00000364 0010E013 MVNNE R1,#+0
900 }
901 else
902 {
903 EXTINT=0x1; // Разрешить прерывание по INT0 (от мастера)
\ 00000368 ........ LDREQ R0,??DataTable5 ;; 0xe01fc140
\ 0000036C 0110A003 MOVEQ R1,#+1
\ 00000370 001080E5 STR R1,[R0, #+0]
904 }
905 // VICVectAddr = 0;
906 }
\ 00000374 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 00000378 FF80FDE8 LDM SP!,{R0-R7,PC}^ ;; return
\ ??FIQ_Handler_0:
\ 0000037C ........ DC32 MinX + 20
\ 00000380 ........ DC32 Status + 98
\ 00000384 ........ DC32 EkrToPort
\ 00000388 REQUIRE _A_VICSoftInt
\ 00000388 REQUIRE _A_IOPIN
\ 00000388 REQUIRE _A_IOSET
\ 00000388 REQUIRE _A_IOCLR
\ 00000388 REQUIRE _A_S0SPSR
\ 00000388 REQUIRE _A_S0SPDR
\ 00000388 REQUIRE _A_T0IR
\ 00000388 REQUIRE T0MR0
\ 00000388 REQUIRE _A_EXTINT
Цитата(zltigo @ May 22 2009, 16:58)

Листиг не читал, с проблемой не разбирался, но не по делу - случайно зацепился взглядом за обилие неестесвенных 8 и 16 бит переменных. Надо изживать в себе восьмибитовики и использовать в большинстве случаев портируемые типы (хоть свои, хоть С99 ) переменных со смыслом "не менее 8bit", не "менее 16bit"
Прога переносилась с 8-ми битника. И там всё это было естественно. Тем не менее написано было так, чтобы одна операция обслуживала несколько точек. В связи с этим ожидаемый перенос ядра на 32 бита должен дать увеличение производительности именно за счёт увеличения разрядности. В голове я сделал необходимые изменения в переменных. Уже выровнял всё.
В прерывании по "картинке", пока не начинал, так как придётся вместе с изменениями разрядности менять также базовые процедуры работы с точками. Всё это будет сделано.
Тем не менее принципиально работать должно со всеми типами. Всё сделано в рамках стандарта.