реклама на сайте
подробности

 
 
> Не стартует DMA в LPC2148.
Vova_Minsk
сообщение Sep 25 2007, 08:05
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 8-03-07
Пользователь №: 25 975



Передача организована в bulk режиме. Без использования DMA все передается нормально. При инициализации DMA ошибок не выдает, но переходит в IDLE MODE и ничего не отсылает. Использую кейловский стек, драйвер генерировал в DriverStudio 2.7.

Dd.BufAdr = (DWORD)DataBuf;
Dd.BufLen = 512;
Dd.MaxSize = USB_MAX_PACKET0; // 64 байта
Dd.Cfg.Val = 0;
USB_DMA_Setup (USB_ENDPOINT_IN(5), &Dd))
USB_DMA_Enable(USB_ENDPOINT_IN(5));
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
3m-soft
сообщение Sep 25 2007, 10:03
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 24-08-07
Пользователь №: 30 026



Так как я не знаю какое описание структуры у тебя, то я лучше покажу как у меня:

typedef __packed struct _USB_DMA_DESCRIPTOR
{
void* next_dd; // Указатель на следующий DMA дескриптор
__packed union
{ // DMA конфигурация
__packed struct
{
WORD atle : 1; // Включение режима ATLE (Auto Transfer Length Extract)
WORD reserved1 : 1; // Зарезервировано
WORD link : 1; // Указатель на следующий DMA дескриптор правильный
WORD reserved2 : 1; // Зарезервировано
WORD isochronous : 1; // Признак изохронной передачи
WORD max_packet_size : 11; // Максимальный размер пакета
} bit;
WORD value;
} dd_config;
WORD dma_buffer_length; // Размер DMA буфера
BYTE* dma_buffer; // Указатель на DMA буфер
__packed union
{ // Статус DMA дескриптора
__packed struct
{
WORD retired : 1; // Обработка дескриптора закончена
WORD status : 4; // Текущий статус обработки дескриптора
WORD packet_valid : 1; // Последний переданный пакет обработан без ошибок
WORD ls_byte_extracted : 1; // Младший байт из dma_buffer_length выбран (только для ATLE режима)
WORD ms_byte_extracted : 1; // Старший байт из dma_buffer_length выбран (только для ATLE режима)
WORD position : 6; // Позиция внутри пакета (только для ATLE режима)
WORD reserved : 2; // Зарезервировано
} bit;
WORD value;
} dd_status;
WORD present_count; // Текущее количество переданных байт
} USB_DMA_DESCRIPTOR, *PUSB_DMA_DESCRIPTOR;

void dd_init(PUSB_DMA_DESCRIPTOR _dd)
{
_dd->dd.next_dd=0;
_dd->dd.dd_config.value=0;
_dd->dd.dd_config.bit.max_packet_size=64;
_dd->dd.dma_buffer=buffer_pointer;
_dd->dd.dma_buffer_length=DMABUFFER_SIZE;
_dd->dd.dd_status.value=0;
_dd->dd.present_count=0;
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 21:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016