Перейти к содержанию
    

STM32F103..., SPI передача через DMA, проблема с CS

5 часов назад, auric сказал:

Для меня это не так очевидно как вам это кажется, я читал как по регистрам отследить появление HF, но к сожалению при 0xFFFFFFF9 в LR вроде как отсыл был к неправильной адресации - для меня не особо говорит, что и где искать...

Открываем "Technical Reference Manual" for Cortex-M3. И читаем в нём раздел "Exceptions".

В частности его параграф "5.8.2 Returning the processor from an ISR" содержит описание кодов EXC_RETURN. Одним изкоторых и является ваше 0xFFFFFFF9 (это не адрес, это спец.значение EXC_RETURN).

Также в этом разделе можно найти описание формата кадра стека, созданного процессом стекинга и рассказывается как из EXC_RETURN узнать расположение этого кадра стекинга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 05.12.2023 в 18:01, amaora сказал:

Я тут делал передачу по SPI через DMA без прерываний. Нужен таймер и несколько (больше двух) каналов DMA. Можно и несколько CS так переключать. А вот может ли так F103 надо читать маны.

в итоге сделал переключение CS на прерываниях (полностью на DMA повесить управление SPI не получилось), но в итоге если работать с односторонней передачей, то проще действительно использовать таймер, тем более мне он пригодился для дополнительных пауз, тк нужно выдерживать задержку от конца последнего CLK импульса до поднятия /CS. А в случае использования еще и приема от периферии (у меня канал DMA на прием как назло оказался занят) подошел и IE_RXNE флаг вполне, что собственно и писали тоже в советах  

В 27.11.2023 в 22:34, mitya1698 сказал:

так как spi синхронный, то окончание приема означает как раз окончание передачи, они же по одному клоку работают.

но только задержки надо контролировать, чтобы не было все быстро (кстати по поводу задержек уже другая история).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тоесть у вас отправка по дма, а прием по прерываниям?

не очень ясно смысл сего действа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, auric сказал:

проще действительно использовать таймер, тем более мне он пригодился для дополнительных пауз, тк нужно выдерживать задержку от конца последнего CLK импульса до поднятия /CS.

Паузы можно создавать и без таймера. Достаточно просто пин SCLK перевести в состояние GPIO (предварительно выставив нужный GPIO-уровень) и передать по SPI любое слово подходящего размера (предварительно выставив нужную скорость). И таймер расходовать не нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, mitya1698 сказал:

тоесть у вас отправка по дма, а прием по прерываниям?

не очень ясно смысл сего действа.

Ну да - канал, отвечающий за DMA_RX занят USART-ом (так получилось, недоглядел, плату переделывать не очень хотелось). В принципе не критично, тк прием нужен не во всех пакетах. Но все равно такая схема удобнее поллинга флагов внутри основной/фоновой программы.

3 часа назад, jcxz сказал:

Паузы можно создавать и без таймера. Достаточно просто пин SCLK перевести в состояние GPIO (предварительно выставив нужный GPIO-уровень) и передать по SPI любое слово подходящего размера (предварительно выставив нужную скорость). И таймер расходовать не нужно.

пока не понял как это должно работать, вроде пин SCLK при работе с периферией SPI назначается как AFIO (если конечно работа SPI не делается так сказать "вручную").

Изменено пользователем auric

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 08.01.2024 в 12:42, jcxz сказал:

Паузы можно создавать и без таймера. Достаточно просто пин SCLK перевести в состояние GPIO (предварительно выставив нужный GPIO-уровень) и передать по SPI любое слово подходящего размера (предварительно выставив нужную скорость). И таймер расходовать не нужно.

Так перед тем как перевести SCLK в GPIO надо также чем-то дождаться окончания передачи/приема, а если чем-то дождались, то уже можно и CS ом порулить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, mitya1698 сказал:

Так перед тем как перевести SCLK в GPIO надо также чем-то дождаться окончания передачи/приема, а если чем-то дождались, то уже можно и CS ом порулить.

Дожидаться этого можно ожиданием завершения DMA. Таймер тут не нужен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при DMA на передачу, оно завершится раньше фактической передачи, все как обычно жеж.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, mitya1698 сказал:

при DMA на передачу, оно завершится раньше фактической передачи, все как обычно жеж.

Естественно receive-DMA. Вроде это само собой разумеется.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тема про передачу и cs. чем ваши паузы через sclk помогут? или это просто не првязанная к теме информация? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 08.01.2024 в 09:20, auric сказал:

тк нужно выдерживать задержку от конца последнего CLK импульса до поднятия /CS

 

В 08.01.2024 в 18:08, jcxz сказал:

Паузы нужны не мне, а товарищу, которому я отвечал.

товарищу как раз нужны были паузы от clk до cs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...