Приветствую всех! Освоил использование GPIO, поработал с дисплеем, попробовал также слёту, не разбираясь, использовать внешние прерывания.
Настроил прерывания и NVIC, написал два обработчика EXTI 3,4. При нажатии кнопки контроллер зависает.
Знаю, что таблица векторов прерываний лежит в файле
startup_stm32f10x_md_vl.sЕго, и файлы
system_stm32f10x.h,
system_stm32f10x.c и
stm32f10x.h взял с сайта ST, CMSIS встроена в IAR.
В стартап файле такие строки:
Код
PUBWEAK EXTI3_IRQHandler
SECTION .text:CODE:REORDER(1)
EXTI3_IRQHandler
B EXTI3_IRQHandler
Похоже на зацикливание.
Вопросы:
1) Как заменить эту петлю на мой обработчик?
2) Наверное, нужно как-то правильно подключить стартап файлы .c и .s, причём без прерываний всё и без них работало, а там строки
Код
EXTERN __iar_program_start
EXTERN SystemInit
PUBLIC __vector_table
и
DCD sfe(CSTACK)
DCD Reset_Handler
без этого работать программа не должна? IAR вместо моих стартап-файлов пихает что-то по умолчанию?
3) Где вызывается SystemInit? Что еще происходит до входа в main?
4) Где-то читал про то, что вроде обработчик прерывания нужно объявлять extern "C", точно не помню, поясните суть в конкретном случае и в общем.
5) Что бы такое почитать по ассемблеру для M3, препроцессору IAR и по теме вопросов, желательно кратко – пока хочу делать простые вещи без углубления в ядро, читать The Definitive Guide to the ARM® Cortex-M3 и Cortex-M3 Technical Reference Manual думаю пока рановато и нерационально. С английским дружу. Раньше писал на асме под авр.
Архив с проектом
Сообщение отредактировал tulupov.kv - Oct 30 2014, 17:02