Перейти к содержанию
    

Помогите начинающему. Как написать на IAR-ассемблере процедуру обработки прерывания

Приветствую. Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере. Не хочу менять привычку и на AVR32. Кто знает как? Документация IAR-ра этого не описывает... Нужен скелет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере.

А зачем? Какой выигрыш? Не замеряли?

 

Документация IAR-ра этого не описывает... Нужен скелет.

Наверное не в том разделе ищите...

Должен быть какой-то Assembler Reference

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решение найдено методом научного тыка и копания startup-кода :rolleyes:

#pragma handler = AVR32_TC_IRQ_GROUP,0
__interrupt void AVR32_TC_IRQ_GROUP_ISR(void)
{
}

И его эквивалент на ассемблере:

  //обработчик группы прерываний таймеров
  name    EXT_AVR32_TC_IRQ_GROUP
  #include <avr32\iouc3b0256.h>
  extern  AVR32_TC_IRQ_GROUP_ISR
  rseg    HTAB:ROOT(2)
  // LVL[1:0] | Index[5:0] | Offset[23:0]
  DC32 (AVR32_INTC_IPR_INTLEVEL_INT0 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (AVR32_TC_IRQ_GROUP << 24) | ((AVR32_TC_IRQ_GROUP_ISR-0x80004000) & 0x00FFFFFF)
  endmod        
        
  name    AVR32_TC_IRQ_GROUP_ISR
  #include <avr32\uc3b0256.h>
  public  AVR32_TC_IRQ_GROUP_ISR
  rseg    EVSEG:ROOT(2)
  //процедура обработки прерываний
AVR32_TC_IRQ_GROUP_ISR:
  //код сюда...
  
  rete
                
  end

 

Недочёт: AVR32_TC_IRQ_GROUP_ISR-0x80004000 - не получилось подставить начальный адрес сектора EVSEG, 0x80004000 - его абсолютный адрес, полученный при отладке

Скорость вызова прерывания, по-моему, на С и асме одинаковая. Но на асме в некоторых случаях можно выиграть в скорости обработки самой процедуры прерывания. :beer:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую. Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере. Не хочу менять привычку и на AVR32. Кто знает как? Документация IAR-ра этого не описывает... Нужен скелет.

 

В документе: "ARM® IAR C/C++ Compiler Reference Guide"

есть глава - Part 1. Using the compiler,

которая содержит раздел - Assembler interface, где

и находится - CREATING SKELETON CODE.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В документе: "ARM® IAR C/C++ Compiler Reference Guide"

есть глава - Part 1. Using the compiler,

которая содержит раздел - Assembler interface, где

и находится - CREATING SKELETON CODE.

 

1. Вопрос был про AVR32, а не ARM.

2. AVR32® IAR C/C++ Compiler Reference Guide ответа на тему топика не даёт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Вопрос был про AVR32, а не ARM.

2. AVR32® IAR C/C++ Compiler Reference Guide ответа на тему топика не даёт

 

Вы заметили, что наименования разделов в документах одинаковы?

Ссылка на ARM Compiler была дана в качестве направления поиска.

А что касается содержания раздела Assembler language

interface, то мне он как раз и помог создать скелет кода на

ассемблере, который я потом правил под себя и его уже

вставлял в проект.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...