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

Не срабатывает Reset

Вопрос в следующем...написал некий загрузчик и выделил для него память в первых 10кБ (с 0х3100 по 0х5900), в этой области разместил вектора прерываний: резет и т.д....но при ресете контроллера почему то он обращается по старому адресу вектора прерывания т.е. 0xfffe, вопрос почему и каким образом сделать что бы он переходил по заданному мною адресу....файл xlс прилагаю...

-Z(CODE)CSTART,ISR_CODE=3100-58BD

// ---------------------------------------------------------
// Constant data

-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT=3100-58BD


// ---------------------------------------------------------
// All memory 0 - 0xFFFFF
// ---------------------------------------------------------

// ---------------------------------------------------------
// Code

-P(CODE)CODE=3100-58BD

// ---------------------------------------------------------
// Constant data

-Z(CONST)DATA20_C,DATA20_ID=3100-58BD


// ---------------------------------------------------------
// Interrupt vectors
// ---------------------------------------------------------

-Z(CODE)INTVEC=58C0-58FF
-Z(CODE)RESET=58FE-58FF

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


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

Вы видимо где-то невнимательно читали или недочитали документацию. В MSP430 вектора прерываний расположены по фиксированным адресам во Flash и перемещены быть не могут. Вы конечно можете разместить тело функции-обработчика прерывания в любом месте памяти (в т.ч. даже в ОЗУ), но сами вектора прерываний вы переместить не сможете. Такова особенность архитектуры данного типа МК. Кстати, для самописного бутлоадера лучше бы использовать "верхнюю" часть Flash, примыкающую к сегменту векторов прерываний.

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


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

Ну как бы в 5 серии можно перенести вектора прерываний в ОЗУ, там где-то спец бит для этого есть (я даже пользовался для своего самописного бутлодыря), но это только до ресета. После ресета бит сбрасывается и вектор опять жестко на 0xfffe Линкерным файлом вы не уговорите его быть в другом месте.

Я когда тренировался в реализации загрузчика опирался на две темы в этом форуме. Поищите их, (сейчас время нет, на работу пора) там как раз про перенос векторов в ОЗУ и пр. рассказывается.

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


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

Ну как бы в 5 серии можно перенести вектора прерываний в ОЗУ, там где-то спец бит для этого есть (я даже пользовался для своего самописного бутлодыря), но это только до ресета. После ресета бит сбрасывается и вектор опять жестко на 0xfffe Линкерным файлом вы не уговорите его быть в другом месте.
Да, в серии 5xx есть возможность ремапить область памяти векторов прерываний в ОЗУ. Но опять же в фиксированное место ОЗУ, а не в произвольное.

1.3.6.1 Alternate Interrupt Vectors

It is possible to use the RAM as an alternate location for the interrupt vector locations. Setting the

SYSRIVECT bit in SYSCTL causes the interrupt vectors to be remapped to the top of RAM. Once set, any

interrupt vectors to the alternate locations now residing in RAM. Because SYSRIVECT is automatically

cleared on a BOR, it is critical that the reset vector at location 0FFFEh still be available and handled

properly in firmware.

Я когда тренировался в реализации загрузчика опирался на две темы в этом форуме. Поищите их, (сейчас время нет, на работу пора) там как раз про перенос векторов в ОЗУ и пр. рассказывается.
Не вводите в заблуждение. Вектор прерывания это адрес, содержимое памяти которого которого загружается в PC при обработке прерывания. Так вот адрес этот фиксирован. Менять можно только его содержимое. Содержимое вектора прерывания может указывать на область ОЗУ, это да. Но сам вектор при этом не переносится (исключая возможность ремапа в серии 5xx).

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


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

Не вводите в заблуждение. Вектор прерывания это адрес, содержимое памяти которого которого загружается в PC при обработке прерывания. Так вот адрес этот фиксирован. Менять можно только его содержимое. Содержимое вектора прерывания может указывать на область ОЗУ, это да. Но сам вектор при этом не переносится (исключая возможность ремапа в серии 5xx).

Я именно про 5 серию и веду речь.

Вот на эти темы опирался. На первую в основном.

http://electronix.ru/forum/index.php?showt...p;hl=bootloader

http://electronix.ru/forum/index.php?showt...p;hl=bootloader

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


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

Снимаю шляпу перед вашей телепатией! Я вот не могу на 100% уверенно опознать кристалл, о котором ТС вопрошает :(

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


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

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

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

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

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

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

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

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

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

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