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

 
 
> Алгоритм CAN-приема, (AT90CAN128)
DVF
сообщение Sep 7 2009, 04:41
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 630
Регистрация: 26-07-06
Из: Саратов
Пользователь №: 19 097



Может ли кто привести алгоритм обработки прерывания CAINT при приеме кадра и собственно чтения байтов из MOb?
Проверили источник прерывания: ошибка или нет. Если нет, то какие шаги далее?

Сообщение отредактировал DVF - Sep 7 2009, 04:46
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DVF
сообщение Sep 28 2009, 08:42
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 630
Регистрация: 26-07-06
Из: Саратов
Пользователь №: 19 097



Вот код :
Код
void can_Set_mob_Rx(void)
{
    Can_clear_rtr();                                                          
    Can_set_mob(MOB_rx);// Выбор mob: #define Can_set_mob(mob)       { CANPAGE = ((mob) << 4);}
    Can_set_mask_mob();                // Принимать конкретные адреса
    Can_set_dlc(2);                    // Длина пакета 2 байта
    Can_clear_rplv();                    // Без ответа
    CANIDT1 = 0x68;
    CANIDT2 = 0x00;
    CANIDT3 = 0x00;
    CANIDT4 = 0x00;
    Can_config_rx();                    // На прием
}

void can_Set_mob_Tx(void)
{
    Can_set_mob(MOB_tx);                // Выбор mob
    CANIDT1 = 0x66;
    CANIDT2 = 0x00;
    CANIDT3 = 0x00;
    CANIDT4 = 0x00;
    Can_set_dlc(2);                    // Длина пакета 2 байта
    for(U8 i = 0; i < (Can_get_dlc()); i++)    CANMSG = Tx_Data[i];    // запись в CANMSG
    Can_clear_rtr();
    Can_clear_status_mob();                // Очищаем все флаги регистра состояния MOb
Can_config_tx();                    // Передача
}

Передача инициируется событием. Все проходит хорошо - отправляется и принимается вторым узлом.
Далее, я считал, что MOb на прием уже сконфигурирован и достаточно очистить CANSTMOB = 0x00; Прием у меня по прерыванию от RXOK. Но оно не возникает, пока не будет выполнено перед этим: Can_set_mob(MOB_rx); Это правильное поведение? А если я несколько MOb настрою на прием, то мне для каждого придется выполнить этот шаг? Или надо так понимать, что делая CANSTMOB = 0x00; я очищал страницу MOb на передачу? Совсем запутался...

Забегая вперед хочу спросить, как моделировать ошибки в CAN, чтобы можно было заняться отладкой при из возникновении? Может ссылки есть?

Сообщение отредактировал DVF - Sep 28 2009, 09:16
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:35
Рейтинг@Mail.ru


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