Перейти к содержанию
    

FreeRTOS+CAN=не срабатывает прерывание на передачу

"Запускатор" прерывания на передачу:

uint8_t CAN1_Put( CanTxMsg* TxMess )
{
   uint8_t xReturn;
   if( xQueueSend( CAN1_TX_xQueue, &TxMess, 10 ) == pdPASS )
      {
         xReturn = pdPASS;
         CAN_ITConfig(CAN1, CAN_IT_TME,  ENABLE);
      }
   else
      {
         xReturn = pdFAIL;
      }

   return xReturn;
}

Обработчик прерывания на передачу:

void CAN1_TX_IRQHandler (void)
{
   portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

   if (CAN_GetITStatus(CAN1,CAN_IT_TME)==SET)
      {
         CAN_ClearITPendingBit(CAN1,CAN_IT_TME);
         if( xQueueReceiveFromISR( CAN1_TX_xQueue, &TxMessage, &xHigherPriorityTaskWoken ) == pdTRUE )
            {
               CAN_Transmit(CAN1, &TxMessage);
            }
         else
            {
               CAN_ITConfig(CAN1, CAN_IT_TME,  DISABLE);
            }
      }
   portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}

Собственно, вопрос, что я делаю не так? НЕ заходит в обработчик прерывания по передаче.

UPD. Физика КАНа работоспособная, на шине два устройства, если без прерыаний, то сообщения отправляются и получатель получает (прерывание на приём срабатывает).

Изменено пользователем Volldemar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...