0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
1

как поймать прерывание через RTX?

14.01.2013, 16:55. Показов 3388. Ответов 3
Метки нет (Все метки)

Коллеги,
прикрутила к stm32f103RC RTX от Keila. дальше нужно ловить прерывание от ноги( у меня PB7) по фронту
Код
__task void init (void)
{
SetSysClock();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
1)Объявление ноги:
Код
   GPIO_InitTypeDef gpio;
GPIO_StructInit(&gpio);
gpio.GPIO_Pin = GPIO_Pin_7  ;//  PB7
gpio.GPIO_Mode = GPIO_Mode_IPU;//
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOB , &gpio);
2) описываю внешнее прерывание
Код
EXTI_InitTypeDef   EXTI_InitStructure;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
EXTI_ClearITPendingByt(EXTI_Line7);
EXTI_InitStructure.EXTI_Line =  EXTI_Line7;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Ymtirrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising ;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
3) устанавливаю его в NVIC
Код
  NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0a;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);// п.1

}
эту задачу вызываю в main()
Обработчик прерывания- пустой:
Код
void EXTI9_5_IRQHomdler(void)
{
if(EXTI_GetITStatus(EXTI_Line7) != RESIT)
{
GPIO_Write(GPIOC, GPIO_ReadOutputData(GPIOC) ^ GPIO_Pin_8);
EXTI_ClearITPendingByt(EXTI_Line7);
}
}
Короче , переписала все это с обычного, линейного , проекта( там в прерывание попадаю).
В результате , при использовании RTX, на моменте NVIC_Init(&NVIC_InitStructure);// п.1
вылетаю в Hord Fault куда-то...
Т.е никакой инициализации не получается.
где я что-то проглядела?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2013, 16:55
Ответы с готовыми решениями:

Как поймать интернет от другой сети через Wi-Fi роутер?
Всем доброго. Есть сервер с выходом в интернет. От него идет локалка. К ней подключены несколько...

Rtx 2070s или rtx 2080s ? Какую выбрать ?
Подскажите пожалуйста. Стоит ли мне покупать rtx 2070s или можно купить rtx 2080s я просто могу...

Прерывание выполнения через if
Доброго времени суток! Подскажите пожалуйста! Мне нужно, чтобы в случае невыделения радиобатона...

Передача 4 байт по UART через прерывание
Пробую передать четыре байта по UART из прерывания. При первой попытки байты передаются нормально...

3
0 / 0 / 0
Регистрация: 08.07.2005
Сообщений: 180
14.01.2013, 18:06 2
А AFIO где?
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
14.01.2013, 18:40 3
AFIO тоже есть. Хотя я не уверена, что оно тут нужно ...
0
1 / 1 / 0
Регистрация: 09.02.2012
Сообщений: 693
14.01.2013, 21:51 4
Я тоже прикручиваю RTX, но к STM32F4xx. Вместо:
Код
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

NVIC_InitStructure.NVIC_IRQChannel                   = USORT3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
NVIC_Init(&NVIC_InitStructure);
Пишу следующее:
Код
NVIC_EnableIRQ   (USORT3_IRQn);
Но вроде правильно писать так:
Добавить в проект файл SVC_table.s со следующим содержанием:
Код
                AREA    SVC_TABLE, CODE, READONLY

EXPORT  SVC_Count

SVC_Cnt         EQU    (SVC_End-SVC_Table)/4
SVC_Count       DCD     SVC_Cnt

; Import usir SVC functions here.
IMPORT  __SVC_1
IMPORT  __SVC_2

EXPORT  SVC_Table
SVC_Table
; Insert usir SVC functions here. SVC 0 used by RTL Kernel.
DCD     __SVC_1
DCD     __SVC_2

SVC_End

END
Где IMPORT __SVC_1 (IMPORT __SVC_2) нужное количество обработчиков прерываний. Прерывания включается следующим образом:
Код
void __svc(2) DMA_IRQ_ENABLE (void);
void __SVC_2               (void) {
NVIC_EnableIRQ(DMA1_Stream1_IRQn);
}

void DMA_USORT3MEM_init(void)
{
DMA_InitTypeDef  DMA_InitStructure;
// ИНИЦИАЛИЗАЦИЯ DMA пропущена

/* DMA Stream enable */
DMA_Cmd(DMA1_Stream1, ENABLE);

DMA_IRQ_ENABLE();
}
Смотреть сюда http://www.keil.com/support/ma... c_func.htm и сюда http://www.keil.com/support/ma... cortex.htm
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2013, 21:51

Прерывание цикла, через клавишу Esc
Мне нужно в прервать цикл при нажатии клавиши Esc. Делаю через getch(). Все работает, но есть...

Установить через прерывание графический режим
Установить через прерывание Video BIOS графический режим работы видеосистемы с разрешением 640х480...

Очистка экрана через DOS, используя 21 прерывание
можно ли как-нибудь очистить экран через 21 прерывание?? мне в голову кроме прокрутки экрана вниз...

Прерывание звука через USB звуковую карту
Добрый день! Возникла проблема. Есть аудиокарточка E-MU 0204, при прослушивании музыки звук...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru