@ru_electronics

Страница 298 из 718
Serg
26.05.2017
16:25:04
Но все приходящие из этой последовательности, только в случайном порядке

Danil
26.05.2017
16:25:24
нет все верно, как только пнули SPI_SendData по окончании передачи-приема байта прилетит RXNE

Serg
26.05.2017
16:26:19
код STM8S рабочий

Google
Danil
26.05.2017
16:26:27
скорее всего он просто не успевает сожрать этот поток

Danil
26.05.2017
16:26:28
Стм 8 как пишет

Serg
26.05.2017
16:26:38
если на стороне STM32 не на прерываниях - все работает

Danil
26.05.2017
16:26:48
Правильно Danil говорит

Danil
26.05.2017
16:27:04
кто в данной связке мастер стм8 или стм32?

Serg
26.05.2017
16:27:12
STM8S тоже на прерываниях

Danil
26.05.2017
16:27:23
да хоть на героине

Danil
26.05.2017
16:27:25
Код давай

Мастер 32 слейв8

Danil
26.05.2017
16:27:43
скорость обработки прерываний и кода вашего фифо тоже не бесконечная

на какой скорости херачит SPI

как только стм32 на полинге все работает? тогда стм8 не успевает инфа 146%

считайте такты

Google
Danil
26.05.2017
16:29:24
Сегодня Пьятница а-вы такты считать

Danil
26.05.2017
16:29:25
снижай скорость спи для тестов например до 500 кГц, потом повышай ступенями и увидишь когда стм8 загнется

а я на работе

Danil
26.05.2017
16:29:53
Который час?

Danil
26.05.2017
16:31:03
19:30 мск

Danil
26.05.2017
16:31:36
Не с утра работаете?

Или работа такая

Danil
26.05.2017
16:33:00
с утра ебашу. дежурство сегодня ещё 2 часа

Danil
26.05.2017
16:34:06
с утра ебашу. дежурство сегодня ещё 2 часа
Счастливый человек, а я с работы прихожу хоть и рано, но отдых от работы мало отличается ::))

Serg
26.05.2017
16:47:30
вот пример на полинге из книги рекомендованной выше



значит и на прерываних надо не: if (SPI_I2S_GetITStatus(SPI1, SPI_IT_TXE) == SET) { if (!fifo_empty(&_txFifo)) { uint8_t x = fifo_get(&_txFifo); SPI_SendData(SPI1, x); } else SPI_I2S_ITConfig(SPI1, SPI_IT_TXE, DISABLE); } а: if (SPI_I2S_GetITStatus(SPI1, SPI_IT_TXE) == SET) { if (!fifo_empty(&_txFifo)) { uint8_t x = fifo_get(&_txFifo); SPI_SendData(SPI1, x); } else SPI_SendData(SPI1, 0xFF); }

?

Danil
26.05.2017
16:51:59
на прерываниях надо положить данные в буфер и один раз взвести прерывание на передачу в мастере - он сам отстреляет весь буфер

в слейве в прерывании по RXNE тупо кладем байт в буфер и выходим

Serg
26.05.2017
16:52:33
а почему на полинге постоянно передавать надо, даже если нечего передавать?

Danil
26.05.2017
16:53:01
в основном коде смотрим есть ли что-то в буфере и делаем с этим что хотим делать

а почему на полинге постоянно передавать надо, даже если нечего передавать?
код какой то дебильный - вместо нулевого байта сделана подстановка передачи 0хFF

а на прием вообще если буфер полон то тупо сливаем байты в никуда

ну хотя так делают иногда, но лучше знать что байт просран из-за буфера тащемта

Google
Danil
26.05.2017
16:57:14
сам код передает-принимает количество байт cnt. передает из tbuf а принимает в rbuf

есть там коментарий нахуя они подменяют при передаче байт 0х00 на 0хFF? че за магия то?

Danil
26.05.2017
17:00:14
вот это вот if(tbuf) {} else {}

Serg
26.05.2017
17:00:16
много выше сказали, что в SPI нельзя принять, не передавая и наоборот

Danil
26.05.2017
17:01:15
да это тут причём? что нулевой байт уже не несет информации?

Serg
26.05.2017
17:01:37
так вот, в примерах на полинге почему то передают пустой байт если нечего передавать, а в примерах на прерываниях - не передают

я этого тож ене понимаю

почему SPI не может передавать без приема и наоборот

Danil
26.05.2017
17:05:00
так вот, в примерах на полинге почему то передают пустой байт если нечего передавать, а в примерах на прерываниях - не передают
что значит нечего передавать? в коде из книжки явно задается начало буфера и сколько передать байт. нет тамкого понятия нечего передать. только с какого-то хуя вместо байта со значением 0х00 будет передаваться 0xFF

это видимо какой то частный случай рака головного мозга автора книги

почему SPI не может передавать без приема и наоборот
может он все - но при передаче в регистр все равно считается что-то с ноги MISO, а при приёме от слэйва всегда нужно гнать чтото по MOSI, хоть тот же 0xFF

Serg
26.05.2017
17:07:07
вот пример применения



Danil
26.05.2017
17:07:21
ну почитай уже вики про SPI

Serg
26.05.2017
17:07:29
ничего не передаем, получаем только

Danil
26.05.2017
17:10:35
ну да, и в чем вопрос?

одна и та же функция и для приема и для передачи

так и должно быть

ничего не передаем, получаем только
только в данном случае наоборот ничего не читаем только передаем

Google
Serg
26.05.2017
17:13:47
Danil
26.05.2017
17:15:10
рак мозга в том, что проверяется значение каждого отсылаемого байта, и если он 0х00, то заменяем его на 0хff

вопрос нахуя?

Danil
26.05.2017
17:16:39
с той же ЕЕПРОМ отправь ка на нее адрес 0x123400 и запиши пару байт 0x55 0x00

результат удивит ага

Serg
26.05.2017
17:16:51
не значение байта, а что передан буфер в функцию и есть что передавать

Danil
26.05.2017
17:18:18
а млять, сраный мелкий шрифт. там типо проверяется что указатель па буфер не 0?

тогда оке

Dart
26.05.2017
17:19:15
глупый вопрос, хочу посчитать мощность полевика, который управляет включением светодиода. с током который протекает через транзистор вопросов не возникает. вопрос в напряжении. оно будет равно 0?

Serg
26.05.2017
17:19:28
ок, возвращаемся к вопросу

вот пример на полинге из книги рекомендованной выше



значит и на прерываних надо не: if (SPI_I2S_GetITStatus(SPI1, SPI_IT_TXE) == SET) { if (!fifo_empty(&_txFifo)) { uint8_t x = fifo_get(&_txFifo); SPI_SendData(SPI1, x); } else SPI_I2S_ITConfig(SPI1, SPI_IT_TXE, DISABLE); } а: if (SPI_I2S_GetITStatus(SPI1, SPI_IT_TXE) == SET) { if (!fifo_empty(&_txFifo)) { uint8_t x = fifo_get(&_txFifo); SPI_SendData(SPI1, x); } else SPI_SendData(SPI1, 0xFF); }

?

Danil
26.05.2017
17:20:25
а мощность Id^2 * Rdson

Dart
26.05.2017
17:20:33
спасибо

Danil
26.05.2017
17:20:34
да

Google
Danil
26.05.2017
17:20:55
но это если полевик открыт

Serg
26.05.2017
17:21:36
Данил, выше вопрос, ответь пожалуйста

Serg
26.05.2017
17:22:10
я не спрашиваю что делать

Danil
26.05.2017
17:22:14
а то будешь слать бесконечно

Serg
26.05.2017
17:22:15
я спрашиваю почему так

почему на полинге шлют даже если нечего слать, а на прерываниях - нет

Danil
26.05.2017
17:22:52
потому что прерывание будет вызываться снова и снова пока не вырубишь

Serg
26.05.2017
17:23:22


spiReadWrite(EEPROM_SPI, 0, &cmd, 1, EEPROM_SPEED);

Danil
26.05.2017
17:25:23
ок. напишу последний раз. На прерываниях если надо про читать 10 байт, то пишешь в буфер передачи 10 байт мусора или не пишешь т. к. память всегда что-то содержит и слейву обычно похуй на содержание от мастера пока он отвечает, и после каждого переданного байта читаешь содержимое регистра в rbuff свой

как то так

посмотри ты уже примеры SPL от ST

там все разжевано - и мастер и слейв, и поллинг и интерупт и ДМА

Serg
26.05.2017
17:27:07
ты не видишь вопрос?

Danil
26.05.2017
17:40:20
ты не видишь вопрос?
Наехал на человека

ты не видишь вопрос?
Там в книги пример, а не мантра

ты не видишь вопрос?
Шлют для примера, делать этого не надо

Я думал мы разобрали, что отправка и приём это не зависимые вещи, но делаются в один и тот же такт,

Serg
26.05.2017
17:43:56
Шлют для примера, делать этого не надо
для какого нах примера? много выше же сказали в SPI невозможно только слать или только читать

Страница 298 из 718