реклама на сайте
подробности

 
 
20 страниц V  « < 12 13 14 15 16 > »   
Reply to this topicStart new topic
> STM32F103x, делимся впечатлениями
sonycman
сообщение Dec 7 2009, 15:24
Сообщение #196


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(MasterAlexei @ Dec 7 2009, 17:42) *
По идее, проц даже и не должен попадать в прерывание, как только проинициализируешь СПИ переферию.
А он даже не вылазит от туда.

А какие прерывания от SPI вы разрешили?

К примеру, при установке бита TXEIE регистра SPI_CR2 (разрешении прерывания Tx buffer empty) и пустом буфере передатчика оно будет сгенерировано немедленно.
Go to the top of the page
 
+Quote Post
MasterAlexei
сообщение Dec 7 2009, 16:21
Сообщение #197





Группа: Участник
Сообщений: 5
Регистрация: 1-02-08
Из: Германия
Пользователь №: 34 674



Цитата(sonycman @ Dec 7 2009, 16:24) *
А какие прерывания от SPI вы разрешили?

К примеру, при установке бита TXEIE регистра SPI_CR2 (разрешении прерывания Tx buffer empty) и пустом буфере передатчика оно будет сгенерировано немедленно.

У меня разрешены TXE и RXNE прерывания. Но ведь я же еще ничего не записывал в TX буфер. На других контроллерах (например AVR от Амел) оно так и работает: пока ничего не запишешь, никаких прерываний не будет. А тут с какого испугу пришло прерывание, если в переферию ничего не писали?
Может я через полчаса только записать чего нить захочу туда.


--------------------
мои поделки на
http://fun-electronic.net/
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 7 2009, 18:35
Сообщение #198


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(MasterAlexei @ Dec 7 2009, 20:21) *
У меня разрешены TXE и RXNE прерывания. Но ведь я же еще ничего не записывал в TX буфер. На других контроллерах (например AVR от Амел) оно так и работает: пока ничего не запишешь, никаких прерываний не будет. А тут с какого испугу пришло прерывание, если в переферию ничего не писали?
Может я через полчаса только записать чего нить захочу туда.

Ну здрасте rolleyes.gif
При чём тут запишешь незапишешь?
TXE что значит? Буфер передатчика пуст. При старте SPI передачтик пуст? Пуст. Разрешили прерывание - получите и распишитесь.

Пересели на другой камень - приготовтесь к тому, что он будет работать по другому smile.gif

ЗЫ: запрещайте прерывание TXE в обработчике, если больше нечего передавать.
Go to the top of the page
 
+Quote Post
MasterAlexei
сообщение Dec 7 2009, 18:56
Сообщение #199





Группа: Участник
Сообщений: 5
Регистрация: 1-02-08
Из: Германия
Пользователь №: 34 674



Цитата(sonycman @ Dec 7 2009, 19:35) *
Ну здрасте rolleyes.gif
При чём тут запишешь незапишешь?
TXE что значит? Буфер передатчика пуст. При старте SPI передачтик пуст? Пуст. Разрешили прерывание - получите и распишитесь.

Пересели на другой камень - приготовтесь к тому, что он будет работать по другому smile.gif

ЗЫ: запрещайте прерывание TXE в обработчике, если больше нечего передавать.

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

Но тогда возникает логичный вопрос - почему в режиме SLAVE при абсолютно одинаковой инициализации всех прерываний такого не происходит?
Там я тоже оба прерывания разрешаю.


--------------------
мои поделки на
http://fun-electronic.net/
Go to the top of the page
 
+Quote Post
MasterAlexei
сообщение Dec 9 2009, 12:59
Сообщение #200





Группа: Участник
Сообщений: 5
Регистрация: 1-02-08
Из: Германия
Пользователь №: 34 674



Цитата(cebotor @ Jan 15 2009, 12:22) *
сброс pending бита NVIC происходит сразу по входу в прерывания , во всех типах прерывания(механизм общий аппаратно). Но в EXTI источник прерывания не сбрасывается при сбросе пендинг бита(вручную), и получается как раз такой механизм как вы описали - вы сбрасываете источник , но после этого нужно сбросить и пендинг бит который только что выставился .
теперь домыслы которые подкреплены прочитанным на форуме арма:
Все это "вокруг" того чтобы не потерять последнее состояние входа. Во первых разработчикам камня упрощается жизнь в том что не надо реагировать на короткие пики (с момента выставления источника до момента его сброса как минимум пройдет время входа в прерывание). А во вторых для разработчика ПО эффект задумывался как раз противоположный наблюдаемому Вами : вы видите два входа в обработчик вместо одного , а можно видеть один вместо двух. Разположив сброс источника после чтения статуса входа не пропустим его последнее состояние, но дополнительного вызова прерывания не будет.

мне надо было организовать неограниченную вложенность прерываний самих в себяк примеру так
Код
systick_ISR
{...  
       systick_ISR
       {...  
             systick_ISR
             {
             }...
       }...
}

и друг в друга .
Выяснилось что манипулируя приоритетами это сделать не возможно в данном ядре.
NVIC постоянно проверяет приоритет прерывания которое пытается исполниться и текущий системный приоритет. Если мы в обработчике прерывания, то этот приоритет он берет из таблицы описателей прерываний. и получается, что меняя приоритет прерывания находясь в нем мы меняем оба числа и слева от знака неравенства и справа.
для верности я попробовал использовать пустой слот прерывания - выставлять ему приоритет наивысший , вызывать его искуственно , и выставлять низший приоритет... и получил хард фаулт эксепшн неизвестной природы, который мне не смогли объяснить в сапорте ST.
Так что без асм враппера не удалось обойтись. Кстати , если у кого есть сакральные знания на эту тему - прошу меня поправить.

А можно поинтересоваться, на сколько сложным оказался враппер? Можно ли глянуть на него. Не то, чтобы мы его будем применять, но надо одному утырку доказать, что именно эта схема, которая приведена в вашем посте про вложенные прерывания - не работает. Картинка с осциллографа его почему-то не устраивает, и он говорит, что оно должно работать, хотя я наблюдаю именно то, что прерывание само себя прервать не может, и, собственно, не прерывает, а просто висит.
Он придумал тут систему шедулера и активно ее проталкивает. Правда все задачи у него запускаются как раз из systick таймера. Это систик таймер настроен на 1 милисекунду, и есть задачи - 1 мс, 10 мс. Причем он утверждает, что задачи в 10 мс могут и выполняться все 10 мс. и что те задачи, что в 1 мс тоже будут запускаться, прерывая 10милисекундные задачи. Но вот каким образом, если все эти задачи стартуют именно ИЗ обработчика систик.
Я состряпал простенький тест, который симулирует такое поведение. И благополучно завесил весь контроллер.

Если не затруднит, можно глянуть на враппер?


--------------------
мои поделки на
http://fun-electronic.net/
Go to the top of the page
 
+Quote Post
MasterAlexei
сообщение Dec 10 2009, 14:29
Сообщение #201





Группа: Участник
Сообщений: 5
Регистрация: 1-02-08
Из: Германия
Пользователь №: 34 674



Цитата(MasterAlexei @ Dec 9 2009, 13:59) *
Код
systick_ISR
{...  
       systick_ISR
       {...  
             systick_ISR
             {
             }...
       }...
}


Итак. Кто тут хочет систик в себя впихнуть! У меня есть решение!!!!!!!
определяем регистр:
#define System_Handler_Control_And_State_Register (*((volatile uint32_t *) 0xE000ED24 ))
Он вдоках описан. В нем есть замечательный бит, который говорит нам, что сейчас работает какое то прерывание. В нашем случае о систике нам рассказывает бит 11.
Вот.
Как заходим в преррывание, и если оно долгое - мы убираем этот бит:
System_Handler_Control_And_State_Register &= ~( 1 << 11 );

Но по выходу из этого долгого прервания надо незабыть обязательно поставить этот бит на место!!!
Этот бит говорит ядру не только то, что сейчас работаеть какое то прерывание, но и то, что стек надо бы почистить.
Если не убрать - стек кончится и все встанет.
Я это дело попробовал - все работает!!!
И прерывание само себя прерывает, так сказать.

Во как.


--------------------
мои поделки на
http://fun-electronic.net/
Go to the top of the page
 
+Quote Post
cebotor
сообщение Dec 10 2009, 15:04
Сообщение #202


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



Цитата(MasterAlexei @ Dec 10 2009, 17:29) *
Этот бит говорит ядру не только то, что сейчас работаеть какое то прерывание, но и то, что стек надо бы почистить.
Во как.

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


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 12 2009, 14:10
Сообщение #203


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Столкнулся вчера с каким-то глюком SPI этого контроллера.

Висит у меня SD карта на Олимексовской отлад. плате.
Работает не первый день уже, но вот вчера, после очередной прошивки MCU. стали сыпаться ошибки на CMD12.

Посмотрел осциллом - ба, на линии MOSI данные сдвинуты на один бит то влево, то вправо относительно SCK!
Фига себе, такого глюка я ещё не видел!

Даже спал плохо ночью, а сегодня с утра стал ковыряться, и проблема решилась вырезанием из кода инициализации карты памяти переключения скорости SPI - инициализировал её на низкой скорости (280 Kb), а работал на большой (18 Mb). Поставил сразу 18 мегабит.
Хотя и переключал, как указано в даташите, при неактивном приёме/передаче (ждал установки флага BUSY), крыша у контроллера ехала всё равно sad.gif

Всё равно странно, почему раньше такого не было?
Ведь софт был написан и отлажен ещё весной, а такая бяка вылезла только вчера?
Хм...
Go to the top of the page
 
+Quote Post
Dir
сообщение Dec 19 2009, 16:52
Сообщение #204


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Хм... Обнаружил в 64-выводных корпусах BGA (STM32F103R(C...E)Y6 и STM32F103RBH6) ножку VREF+ вместо PC3 и ОЗУ добавили в STM32RCY6 до 64кбайт. Уважают, значит, крупнооптовых покупателей. Может со временем снизойдут и до обычных потребителей и выведут эту злосчастную REF+ хотя бы на ту же ножку 11 (сейчас PC3) в LQFP64 sad.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 24 2009, 10:45
Сообщение #205


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Заметил, что на линию VDDA принято ставить индуктивности типа Ferrite Bead.

Подскажите, пожалуйста, какой тип\номинал подойдёт?
На схемах нет никаких номиналов, к сожалению... sad.gif
Go to the top of the page
 
+Quote Post
Dir
сообщение Dec 24 2009, 15:28
Сообщение #206


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(sonycman @ Dec 24 2009, 12:45) *
Заметил, что на линию VDDA принято ставить индуктивности типа Ferrite Bead.

Подскажите, пожалуйста, какой тип\номинал подойдёт?
На схемах нет никаких номиналов, к сожалению... sad.gif


Я ставлю BLM18RK102SN1D от Murata. Выбрал сравнивая коэффициенты подавления на разных частотах. Этот начинает валить с единиц МГц.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 24 2009, 15:46
Сообщение #207


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Dir @ Dec 24 2009, 19:28) *
Я ставлю BLM18RK102SN1D от Murata. Выбрал сравнивая коэффициенты подавления на разных частотах. Этот начинает валить с единиц МГц.

Спасибо!
Тогда поставлю BLM21RK102SN1D - типоразмер 0805, чтобы полегче было руками паять smile.gif
Падение напряжения на них не сильное, думаю?
Go to the top of the page
 
+Quote Post
Dir
сообщение Dec 25 2009, 08:38
Сообщение #208


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(sonycman @ Dec 24 2009, 17:46) *
Спасибо!
Тогда поставлю BLM21RK102SN1D - типоразмер 0805, чтобы полегче было руками паять smile.gif
Падение напряжения на них не сильное, думаю?


BLM18 тоже нетрудно паять, квадрат в сечении. BLM21 для таких токов, ИМХО, избыточно. Да и какое падение - доли ома.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 25 2009, 09:20
Сообщение #209


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Dir @ Dec 25 2009, 12:38) *
BLM18 тоже нетрудно паять, квадрат в сечении. BLM21 для таких токов, ИМХО, избыточно. Да и какое падение - доли ома.

Разве квадрат?
Стандартный прямоугольный типоразмер: для BLM18 - 0603, а для BLM21 - 0805.
Последний мне гораздо проще припаять.

Макс. ток для обоих одинаков - 200 ма.
У BLM21 сопротивление пост. току несколько ниже - 0.5 ома против 0.8 у BLM18.
Но это роли практически никакой не играет smile.gif
Go to the top of the page
 
+Quote Post
Dir
сообщение Dec 25 2009, 20:34
Сообщение #210


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(sonycman @ Dec 25 2009, 11:20) *
Разве квадрат?
Стандартный прямоугольный типоразмер: для BLM18 - 0603, а для BLM21 - 0805.
Последний мне гораздо проще припаять.

Макс. ток для обоих одинаков - 200 ма.
У BLM21 сопротивление пост. току несколько ниже - 0.5 ома против 0.8 у BLM18.
Но это роли практически никакой не играет smile.gif


Квадрат не вдоль, а поперек smile.gif))
Они не плоские, как резисторы, а высокие. Параллелепипед BLM21 выглядит на плате слегка монстрообразно. Паять эти BLM18 очень просто, потому как есть за что пинцетом ухватиться и не надо переворачивать, чтобы надпись сверху была. Но это все ИМХО, конечно. Некоторым и BLM21 мало, им больше подавай.
Go to the top of the page
 
+Quote Post

20 страниц V  « < 12 13 14 15 16 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016