[Решено] Должны ли мы подождать, пока TX не пуст перед вызовом Dev->регс->Доктор снова? или нет ? Проблема SPI_TX

Sajuukkahr
Вт 21 февраля 2017 г. 2:34 утра
Привет, ребята,

Я пытался использовать
#include int snacks = 5; void setup() { Serial.begin(115200); delay(4000); // allow a few secs to establish serial connection and open serial window iwdg_init(IWDG_PRE_256, 1250); // init an 8 second wd timer Serial.println("\r\nhmm, that's a mean looking dog!"); } void loop() { if (snacks > 0) { Serial.println("nice doggy, here's a snack"); iwdg_feed(); --snacks; } else { Serial.println("uh oh, I've run out of snacks..."); } delay(1000); }

victor_pv
Вт 21 февраля 2017 г. 2:56 утра
Это требуется в соответствии с справочным руководством MCU.
Если вы напишете на это, не проверяя, пусто, вы рискуете перезаписать значение, которое еще не было отправлено, и будет потеряно.

Редактировать: проверка кода, который вы встали, он уже включает в себя проверку: #define iwdg_init_ms(N) iwdg_init(IWDG_PRE_256,((N)/5))

Sajuukkahr
Вт 21 февраля 2017 г. 3:15 утра
victor_pv написал:Это требуется в соответствии с справочным руководством MCU.
Если вы напишете на это, не проверяя, пусто, вы рискуете перезаписать значение, которое еще не было отправлено, и будет потеряно.

Редактировать: проверка кода, который вы встали, он уже включает в себя проверку: wdt_enable(WDTO_15MS);// calls iwdg_init() wdt_reset ();// calls iwdg_feed()

victor_pv
Вт 21 февраля 2017 г. 4:13
Саджуккахр написал:victor_pv написал:Это требуется в соответствии с справочным руководством MCU.
Если вы напишете на это, не проверяя, пусто, вы рискуете перезаписать значение, которое еще не было отправлено, и будет потеряно.

Редактировать: проверка кода, который вы встали, он уже включает в себя проверку: #include #define iwdg_init_ms(N) iwdg_init(IWDG_PRE_256,((N)/5)) unsigned long temp; void setup() { Serial.begin(19200); delay(4000); // allow a few secs to establish serial connection and open serial window Serial.println("Begin"); //iwdg_init(IWDG_PRE_256, 1600); // init an 8 second wd timer by prescaling the ~50KHz clock and then calculating resulting ticks in 8 secs... iwdg_init_ms(200); // or init an 8s wd timer a bit more obviously using a wrapper temp = millis(); } void loop() { Serial.println(millis()-temp); delay(10); }

Sajuukkahr
Вт 21 февраля 2017 г. 8:26 утра
victor_pv написал:

Стивестронг
Вт 21 февраля 2017 г. 8:32 утра
Упомянутый кусок кода теоретически неверен, но (к сожалению) работает с ЦП = 72 МГц и 2 цикла ожидания вспышки.
Если вы уменьшите циклы ожидания вспышки или поднимите часы процессора, то кусок кода не сможет сделать то, что можно было бы от него.

Вы можете найти Здесь рабочая версия (PR все еще ждет Роджера...).

Sajuukkahr
Вт 21 февраля 2017 г. 9:44
Стивестронг написал:Упомянутый кусок кода теоретически неверен, но (к сожалению) работает с ЦП = 72 МГц и 2 цикла ожидания вспышки.
Если вы уменьшите циклы ожидания вспышки или поднимите часы процессора, то кусок кода не сможет сделать то, что можно было бы от него.

Вы можете найти Здесь рабочая версия (PR все еще ждет Роджера...).

victor_pv
Вт 21 февраля 2017 г. 15:34
Стивестронг написал:Упомянутый кусок кода теоретически неверен, но (к сожалению) работает с ЦП = 72 МГц и 2 цикла ожидания вспышки.
Если вы уменьшите циклы ожидания вспышки или поднимите часы процессора, то кусок кода не сможет сделать то, что можно было бы от него.

Вы можете найти Здесь рабочая версия (PR все еще ждет Роджера...).

Стивестронг
Вт 21 февраля 2017 г., 19:20
Я не вижу там никакой проблемы, длина конечна.

victor_pv
Вт 21 февраля 2017 г., 19:28
Стивестронг написал:Я не вижу там никакой проблемы, длина конечна.

Стивестронг
Вт 21 февраля 2017 г., 19:37
Я понимаю, что ты имеешь в виду.

Функция SPI_TX используется только в MomoEnt By Master SPI записи и оптимизирована с высокой скоростью.

Я не знаю ни одной реализации рабского TX. Если кому -то понадобится такой случай, я думаю, что лучше всего использовать DMA для этого.

victor_pv
Ср 22 февраля 2017 г. 1:12
Стивестронг написал:Я понимаю, что ты имеешь в виду.

Функция SPI_TX используется только в MomoEnt By Master SPI записи и оптимизирована с высокой скоростью.

Я не знаю ни одной реализации рабского TX. Если кому -то понадобится такой случай, я думаю, что лучше всего использовать DMA для этого.

victor_pv
Ср 22 февраля 2017 г. 2:10
Стивестронг написал:Я понимаю, что ты имеешь в виду.

Функция SPI_TX используется только в MomoEnt By Master SPI записи и оптимизирована с высокой скоростью.

Я не знаю ни одной реализации рабского TX. Если кому -то понадобится такой случай, я думаю, что лучше всего использовать DMA для этого.

Стивестронг
Ср 22 февраля 2017 г. 9:42
Виктор, текущий статус моей SPI LIB функциональна, протестирован с помощью дисплея на основе SPI и бета -версии SDFAT.
https: // github.com/stevstrong/arduino_s ... RC/SPI.CPP
Вы не комментировали последний коммит, который отвечает на некоторые из ваших комментариев.

Но есть одна проблема: кажется, что это «ошибка» в интерфейсе SPI HW: при написании некоторых данных для регистрации DR и не сопровождается операцией чтения, эти данные хранятся, даже если новые данные записываются и прочитаны. Таким образом, в случае переполнения чтения последние данные чтения теряются, самая первая полученная поддерживается.
Смотрите подробное описание здесь: https: // github.com/rogerclarkmelbourne/ ... -277516813.
Я думаю, что это также причина, по которой некоторые функции записи в конце концов выполняют операцию чтения.
И именно поэтому простая операция чтения просто читает последние данные, не записывая что -либо в регистр DR. Так что все имеет свое мнение :)
Обходной путь для этого (дополнительная первая строка в процедурах передачи, как упомянуто в моем комментарии по ссылке) - единственное, что еще не совершено. Если эта линия будет добавлена, то мы можем безопасно удалить показания из DR в конце функций записи (что немного ускорит операции записи).

victor_pv
Ср 22 февраля 2017 г. 16:15
Стивестронг написал:Виктор, текущий статус моей SPI LIB функциональна, протестирован с помощью дисплея на основе SPI и бета -версии SDFAT.
https: // github.com/stevstrong/arduino_s ... RC/SPI.CPP
Вы не комментировали последний коммит, который отвечает на некоторые из ваших комментариев.

Но есть одна проблема: кажется, что это «ошибка» в интерфейсе SPI HW: при написании некоторых данных для регистрации DR и не сопровождается операцией чтения, эти данные хранятся, даже если новые данные записываются и прочитаны. Таким образом, в случае переполнения чтения последние данные чтения теряются, самая первая полученная поддерживается.
Смотрите подробное описание здесь: https: // github.com/rogerclarkmelbourne/ ... -277516813.
Я думаю, что это также причина, по которой некоторые функции записи в конце концов выполняют операцию чтения.
И именно поэтому простая операция чтения просто читает последние данные, не записывая что -либо в регистр DR. Так что все имеет свое мнение :)
Обходной путь для этого (дополнительная первая строка в процедурах передачи, как упомянуто в моем комментарии по ссылке) - единственное, что еще не совершено. Если эта линия будет добавлена, то мы можем безопасно удалить показания из DR в конце функций записи (что немного ускорит операции записи).

victor_pv
Ср 22 февраля 2017 г. 16:48
Стив, я просто проверял и, кажется, у тебя последний коммит все еще есть некоторые из возможных проблем:
Позвольте мне добавить комментарии здесь со ссылками на строки для ясности.

https: // github.com/stevstrong/arduino_s ... я.CPP#L163
Почему изменение в этой линии, устанавливая только периферийное устройство на RX?
Я могу понять удаление управления программным обеспечением NSS, но периферийное устройство может быть рабов и передавать. Есть проблема, если не установлен в режим только RX?

https: // github.com/stevstrong/arduino_s ... я.CPP#L313
Это не хватает, что угодно, все, что он делает сейчас, - это читать байт в RX FIFO, если он уже есть, что не должно было делать, или что он делал раньше.
Ему нужно что -то передать, чтобы что -то получить в.

https: // github.com/stevstrong/arduino_s ... я.CPP#L341
На этом просто для того, чтобы сохранить общее использование, и, учитывая, что SPI_IS_TX_EMPTY SPI_IS_BUSY вставлены, возможно, вы можете их использовать. Было ли улучшение производительности при их не использовать? Просто любопытно.

Стивестронг
Ср 22 февраля 2017 г., 17:11
victor_pv написал:https: // github.com/stevstrong/arduino_s ... я.CPP#L163
Почему изменение в этой линии, устанавливая только периферийное устройство на RX?
Я могу понять удаление управления программным обеспечением NSS, но периферийное устройство может быть рабов и передавать. Есть проблема, если не установлен в режим только RX?

victor_pv
Ср 22 февраля 2017 г., 19:40
Стивестронг написал:victor_pv написал:https: // github.com/stevstrong/arduino_s ... я.CPP#L163
Почему изменение в этой линии, устанавливая только периферийное устройство на RX?
Я могу понять удаление управления программным обеспечением NSS, но периферийное устройство может быть рабов и передавать. Есть проблема, если не установлен в режим только RX?

Стивестронг
Ср 22 февраля 2017 г., 19:56
Спасибо, что указали на информацию, я знал, что что -то упускаю.
Это означает, что нет ошибки, просто спецификация не соответствует моим ожиданиям.
Я добавлю чтение в трансферную функцию, удалите чтение из функции записи и проверьте его с помощью дисплея и SD FAT.

victor_pv
Ср 22 февраля 2017 г., 8:22 вечера
Стивестронг написал:Спасибо, что указали на информацию, я знал, что что -то упускаю.
Это означает, что нет ошибки, просто спецификация не соответствует моим ожиданиям.
Я добавлю чтение в трансферную функцию, удалите чтение из функции записи и проверьте его с помощью дисплея и SD FAT.

Стивестронг
Чт 23 февраля 2017 12:06
Кстати, что пересмотр RM0008 U использует?
Мой один "Docid13902 Rev 15"И упомянутая информация на странице 731 вместо 743.

victor_pv
Чт 23 февраля 2017 г. 15:41
Стивестронг написал:Кстати, что пересмотр RM0008 U использует?
Мой один "Docid13902 Rev 15"И упомянутая информация на странице 731 вместо 743.