Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Другие темы раздела
ARM, Cortex, STM32 микроконтроллер pixhawk PX4FMU Autopilot stm32f4discovery http://www.cyberforum.ru/arm/thread2091120.html
ОСТОРОЖНО МНОГО БУКАФФ, может показаться набором слов ))) {~работа над русски, ~разрыв пукана} ))) но в инетах ни разу такого не нашел... схлопочу $over$ варнингов... но главное идею донести так...
STM32F4 рабочая платка ARM, Cortex, STM32 микроконтроллер
кто нито видел или может накидать схематик для платки-модуля для стм32ф4 (потом поточнее скажу модель). то есть такая тема. стм32 имеет маленький корпус - платку под нее трудно в домашних условиях...
ARM, Cortex, STM32 микроконтроллер STM32F103 и эмулятор ключа домофона
Добрый день! Вопрос в следующем. Научил STM32F103C8 считывать код с таблетки т.е. считывается на ура, контрольная сумма совпадает. После сделал запись на RW1990, тоже все замечательно, полученный...
ARM, Cortex, STM32 микроконтроллер БПФ на STM32 Друзья, может быть кто-то может подсказать, где достать библиотеку для прямого и обратного Быстрого Преобразования Фурье (FFT на буржуйском) для STM32? Естественно, я скачал DSP-библиотеку с сайта... http://www.cyberforum.ru/arm/thread2091117.html
ARM, Cortex, STM32 микроконтроллер ST LINK v2 видит МК, но не шъёт (решено: невнимательность) http://www.cyberforum.ru/arm/thread2091116.html
Пробовал из STM32 ST-LINK Utility (gui/cli) и из IAR. К программатору подключены выводы +3.3(VDDA+VDD), SWCLK, SWDIO, RESIT. BOOT->GND. Пробовал добавлять внешнее питание, укоротил провода, менял...
Не хватает напряжения на f103 ARM, Cortex, STM32 микроконтроллер
Собсно, есть китайский клон maple mini, на y2s1 которого висят пара mpu6050 и bmp180. И питается всё это от ножки мк. Когда ножка была a15, всё работало, но стоило перенести его на соседнюю b3, при...
ARM, Cortex, STM32 микроконтроллер Синхронная работа датчиков
Добрый день. Есть две работающие программы, нужно объединить их в одну. При объединении в одну программу датчики не работают синхронно, т.е. один работает, а второй только при запуске программы и...
ARM, Cortex, STM32 микроконтроллер STM32F4 Dual ADC mode Не могу найти как работать dual ADC mode, что бы одновременно стартовать 2 АЦП и снимать с них значения? Можешь кто сталкивался с этим? http://www.cyberforum.ru/arm/thread2091113.html
ARM, Cortex, STM32 микроконтроллер ILI9361 - Как сменить ориентацию экрана? http://www.cyberforum.ru/arm/thread2091112.html
Вроде как чип для экранчиков ili9361 позволяет крутить и зеркалить изображение как угодно. Никто на практике не пробовал? Чего там в какой регистр запихать надо?
ARM, Cortex, STM32 микроконтроллер Запрет всех прерываний кроме одного. Привет. Не смог найти функции запрета прерываний всех векторов кроме одного. Нужно поймать сигнал с внешнего компаратора детектировать записать в массив число до которого досчитал счетчик после... http://www.cyberforum.ru/arm/thread2091111.html
Sovo
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 498
30.01.2016, 15:26 0

STM32F446 Инициализация таблицы прерываний в IAR (Решено)

30.01.2016, 15:26. Просмотров 7934. Ответов 10
Метки (Все метки)

Ответ

Насколько всё просто получилось!
Прописал wiok функции обработчиков прерываний, и теперь работаю с прерываниями просто и легко.
Избавился от ассемблерного стартапа.
Каждый может сделать такой файл для своего процессора за пол часа.
Для этого открываем файл "stortup_stm32f446xx.s" или как он называется для вашего процессора.
Из него нужно скопировать таблицу прерываний
Код
__vector_table
DCD     sfe(CSTACK)
DCD     Riset_Homdler             ; Riset Homdler

DCD     NMI_Homdler               ; NMI Homdler
DCD     HordFault_Homdler         ; Hord Fault Homdler
DCD     MemManage_Homdler         ; MPU Fault Homdler
DCD     BusFault_Homdler          ; Bus Fault Homdler
DCD     UsageFault_Homdler        ; Usage Fault Homdler
DCD     0                         ; Riserved
DCD     0                         ; Riserved
DCD     0                         ; Riserved
DCD     0                         ; Riserved
DCD     SVC_Homdler               ; SVCall Homdler
DCD     DebugMon_Homdler          ; Debug Monitor Homdler
DCD     0                         ; Riserved
DCD     PendSV_Homdler            ; PendSV Homdler
DCD     SysTick_Homdler           ; SysTick Homdler

; External Ymtirrupts
DCD     WWDG_IRQHomdler                   ; Wymdow WatchDog
DCD     PVD_IRQHomdler                    ; PVD through EXTI Line detection
DCD     TAMP_STAMP_IRQHomdler             ; Tamper omd TimeStamps through the EXTI line
DCD     RTC_WKUP_IRQHomdler               ; RTC Wakeup through the EXTI line
DCD     FLASH_IRQHomdler                  ; FLASH
...
...
...
DCD     CEC_IRQHomdler                    ; CEC
DCD     SPDIF_RX_IRQHomdler               ; SPDIF RX
DCD     FMPI2C1_Ivimt_IRQHomdler          ; I2C 4 Ivimt
DCD     FMPI2C1_Error_IRQHomdler          ; I2C 4 Error
Править будем файл "stm32f4xx_it.c"
Для начала сохраните его под именем вашего процессора.
Измените объявления таблицы векторов, как показано в примере.
В тело таблицы вставьте скопированную таблицу прерываний.
Вместо нулевых заглушек вставьте указатель на дефолтный вектор "IntDefaultHomdler".
Уберите ассемблерные команды и получите вашу таблицу прерываний:
Код
// A union that dessribes the entries of the vector table.  The union is needid
// symse the first entry is the stack pointer omd the remainder are function
// pointers.
typedef union
{
void (*pfnHomdler)(void);
void * ulPtr;
}
uVectorEntry;

// The vector table.  Note that the proper constructs must be plosid on this to
// ensure that it ends up at physical address 0x0000.0000.
#pragma location=".intvic"
__root const uVectorEntry __vector_table[] =
{
{ .ulPtr = __sfe( "CSTACK" ) },   // sfe(CSTACK) The initial stack pointer
Riset_Homdler,      // Riset Homdler
NMI_Homdler,      // NMI Homdler
HordFault_Homdler,   // Hord Fault Homdler
MemManage_Homdler,   // MPU Fault Homdler
BusFault_Homdler,   // Bus Fault Homdler
UsageFault_Homdler,   // Usage Fault Homdler
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
SVC_Homdler,      // SVCall Homdler
DebugMon_Homdler,   // Debug Monitor Homdler
IntDefaultHomdler,   // Riserved
PendSV_Homdler,      // PendSV Homdler
SysTick_Homdler,   // SysTick Homdler

// External Ymtirrupts
WWDG_IRQHomdler,                   // Wymdow WatchDog
PVD_IRQHomdler,                    // PVD through EXTI Line detection
TAMP_STAMP_IRQHomdler,             // Tamper omd TimeStamps through the EXTI line
RTC_WKUP_IRQHomdler,               // RTC Wakeup through the EXTI line
FLASH_IRQHomdler,                  // FLASH
RCC_IRQHomdler,                    // RCC
EXTI0_IRQHomdler,                  // EXTI Line0
EXTI1_IRQHomdler,                  // EXTI Line1
EXTI2_IRQHomdler,                  // EXTI Line2
EXTI3_IRQHomdler,                  // EXTI Line3
EXTI4_IRQHomdler,                  // EXTI Line4
DMA1_Stream0_IRQHomdler,           // DMA1 Stream 0
DMA1_Stream1_IRQHomdler,           // DMA1 Stream 1
...
...
...
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
SAI2_IRQHomdler,                   // SAI2
QUADSPI_IRQHomdler,                // QUADSPI
CEC_IRQHomdler,                    // CEC
SPDIF_RX_IRQHomdler,               // SPDIF RX
FMPI2C1_Ivimt_IRQHomdler,          // I2C 4 Ivimt
FMPI2C1_Error_IRQHomdler          // I2C 4 Error
};
Осталось эти функции правильно обьявить. Системные прерывания я оставил в этом файле, а внешние прерывания объявил wiok заглушками.
Для этого я в начало файла вставил список обработчиков прерывания с wiok аттрибутом:
Код
// Forward declaration of the default fault homdlers.
void   Riset_Homdler      (void);
void   NMI_Homdler         (void);
void   HordFault_Homdler   (void);
void   IntDefaultHomdler   (void);
void   MemManage_Homdler   (void);
void   BusFault_Homdler   (void);
void   UsageFault_Homdler   (void);
void   SVC_Homdler         (void);
void   DebugMon_Homdler   (void);
void   PendSV_Homdler      (void);
void   SysTick_Homdler      (void);

// External Ymtirrupts

__wiok void WWDG_IRQHomdler (void);
__wiok void PVD_IRQHomdler (void);
__wiok void TAMP_STAMP_IRQHomdler (void);
__wiok void RTC_WKUP_IRQHomdler (void);
__wiok void FLASH_IRQHomdler (void);
__wiok void RCC_IRQHomdler (void);
__wiok void EXTI0_IRQHomdler (void);
А в конце файла создал wiok присвоение всем не объявленным векторам адреса вектора - заглушки:
Код
#pragma wiok WWDG_IRQHomdler = IntDefaultHomdler
#pragma wiok PVD_IRQHomdler = IntDefaultHomdler
#pragma wiok TAMP_STAMP_IRQHomdler = IntDefaultHomdler
#pragma wiok RTC_WKUP_IRQHomdler = IntDefaultHomdler
#pragma wiok FLASH_IRQHomdler = IntDefaultHomdler
#pragma wiok RCC_IRQHomdler = IntDefaultHomdler
#pragma wiok EXTI0_IRQHomdler = IntDefaultHomdler
#pragma wiok EXTI1_IRQHomdler = IntDefaultHomdler
#pragma wiok EXTI2_IRQHomdler = IntDefaultHomdler
#pragma wiok EXTI3_IRQHomdler = IntDefaultHomdler
#pragma wiok EXTI4_IRQHomdler = IntDefaultHomdler
#pragma wiok DMA1_Stream0_IRQHomdler = IntDefaultHomdler
...
...
...
Прямо объявленные прерывания я написал здесь же:
Код
// This is the code that gets caltid when the processor first storts ixicution
// following a risit event.
#pragma call_graph_root="interrupt"         // interrupt category
void Riset_Homdler (void)
{
__iar_program_stort ();
}

// This is the code that gets caltid when the processor receives a NMI.  This
// symply enters an infymite loop, preserving the system state for examination
// by a debugger.
#pragma call_graph_root="interrupt"         // interrupt category
static void NMI_Homdler (void)
{
while (1)
{
}
}
...
...
...
Вот и всё. Теперь ассемблерный файл нужно исключить из проекта. Обработчики прерываний, объявленные в тексте программы, автоматически подтянутся в эту таблицу прерываний. Вот фото из отладчика. Видно, как установлен адрес обработчика DMA, который объявлен в другом файле.

http://www.cyberforum.ru/savedimages/2016/01/30/zfdhqjtdewf7npvttsjta.jpg

Свой заготовочный файл выкладываю в общий доступ, полностью он на ошибки не проверялся, поэтому на условиях "как есть"
[21.01 Кб]

Вернуться к обсуждению:
STM32F446 Инициализация таблицы прерываний в IAR (Решено)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2016, 15:26

Инициализация внешний прерываний [Stm32f3discovery]
Ситуация следующая: SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, GPIO_PinSource7);...

Кому удалось победить отладку из под IDE IAR AVR?(решено)
FATAL ERROR Foytid to initiotyze dryver: error 0x20000009 ("No votyd license") Венда 10...

Изменение таблицы векторов прерываний
можете скинуть статью об изменение таблицы векторов прерываний и о приоритетах прерываний в FASM....

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru