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

 
 
 
Reply to this topicStart new topic
> Помогите начинающему. Как написать на IAR-ассемблере процедуру обработки прерывания
piroman
сообщение Sep 27 2012, 16:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



Приветствую. Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере. Не хочу менять привычку и на AVR32. Кто знает как? Документация IAR-ра этого не описывает... Нужен скелет.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Sep 27 2012, 16:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(piroman @ Sep 27 2012, 19:42) *
Привык в своих IAR С-проектах на AVR писать процедуры обработки прерываний как отдельные файлы на ассемблере.

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

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

Наверное не в том разделе ищите...
Должен быть какой-то Assembler Reference
Go to the top of the page
 
+Quote Post
piroman
сообщение Sep 28 2012, 14:19
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



Решение найдено методом научного тыка и копания 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
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 2 2012, 10:12
Сообщение #4


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

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Цитата(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.

Go to the top of the page
 
+Quote Post
piroman
сообщение Oct 4 2012, 05:29
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



Цитата(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 ответа на тему топика не даёт
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 5 2012, 10:07
Сообщение #6


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

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Цитата(piroman @ Oct 4 2012, 08:29) *
1. Вопрос был про AVR32, а не ARM.
2. AVR32® IAR C/C++ Compiler Reference Guide ответа на тему топика не даёт


Вы заметили, что наименования разделов в документах одинаковы?
Ссылка на ARM Compiler была дана в качестве направления поиска.
А что касается содержания раздела Assembler language
interface, то мне он как раз и помог создать скелет кода на
ассемблере, который я потом правил под себя и его уже
вставлял в проект.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 11th July 2025 - 22:30
Рейтинг@Mail.ru


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