Наистина добре е модератора да раздели темата. Извинявам се и аз на Комбинатор за отклонението от темата.
А сега за Fast GPIO.
Цецо тука се опитва да цака с това че ARM7 всъщност няма инструкция за вдигане/сваляне на пин. И съм съгласен с него. Така е. При ARM7 за да се пише в GPIO трябва да заредиш в регистър адреса на GPIO регистъра, после константа указваща кой бит ще се променя и след това да запишеш в регистъра. Така е, спор няма. Но ще напомня само, че когато търсим бързина, винаги можем да оптимизираме нещата. Да държим константите в регистри например.
Сега остава Цецо да извади следващия коз, че всяка инструкция при ARM7 заема 32 бита в ARM режим и феновете на PIC да запръхтят от удоволствие.
Напомням! Не сравняваме PIC с ARM като цяло. Искам да покажа че "бавните" GPIO операции при ARM7 не правят техните GPIO неизползваеми. Има компромиси с писането на кода, с консумацията, но като времена могат да бъдат не по-зле от PIC16/18. За които съдя само по цифрите, които дава Цецо,защото аз не съм работил с PIC.
Сега за тактовете. Наистина объркал съм ги. Отворих дебелите книги(признавам не го бях направил преди това). Та там пише: за STR инструкция към локал бъса 2 такта, бранч инструкция 3 такта. Тоест горния цикъл без зареждането на константите е 2 + 2 + 3 = 7 такта.
Направих и опитна постановка, която потвърждава това. На една платка с LPC2148(такъв имам под ръка с FastGPIO) опроводих един пин към вход на таймер/брояч вътре в самия LPC2148. Така всяко гавръткане на пина инкрементва брояча. Едновременно с влизането във въпросния цикъл:
Пускам и друг таймер който има за цел да спре броенето след 1 s.
Таймерите и ядрото се клокват на 36 MHz. Програмката върви от FLASH с активиран MAM(Memory Accelerator Module).
След известно време спирам процесора с дебъгера и гледам съдържанието на брояча. Тъй като всичко върви синхронно резултата винаги е един и същ.
При 36 MHz след една секунда брояча е спрял на 5142858(О, 32 битово число! Може ли твоя PIC да направи това?) периода на FastGPIO. Което прави около 194.5 ns за период. Или 7 такта.
Направих тестове и на 12 MHz и на 60 MHz. Както и тест на самия тест, като пуснах пина да се гаврътка от ШИМ.
Прилагам кода, който съм използвал. Който има интерес може да погледне и да повтори теста. Компилатора е arm-elf-gcc, но лесно ще се портне и за друг.
Консумацията няма как да я измеря точно защото на платката има и други компоненти, но по приблизителна оценка я закръглям на 30 mA от 3.3 V.
Така че пишем:
"LPC2148 ще му трябва външен такт 35MHz, при консумация около 30 mA."
Мога да пусна теста и на LPC2103, както и на LPC2378. Ако има интерес.
Не съм съвсем краен като Никола, но споделям неговата позиция. С едно изключение че:
"Знанието е лично преживяна истина."