[an error occurred while processing this directive]
Период опроса установлен 32 мс. Кроме того а же не просто тупо пишу(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено F8 17 ноября 2006 г. 17:00
В ответ на: 1ms Это период фрейма в USB. Подозреваю, что вопрос с кривыми руками(+) отправлено <font color=gray>misyachniy</font> 17 ноября 2006 г. 15:01

Когда приходят данные, происходит прерывание, в этом прервании устанавливаю флажек, что данные готовы. Аналогично с отравкой данных.


void TMER1_ISR()
{
while (((U1LSR & 0x01) == 1) && (RxLength1 < USB_VCOM_BUFSIZE))
{//читаю данные из UARTа в буфер
UART2USBBuf1[RxLength1] = U1RBR;
RxLength1++;
}

if(Data2UART)
{//Пришли данные для передачи в UART
DeviceData2UART();
Data2UART = 0;
}
else if(Data2Host1)
{//Предыдущий пакет отправлен
if (RxLength1 != 0)
{
USB_WriteEP(0x80 | 0x05, &UART2USBBuf1[0], RxLength1 );
RxLength1 = 0;
Data2Host1 = 0;
}
}
T0IR = 0xff;
}

void UART1_ISR()//Прерывание от UART
{//Включено только прерывние по THRE

if(UART1_cnt == 0)
{
if(UART1_DR)
{//Новая партия данных готова
UART1_pData = &USB2UARTBuf1[0];
UART1_cnt = USB_ReadEP(0x05, UART1_pData);
UART1_DR = false;
}
else
{ //Данных для передачи больше нет
U1IER &= ~0x02;//Запрещаю прерывание
UART1_Tx_complete = true;
return;
}
}

for(int i = 0; i < 15; i++)
{
U1THR = *UART1_pData++;
UART1_cnt--;
if(UART1_cnt == 0)return;
}
}

void DeviceData2UART()
{
BYTE *pData;
BYTE cnt;

if(UART1_Tx_complete)
{
pData = &USB2UARTBuf1[0];
cnt = USB_ReadEP(0x05, pData);

for(int i = 0; i<15; i++)
{
if(cnt != 0)
{
U1THR = *pData++;
cnt--;
}
else break;
}
UART1_cnt = cnt;
UART1_pData = pData;
UART1_Tx_complete = false;
UART1_DR = false;
U1IER |= 0x02;
}
else
{
UART1_DR = true;
}

}


void USB_EndPoint5 (DWORD event)
{//Сюда попадаю из прерывания по USB
switch (event)
{
case USB_EVT_IN:
//Данные хосту отправленны
Data2Host1 = 1;
break;
case USB_EVT_OUT:
//Пришли данные от хоста
Data2UART = 1;
break;
}
}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание