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

 
 
> Размер транзакции в SGDMA Altera
edren_baton
сообщение Feb 21 2015, 14:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 13-10-08
Пользователь №: 40 915



Всем доброго времени суток!

Учусь работать с модулем SGDMA MM-ST. Для начала просто вывожу квадрат инфы из памяти.

Учитывая тот факт, что для формирования нормального кадра Avalon-ST необходимо перед кадром с информацией сначала отправить пакет Contol Packet, а потом в кадре с информацией первый байт выставить в 0, т.е:

SOP -> Control Packet -> EOP -> SOP -> 1s_byte = 0 + Frame_data -> EOP

для реализации пытаюсь в SGDMA сформировать три транзакции:
1. Control Packet
2. Один байт = 0
3. Сам кадр

Инициализация и запуск SGDMA (часть)
Код
void init_and_start_framebuffer(alt_sgdma_dev *dma)
{
    // frame buffer A
    alt_u8* buff;
    alt_u16 size;
    int i;

    for(i = 0; i < 3; ++i) {

    switch ( i ) {
            case 0:
                size = 0xa;
                buff = (alt_u8*)frameBufferA;
                break;
            case 1:
                size = 0x1;
                buff = (alt_u8*)frameBufferA + 0x10;
                break;
            case 2:
                size = 0x6400;
                buff = (alt_u8*)frameBufferA + 0x8 + 0x10;
                break;
        }

        alt_avalon_sgdma_construct_mem_to_stream_desc(
                                                        &dmaDescA[i],
                                                        (i<3) ? (&dmaDescA[i+1]) : &dmaDescEND,
                                                        (alt_u32*)buff,
                                                        size,
                                                        0,
                                                        i==0 | i==1, // sop
                                                        i==0 | i==2, // eop
                                                        0);

    }


Байты для первых двух транзакций.
Код
int main()
{
    IOWR(frameBufferA, 0, 0x0a00000f);
    IOWR(frameBufferA+1, 0, 0x0a000000);
    IOWR(frameBufferA+2, 0, 0x00000200);
    IOWR(frameBufferA+3, 0, 0x00000000);


В первой транзакции (для Control Packet) ее размер (size) получается задать произвольно с кратностью 1 байт. Проблема заключается в том, что во второй транзакции не получается задать ее размер = 1 байту. Если задать size меньше 4, то считывается всегда 4 байта, если больше 4, то 8 байт и т.д.

В текущей ситуации кадр формируется нормально, но первые три байта кадра оказываются равными нулю (т.к. в начале второй транзакции считывается 0х00000000).

Подскажите, пожалуйста, как мне сформировать этот 0 в начале кадра? Или, может быть, я изобретаю велосипед и есть модуль, который можно поставить после SGDMA?

P.S. Про существование Clocked Video Output, Frame Reader и Frame Buffer в курсе, работал с ними, нужен именно SGDMA =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
edren_baton
сообщение Feb 23 2015, 02:15
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 13-10-08
Пользователь №: 40 915



По ходу освоения SGDMA возникают все новые вопросы =)

Подцепил к своему проекту SGDMA ST-MM для записи видео в память.
Есть желание сделать аналог Alpha Blending Mixer, а именно:

задан некоторый буфер в sdram, который выполняет роль фона (размер 1000х1000). Через SGDMA ST-MM приходит видео поток (размер кадра 200х200) и его нужно разместить в левом верхнем углу.

Как лучше сделать:
- для каждой строки делать отдельный дескриптор с указанием размера транзакции и нужного начального адреса?
- или создать новый малый буфер внутри первого с соответствующим переназначением адресов?

Если второй вариант предпочтительнее, прошу немного пояснить синтаксис такого задания, ибо с указателями пока еще путаюсь =(
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 16:08
Рейтинг@Mail.ru


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