Программная среда Code Master 96

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

Smonsky
Сообщения: 3
Зарегистрирован: 02 фев 2023, 10:51
Предприятие: ВРХБЗ

Re: Программная среда Code Master 96

Сообщение Smonsky »

dav писал(а): 27 фев 2023, 12:21
Smonsky писал(а): 02 фев 2023, 11:38 Доброго времени суток! Подскажите пожалуйста, как правильно привязать обработчики нужных прерываний к нужным процедурам.
Микроконтроллер содержит массив регистров (INTERRUPT->INT[]), в котором хранятся адреса обработчиков прерывания. Стоит отметить, что запись в регистры INTERRUPT->INT[] возможна до включения режима EINIT (команда MOD #3).
Для привязки обработчика прерываний можно использовать следующую функцию:

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

void Interrupt_Init(IRQn_Type IRQn,uint32_t IRQ_Handler)
{
	INTERRUPT->INT[IRQn]=IRQ_Handler;
}
// Настройка прерывания BSI0:
Interrupt_Init(BSI0_IRQn,&BSI0_IRQ_Handler);
Микроконтроллер 1874BE10T, среда CodeMaster++[28], версия 1.00.04, при попытке компиляции получаем на вызове Interrupt_Init(BSI0_IRQn,&BSI0_IRQ_Handler) ошибку:
[C167] argument of type "void (*)()" is incompatible with parameter of type "uint32_t", что говорит о том, что &BSIO_IRQ_Handler не имеет целочисленный вид, при этом функция объявлена:
void BSI0_IRQ_Handler();
........
void BSI0_IRQ_Handler()
{
}

Соответственно, если использовать какое либо число в вызове Interrupt_Init(BSI0_IRQn,&BSI0_IRQ_Handler) вместо &BSI0_IRQ_Handler, то компиляция проходит успешно, при этом никаких привязок, судя по map файлу не происходит. Подскажите пожалуйста, куда копать...
Ответить

Вернуться в «Микроконтроллеры семейства MCS-96»