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

 
 
> 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
Ответов
aaarrr
сообщение Apr 13 2011, 18:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #3


Участник
*

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


Участник
*

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


Гуру
******

Группа: Свой
Сообщений: 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 - 14:46
Рейтинг@Mail.ru


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