Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f051 remap
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
-SANYCH-
Собственно задача: есть программа загрузчик которая должна грузить во флеш основную программу. Как я правельно понимаю что бы работала основная программа нужно скопировать таблицу векторов и сделать ремап. Как это правельно сделать в IAR (использую 6.50.3)? Может где нить есть пример как это делать?
kan35
В workspace IAR создаете 2 проекта: загрузчик и рабочее приложение
загрузчик рамещаете линкером в нижней части flash, приложение - в верхней.
Соответственно и у той и у другой части будут свои вектора прерываний, ремап векторов делается 1 командой. Остальное - ваше творчество.
-SANYCH-
Цитата
Соответственно и у той и у другой части будут свои вектора прерываний, ремап векторов делается 1 командой.


А можно подробнее, какой именно, командой делается ремап?
_Артём_
Цитата(-SANYCH- @ Mar 21 2013, 23:07) *
А можно подробнее, какой именно, командой делается ремап?

Смотрите описание регистра SYSCFG_CFGR1.
Цитата
Bits 1:0 MEM_MODE[1:0]: Memory mapping selection bits
These bits are set and cleared by software. They control the memory internal mapping at
address 0x0000 0000. After reset these bits take on the memory mapping selected by BOOT0
pin and nBOOT1 option bit.
x0: Main Flash memory mapped at 0x0000 0000
01: System Flash memory mapped at 0x0000 0000
11: Embedded SRAM mapped at 0x0000 0000


Наверное как-то так (лучше без магических чисел бы, но лень без магии):
Код
SYSCFG_CFGR1 |= 3;

kan35
Пример смещения векоторов на 32к во флэше.
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0 + 0x8000);
_Артём_
Цитата(kan35 @ Mar 22 2013, 06:44) *
Пример смещения векоторов на 32к во флэше.
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0 + 0x8000);


stm32f0 вроде не Cortex-M0+. Так что NVIC_SetVectorTable не годится.
-SANYCH-
Цитата
stm32f0 вроде не Cortex-M0+. Так что NVIC_SetVectorTable не годится.


Цитата
To build such application, some special configuration has to be performed:
1. Set the application load address at 0x08003000, using your toolchain linker file
2. To be able to serve the application interrupts, you need to relocate the vector
table (which contains the interrupt handlers). However, unlike CortexM3 and CortexM4,
the CortexM0 processor do not support vector table relocation (it is fixed at
address 0x00000000).
A solution will be to relocate by software the vector table to the internal SRAM:
- Copy the vector table from the Flash (mapped at the base of the application load
address 0x08003000) to the base address of the SRAM at 0x20000000.
- Remap SRAM at address 0x00000000, using SYSCFG_MemoryRemapConfig() function
- Then once an interrupt occurs, the CortexM0 processor will fetch the interrupt
handler start address from the relocated vector table in SRAM, then it will
jump to execute the interrupt handler located in the Flash.
This operation should be done at the initialization phase of the application.


Разобрался с этим вопросом. На сайте ST нашел вот такой архив "stm32f0_programming_usart.zip". Там все очень хорошо описано.
Всем спасибо!

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.