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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Не работают прерывания SAM4LS4A IAR 6.40, Не работают прерывания SAM4LS4A IAR 6.40
MackNill
сообщение Aug 2 2013, 08:24
Сообщение #1





Группа: Участник
Сообщений: 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++;
  }  
}




Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 2 2013, 19:59
Сообщение #2


Знающий
****

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



Исходники в архиве работать не способны в принципе. Приведённый код тоже мало о чём говорит. Скорее всего у вас не то что не работают прерывания, а код тупо не компилится. Начните с мигания светодиодом, потом прикрутите CMSIS (если он есть для этого камня). Потом уже можно будет пробовать запускать прерывания.
Go to the top of the page
 
+Quote Post
=F8=
сообщение Aug 3 2013, 08:13
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Каким образом, во втором примере iar "узнает", что void SysTick_Handler(void) это обработчик прерывания?
в первом примере
#pragma location = ".intvec"
extern "C" const intvec_elem __vector_table[] =
{
......
SystemTick::Handler//Указатель на обработчик SystemTick::Handler
};
в сегменте intvec размещается структура с указателями на обработчики, где что-то подобное во втором?
Go to the top of the page
 
+Quote Post
MackNill
сообщение Aug 4 2013, 18:13
Сообщение #4





Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
MackNill
сообщение Aug 5 2013, 10:00
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843



посмотрел disassembler. в начале кода стоит список констант с адресами обработчиков прерываний. В SysTick_Handler стоит адрес обработчика SysTick_Handler. В чем еще может быьб дело?
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 5 2013, 11:18
Сообщение #6


Знающий
****

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



Может быть системный таймер попросту не включен... А как вы вообще узнали, что прерывание не происходит?
Go to the top of the page
 
+Quote Post
MackNill
сообщение Aug 6 2013, 02:42
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843



Я его настраиваю. Это делается одной командой.
Да и я сначало писал проект на atmel studio 6.1 там все работало. При переносе не стали работать прерывания
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 6 2013, 04:51
Сообщение #8


Знающий
****

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



Кидайте уже проект целиком - посмотрим.

И уточните, как именно вы узнали, что прерывание не происходит.
Go to the top of the page
 
+Quote Post
MackNill
сообщение Aug 6 2013, 07:56
Сообщение #9





Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 6 2013, 10:22
Сообщение #10


Знающий
****

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



Я попросил скинуть проект целиком. В архиве по ссылке нет ни CMSIS, ни векторов прерываний, ничего.
Go to the top of the page
 
+Quote Post
MackNill
сообщение Aug 6 2013, 10:28
Сообщение #11





Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843



Цитата(andrewlekar @ Aug 6 2013, 16:22) *
Я попросил скинуть проект целиком. В архиве по ссылке нет ни CMSIS, ни векторов прерываний, ничего.

я написал что cmsis там не используется. Я перевел все на функции IAR. Проект должен рабюотать при наличии ИАР
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 6 2013, 10:42
Сообщение #12


Знающий
****

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



В том проекте, что вы скинули, используется несуществующий файл interrupt.s, нет галки для иара, чтобы он использовал CMSIS библиотеки. Добавьте к переменной i атрибут volatile. Инициализируйте UART и добавьте отладочную печать при старте программы и при входе в прерывание (возможно не работает отладчик). Если не заработает, то переделанный проект можете снова выложить для проверки.
Go to the top of the page
 
+Quote Post
MackNill
сообщение Aug 6 2013, 10:43
Сообщение #13





Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843



извиняюсь. Там в проекте нужно удалить прикрепеленный файл с разрешение *.i и interrupt.s .
Вектора прерываний описаны в sturtup_M.c, а SysTick_Config описана в core_cm4.h.
Вот ссылка на картинку где галка на использование CMSIS стоит ссылка

Сообщение отредактировал MackNill - Aug 6 2013, 10:47
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 6 2013, 10:48
Сообщение #14


Знающий
****

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



Я в курсе, я его уже собрал. Ещё раз прочитайте рекомендации. Камня для проверки у меня нет, а в симуляторе всё работает.
Go to the top of the page
 
+Quote Post
MackNill
сообщение Aug 6 2013, 10:54
Сообщение #15





Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843



Цитата(andrewlekar @ Aug 6 2013, 16:48) *
Я в курсе, я его уже собрал. Ещё раз прочитайте рекомендации. Камня для проверки у меня нет, а в симуляторе всё работает.

дак вот дело в том что у меня и в симуляторе не работает. Или как у вас в симуляторе работает?
Проект на С++ у меня работает, а мой на С нет.
И на камне так же не работает. Проверял другим проектомю Там было прерывание и по атймеру и по уарту, но ничего не работало.

Сообщение отредактировал MackNill - Aug 6 2013, 11:08
Go to the top of the page
 
+Quote Post

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

 


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


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