|
Не работают прерывания SAM4LS4A IAR 6.40, Не работают прерывания SAM4LS4A IAR 6.40 |
|
|
|
Aug 2 2013, 08:24
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
Никак не могу разобраться с прерываниями в IAR 6.40 ARM. Контроллер SAM4LS4A Скачал один проект с сайта иар. Прерывания в нем работают но он на С++ мне же надо на С. скидываю два проекта вот рабочий проект , вот нерабочий проектПомогите пож вот кода рабочего проекта Код #include <iostream> #include "device.h" #include <core_cm3.h>
using namespace std;
class SystemTick { public: static void Handler(); static volatile unsigned int ticks; };
volatile unsigned int SystemTick::ticks;
void SystemTick::Handler() { SystemTick::ticks++; }
int main() { //cout << "Hello C++ world\n"; // Enable SysTick interrupt using CMSIS function SysTick_Config(100); while (1) {} } вот код нерабочего Код //#define SAM4L #include "atmel/iosam4l.h" #include "core_cm4.h" //#include "serial\serial.h" unsigned int i;
void SysTick_Handler(void) { i--; }
void main() { SysTick_Config(100); while (1) { i++; } }
|
|
|
|
|
Aug 4 2013, 18:13
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
Цитата Исходники в архиве работать не способны в принципе. Приведённый код тоже мало о чём говорит. Скорее всего у вас не то что не работают прерывания, а код тупо не компилится. Начните с мигания светодиодом, потом прикрутите CMSIS (если он есть для этого камня). Потом уже можно будет пробовать запускать прерывания. , Проект работает, свитодиоами мигал. У меня есть проект который я настраивал на атмел студио 6.1. Я перенес его на иар 6.4 и там все работало кроме прерываний. Нерабочий проект поидее работать и не должен. ибо он использует CMSIS, который я не включил в проект. Рабочий проект я скачал с сайта иар. Цитата Каким образом, во втором примере iar "узнает", что void SysTick_Handler(void) это обработчик прерывания? в первом примере в сегменте intvec размещается структура с указателями на обработчики, где что-то подобное во втором? В каком то h файле описаны все названия функций прерывания. Название взято оттуда. Далее. При вызывания прерывания в режиме симулятора, программа заходит в обработчик. Поэтому считаю описание прерывания правильным. Да и если бы прерывание было не описано, то при отладке программа уходила бы в заглушку Dummy_handler(), чего как раз не происходит. Судя по всему прерывание в принципе не включено. Но где оно включается и как его включить я не знаю. И честно говоря думаю над этим уже неделю. В IAR до этого работал с контроллерами фирмы EFM32 cortexM3, таких проблем не возникало. Сейчас Cortexm4
|
|
|
|
|
Aug 5 2013, 10:00
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
посмотрел disassembler. в начале кода стоит список констант с адресами обработчиков прерываний. В SysTick_Handler стоит адрес обработчика SysTick_Handler. В чем еще может быьб дело?
|
|
|
|
|
Aug 6 2013, 02:42
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
Я его настраиваю. Это делается одной командой. Да и я сначало писал проект на atmel studio 6.1 там все работало. При переносе не стали работать прерывания
|
|
|
|
|
Aug 6 2013, 07:56
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
Цитата(andrewlekar @ Aug 6 2013, 10:51)  Кидайте уже проект целиком - посмотрим. использую IAR ARM 6.4 Вот ссылка на рабочий проект на языке С++. Вот ссылка на нерабочий проект на языке С. Проекты написаны с использованием внутренних библиотек ИАР. Цитата(andrewlekar @ Aug 6 2013, 10:51)  И уточните, как именно вы узнали, что прерывание не происходит. Я поставил внутри обработчика прерываний брейкпоинт. Программа в прерывании не останавливается. Далее при закомментированном прерывании поидее программа должна уходить к Dummy_handler(), так как при вызове прерывании и при отсутствии обработчика программа по идее должна уходит в заглушку(Dummy_handler). Потом в режиме Emulator я программно имитировал прерывание(функция ИАР), и программа благополучно зашла в прерывание и остановилась на поставленном там брейкпоинте.
Сообщение отредактировал MackNill - Aug 6 2013, 08:00
|
|
|
|
|
Aug 6 2013, 10:28
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
Цитата(andrewlekar @ Aug 6 2013, 16:22)  Я попросил скинуть проект целиком. В архиве по ссылке нет ни CMSIS, ни векторов прерываний, ничего. я написал что cmsis там не используется. Я перевел все на функции IAR. Проект должен рабюотать при наличии ИАР
|
|
|
|
|
Aug 6 2013, 10:43
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
извиняюсь. Там в проекте нужно удалить прикрепеленный файл с разрешение *.i и interrupt.s . Вектора прерываний описаны в sturtup_M.c, а SysTick_Config описана в core_cm4.h. Вот ссылка на картинку где галка на использование CMSIS стоит ссылка
Сообщение отредактировал MackNill - Aug 6 2013, 10:47
|
|
|
|
|
Aug 6 2013, 10:54
|
Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843

|
Цитата(andrewlekar @ Aug 6 2013, 16:48)  Я в курсе, я его уже собрал. Ещё раз прочитайте рекомендации. Камня для проверки у меня нет, а в симуляторе всё работает. дак вот дело в том что у меня и в симуляторе не работает. Или как у вас в симуляторе работает? Проект на С++ у меня работает, а мой на С нет. И на камне так же не работает. Проверял другим проектомю Там было прерывание и по атймеру и по уарту, но ничего не работало.
Сообщение отредактировал MackNill - Aug 6 2013, 11:08
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|