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

 
 
> keil и прерывания для AT91SAM7S256
LoLo
сообщение Apr 13 2011, 16:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Здравствуйте всем кто работал с камнем AT91SAM7S256 на симуляторе Keil uVision3.
У меня следующая проблема:
инициализирую прерывание интервального таймера PIT, вектора записал куда нужно, всё нормально. Прерывание вызывается, симулятор заходит в программу обработки, сбраcывается флаг вызова прерывания после того как я одноимённый регистр прочитал. Симулятор выходит из подпрограммы прерывания на то же место откуда на подпрограмму обработки прерывания вышел всё нормально, всё как надо, но интересное потом:
через несколько тактов программа становится опять на то же место, куда попала из обработки прерывания и так до бесконечности... проходит несколько тактов и опять обратно "прыгает"...
В чём дело? Подскажите или лучше пример скинте формирования прерываний на адрес: shuriklo@rambler.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 14)
aaarrr
сообщение Apr 13 2011, 16:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Наверное используете модификатор __irq для обработчика совместно с патентованным атмеловским стартапом.
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 13 2011, 16:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(aaarrr @ Apr 13 2011, 20:38) *
Наверное используете модификатор __irq для обработчика совместно с патентованным атмеловским стартапом.


Стартап атмеловский-да. __irq вроде нету.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 13 2011, 17:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Тогда покажите ваш обработчик и то, что в стартапе. И где зацикливается тоже.
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 13 2011, 17:14
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(aaarrr @ Apr 13 2011, 21:05) *
Тогда покажите ваш обработчик и то, что в стартапе. И где зацикливается тоже.


Вот собственно весь проект. Как только все скомпилируется нада в дебагере установть пин PIOA22 в 1 и проследить по шагам. Зацикливается в функции static void PioInterruptHandler(unsigned int id, AT91S_PIO *pPio)
А стартап в приложенном проекте: SAM7.s

Здесь прерывание от ножки контроллера, не от таймера

Сообщение отредактировал LoLo - Apr 13 2011, 17:17
Прикрепленные файлы
Прикрепленный файл  Hello.rar ( 376.31 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 13 2011, 17:43
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Стартап у вас кейловский, остальная требуха атмеловская. Вместе они работать не будут. Или же к "static void InterruptHandler(void)" надо добавить модификатор __irq.
Но лучше всю эту маразматическую атмеловскую "библиотечную" писанину выкинуть.
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 13 2011, 17:48
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(aaarrr @ Apr 13 2011, 21:43) *
Стартап у вас кейловский, остальная требуха атмеловская. Вместе они работать не будут. Или же к "static void InterruptHandler(void)" надо добавить модификатор __irq.
Но лучше всю эту маразматическую атмеловскую "библиотечную" писанину выкинуть.


А где взять атмеловский стартап?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 13 2011, 17:54
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(LoLo @ Apr 13 2011, 21:48) *
А где взять атмеловский стартап?

У атмела, вестимо, среди всяких "GettingStarted..."
Но не советую, очень не советую. Все это образцы дурнейшего перегруженного индусского стиля.
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 13 2011, 17:56
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(aaarrr @ Apr 13 2011, 21:54) *
У атмела, вестимо, среди всяких "GettingStarted..."
Но не советую, очень не советую. Все это образцы дурнейшего перегруженного индусского стиля.


А какой тогда лучше? Кейловский?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 13 2011, 18:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(LoLo @ Apr 13 2011, 21:56) *
А какой тогда лучше? Кейловский?

Лучше всего свой собственный. Но если сравнивать эти два, то лучше кейловский.
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 13 2011, 18:07
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(aaarrr @ Apr 13 2011, 22:03) *
Лучше всего свой собственный. Но если сравнивать эти два, то лучше кейловский.


А как добавить модификатор __irq к "static void InterruptHandler(void)"?
Что получится?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 13 2011, 18:16
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



static __irq void InterruptHandler(void)
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 13 2011, 18:18
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(aaarrr @ Apr 13 2011, 22:16) *
static __irq void InterruptHandler(void)


Огромное спасибо!!!
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 14 2011, 06:10
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(LoLo @ Apr 13 2011, 22:18) *
Огромное спасибо!!!


Добавил в тот же проект инициализацию USART и теперь при запуске Debuggera в Keil вообще все зацикливается сразу!
Прикрепленные файлы
Прикрепленный файл  Project.rar ( 469.35 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 14 2011, 15:08
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(LoLo @ Apr 14 2011, 10:10) *
Добавил в тот же проект инициализацию USART и теперь при запуске Debuggera в Keil вообще все зацикливается сразу!

Где зацикливается-то? Вы поймите правильно, Keil'а под рукой у меня нет, а проект представляет собой безумное нагромождение оберток, разобраться в котором глазами почти невозможно.
Чтобы просто начать работать с UART'ом нужно сочинить всего-то навсего пару десятков строчек:
CODE

#define MCK 48000000
#define UART0_BAUDRATE 115200
#define RXD0 (1UL << 5)
#define TXD0 (1UL << 6)

void uart0_ini(void)
{
AT91C_BASE_SYS->PIOA_PDR = RXD0 | TXD0;
AT91C_BASE_PMC->PMC_PCER = 1UL << AT91C_ID_US0;

*AT91C_US0_MR = AT91C_US_USMODE_NORMAL | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE;
*AT91C_US0_BRGR = (unsigned int)((mck + (UART0_BAUDRATE * 8)) / (UART0_BAUDRATE * 16));
*AT91C_US0_CR = AT91C_US_TXEN | AT91C_US_RXEN;
}

void uart0_send_byte(unsigned int byte)
{
while(!(*AT91C_US0_CSR & AT91C_US_TXRDY));
*AT91C_US0_THR = byte;
}

Зато появится понимание, что и как происходит. А все эти атмеловские приблуды - не более чем мусор, затуманивающий код.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:25
Рейтинг@Mail.ru


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