06.12.2014, 11:58 | #21 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Maple Mini
Круто, с такой частотой можно анализировать протоколы разных устройств
Например шины управления в автомобилях |
06.12.2014, 20:09 | #22 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
Не знаю как на счет анализатора, но это получился почти хардварный уровень SPI.
А для протоколов, и не только, я приметил себе такую не дорогую штучку: http://www.ebay.com/itm/USB-Logic-24...item2c868bef92 к ней вот такую программку и проще и без заморочек получится |
06.12.2014, 22:48 | #23 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Maple Mini
Действительно, за такую цену лучше купить
|
12.12.2014, 12:49 | #24 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
ну что ж реализация проекта по созданию функций быстрого дерганья по аналогии с 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. |
12.12.2014, 14:49 | #25 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Maple Mini
Результы методом PM w/o впечатляют
|
12.12.2014, 15:11 | #26 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
А это такой же метод как и PIN_MAP, только с вручную развернутым циклом
Видима на простых операциях без условий и циклов системе предсказания команд проще предсказывать и кэшировать данные в кэш. как только начинаются витьеватые условия сразу просадка из за пропуска тактов для считывания новых команд с флеша Последний раз редактировалось HiddenPilot; 12.12.2014 в 15:15. |
12.12.2014, 20:21 | #27 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
Подправил функцию передачи данных(немного упростил). Теперь передача и прием данных с помощью развернутого цикла действительно впечатляет!
10Мгц на передачу, 8 МГц на прием. Теперь я полностью доволен, больше уже с камня не выжать т.к.: На прием 1бита с перещелкиванием строба тратится всего 8 тактов. На передачу 1 бита со стробом 6 тактов На строб всего 4 такта.... |
13.12.2014, 22:01 | #28 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
А плюшки все прибавляются и прибавляются
Доработал тут немного внешний вид и вытащил кой какие удобные мне настройки в меню Arduino IDE. Ускоренные функции digitalRead/Write будут внедрены прямо в Arduino STM32. Пункт в меню для них я уже подготовил |
13.12.2014, 22:08 | #29 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Maple Mini
Надеюсь что ты выложишь свою сборку IDE для общего пользования?
|
13.12.2014, 22:58 | #30 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
Дык она не моя, она общая. Я тут уже не раз приводил ссылки на форум с обсуждением, и на сайты где она лежит
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/ |
Здесь присутствуют: 4 (пользователей: 0 , гостей: 4) | |
|
|