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

 
 
 
Reply to this topicStart new topic
> AT90CAN128 и прерывания от CAN, Не возникает прерывание при приеме пакета.
Михаил_K
сообщение Dec 12 2013, 13:38
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Добрый день. Может кто сталкилвался с такой проблемой.
Использую AT90CAN128. Работаю с CAN шиной. Настроено вроде все правильно.
Принимаю пакет. Вижу что в CANSTMOB установился 5й бит (т.е. бит успешного приема), при этом обработчик прерывания
не вызывается.
Однако, если после посылки пакета, выполнить вот такие действия
unsigned char r = CANSTMOB;
CANSTMOB = r;

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

В чем может быть проблема?
Go to the top of the page
 
+Quote Post
coolbassnik
сообщение Dec 12 2013, 14:54
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 22-10-10
Из: Украина
Пользователь №: 60 348



Могу предположить что записью логической единицы в регистр с флагом вы очищаете этот флаг и тогда следующее прерывание отрабатывает нормально. Если это так, то при входе в обработчик прерывания вы должны делать запись лог. 1 в этот бит, тем самым очищая его.

Сообщение отредактировал coolbassnik - Dec 12 2013, 14:55
Go to the top of the page
 
+Quote Post
Палыч
сообщение Dec 12 2013, 15:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Возможно, после приема не обновляете CANCDMOB.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Dec 13 2013, 08:40
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



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


Бит этот очищается путем записи в него 0. И в обработчике это есть. Проблема в том, что я туда вообще не попадаю. CANCDMOB тоже обновляется в обработчике. Но...
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Dec 13 2013, 09:59
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Проблема решилась.
В фунции инициализации использовал бибилиотечные функции от ATMEL
Can_reset();
can_init(0);
и оно не работало. Не знаю почему.
Убрал эти функции, сделал инициализацию сам - все работает.

Go to the top of the page
 
+Quote Post

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

 


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


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