Проектирование CDC-устройств на микроконтроллерах со встроенным USB-модулем. Воробьева Г.С - 38 стр.

UptoLike

38
(Данный массив прописан в заголовочном файле test.h ) Затем, для
того чтобы отправить данные обратно в компьютер, мы
переключаемся на первую конечную точку и заполняем ее буфер
данными из массива info.
Обработчик прерывания от USB модуля.
void USB_inter(void) interrupt 13 // указываем номер вектора
//прерывания
{
Disable_interrupt( ); // запрещаем прерывания
if (Usb_endpoint_interrupt()) //если обнаружено прерывание от конечной
точки
{
Usb_select_ep(0); // переключиться на 0 конечную точку
if (Usb_setup_received()) // если получен пакет SETUP
{
usb_control_packet_processed(); // обработка пакета setup
}
// получение данных со 2 конечной точки,
прием //данных от компьютра
Usb_select_ep(2); // переключение на 2 конечную точку
bcount = UBYCTLX; // считывание числа принятых байт
if (bcount > 0) // если число принятых байт больше нуля
{
for (i=0; i<bcount;i++)
{
Usb_read(i); // считываем данные с буфера конечной
точки 2 и //сохраняем в массиве info
Usb_clear_rx(); // сбрасываем флаг приема
}
Usb_select_ep(1); // переключаемся на первую конечную точку
for (i=0; i<bcount;i++)
{
Usb_write_byte(info[i]); // заполняем буфер конечной точки один
принятыми //ранее данными
}
Usb_set_tx_ready(); // устанавливаем флаг готовности данных для передачи