Обработчики прерываний К1887ВЕ3Т Keil

Модераторы: ea, Alis, pip, gurzzza, _sva_

Ответить
frenele
Сообщения: 12
Зарегистрирован: 27 янв 2015, 13:51
Предприятие: "Океанприбор"
Откуда: Кировск, ленинградская обл.
Контактная информация:

Обработчики прерываний К1887ВЕ3Т Keil

Сообщение frenele »

Создал проект в Keil на микроконтроллере работает. :D Теперь задача написать любой обработчик прерывания, но не понятно где прописаны имена обработчиков прерываний. :? Смотрел файл "START167.A66", но не обнаружил. Для STM32 для меня всё понятно как писать оболочку обработчика прерываний. А вот для К1887ВЕ3Т непонятно. Помогите разобраться! Может какой пример скинете с работой прерываниями.
tvs
Сообщения: 9
Зарегистрирован: 27 апр 2016, 08:24

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение tvs »

У Keil довольно неплохой Help, посмотрите там. Обработчикам прерываний Вы сами даете имена, для Keil важен только номер прерывания, что в Assembler, что в C.

Код: Выделить всё

void CAN_OUT_MSG(void) interrupt 0x66
{
    P3 = ~0x0066;
    printf("\n interrupt 0x66 CAN_OUT_MSG\n");
}
frenele
Сообщения: 12
Зарегистрирован: 27 янв 2015, 13:51
Предприятие: "Океанприбор"
Откуда: Кировск, ленинградская обл.
Контактная информация:

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение frenele »

То есть как я понял в строчке "void CAN_OUT_MSG(void) interrupt 0x66" и есть адрес вектора прерывания как если писать на Assembler. Спасибо посмотрю Help. Опыт в Keil у меня только любительский. Вот и осваиваю.
tvs
Сообщения: 9
Зарегистрирован: 27 апр 2016, 08:24

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение tvs »

Нет, это номер прерывания, ни в коем случае не вектор.
frenele
Сообщения: 12
Зарегистрирован: 27 янв 2015, 13:51
Предприятие: "Океанприбор"
Откуда: Кировск, ленинградская обл.
Контактная информация:

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение frenele »

Спасибо я уже разобрался. Прерывания заработали. Да это порядковый номер прерывания.

void ASC0_Receive(void) interrupt 0x2B
{
P2 ^= 0x4000;
}

void ASC0_Transmit(void) interrupt 0x2A
{
tx_uart_byte('$');
}
alina_krylova
Сообщения: 4
Зарегистрирован: 07 июн 2024, 11:36
Предприятие: АО АВЭКС

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение alina_krylova »

Напишите как работать с прерываниями с asc0. Я включаю прерывания по приему S0RIC = 0x40; затем включаю глобально: PSW|=0x800;
Функция обработки:
void ASC0_Receive(void) interrupt 0x2B
{
S0RIR=0;
counter++;

}
И не работает(прерывания не приходят)(( что не правильно?
dav
Сообщения: 225
Зарегистрирован: 14 дек 2015, 08:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение dav »

alina_krylova писал(а): 11 фев 2025, 18:12 Напишите как работать с прерываниями с asc0. Я включаю прерывания по приему S0RIC = 0x40; затем включаю глобально: PSW|=0x800;
И не работает(прерывания не приходят)(( что не правильно?
Доброго времени суток!
Обратите внимание, при разрешении прерываний в регистр записывается значение 0x44: S0RIC = 0x0044;

На стр. 215 технического описания приведена информация про уровень приоритета:
"Уровень приоритета 0000 является значением по умолчанию центрального процессора. Поэтому запрос с уровнем ILVL 0000 не будет принят ЦПУ."

Вот пример инициализации последовательного интерфейса:
void init_asc0 (unsigned long freq, unsigned int baud) {
S0BG = (unsigned int)(freq / (32*(unsigned long) baud)) - 1; // baudrate reload
DP3 |= 0x0400; // Set TXD for output
DP3 &= 0xF7FF; // Set RXD for input
ALTSEL0P3 |= 0x0400; // Configure port pins for serial interface 0
P3 |= 0x0400; // Set TXD high
S0CON = 0x8011;
S0RIC = 0x0044; // Enable serial receive interrupt
S0TIC = 0x0044; // Enable serial transmit interrupt
}
alina_krylova
Сообщения: 4
Зарегистрирован: 07 июн 2024, 11:36
Предприятие: АО АВЭКС

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение alina_krylova »

Спасибо! Напишите пжлст: формула для расчета S0BG подходит для fclk = 20 МГц? В спецификации только примеры для 40 и 60 МГц((
ea
Администратор
Сообщения: 36
Зарегистрирован: 10 окт 2014, 09:08

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение ea »

Пример настройки интерфейса ASC0:
void init_asc0 (unsigned long freq, unsigned int baud) {
S0BG = (unsigned int)(freq / (32*(unsigned long) baud)) - 1; // baudrate reload
DP3 |= 0x0400; // Set TXD for output
DP3 &= 0xF7FF; // Set RXD for input
ALTSEL0P3 |= 0x0400; // Configure port pins for serial interface 0
P3 |= 0x0400; // Set TXD high
S0CON = 0x8011;
S0RIC = 0x0044; // Enable serial receive interrupt
S0TIC = 0x0044; // Enable serial transmit interrupt
transmit_finish = 1;
}
alina_krylova
Сообщения: 4
Зарегистрирован: 07 июн 2024, 11:36
Предприятие: АО АВЭКС

Re: Обработчики прерываний К1887ВЕ3Т Keil

Сообщение alina_krylova »

Добрый день. Как обрабатывать внешние прерывания(вход внешнего прерывания EX7IN, …, EX0IN)? в каком регистре выставляется приоритет ? И какие у них номера векторов прерываний?
Ответить

Вернуться в «16-разрядные RISC микроконтроллеры»