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

 
 
> Прерывания без ОС на EP9315, обработчик не вызывается
toykhee_menky
сообщение Jun 30 2008, 15:43
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 30-06-08
Пользователь №: 38 654



Здравствуйте.

EP9315 на плате Tion-pro v1.
Программа на Си, компилируется WinARM 4.1.1, грузится в RAM при помощи redboot.

Пытаюсь работать с портом UART2, порт, судя по всему, работает - тестовая последовательность туда уходит.

FIFO разрешено, после посылки восьми символов оттуда появляется битик прерывания в VIC1RawIntr, т.е. прерывание до VIC вроде бы доходит.

По адресу 0x18 содержится команда, оставленная там redboot-ом, судя по всему:
00000018: 18 F0 9F E5 - перевожу как ldr r15,[r15,#0x18], т.е. должен взяться адрес процедуры реакции на прерывание с адреса 0x38 (0x18+0x18+0x08).

Подменяю указатель по адресу 0x38 на адрес своей функции. Но управление она не получает (контроль - светодиодами).

Прерывания разрешены, режим супервизора: cpsr=0x00000013
ОЗУ отмаплено само на себя, с адреса 0.

обработчик прерывания IRQ оформлен как
Код
void  __attribute__ ((interrupt ("IRQ"))) handler1();

но управления тоже не получает (источник прерывания 25 для VIC1 выбрал, прерывания разрешил, адрес ISR занес).

Чего-то я еще не сделал... Чего?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Desenix
сообщение Jul 2 2008, 17:10
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



для армов EP9312, S3C2410, LPC2368 всегда писал и инициализировал обработчики прерывания сам, а не полагался на среду разработки, и не имел проблем.
Если вы не хотите изучать тонкости процессора, то зачем вы взялись его программировать ?
Отдайте эту задачу системному программисту, а сами пишите только пользовательский уровень.

Изучите как работает контроллер прерываний, как и что в нем надо инициализировать, как надо построить обработчик прерываний, что надо инициализировать в переферии для разрешения прерываний итд.

На самом деле контроллер в ARM хоть и "крутой", но мне кажется немного не доинтегрирован в ядро, в идеале надо было, чтоб не обработчик обрабатывал переход по адресу, а само ядро аппаратно.

на всякий случай кусок кода, правда там таймер и Ethernet, но думаю суть понятна будет, главное что камень EP9312

Код
// Interrupt handlers.
void TimerInterrupt()
{
  (*timer_function)(); // Call timer callback function.
  Timer3Clear = 0x0; // Clear timer 3 interrupt line.
}

// IRQ interrupt handler.
// Only the timer interrupt is used by this example.
__irq __arm void irq_handler(void)
{
  void (*interrupt_function)();
  unsigned int vector;
  // Called at 1000 Hz rate.
  vector = VIC2VectAddr; // Get interrupt vector.
  interrupt_function = (void(*)())vector;
  (*interrupt_function)(); // Call vectored interrupt function.
  VIC2VectAddr = 0; // Clear interrupt in VIC.
}

// Interrupt functions.
void EP9312InitInterrupt(void(*timer_func)())
{
  // Setup timer callback function.
  timer_function = timer_func;

  // Setup interrupt controller.
  VIC1Protection = 0;
  VIC2Protection = 0;
  // Disable all interrupts
  VIC1IntEnClear = 0xffffffff;
  VIC2IntEnClear = 0xffffffff;

  VIC2IntSelect &= ~TC3OI_bit; // IRQ on timer 3 line.
  VIC2VectAddr0 = (unsigned int)&TimerInterrupt;
  VIC2VectCntl0 = 0x20 | VIC2_TC3OI; // Enable vector interrupt for timer 3.
  VIC2IntEnable |= TC3OI_bit; // Enable timer 3 interrupt.

  VIC2IntSelect &= ~TC39OI_bit; // IRQ on MAC line.
  VIC2VectAddr1 = (unsigned int)&InterruptMac;
  VIC2VectCntl1 = 0x20 | VIC2_INT_MAC; // Enable vector interrupt for MAC.
  VIC2IntEnable |= TC39OI_bit; // Enable MAC interrupt.
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- toykhee_menky   Прерывания без ОС на EP9315   Jun 30 2008, 15:43
- - aaarrr   VIC, наверное, неправильно инициализировали. Код п...   Jun 30 2008, 16:00
|- - toykhee_menky   Цитата(aaarrr @ Jun 30 2008, 22:00) VIC, ...   Jun 30 2008, 16:21
|- - aaarrr   Цитата(toykhee_menky @ Jun 30 2008, 20:21...   Jun 30 2008, 16:47
|- - toykhee_menky   Цитата(aaarrr @ Jun 30 2008, 22:47) Кто в...   Jun 30 2008, 20:01
|- - aaarrr   Цитата(toykhee_menky @ Jul 1 2008, 00:01)...   Jul 1 2008, 12:09
- - sergeeff   Ну я бы под пунктом 0 добавил: Преравание не возни...   Jul 1 2008, 05:58
|- - toykhee_menky   Цитата(sergeeff @ Jul 1 2008, 11:58) Ну я...   Jul 1 2008, 06:30
- - sergeeff   Ну я бы, для начала, написал бы тестовую функцию о...   Jul 1 2008, 08:24
- - sergeeff   Можно посмотреть http://www.siwawi.arubi.uni-kl.de...   Jul 1 2008, 15:46
- - toykhee_menky   Мда. Проблема, однако. Неужели я один такой (или п...   Jul 2 2008, 11:14
- - aaarrr   Исходники redboot'а, если охота в них ковырять...   Jul 2 2008, 11:32
|- - toykhee_menky   Цитата(aaarrr @ Jul 2 2008, 17:32) Исходн...   Jul 2 2008, 13:14
- - sergeeff   Ну вот, осталось посмотреть, что же сидит в таблиц...   Jul 2 2008, 11:33
- - sergeeff   А что за процедура вызывается по прерыванию? Как б...   Jul 2 2008, 16:02
- - sergeeff   Все очень здорово, но надо же еще обучить процессо...   Jul 2 2008, 18:38
|- - Desenix   ну да, еще стандартный startup забыл приложить, за...   Jul 2 2008, 19:18
|- - toykhee_menky   Цитата(sergeeff @ Jul 3 2008, 00:38) Все ...   Jul 3 2008, 05:44
- - sergeeff   Уважаемый toykhee_menky! 1. Так про то и речь...   Jul 3 2008, 06:15
- - aaarrr   Цитата(toykhee_menky @ Jun 30 2008, 19:43...   Jul 3 2008, 08:25
|- - toykhee_menky   Цитата(aaarrr @ Jul 3 2008, 14:25) Да, а ...   Jul 3 2008, 13:08
- - aaarrr   Значит на ядро прерывание передается, других вариа...   Jul 3 2008, 13:15
- - sergeeff   Ну дак и осталось то, про что я уже говорил - напи...   Jul 3 2008, 14:12
- - toykhee_menky   Всем спасибо. Перешел на eCos.   Jul 12 2008, 13:49
- - sergeeff   Ну, флаг в руки! Думаю там заморочек будет ещ...   Jul 12 2008, 18:41


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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 16:45
Рейтинг@Mail.ru


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