ur5cuj 0 6 февраля, 2014 Опубликовано 6 февраля, 2014 (изменено) · Жалоба "Запускатор" прерывания на передачу: 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. Физика КАНа работоспособная, на шине два устройства, если без прерыаний, то сообщения отправляются и получатель получает (прерывание на приём срабатывает). Изменено 6 февраля, 2014 пользователем Volldemar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться