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

 
 
> Настройка прерываний в LPC1778, с полного нуля
ДЕЙЛ
сообщение Jul 7 2014, 19:43
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Листинг в общих чертах такой:

Инициализация и настройка тактирования

1: U0IER|=0x4; //Разрешение прерывания по приёму байта в RX
2: __enable_irq(); //Разрешаем прерывания (CMSIS)
3: __set_BASEPRI(0xFFFFFFFF); //Разрешаем все прерывания (CMSIS)
4: NVIC_EnableIRQ(UART0_IRQn); //Разрешение прерывания UART0 (CMSIS)

while(1)
{
Циклическая отправка данных на ПК
}


5: __irq void UART0_IRQ1(void)
{
for (k=0; k<200; k++)
{
FIO1SET=0x2000000; //Подёргаем ножкой 200 раз
FIO1CLR=0x2000000;
}
}


Хочу сделать так, чтобы при появлении байта в буфере приёма UART вызывалось прерывание. Вот с этим вызовом прерывания проблема и пока не знаю, с какой стороны к ней подходить. Вопросы такие:
1. Правильно ли я выполнил настройки? (строки 1-4)
в строке 4 в качестве параметра функции передаётся UART0_IRQn. Что значит эта n? Её так и нужно оставлять или вместо n нужно какое-то число стаить? Хотя компилятор ругается.

2. Правильно ли я оформил обработчик прерывания? (строка 5). В этой строке пробовал писать название функции от UART0_IRQ1 ло UART0_IRQ10. Компилятор не ругался, но и толку никакого не было, на осциллографе не видел дёрганий ножки после отправки байта с ПК.
На что влияет выделенное число?


Данные в буфер приёма однозначно приходят правильные с ПК.
На скрине моя программа в сыром виде. При нажатии кнопки "ТЕСТОВАЯ" с COM-порта отправляется 1 байт 0xAA, который я вижу принятым программой от МК (выделено). Т.е. с приёмом нормально всё, но не совсем удобно каждый раз смотреть на буфер, куда удобнее считывать из него байт по прерыванию. Ну и с настройкой прерываний разобраться нужно.

И ещё имеется такой регистр
//SETENA0=0xFFFFFFFF;
В описании написано, что каждый бит этого регистра разрешает или запрещает соответствующее прерывание. Как понять, к какому прерыванию относится конкретный бит?

Сообщение отредактировал ДЕЙЛ - Jul 7 2014, 19:46
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ДЕЙЛ
сообщение Jul 17 2014, 17:45
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



С уровнями приоритетов разобрался. Ошибка была в том, что я заблуждался относительно предустановки уровней приоритетов. По умолчанию все программируемые прерывания имеют приоритет 0, т.е. самый высокий. Выше только немаскируемые с приоритетами -1 -2 и -3. А у меня получилось, что прерывание от UART0 и от системного таймера имели одинаковый приоритет и поэтому не было вложенности.

Добавил две строки в коде при инициализации:
Код
AIRCR = 0x05FA0200;  //приоритет группы - поле [7:3], субприоритеты отключены, т.к. [2:0] не задействованы
IP1   = 0x800;           //уровень приоритета - 1, биты [2-0] не задействованы.

Остался открытым вопрос по настройке приоритета прерывания системного таймера. Он программируемый, судя по описанию ядра CORTEX-M3, но в даташите пока не откопал ничего по этому поводу. Ещё в описании рекомендуют указывать размер стека. Как он указывается?

Сообщение отредактировал ДЕЙЛ - Jul 17 2014, 17:46
Go to the top of the page
 
+Quote Post
menzoda
сообщение Jul 17 2014, 17:59
Сообщение #3


Участник
*

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



В даташите про него ничего не будет, надо искать в документации на ядро. Насчет размера стека, он указывается в единственном месте - в стартапе (точнее не размер, а границы), и то непонятно зачем, больше не знаю где его можно задать.
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Jul 18 2014, 03:26
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Цитата(menzoda @ Jul 17 2014, 21:59) *
В даташите про него ничего не будет, надо искать в документации на ядро. Насчет размера стека, он указывается в единственном месте - в стартапе (точнее не размер, а границы), и то непонятно зачем, больше не знаю где его можно задать.

в описании ядра сказано, что при многоуровневой вложенности нужно думать о размере стека, вот и интересуюсь. Какая функция задаёт этот размер?
ПЫСЫ Имел ввиду не даташит, а user manual, т.е. руководство пользователя
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ДЕЙЛ   Настройка прерываний в LPC1778   Jul 7 2014, 19:43
- - ДЕЙЛ   Сегодня утром вчитался получше в описание регистра...   Jul 8 2014, 05:58
- - menzoda   Цитата(ДЕЙЛ @ Jul 7 2014, 23:43) Правильн...   Jul 8 2014, 08:33
|- - ДЕЙЛ   Цитата(menzoda @ Jul 8 2014, 12:33) Никак...   Jul 8 2014, 11:05
|- - menzoda   Цитата(ДЕЙЛ @ Jul 8 2014, 15:05) как тогд...   Jul 8 2014, 12:50
|- - mempfis_   Цитата(ДЕЙЛ @ Jul 8 2014, 14:05) как тогд...   Jul 8 2014, 14:29
|- - ДЕЙЛ   Цитата(mempfis_ @ Jul 8 2014, 18:29) Вот ...   Jul 8 2014, 20:54
|- - menzoda   Критиковать пока особо нечего, это же просто набро...   Jul 9 2014, 05:43
- - ДЕЙЛ   Прогнал в отладчике через JTAG пошагово. Запусти...   Jul 9 2014, 19:40
|- - menzoda   Все логично. Она застряла в бесконечном цикле обра...   Jul 10 2014, 05:05
|- - ДЕЙЛ   Цитата(menzoda @ Jul 10 2014, 09:05) Эй, ...   Jul 10 2014, 17:58
- - ДЕЙЛ   Вечером попробую. Интересно узнать ещё мнение насч...   Jul 10 2014, 06:36
- - ДЕЙЛ   Продолжаю начинать осваивать LPC. Читаю про вложен...   Jul 15 2014, 19:30
- - menzoda   КодNVIC_EnableIRQ(UART0_IRQn); //Enable IR...   Jul 16 2014, 06:12
|- - ДЕЙЛ   Цитата(menzoda @ Jul 16 2014, 10:12) КодN...   Jul 16 2014, 07:12
|- - menzoda   Цитата(ДЕЙЛ @ Jul 16 2014, 11:12) Данная ...   Jul 16 2014, 11:40
|- - ДЕЙЛ   Цитата(menzoda @ Jul 16 2014, 15:40) Хм, ...   Jul 16 2014, 12:30
- - ДЕЙЛ   На другом форуме сказали посмотреть регистры уровн...   Jul 17 2014, 07:32
- - menzoda   Никакая. Точнее так, можно сообщить библиотеке вре...   Jul 18 2014, 05:07


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

 


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


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