ARM AT91SAM - простой USB для чтения с вопросом обратного вызова - PullRequest
1 голос
/ 15 августа 2011

У меня очень простой вопрос о считывании USB с обратными вызовами.

Я хочу настроить чтение в буфер, а затем дождаться завершения передачи, прежде чем использовать данные в буфере. Каркас для чипа настроен так, что вы начинаете передачу через USB, вызывая USBD_Read, который вернет успех, если передача началась правильно. Затем обратный вызов будет вызван, когда передача будет завершена. Вот как я сейчас это делаю:

volatile unsigned char readArrayLock = 0;

// обратный вызов чтения USB

void readNextDataArrayCallback(void *pArg, unsigned char status, unsigned int transfered, unsigned int remaining){
 readArrayLock = 0;
}

// Для чтения данных USB

readArrayLock = ! USBD_Read(0x2, g_pucDataArray, g_iDataPacketSize, (TransferCallback)readNextDataArrayCallback, 0);

// ожидание

while (readArrayLocked);

// Затем использовать данные

Проблема, с которой я сталкиваюсь, заключается в том, что прерывание никогда не вызывается во время цикла while. Если я закомментирую цикл while, вызывается interupt. В основном мой вопрос: как я могу прервать цикл while с помощью обратного вызова?

Как я могу это исправить? Или есть лучший метод для достижения того же самого?

Спасибо

...