1887ВЕ3Т

16-разрядные микроконтроллеры разработки ОАО "НИИЭТ"

Модераторы: pip, gurzzza, _sva_

Re: 1887ВЕ3Т

Сообщение Denis » 29 июл 2016, 23:14

yrk писал(а):Denis, спасибо за ответ. Настройку делителя всегда выполняю с помощью внешней конфигурации (резисторов), а добавление чего-либо в код не влияет, так как код вообще не выбирался из памяти. Конечно, если допустить какую-то магию...)))


Придется допустить магию. В свое время я тоже ставил EINIT первой командой и смотрел RSTOUT. Тем не менее вышеприведенный код помог. По схемотехнике мы не меняли ничего (у нас стоит супервизор).
Denis
 
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение bentech » 14 окт 2016, 15:42

Добрый день, подскажите, можно ли настроить CAN модуль таким образом, чтобы в одну область сообщения попадали сообщения с разными ID, а затем внутри прерывания по-приёму уже разделять их?

Спасибо.
bentech
 
Сообщения: 7
Зарегистрирован: 27 янв 2015, 13:31

Re: 1887ВЕ3Т

Сообщение tvs » 17 окт 2016, 08:52

Добрый день, подскажите, можно ли настроить CAN модуль таким образом, чтобы в одну область сообщения попадали сообщения с разными ID, а затем внутри прерывания по-приёму уже разделять их?


1887ВЕ3Т имеет 32 области сообщений в модуле CAN. Каждая область сообщений может быть настроена на прием нескольких сообщений (с разными ID) по маске-идентификатору (регистр MOAMRn).
tvs
 
Сообщения: 3
Зарегистрирован: 27 апр 2016, 09:24

Re: 1887ВЕ3Т

Сообщение bentech » 17 окт 2016, 11:56

Да, уже разобрался, спасибо! Проблема была в том, что я упустил тот факт, что при 11-битном ID в регистрах MOAMR/AR маска для фильтра задается также со смещением в 2 бита.
bentech
 
Сообщения: 7
Зарегистрирован: 27 янв 2015, 13:31

Re: 1887ВЕ3Т

Сообщение bentech » 24 янв 2017, 17:06

Добрый день!

Подскажите, можно ли каким-либо образом вынести таблицу векторов прерываний в ОЗУ? Хочу сделать возможность перепрошивки МК через CAN шину, но не могу придумать, каким образом перенаправить вектор прерывания по приему/передаче CAN сообщения по указанному адресу в ОЗУ.

Спасибо!
bentech
 
Сообщения: 7
Зарегистрирован: 27 янв 2015, 13:31

Re: 1887ВЕ3Т

Сообщение Denis » 02 фев 2017, 08:34

bentech писал(а):Добрый день!

Подскажите, можно ли каким-либо образом вынести таблицу векторов прерываний в ОЗУ?
Спасибо!


Есть два пути:
1. C помощью бита в SYSCON отображаешь сегмент ПЗУ на другой адрес. Теперь, если у тебя есть снаружи микросхема ОЗУ, то вектора окажутся в ней.
или
2. С помощью ассемблера и команд jmps перенаправляешь каждый вектор в ОЗУ. Объясняешь кейлу расположение таблицы с помощью директивы VECTAB.


bentech писал(а):Добрый день!
Хочу сделать возможность перепрошивки МК через CAN шину, но не могу придумать, каким образом перенаправить вектор прерывания по приему/передаче CAN сообщения по указанному адресу в ОЗУ.
Спасибо!


Не очень ясно причем тут вектора. Поподробнее.
Denis
 
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение bentech » 15 мар 2017, 16:43

Denis писал(а):Не очень ясно причем тут вектора. Поподробнее.

Уже реализовал, но немного по своему. Собственно, для чего же вектора. Приём данных у загрузчика по CAN шине вызывает прерывание конкретной линии прерываний CAN. По этому адресу лежит код обработки, где команды и данные разбираются, согласно разработанному протоколу, и происходит перепрошивка ПЗУ микроконтроллера. Проблема была в том, что для того, чтобы прошить флеш нужно её сначала стереть. А стереть можно либо кусок, либо всё. Соответственно, стирая самый первый сектор/блок, мы благополучно стираем как адрес, по которому мы прыгаем в прерывании, так и блок кода, отвечающий за программирование через uLink и получаем из устройства кирпич, куда надо лезть с хардварным адаптером и заного заливать туда HEX. Вот у меня и была идея, перенести таблицу в ОЗУ, чтобы спокойно стирать флеш без каких-либо проблем.

В итоге реализовал загрузчик, который сидит в последнем блоке FLASH и сам стирает и прописывает в таблице прерываний нужный адрес, после чего стирает флеш, согласно входящей раскладке адресов памяти и начинает приём/запись новых данных. Из недостатков - загрузчик не перепрошьёт сам себя, если нужно внести изменение в код загрузчика, то перепрошивать устройство придется uLink-ом.
bentech
 
Сообщения: 7
Зарегистрирован: 27 янв 2015, 13:31

Re: 1887ВЕ3Т

Сообщение Denis » 18 мар 2017, 00:56

bentech писал(а):
Denis писал(а):Не очень ясно причем тут вектора. Поподробнее.

В итоге реализовал загрузчик, который сидит в последнем блоке FLASH и сам стирает и прописывает в таблице прерываний нужный адрес, после чего стирает флеш, согласно входящей раскладке адресов памяти и начинает приём/запись новых данных. Из недостатков - загрузчик не перепрошьёт сам себя, если нужно внести изменение в код загрузчика, то перепрошивать устройство придется uLink-ом.


Ясно. Обычно загрузчик тупо помещает несколько десятков байт в ОЗУ и передает на них управление, а уж байты сами решают что делать. От использования прерываний в загрузчике проще отказаться совсем. Теоретически перепрошить загрузчик в вашем случае можно и без uLink. uLink'ом нужно будет пользоваться в случае сбоя в процессе загрузки.
В общих чертах, в идеале, должно быть так:

1. Загрузчик сидит в 0-ом секторе, нулевой сектор не стирается никогда.
2. Все вектора с помощью команд jmps переправлены в ОЗУ и "боевая" программа "знает" об этом.
3. "Боевая" программа содержит контрольную сумму (КС) своего кода по определенному адресу и, возможно, список занятых секторов.
4. При старте процессора загрузчик проверяет КС и если все ОК - передает управление "боевой" программе.
5. Если КС не сошлась - инициируется процесс получения байт и передачи на них управления.
6. Если "боевая" программа в процессе работы получает определенный идентификатор - она также передает управление загрузчику (например, помещает в регистры заранее заданные магические числа и делает софт-ресет).
Denis
 
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Пред.

Вернуться в 16-разрядные микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron