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

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

7 минут назад, x893 сказал:

Где откопали стюардессу Кокос ? Чем Keil не угодил ?

да привык как-то камни старые, работает и ладно. Работал и в кейле и в иаре, но они же платные были. Для себя не стал заморачиваться с ними.

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

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


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

On 12/5/2023 at 1:50 PM, auric said:

temp локальная, MenuQnty, prog_write_buffer, MEM глобальные

Сишные типы ?
int, short, char ?

покажите объявления этих переменных.
просто строку, где они у вас объявлены, скопируйте сюда.

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


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

12 минут назад, dimka76 сказал:

Сишные типы ?
int, short, char ?

покажите объявления этих переменных.
просто строку, где они у вас объявлены, скопируйте сюда.

u16 prog_write_buffer[(FLASH_PAGE_SIZE/2)+2];

#define MenuQnty 4

u16 temp;

const u16 MEM[MenuQnty] = {1,2,1,0};

только какое это имеет отношение к процессу, когда я прогоняю в дебаге место, где обычно ухожу в хардфаулт если запускаю шаг в обход, и не ухожу, если нажимаю шаг со входом и пошагово прохожу место. Если как писал не могу войти в шаг, то если активировать пошаговое исполнение ассемблерных команд, то и это место прохожу, главное шаги не делать с обходом, а выбирать шаг со входом...

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


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

On 12/5/2023 at 2:36 PM, auric said:

только какое это имеет отношение к процессу

чтобы можно было что-то подсказать.
А так действительно видимо дело не в этом.

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


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

Может, пошагово прерывания отключены, а в нормальном режиме срабатывают и вызывают фолт?

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


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

Когда в дебаггере открыт SPI, то отладчик читает DR и никаких прерываний не будет.

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


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

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

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


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

Все... вопрос с выходом в хард отпал, нашел кучу неточностей, но в нокаут отправлял таймер, код перекочевал из другого проекта, но если там прерывания по обновлению были отключены, то здесь почему-то они каким-то чудным образом были активированы, но не предусмотрена функция их обработки (естественно, ведь таймер планировался в режиме ШИМа). В дебаге видимо прерывание не наступало, а вот вход в цикл или функцию не пошагово разрешало вызов этого прерывания. Почему-то отслеживая LR регистр я не нашел чего-то полезного, тупо 0xFFFFFFF9, который явно не указывает на то, что не было инструкции для обработки, жаль, я думал отследить такое событие проще.

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

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


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

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

Почему-то отслеживая LR регистр я не нашел чего-то полезного, тупо 0xFFFFFFF9, который явно не указывает на то, что не было инструкции для обработки, жаль, я думал отследить такое событие проще.

Очевидно, что сначала вам нужно было тупо прочитать мануал на ядро своего МК. Тогда бы знали - что означает 0xFFFFFFF9 и почему оно находится в LR внутри ISR.  :unknw:

И если бы прочитали мануал, то знали бы как найти указатель на инструкцию, вызвавшую HF.

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


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

16 минут назад, jcxz сказал:

Очевидно, что сначала вам нужно было тупо прочитать мануал на ядро своего МК. Тогда бы знали - что означает 0xFFFFFFF9 и почему оно находится в LR внутри ISR.  :unknw:

И если бы прочитали мануал, то знали бы как найти указатель на инструкцию, вызвавшую HF.

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

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


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

Есть готовый код для HF. Ничего читать не надо. Перетащил мышью и все дела. Смотри сообщение и исправляй.

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


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

11 минут назад, x893 сказал:

Есть готовый код для HF. Ничего читать не надо. Перетащил мышью и все дела. Смотри сообщение и исправляй.

Буду благодарен, если поделитесь, а то, что находил мне как-то не приглянулось - как мне показалось там тупо все в структуру помещали, так я и так на отладчике вижу и стек могу разглядеть, другое дело, я ожидал более очевидного деления сообщений причин попадания. Понимаю вопрос я поверхностно разобрал, просто не так часто с HF приходится взаимодействовать, да и зачастую находится быстро.

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

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


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

2 hours ago, auric said:

Буду благодарен, если поделитесь, а то, что находил мне как-то не приглянулось - как мне показалось там тупо все в структуру помещали, так я и так на отладчике вижу и стек могу разглядеть, другое дело, я ожидал более очевидного деления сообщений причин попадания. Понимаю вопрос я поверхностно разобрал, просто не так часто с HF приходится взаимодействовать, да и зачастую находится быстро.

 

Устанавливаете SES и создаете проект. Там и будет обработчик HF

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


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

3 hours ago, auric said:

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

Если Вы заинтересованы в профессиональной работе с ядром ARM, то Вы должны (или Вам следует) прочитать на него вообще документацию полностью. Понятно, что делается это не за один вечер, и, возможно, не за одну неделю. Можно почитать по диагонали, неважно. Но хотя бы Вы будете знать об основном устройстве ядра и о том, как оно работает. Не хотите читать официальную документацию, допускаю такое - она объёмная и разрознена по разным файлам, но почитайте популярную книгу Дж. Ю. (Joseph Yui) по Вашему ядру. Я всегда её рекомендую. И в своё время я её прочёл. Там есть среди прочих глава о прерываниях. И вот в ней-то и сказано, что содержимое регистра LR определят место, куда вернётся ядро при выходе из прерывания. Поэтому в LR находится не адрес, а вполне себе конкретная сигнатура, одна из нескольких (на изусть не помню, но знаю, где посмотреть и этого достаточно).

P.S. В этих же книгах есть и описание HardFault, а также примеры обработчиков.

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


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

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

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

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

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

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

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

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

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

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