Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT90CAN128 и прерывания от CAN
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Михаил_K
Добрый день. Может кто сталкилвался с такой проблемой.
Использую AT90CAN128. Работаю с CAN шиной. Настроено вроде все правильно.
Принимаю пакет. Вижу что в CANSTMOB установился 5й бит (т.е. бит успешного приема), при этом обработчик прерывания
не вызывается.
Однако, если после посылки пакета, выполнить вот такие действия
unsigned char r = CANSTMOB;
CANSTMOB = r;

т.е. тупо записать туда ту самую 1, которая там уже есть,
то прерывание возникает. Обработчик запускается и извлекает из MOBа правильные данные

В чем может быть проблема?
coolbassnik
Могу предположить что записью логической единицы в регистр с флагом вы очищаете этот флаг и тогда следующее прерывание отрабатывает нормально. Если это так, то при входе в обработчик прерывания вы должны делать запись лог. 1 в этот бит, тем самым очищая его.
Палыч
Возможно, после приема не обновляете CANCDMOB.
Михаил_K
Цитата(coolbassnik @ Dec 12 2013, 18:54) *
Могу предположить что записью логической единицы в регистр с флагом вы очищаете этот флаг и тогда следующее прерывание отрабатывает нормально. Если это так, то при входе в обработчик прерывания вы должны делать запись лог. 1 в этот бит, тем самым очищая его.


Бит этот очищается путем записи в него 0. И в обработчике это есть. Проблема в том, что я туда вообще не попадаю. CANCDMOB тоже обновляется в обработчике. Но...
Михаил_K
Проблема решилась.
В фунции инициализации использовал бибилиотечные функции от ATMEL
Can_reset();
can_init(0);
и оно не работало. Не знаю почему.
Убрал эти функции, сделал инициализацию сам - все работает.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.