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

 
 
 
Reply to this topicStart new topic
> Прерывание в asm, как организовать?
Sprite
сообщение Jun 3 2011, 15:14
Сообщение #1


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

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



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

Продолжаю изучать ассемблер. Камень - stm32f103, среда разработки - keil. Пример проекта брал здесь.Нужно организовать прерывание по совпадению с регистром сравнения таймера.
Когда я писал на C - с проектом шел файлик "STM32F10x.s", где были прописаны все вектора прерываний. А в моем проекте этого файлика нет sad.gif
Как организовать прерывание? (желательно пример кода).
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 3 2011, 15:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Sprite @ Jun 3 2011, 18:14) *
Когда я писал на C - с проектом шел файлик "STM32F10x.s", где были прописаны все вектора прерываний. А в моем проекте этого файлика нет sad.gif
Как организовать прерывание? (желательно пример кода).


Так это же, по сути, обычный ассемблерный файл. Можно разобраться в его содержимом и адаптировать для использования в своем проекте. В конце концов, можно сделать проект на Си, откомпилировать, получить листинг и изучить его. Вот только зачем вам это ? Компилятор почти наверняка сделает и быстрее, и лучше, чем вы напишете сами ...

Сообщение отредактировал kovigor - Jun 3 2011, 15:34
Go to the top of the page
 
+Quote Post
Sprite
сообщение Jun 4 2011, 06:06
Сообщение #3


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

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Ответы, типа "компилятор сделает быстрее и лучше" не принимаются. Жду советов по существу.
Go to the top of the page
 
+Quote Post
SII
сообщение Jun 4 2011, 08:21
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



А Вам ответили уже по существу. Смотрите .s-файл и разбирайтесь, как он устроен и что делает. Там прописаны и векторы прерываний, и настройки PLL, и всё такое прочее, что необходимо сделать до начала кода собственно программы (а на чём она написана -- на ассемблере или языке высокого уровня, -- особой роли не играет, инициализировать-то контроллер всё равно нужно).
Go to the top of the page
 
+Quote Post
Sprite
сообщение Jun 5 2011, 10:20
Сообщение #5


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

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Вроде разобрался, остался один вопрос: как активизировать прерывание? В эмуляторе keil открываю вкладку NVIC, нахожу свое прерывание, ставлю напротив него галочку "Active" - все работает, происходит переход в процедуру обработки прерывания, но при этом я не вижу, что какой-нибудь регистр меняет свое значение. Как поставить эту галочку программно? В какой регистр (и какое значение) записывать?
Go to the top of the page
 
+Quote Post
Sprite
сообщение Jun 5 2011, 15:28
Сообщение #6


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

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Решил проблему след. образом:
Код
        LDR R0,=SETENA0
        MOV R1, #NVIC_ISER_SETENA_27
        STR R1,[R0]

Все работает, в прерывание заходит как надо! Только компилятор ругается на строчку
Код
        LDR R0,=SETENA0

Говорит:
Код
main.s(200): warning: A1581W: Added 2 bytes of padding at address 0x142
Насколько критичный этот warning? Можно ли его как-нибудь красиво обойти? (не отключая в настройках).
Go to the top of the page
 
+Quote Post
SII
сообщение Jun 6 2011, 05:29
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Это он предупреждает, что добавил 2 пустых байта (какую-нибудь ничего не делающую команду) для обеспечения выравнивания.
Go to the top of the page
 
+Quote Post
Sprite
сообщение Jun 6 2011, 13:45
Сообщение #8


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

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Спасибо. Тема закрыта.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:35
Рейтинг@Mail.ru


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