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

 
 
> Прерывания Cortex-M3, HardFault_Handler
rat
сообщение Mar 15 2012, 07:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 497
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852



Пробую прерывания в EFM32TG210. Пакет IAR 6.3 Код настройки:

//_______*** RTC ***_______

/* Enable RTC clock */
CMU->LFACLKEN0 |= CMU_LFACLKEN0_RTC;

RTC->IEN |= RTC_IEN_COMP0;

RTC->CTRL = RTC_CTRL_COMP0TOP | RTC_CTRL_DEBUGRUN;

RTC->COMP0 = 0x10000;

RTC->IFC = RTC_IFC_COMP0;

NVIC_EnableIRQ(RTC_IRQn);

RTC->CTRL |= RTC_CTRL_EN;

Хандлер:

void RTC_IRQHandler(void);
{
int current_time, next_time;

RTC->IFC = RTC_IFC_COMP0;

RTC->COMP0 = 0x10000;

GPIO->P[1].DOUT = (( 1<< 13) & (~(GPIO->P[1].DOUT)));
}

В дебугере вхожу в хандлер по шагам F11, процесс "зависает" - вернее начинает бежать не по шагам, как будто F5 нажал, когда останавливаешь, то в дизассемблере всякие BusFault_Handler, DebugMon_Handler, HardFault_Handler и т.д. Я прерывания не так настраиваю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Mareng
сообщение Mar 15 2012, 07:46
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-02-07
Пользователь №: 25 487



; для начала убрать надо
Go to the top of the page
 
+Quote Post
rat
сообщение Mar 15 2012, 07:54
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 497
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852



Цитата(Mareng @ Mar 15 2012, 14:46) *
; для начала убрать надо


При попытке убрать ; появляется Error[Pe065]: expected a ";"

Цитата(rat @ Mar 15 2012, 14:49) *
При попытке убрать ; появляется Error[Pe065]: expected a ";"

Поправил. Ошибка ; исчезла, но попрежнему HardFault_Handler при попытке войти в прерывание
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 15 2012, 07:56
Сообщение #4


Гуру
******

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



QUOTE (rat @ Mar 15 2012, 09:49) *
При попытке убрать ; появляется Error[Pe065]: expected a ";"
Значит ошибка где-то чуть раньше, вероятно в конце предыдущей функции забыли "}". Ибо с ";" это не функция обрабочика прерывания, а объявление функции и не связанный с ним кусок кода.


--------------------
На любой вопрос даю любой ответ
"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
rat
сообщение Mar 15 2012, 08:16
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 497
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852



Цитата(Сергей Борщ @ Mar 15 2012, 14:56) *
Значит ошибка где-то чуть раньше, вероятно в конце предыдущей функции забыли "}". Ибо с ";" это не функция обрабочика прерывания, а объявление функции и не связанный с ним кусок кода.

Это да, поправил. В дизассемблере ошибка выглядит так: сразу после выполнения RTC->CTRL |= RTC_CTRL_EN; следует POP R4, PC вот после этого шага и происходит трабл, загорается "красная рука" (как при F5) и при остановке перечисляется куча фаультных хандлеров.

Цитата(Mareng @ Mar 15 2012, 15:03) *
Теперь осталось выяснить адрес какой функции записан в векторе обработчика RTC. Обычно это в startup*.s написано


В startup_EFM32tg.s написано:

PUBWEAK RTC_IRQHandler
SECTION .text:CODE:REORDER(1)
RTC_IRQHandler
B RTC_IRQHandler
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 15 2012, 08:39
Сообщение #6


Гуру
******

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



QUOTE (rat @ Mar 15 2012, 10:16) *
сразу после выполнения RTC->CTRL |= RTC_CTRL_EN; следует POP R4, PC
Это возврат из функции. Куда именно оно должно вернуться? Стек настроен? Что лежит в первых восьми байтах стека перед выполнением этой команды? Там правильный адрес возврата, его никто не затирает? Или это у вас конец main(), в котором вы забыли сделать бесконечный цикл?


--------------------
На любой вопрос даю любой ответ
"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
rat
сообщение Mar 15 2012, 09:12
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 497
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852



Цитата(Сергей Борщ @ Mar 15 2012, 15:39) *
Это возврат из функции. Куда именно оно должно вернуться? Стек настроен? Что лежит в первых восьми байтах стека перед выполнением этой команды? Там правильный адрес возврата, его никто не затирает? Или это у вас конец main(), в котором вы забыли сделать бесконечный цикл?

Возврат из функции POP R4, PC при этом в R4 лежит 37E, т.е. должен произойти возврат на адрес 0х37E? Должно вернуться в следующую функцию, но она начинается по адресу 0х384. А по адресам 0х344-0х380 лежит DataTable. В этом дело?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- rat   Прерывания Cortex-M3   Mar 15 2012, 07:12
- - Mareng   Цитата(rat @ Mar 15 2012, 14:12) void RTC...   Mar 15 2012, 07:28
|- - rat   Цитата(Mareng @ Mar 15 2012, 14:28) Навер...   Mar 15 2012, 07:44
||- - rat   Вопрос разрешился. Не был подключен файл startup_e...   Mar 15 2012, 10:37
|- - Mareng   Цитата(rat @ Mar 15 2012, 14:54) Поправил...   Mar 15 2012, 08:03
- - Mareng   Можно посмотреть в пдф-е на проц точный адрес вект...   Mar 15 2012, 08:22
- - batisto4ka   Помогите разобраться с приоритетами прерываний. У ...   Mar 19 2012, 08:00
- - batisto4ka   Явно что-то с вайлом. Первыйй АЦП общается с контр...   Mar 19 2012, 10:36
- - Aaron   Если хардварный SPI виснет на ожидании SPI_SR_RXNE...   Mar 19 2012, 12:18
- - batisto4ka   Да, только при работе с АЦП. Еще есть один вопрос,...   Mar 19 2012, 13:42
- - Aaron   Конечно, организовать можно по-разному, и смешать ...   Mar 20 2012, 07:10
- - batisto4ka   CODEvoid EXTI1_IRQHandler(void) { static uint8_t ...   Mar 20 2012, 08:40
- - Aaron   Дак судя по коду вообще получается, что у вас пери...   Mar 20 2012, 09:22
- - batisto4ka   ну это не весь код естесственно, это сами обработч...   Mar 20 2012, 11:30
- - Aaron   я это понимаю. но из кода функций WriteSPI и ADC_D...   Mar 20 2012, 12:52
- - batisto4ka   они не зависают,а подвисают..если сделать функцию ...   Mar 20 2012, 13:08
- - ohmjke   Здравствуйте. Есть такой код: CODE#define STM32F10...   Apr 1 2012, 15:38
- - ohmjke   Решил проблему, мой косяк был. Надо было делать не...   Apr 2 2012, 13:44
- - lead_seller   to batisto4ka: 1. По зависанию SPI в цикле ожидан...   Apr 3 2012, 17:44


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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 03:59
Рейтинг@Mail.ru


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