Перейти к содержанию
    

Flexz

Свой
  • Постов

    252
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Flexz


  1. Cимптомы похожи на мое ковыряние с DMA и UART (проц правда 912FW). Я тогда так до конца и не разобрался в чем именно было дело, (возможно, в последовательности заполнения регистра управления) но помогл отказ от STшных функций. В итоге настройка DMA на прием выглядит так:

    	DMA_Channel_RX->CCNF = DMA_FlowCntrl2_DMA | C328_UART_SRC_RX | DMA_ITMask_ITC;
    DMA_Channel_RX->SRC = (u32)(&C328_UART->DR);
    DMA_Channel_RX->CC = DMA_DesWidth_Byte | DMA_SrcWidth_Byte |
        				DMA_DesBst_1Data | DMA_SrcBst_1Data |
        				DMA_ChannelDESInc
        				//| 0x80000000 | length
        				;

    а запуск приема так:

    void	startDMAuartRX(DMA_Channel_TypeDef *DMA_ChannelX, char *dst, unsigned short length)
    {
    DMA_ChannelCmd (DMA_ChannelX,DISABLE);
    
    DMA_ChannelX->DES = (u32)dst;
    DMA_ChannelX->LLI = 0;
    
    DMA_ChannelX->CC |= 0x80000000 | length;
    DMA_ChannelCmd (DMA_ChannelX,ENABLE);
    return;
    }
    

    C328_UART_SRC_RX - DMA_SRC_UART1_RX

    C328_UART - UART1

    0x80000000 - активация прерывания.

    По поводу SSP как флоу контроллера - в доках явно указано, что флоу котроллером периферию можно назначать только для USB. Остальные устройства не поддерживают необходимые команды.

  2. Через atm6124.sys USB делать не пробовал, так что как именно он работает - не знаю. Но две передачи, которые показывает USBTrace - это везде так.

    Могу разве-что посоветовать сделать вывод в DBGU на устройстве и посмотреть с той стороны в динамике, только с ним аккуратно надо быть т.к. атмелевская либа ждет вывода всего сообщения и могут появиться нежелательные задежки, либо написать свой буферизованный вывод через PDC.

     

    PS я сам пробовал делать USB через стандартный usbser.sys, но что-то там не заладилось - уж не помню что именно. Попробовал libusb.. он конечно не столь интуитивен, как эмулированный com-порт, но ничего сложного в нем нет, и затыков с ним не было, с тех пор только им и пользуюсь. Если интересно - libusb-win32.sourceforge.net у интерфейсной части есть порти и под C и под C++ и под C#. Со стороны железки ничего менять не нужно, только инф поправить.. там в доках все есть.

  3. а прием со стороны девайса как организован? атмелевским драйвером?

     

    и кусок кода:

    //Ожидание подтверждения прихода на передачу
    while(RealRead<64)
    {
        ReadFile(PipeIn, &buff, 64, &RealRead, NULL); 
    }

    зачем там вайл? может я чего-то не понимаю, что должен делать этот цикл? если Вы так ждете окончания операции - то очень зря.. в любом случае последний параметр нулл - следовательно вызов не overlapped и до завершения чтения (или до таймаута) ReadFile не вернется...

    Что бы посмотреть что там происходит на уровне пакетов поставте какой-нибудь USBTrace.

×
×
  • Создать...