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
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
в основном коде смотрим есть ли что-то в буфере и делаем с этим что хотим делать
а на прием вообще если буфер полон то тупо сливаем байты в никуда
ну хотя так делают иногда, но лучше знать что байт просран из-за буфера тащемта
Google
Danil
26.05.2017
16:57:14
сам код передает-принимает количество байт cnt. передает из tbuf а принимает в rbuf
есть там коментарий нахуя они подменяют при передаче байт 0х00 на 0хFF? че за магия то?
Serg
26.05.2017
16:59:37
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
это видимо какой то частный случай рака головного мозга автора книги
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
вопрос нахуя?
Serg
26.05.2017
17:16:17
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:06
Th0r
26.05.2017
17:20:16
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
Serg
26.05.2017
17:20:40
Danil
26.05.2017
17:20:55
но это если полевик открыт
Serg
26.05.2017
17:21:36
Данил, выше вопрос, ответь пожалуйста
Danil
26.05.2017
17:21:56
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