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

 
 
 
Reply to this topicStart new topic
> STM32F100RBT6B +iar+обработчик прерываний, Как его написать???
Kalyan
сообщение Jan 18 2012, 22:55
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 4-11-10
Пользователь №: 60 656



Добрый вечер! Использую iar for arm играюсь с отладочной платой STM32VLDISCOVERY. Не знаю как написать обработчик прерываний. Я не использую ни каких там библиотек периферии и прочих наворотов. Подключил iostm32f100xB.h и пишу себе. Хочу использовать внешнее прерывание от int0. В файле iostm32f100xB.h нашел номер вектора
#define NVIC_EXTI0 22 /* EXTI Line0 interrupt.
Обработчик пытался написать во так:
#pragma vector=NVIC_EXTI0
__interrupt void event_ (void)
{}
Не работает.
Подскажите кто знает...
Go to the top of the page
 
+Quote Post
vovanse
сообщение Jan 18 2012, 23:39
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 14-02-06
Из: Кемерово
Пользователь №: 14 293



Как-то так...

int main()
{
SCB->VTOR = FLASH_BASE;
NVIC_EnableIRQ (EXTI0_IRQn);
__enable_irq ();
....
....
....
return 0;
}

__irq void EXTI0_IRQHandler(void)
{
....
....
....
}
Go to the top of the page
 
+Quote Post
Danis
сообщение Jan 19 2012, 06:34
Сообщение #3


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(Kalyan @ Jan 19 2012, 02:55) *
Не знаю как написать обработчик прерываний. Я не использую ни каких там библиотек периферии и прочих наворотов. Подключил iostm32f100xB.h и пишу себе. Хочу использовать внешнее прерывание от int0.
......
Подскажите кто знает...


Все-таки, ИМХО, для начала откройте и откомпилируйте готовые проекты. Наберетесь опыта, там уж свое напишите. Ну, если сами решите c 0-ля все писать, не забудьте подключить (написать свой) startup_stm32f10x(asm). Этой файл находится в
X:\Program Files\IAR Systems\Embedded Workbench6.xx\arm\examples\ST\STM32F10x\STM32-Eval\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
Kalyan
сообщение Jan 19 2012, 21:03
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 4-11-10
Пользователь №: 60 656



Что делает SCB->VTOR = FLASH_BASE;?
NVIC_EnableIRQ (EXTI0_IRQn)- это с какой библиотеки: CMSIS или STM32 Peripheral Library ?
Заметил еще такую особенность: флаг прерывания генерируется в регистре EXTI_PR и без глобального разрешения прерываний(__enable_irq ()). Это нормально?
vovanse, использовал ваш вариант обработчика:
__irq void EXTI0_IRQHandler(void) - программа не заходит в него!
Go to the top of the page
 
+Quote Post
Kalyan
сообщение Jan 21 2012, 21:55
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 4-11-10
Пользователь №: 60 656



Ну не работает и все! Подскажите в чем дело!
Уже использую библиотеку CMSIS.
Вот код:

#include <stm32f10x.h>

int main()
{
RCC->APB2ENR|=(RCC_APB2ENR_IOPCEN|RCC_APB2ENR_IOPAEN); //подали тактирование на порт А и С

GPIOC->CRH|=(GPIO_CRH_MODE8_1|GPIO_CRH_MODE9_1); //настроил РС9, РС8 как выводы с ограниченой скоростью 2МГц
GPIOC->CRH&=~(GPIO_CRH_MODE8_0|GPIO_CRH_MODE9_0|GPIO_CRH_CNF9|GPIO_CRH_CNF8);

GPIOA->CRL&=~(GPIO_CRL_MODE0|GPIO_CRL_CNF0_1); //настроил А0 как плавающий вход
GPIOA->CRL|=GPIO_CRL_CNF0_0;

RCC->APB2ENR|=RCC_APB2ENR_AFIOEN; //включили тактирование альтернативных функций

AFIO->EXTICR[0]&=~AFIO_EXTICR1_EXTI0_PA; //EXTI0 на порт А

EXTI->IMR|=EXTI_IMR_MR0; //На нулевой ножке
EXTI->RTSR|=EXTI_RTSR_TR0; //по фронту

NVIC_EnableIRQ (EXTI0_IRQn); //включить прерывание

__enable_irq(); //глобально разрешить прерывания

while(1)
{
//полезные действия
}
}

void EXTI0_IRQHandler(void)
{
flag^=1;
EXTI->PR|=EXTI_PR_PR0 ; //очистить флаг прерывания
}

Обработчик прерывания находится в main.c.
При нажатии на кнопку программа зависает. Если посмотреть в дизасемблер то прога постоянно крутится в таких метках
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jan 22 2012, 17:21
Сообщение #6


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Kalyan @ Jan 22 2012, 04:55) *
При нажатии на кнопку программа зависает. Если посмотреть в дизасемблер то прога постоянно крутится в таких метках

Линкер не нашел вашего обработчика прерываний, остался дефолтный из ассемблерного файла.
http://electronix.ru/forum/index.php?showt...st&p=997644


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
electrmen
сообщение Feb 5 2012, 07:13
Сообщение #7





Группа: Новичок
Сообщений: 6
Регистрация: 1-02-12
Пользователь №: 70 027



Цитата
Линкер не нашел вашего обработчика прерываний, остался дефолтный из ассемблерного файла.

Возможно вы не все файлы подключили к проекту. Такое бывает )). Почитайте http://be-em.ru
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 7 2012, 17:46
Сообщение #8


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Kalyan @ Jan 21 2012, 21:55) *
Ну не работает и все! Подскажите в чем дело!
#include <stm32f10x.h>
При нажатии на кнопку программа зависает

Видимо вы используете стартап файл типа stm32f10x.s. Там по директиве EXPORT подключается обработчик по умолчанию с ловушкой, если не указан никакой другой обработчик (так устроена директива EXPORT). Поставьте обработчик в самом начале файла, а main - в конце, должно помочь.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 7 2012, 17:55
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



А в конце может выясниться, что у автора в настройках стоит "компилить в режиме С++" и линкер не видит обработчика из-за того, что он описан без extern "C".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th June 2024 - 03:10
Рейтинг@Mail.ru


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