Как начать писать код приложения c, используя вызовы API, приведенные в коде драйвера c? - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу начать писать код приложения для "DMA Altera IP DMA-сбора данных", который передает данные из одного места в другое с помощью предварительно определенных дескрипторов. Каждый дескриптор представляет собой структурированный тип данных, содержащий write_address, read_address, length данных для передачи, address of next descriptor в качестве членов внутри этой структуры. Я могу иметь любое количество дескрипторов. Коллекция этих дескрипторов называется списком. Я должен переместить этот список на устройство памяти (блок hw на ПЛИС), используя его базовый адрес (что-то вроде 0x10002000). (это программная часть, код c запускается из SDK). ).

Ядро DMA (аппаратное обеспечение) считывает список из памяти и выполняет передачи в соответствии с доступной информацией из каждого дескриптора. (этот пункт является аппаратной частью).

Это идея. Теперь я должен поместить первый абзац в код C, используя API, указанный в коде драйвера. это:

структура дескриптора:

typedef struct {
  alt_u32 read_address;
  alt_u32 write_address;
  alt_u32 transfer_length;
  alt_u32 next_desc_ptr;
  alt_u32 bytes_transfered;
  alt_u16 status;
  alt_u16 _pad1_rsvd;
  alt_u32 _pad2_rsvd;
  alt_u32 control;
} alt_msgdma_prefetcher_standard_descriptor_packed       alt_msgdma_prefetcher_standard_descriptor;

API 1:

static int alt_msgdma_construct_prefetcher_standard_descriptor(
    alt_msgdma_dev *dev,
    alt_msgdma_prefetcher_standard_descriptor *descriptor,
    alt_u32 read_address, 
    alt_u32 write_address, 
    alt_u32 length, 
    alt_u32 control)

API 2:

int alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor (
    alt_msgdma_dev *dev,
    alt_msgdma_prefetcher_standard_descriptor *descriptor,
    alt_u32 read_address,
    alt_u32 write_address,
    alt_u32 length,
    alt_u32 control)
{
    return alt_msgdma_construct_prefetcher_standard_descriptor(dev, descriptor,
        read_address, write_address, length, control);
}

API 3:

int alt_msgdma_prefetcher_add_standard_desc_to_list (
    alt_msgdma_prefetcher_standard_descriptor** list,
    alt_msgdma_prefetcher_standard_descriptor* descriptor)

, а затем еще 2 API для инициации переводов.

Я понятия не имею, как проверить свое оборудование на ПЛИС (устройство hw, которое содержит цифровые схемы, такие как процессор, DDR, PCIE, встроенная память, логика нестандартного дизайна, написанная на Verilog или VHDL и т. Д.).

...