Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите начинающему. Как написать на IAR-ассемблере процедуру обработки прерывания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
piroman
Приветствую. Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере. Не хочу менять привычку и на AVR32. Кто знает как? Документация IAR-ра этого не описывает... Нужен скелет.
_Артём_
Цитата(piroman @ Sep 27 2012, 19:42) *
Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере.

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

Цитата(piroman @ Sep 27 2012, 19:42) *
Документация IAR-ра этого не описывает... Нужен скелет.

Наверное не в том разделе ищите...
Должен быть какой-то Assembler Reference
piroman
Решение найдено методом научного тыка и копания startup-кода rolleyes.gif
Код
#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.gif
skyv
Цитата(piroman @ Sep 27 2012, 19:42) *
Приветствую. Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере. Не хочу менять привычку и на AVR32. Кто знает как? Документация IAR-ра этого не описывает... Нужен скелет.


В документе: "ARM® IAR C/C++ Compiler Reference Guide"
есть глава - Part 1. Using the compiler,
которая содержит раздел - Assembler interface, где
и находится - CREATING SKELETON CODE.

piroman
Цитата(skyv @ Oct 2 2012, 14:12) *
В документе: "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 ответа на тему топика не даёт
skyv
Цитата(piroman @ Oct 4 2012, 08:29) *
1. Вопрос был про AVR32, а не ARM.
2. AVR32® IAR C/C++ Compiler Reference Guide ответа на тему топика не даёт


Вы заметили, что наименования разделов в документах одинаковы?
Ссылка на ARM Compiler была дана в качестве направления поиска.
А что касается содержания раздела Assembler language
interface, то мне он как раз и помог создать скелет кода на
ассемблере, который я потом правил под себя и его уже
вставлял в проект.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.