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

 
 
> FreeRTOS+CAN=не срабатывает прерывание на передачу, STM32F2xx
Volldemar
сообщение Feb 6 2014, 11:17
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 27-04-09
Из: Украина
Пользователь №: 48 342



"Запускатор" прерывания на передачу:
Код
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 - Feb 6 2014, 12:08
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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