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

 
 
> TI AM1808 Program Reset, Как реализовать программный сброс процессора?
doom13
сообщение Nov 17 2014, 14:58
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую!
Хочу реализовать программный сброс процессора, но не могу подобрать нужную команду.

Можно сделать что-то типа:
Код
asm(" .ref Entry");
asm(" b Entry");

программа должна перезапуститься, но в моём случае не работает (только перейдёт на Entry и куда-то улетит), как понимаю надо ещё что-то почистить или сбросить, сделать аналог "System Reset" из CCS и перезапустить программу.

А как сделать, чтобы программа перешла на адреса встроенного ROM загрузчика и уже в соответствии с выбранным режимом загрузки перезагрузила прошивку и стартанула её?
Пока что-то не получаетсяsad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Nov 18 2014, 03:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Используйте встроенный сторожевик для сброса.
Go to the top of the page
 
+Quote Post
doom13
сообщение Nov 18 2014, 06:25
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(jcxz @ Nov 18 2014, 06:39) *
Используйте встроенный сторожевик для сброса.

Это можно, но хочется чтобы была команда, которая приходит, например, по ethernet. Как-то ведь можно, используя ассм, это сделать (всегда делал для других процов от TI). Нужно только описать переход на адрес, думаю, адрес ROM загрузчика 0xFFFD0000 должен подойти, но пока не могу разобраться, какую команду (или несколько команд) использовать.
Например для с28346 было:
Код
int restart()
{
    DINT;

    asm(" .ref _c_int00\n\t LB _c_int00");

    return 0;
}

int reset()
{
    DINT;
    PieCtrlRegs.PIECTRL.bit.ENPIE = 0;

    asm(" LB 0x003FFFC0");

    return 0;
}

Вопрос, как сделать для данного процессора нечто подобное?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 18 2014, 08:27
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(doom13 @ Nov 18 2014, 12:25) *
Это можно, но хочется чтобы была команда, которая приходит, например, по ethernet. Как-то ведь можно

Пришла команда - пишете в WD недопустимую последовательность - сразу получаете аппаратный RESET.
В чём проблема?
Обратите внимание на выделенное жирным. Это в 100 раз надёжнее и достовернее любых программных рестартов, так как заведомо переводит весь МК в начальное состояние.
Чего Вы своим программным переходом не делаете.
Go to the top of the page
 
+Quote Post
doom13
сообщение Nov 18 2014, 08:55
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(jcxz @ Nov 18 2014, 11:27) *
Пришла команда - пишете в WD недопустимую последовательность - сразу получаете аппаратный RESET.
В чём проблема?
Обратите внимание на выделенное жирным. Это в 100 раз надёжнее и достовернее любых программных рестартов, так как заведомо переводит весь МК в начальное состояние.
Чего Вы своим программным переходом не делаете.

Попробую такой вариант, спасибо, но всё же интересно, как ассмом можно его перенаправить на ROM загрузчик?
Пока делаю так:
Код
// reset.c
int reset()
{
    asm(" .ref RstHandler");
    asm(" b RstHandler");
    return 0;
}

попадаем:
Код
;reset.asm
    .global RstHandler
    .global ADDR_BOOTROM

ADDR_BOOTROM .word 0xFFFD0000

RstHandler:
;    LDR      r0, ADDR_BOOTROM
;    LDR      r1, [r0]
;    LDR      pc, [r0]

Как правильно написать то, что после RstHandler: ?

Да, мне кажется (возможно ошибаюсь), если перейти на код и заставить выполниться встроенный ROM-загрузчик, то это и будет аналог аппаратного сброса???
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 18 2014, 09:07
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(doom13 @ Nov 18 2014, 14:55) *
Попробую такой вариант, спасибо, но всё же интересно, как ассмом можно его перенаправить на ROM загрузчик?

Восстановить состояние регистров управления процессором в исходное состояние (такое, какое должно быть после подачи сигнала RESET).
Восстановить состояние периферии на исходное (прерывание, управление питанием, PLL, MPU/MMU, кеши и т.п.).
...(что-то ещё восстановить).
И только после этого можно делать RESET.

Я уже Вам написал что это в 100 раз сложнее чем 2 строчки которые у Вас, а Вы не верите....
Go to the top of the page
 
+Quote Post
doom13
сообщение Nov 18 2014, 09:16
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(jcxz @ Nov 18 2014, 12:07) *
Восстановить состояние регистров управления процессором в исходное состояние (такое, какое должно быть после подачи сигнала RESET).
Восстановить состояние периферии на исходное (прерывание, управление питанием, PLL, MPU/MMU, кеши и т.п.).
И только после этого можно делать RESET.

Тут понятно, что это должно быть сделано. Поэтому мой переход на Entry и не запускается, что что-то там (всё) не очищено и не сброшено в начальное состояние.

Цитата(jcxz @ Nov 18 2014, 12:07) *
Я уже Вам написал что это в 100 раз сложнее чем 2 строчки которые у Вас, а Вы не верите....

Тут я понял, что использовать WD - это проще, но вот пока ещё хочется понять как его загнать на адреса встроенного загрузчика.
Две строчки - это рестарт того, что уже лежит в RAM, а вот две строчки, которые перенаправят его на встроенный загрузчик, думаю, спасли бы ситуацию, но пока не пойму какие команды и как использовать.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 18 2014, 09:34
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(doom13 @ Nov 18 2014, 15:16) *
Тут я понял, что использовать WD - это проще, но вот пока ещё хочется понять как его загнать на адреса встроенного загрузчика.

Это несложно.
Для Thumb-2 системы команд (Cortex-M):
Код
typedef void (* EntryTyp)();
#define Entry ((EntryTyp)0xFFFD0001)  
Entry();

Для ARM-системы команд - с ноликом в мл. бите.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- doom13   TI AM1808 Program Reset   Nov 17 2014, 14:58
||- - doom13   Цитата(jcxz @ Nov 18 2014, 12:34) Спасиб...   Nov 18 2014, 11:17
||- - jcxz   B - это прямой переход. В команде адрес назначения...   Nov 18 2014, 11:31
|||- - doom13   Цитата(jcxz @ Nov 18 2014, 14:31) B - это...   Nov 18 2014, 12:04
|||- - SM   Цитата(doom13 @ Nov 18 2014, 15:04) Ведь ...   Nov 18 2014, 12:31
|||- - doom13   Цитата(SM @ Nov 18 2014, 15:31) Не замет...   Nov 18 2014, 13:08
|||- - SM   Цитата(doom13 @ Nov 18 2014, 16:08) , где...   Nov 18 2014, 13:16
||||- - doom13   Цитата(SM @ Nov 18 2014, 16:16) Счас пон...   Nov 18 2014, 13:31
||||- - SM   BootRom: .long.set 0xFFFD0000 B BootRom а ...   Nov 18 2014, 14:13
|||- - jcxz   Цитата(doom13 @ Nov 18 2014, 19:08) Тут ч...   Nov 18 2014, 13:37
||- - SM   Цитата(doom13 @ Nov 18 2014, 14:17) Где м...   Nov 18 2014, 11:33
|- - doom13   Цитата(jcxz @ Nov 18 2014, 06:39) Использ...   Nov 18 2014, 14:18
- - SM   проверил - компилируется (компилятор gcc 4.7.7, ас...   Nov 18 2014, 14:33
- - doom13   Цитата(SM @ Nov 18 2014, 17:33) У меня к...   Nov 18 2014, 15:04
- - SM   Цитата(doom13 @ Nov 18 2014, 18:04) загна...   Nov 18 2014, 15:32
- - doom13   Цитата(SM @ Nov 18 2014, 18:32) Ну надо н...   Nov 18 2014, 18:23
- - jcxz   Цитата(doom13 @ Nov 19 2014, 00:23) Ну не...   Nov 19 2014, 07:59
- - doom13   Цитата(jcxz @ Nov 19 2014, 10:59) Соглас...   Nov 19 2014, 09:45
- - SM   Цитата(doom13 @ Nov 19 2014, 12:45) Но ес...   Nov 19 2014, 09:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:27
Рейтинг@Mail.ru


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