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

 
 
> LPC2388 CAN freeRTOS, Pabt по выходе из прерывания
Androliz
сообщение Dec 5 2008, 14:57
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 22-09-06
Из: Беларусь
Пользователь №: 20 595



Плата с lpc2388 под управленим freeRTOS. Получаю сообщение по CAN1 - вваливаюсь в обработчик прерывания. Если дальше выполнять пошагово в дебаггере (jtag) то всё хорошо работает, но если запустить (RUN), то раз в ~10 сообщений вываливается в Pabt. Причём вываливается после выхода из обработчика прерывания. В R14(LR) при этом чаще всего 0x286e9b12.
Поскольку прерывание может пробуждать другие task'и, то оформлял как оформлено прерывание от UART след. образом:

vCAN_ISREntry

portSAVE_CONTEXT ; Save the context of the current task.

LDR R0, =vCAN_ISR ; Call the ISR routine.
MOV LR, PC
BX R0

portRESTORE_CONTEXT ; Restore the context of the current task -
; which may be different to the task that
; was interrupted.



Далее текст главной функции прерывания:

void vCAN_ISR(void) //__irq
{
portBASE_TYPE xHigherPriorityTaskWoken;
CANStatus = CAN_RX_SR;
if ( CANStatus & (1 << 8) )
{
CAN1RxCount++;
xHigherPriorityTaskWoken = CAN_ISR_Rx1();
}

if ( CAN1GSR & (1 << 6 ) )
{
/* The error count includes both TX and RX */
CAN1ErrCount = (CAN1GSR >> 16 );
}

VICVectAddr = 0; /* Acknowledge Interrupt */

/* Actual macro used here is port specific. */
portEXIT_SWITCHING_ISR(xHigherPriorityTaskWoken);
}

И подпрограмма обработки приёма по CAN

portBASE_TYPE CAN_ISR_Rx1( void )
{
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

xCANMsg * pMsg = ( xCANMsg * ) pvPortMalloc( sizeof( xCANMsg ) );

if(pMsg == 0){
vSerialPutString( NULL, "No memory avalible", 25);
xSerialPutChar( NULL, CR, comNO_BLOCK);
while(1){};
}
pMsg->Frame = CAN1RFS;
pMsg->MsgID = CAN1RID; // ID //change by gongjun
pMsg->DataA = CAN1RDA; // Data A
pMsg->DataB = CAN1RDB; // Data B

xQueueSendToBackFromISR( receiveCANQueue, ( void * ) &pMsg, &xHigherPriorityTaskWoken);

CAN1RxDone = TRUE;
CAN1CMR = 0x04; // release receive buffer
return xHigherPriorityTaskWoken;
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
FormatCft
сообщение Dec 5 2008, 15:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145



Цитата
В R14(LR) при этом чаще всего 0x286e9b12.

Это для какого режима проца смотрели?
Go to the top of the page
 
+Quote Post
Androliz
сообщение Dec 5 2008, 15:59
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 22-09-06
Из: Беларусь
Пользователь №: 20 595



Цитата(FormatCft @ Dec 5 2008, 17:09) *
Это для какого режима проца смотрели?


Для abort
Сменил настройки MAM с disabled на fully enabled - сообщений стало гораздо больше проходить перед Pabt.
Go to the top of the page
 
+Quote Post
FormatCft
сообщение Dec 5 2008, 16:20
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145



Цитата(Androliz @ Dec 5 2008, 20:59) *
Для abort
Сменил настройки MAM с disabled на fully enabled - сообщений стало гораздо больше проходить перед Pabt.

Может здесь ответ есть?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 6 2008, 00:18
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(FormatCft @ Dec 5 2008, 19:20) *
Может здесь ответ есть?

В приведенном коде своих проблем для начала выше головы.
1.Всякой мути надергано и сляпано из каких-то исходников sad.gif
2.Выделение динамической памяти в обработчике прерывания без всякой надобности да еще и не освобождается при этом.
3.Для копирования в очередь передается не указатель на CAN буфер а указатель на этот указатель..
4.Вызов каой-то мутной печати из обработчика..
5......


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


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


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