Question
Waiting for Data with Interrupt
Posted on February 04, 2014 at 22:53
Gents (and maybe Ladies),
My goal is to wait until a certain amount of data has been received. I have setup an interrupt (Can Bus) and when it is triggered it stuffs the message into an Array. I'm using the following code to wait until all the data is received. However, while in the loop, the CAN interrupt does not trigger. This loop is inside input interrupt, and is after the EXTI flag has been cleared. (There is an infinite loop in the main function) What is the best way to achieve this? Thanks! -Mattint
recCount = CanDriver::CacheCount();
while
(recCount < 100)
{
recCount = CanDriver::CacheCount();
}
CanRxMsg RxMessageArray[200];
int
ArrayCounter = 0;
int
recCounter = 0;
extern
''C''
void
CAN1_RX0_IRQHandler(
void
)
{
GPIO_WriteBit(GPIOD, GPIO_Pin_3, Bit_SET);
CanRxMsg rxMessage;
CAN_Receive(CAN1, CAN_FIFO0, &rxMessage);
CanDriver::StuffCanMsg(rxMessage);
recCounter++;
CAN_ClearITPendingBit(CAN1, CAN_IT_TME);
GPIO_WriteBit(GPIOD, GPIO_Pin_3, Bit_RESET);
}
void
CanDriver::StuffCanMsg(CanRxMsg RxMessage)
{
RxMessageArray[ArrayCounter++] = RxMessage;
}
std::vector<CanRxMsg> CanDriver::ReceiveCache(
bool
empty
/*= true*/
)
{
std::vector<CanRxMsg> returnMessages;
returnMessages.assign(RxMessageArray, RxMessageArray + ArrayCounter);
if
(empty)
{
ArrayCounter = 0;
recCounter = 0;
}
return
returnMessages;
}
int
CanDriver::CacheCount()
{
return
recCounter;
}
#nvic #nvic