maxics 0 7 июля, 2023 Опубликовано 7 июля, 2023 · Жалоба Пытаюсь организовать потоковую передачу IQ в ЦАП в режиме DMA трансивера AD9361. В коде который предоставляет AD по умолчанию стоит циклический режим: dac_dma_write(AXI_DMAC_REG_FLAGS, DMAC_FLAGS_CYCLIC), меняю этот на непрерывный dac_dma_write(AXI_DMAC_REG_FLAGS, DMAC_FLAGS_TLAST), жду конца передачи, анализирую dac_dma_read(AXI_DMAC_REG_START_TRANSFER, ®_val), если 0, читаю dac_dma_read(AXI_DMAC_REG_IRQ_PENDING, ®_val), жду, когда 0 и 1 бит этого регистра в 1. Та вот 0 бит START_OF_TRANSFER в единице, а 1 бит END_OF_TRANSFER в нуле. Если пропускать проверку этого регистра, то при следующей передаче AXI_DMAC_REG_START_TRANSFER остаётся в единице. Уже голову сломал, читал поддержку AD, вроде всё делаю правильно. Помогите решить проблему. Код прилагаю: dac_dma_write(AXI_DMAC_REG_CTRL, 0); dac_dma_write(AXI_DMAC_REG_CTRL, AXI_DMAC_CTRL_ENABLE); dac_dma_write(AXI_DMAC_REG_IRQ_MASK, 0x0); dac_dma_write(AXI_DMAC_REG_IRQ_PENDING, ®_val);// здесь считываю 1 dac_dma_write(AXI_DMAC_REG_IRQ_PENDING, reg_val); dac_dma_write(AXI_DMAC_REG_FLAGS, DMAC_FLAGS_TLAST);// устанавливаю непрерывный режим dac_dma_write(AXI_DMAC_REG_SRC_ADDRESS, DAC_DDR_BASEADDR);//устанавливаю адрес dac_dma_write(AXI_DMAC_REG_SRC_STRIDE, 0x0); dac_dma_write(AXI_DMAC_REG_X_LENGTH, 4096 - 1);//задаю длину dac_dma_write(AXI_DMAC_REG_Y_LENGTH, 0x0); dac_dma_write(AXI_DMAC_REG_START_TRANSFER, 0x1);//старт первой передачи dac_dma_read(AXI_DMAC_REG_START_TRANSFER, ®_val); do { dac_dma_read(AXI_DMAC_REG_START_TRANSFER, ®_val); //считываю 0, передача поставлена в очередь } while(reg_val == 1); do { dac_dma_read(AXI_DMAC_REG_IRQ_PENDING, ®_val); //читаю биты START_OF_TRANSFER( '1' ) b END_OF_TRANSFER( '0' ) } while(reg_val != (AXI_DMAC_IRQ_EOT | AXI_DMAC_IRQ_SOT));// не выполняется т.к. END_OF_TRANSFER всегда в нуле //// пробовал убирать эту проверку, но тогда при следующей передачи, когда читаю dac_dma_read(AXI_DMAC_REG_START_TRANSFER, ®_val), он всегда в единице Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rmDAC 4 4 сентября, 2023 Опубликовано 4 сентября, 2023 · Жалоба Проверка это не вариант только софтовое прерывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться