![]() |
![]() |
#21 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Круто, с такой частотой можно анализировать протоколы разных устройств
Например шины управления в автомобилях |
![]() |
![]() |
![]() |
#22 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
![]()
Не знаю как на счет анализатора, но это получился почти хардварный уровень SPI.
А для протоколов, и не только, я приметил себе такую не дорогую штучку: http://www.ebay.com/itm/USB-Logic-24...item2c868bef92 к ней вот такую программку ![]() и проще и без заморочек получится ![]() |
![]() |
![]() |
![]() |
#23 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Действительно, за такую цену лучше купить
|
![]() |
![]() |
![]() |
#24 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
![]()
ну что ж реализация проекта по созданию функций быстрого дерганья по аналогии с CyberLib подошла к своему логическому завершению. Осталось, разве что, получше раскурить BitBand и модернизировать "Arduino STM32-ASP" в части резервирвоания выделенной памяти под переменные побитовой записи/чтения в режиме BitBand.
(Здесь достаточно подробно описана методология: http://www.micromouseonline.com/2013...ding-approach/) Результатом проделаной работы я доволен. Для сравнительного тестирования шатных функций digitalRead digitalWrite, а так же различных методов я написал небольшой код. Тестировал в 4х режимах: Strobe (тупo дергаем ногу CLK), READ - считывание битов со второй ноги + STROBE . Write - передача битов + STROBE и TRANSFER это считывание и пересылка данных одновременно + STROBE. результаты получились такими: Код:
===================== STROBE ===================== standart - F: 865kHz / 83 CPU cycles / dur: 4621 ms / j=0 / i*k=4000000 OneWire(7b)- F: 3048kHz / 23 CPU cycles / dur: 1148 ms / j=0 / i*k=3500000(1312ms for 8bit) PIN_MAP - F: 9909kHz / 7 CPU cycles / dur: 403 ms / j=0 / i*k=4000000 PM w/o for - F: 15964kHz / 4 CPU cycles / dur: 250 ms / j=0 / i*k=4000000 =================== READ + STROBE ===================== standart - F: 591kHz / 121 CPU cycles / dur: 6764 ms / j=0 / i*k=4000000 OneWire(7b)- F: 1752kHz / 41 CPU cycles / dur: 1997 ms / j=0 / i*k=3500000(2282ms for 8bit) PIN_MAP - F: 4711kHz / 15 CPU cycles / dur: 849 ms / j=0 / i*k=4000000 PM w/o for - F: 8094kHz / 8 CPU cycles / dur: 494 ms / j=0 / i*k=4000000 ================== WRITE + STROBE ===================== standart - F: 593kHz / 121 CPU cycles / dur: 6737 ms / j=0 / i*k=4000000 OneWire(7b)- F: 1722kHz / 41 CPU cycles / dur: 2032 ms / j=0 / i*k=3500000(2322ms for 8bit) PIN_MAP - F: 3569kHz / 20 CPU cycles / dur: 1120 ms / j=0 / i*k=4000000 PM w/o for - F: 11031kHz / 6 CPU cycles / dur: 362 ms / j=0 / i*k=4000000 ==================== TRANSFER ==================== standart - F: 453kHz / 158 CPU cycles / dur: 8824 ms / j=0 / i*k=4000000 OneWire(7b)- F: 1174kHz / 61 CPU cycles / dur: 2978 ms / j=0 / i*k=3500000 (3403ms for 8bit) PIN_MAP - F: 2572kHz / 27 CPU cycles / dur: 1554 ms / j=0 / i*k=4000000 PM w/o for - F: 5515kHz / 13 CPU cycles / dur: 725 ms / j=0 / i*k=4000000 1. с использованием стандартных функций digitalRead и digitalWrite. 2. через указатели на регистры.(как в библиотеке OneWire) 3. Мой метод. 4. Мой, без использования цикла. Для ускорения нужно (пере)дописать массив в файле \hardware\Arduino_STM32\ STM32F1XX\variants\maple_mini\board.cpp и дополнить описание структуры в файле: \hardware\Arduino_STM32\STM32F1XX\cores\ maple\wirish_types.h и написать 2 макроса: Код:
#define _digitalRead(pin) (pin < BOARD_NR_GPIO_PINS) ? (*(volatile uint32*)PIN_MAP[pin].BB_IDR) : 0 #define _digitalWrite(pin,val) (pin < BOARD_NR_GPIO_PINS) ? (PIN_MAP[pin].gpio_device->regs->BSRR=((PIN_MAP[pin].gpio_pMASK)<<((!val)?16:0))) : (NULL) ![]() Чуть ниже в сообщениях есть мой код использованный для сравнительного тестирования. Последний раз редактировалось HiddenPilot; 12.12.2014 в 19:46. |
![]() |
![]() |
![]() |
#25 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Результы методом PM w/o впечатляют
|
![]() |
![]() |
![]() |
#26 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
![]()
А это такой же метод как и PIN_MAP, только с вручную развернутым циклом
![]() Видима на простых операциях без условий и циклов системе предсказания команд проще предсказывать и кэшировать данные в кэш. как только начинаются витьеватые условия сразу просадка из за пропуска тактов для считывания новых команд с флеша Последний раз редактировалось HiddenPilot; 12.12.2014 в 15:15. |
![]() |
![]() |
![]() |
#27 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
![]()
Подправил функцию передачи данных(немного упростил). Теперь передача и прием данных с помощью развернутого цикла действительно впечатляет!
10Мгц на передачу, 8 МГц на прием. Теперь я полностью доволен, больше уже с камня не выжать т.к.: На прием 1бита с перещелкиванием строба тратится всего 8 тактов. На передачу 1 бита со стробом 6 тактов На строб всего 4 такта.... |
![]() |
![]() |
![]() |
#28 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
![]()
А плюшки все прибавляются и прибавляются
![]() Доработал тут немного внешний вид и вытащил кой какие удобные мне настройки в меню Arduino IDE. Ускоренные функции digitalRead/Write будут внедрены прямо в Arduino STM32. Пункт в меню для них я уже подготовил ![]() |
![]() |
![]() |
![]() |
#29 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Надеюсь что ты выложишь свою сборку IDE для общего пользования?
|
![]() |
![]() |
![]() |
#30 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
![]()
Дык она не моя, она общая. Я тут уже не раз приводил ссылки на форум с обсуждением, и на сайты где она лежит
![]() http://forum.arduino.cc/index.php?topic=265904.720 https://github.com/rogerclarkmelbourne/Arduino_STM32 http://www.rogerclark.net/stm32f103-...ino-1-5-x-ide/ |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|