Jump to content

    

Valkaryn

Участник
  • Content Count

    7
  • Joined

  • Last visited

Everything posted by Valkaryn


  1. Ага, хорошо, буду пробовать. Спасибо Вам большое.
  2. Каким образом приходят данные - это пока не столь важно. У меня сейчас в приоритете разобраться именно с записью в DDR. Потом, если я правильно понял назначение системы, эти данные приходят на комп. Но суть в чём. Да, Вы правы, в моём случае используется второй вариант. Ну и логика мне понятна, кроме... что такое BBT? И как правильно настроить прерывания? Когда это сделаю, мне надо будет с помощью ChipScope убедиться (пока не знаю, каким образом), что данные записываются как надо. Рылся в разных источниках, сейчас в голове немного каша, так что прошу помочь немного разобраться с записью.
  3. Здравствуйте. Я в данный момент пробую разобраться, как записывать и считывать данные на/с DDR3. В целом задача состоит в том, что с АЦП поступают данные, которые затем я и хочу записать на DDR-ку. В XPS ещё до меня была уже собрана схема таким образом, что запись/чтение производится посредством CDMA. Мне же нужно в SDK написать такой код, чтобы данные записывались в память. Я что-то написал, но пока что временно нет возможности проверить, правильно ли и будет ли вообще это работать. Если необходимо, то работаю я с Virtex-6 (xc6vlx240t). Код прилагается (не весь, а только основная часть): int XAxiCdma_Run (XAxiCdma *InstancePtr, u16 DeviceId) { XAxiCdma_Config *CfgPtr; int Status; int SubmitTries = 1; /* Retry to submit */ int Tries = NUMBER_OF_TRANSFERS; int Index; /* * Initialize the XAxiCdma device. */ CfgPtr = XAxiCdma_LookupConfig(DeviceId); if (!CfgPtr) { print("XAxiCdma_LookupConfig failed!\n"); return XST_FAILURE; } Status = XAxiCdma_CfgInitialize(InstancePtr, CfgPtr, CfgPtr->BaseAddress); if (Status != XST_SUCCESS) { print("XAxiCdma_CfgInitialize failed!\n"); return XST_FAILURE; } /* * Setup the interrupt system */ // Status = SetupIntrSystem /* * Enable all (completion/error/delay) interrupts */ XAxiCdma_IntrEnable (InstancePtr, XAXICDMA_XR_IRQ_ALL_MASK); for (Index = 0; Index < Tries; Index++) { Status = CDMATransfer (InstancePtr, BUFFER_BYTESIZE, SubmitTries); if (Status != XST_SUCCESS) { //DisableIntrSystem (IntcInstancePtr, IntrId); return XST_FAILURE; } } /* * Test finishes successfully, clean up and return */ XAxiCdma_IntrDisable(InstancePtr, XAXICDMA_XR_IRQ_ALL_MASK); return XST_SUCCESS; } static int CDMATransfer (XAxiCdma *InstancePtr, int Length, int Retries) { int Status; Done = 0; Error = 0; printf("Start Transfer \n\r"); /* * Try to start the DMA transfer */ Done = 0; Error = 0; /* * Flush the SrcBuffer before the DMA transfer, in case the Data Cache * is enabled */ Xil_DCacheFlushRange ((u32)SourceAddr, Length); Status = XAxiCdma_SimpleTransfer (InstancePtr, (u32)(u8 *) (SourceAddr ), (u32)(DestAddr), Length, Cdma_Callback, (void *)InstancePtr); if (Status == XST_FAILURE) { printf ("Error in Transfer \n\r"); return 1; } } Вот. Посмотрите, пожалуйста, и скажите, может, я где-то ошибся или что-то упустил? Заранее спасибо.
  4. Вообще нужно на DDR'ку данные с АЦП записывать. Я в EDK раньше не работал, сейчас для меня главное - разобраться как именно, используя MicroBlaze, записывать и считывать данные с DDR3.
  5. Это то, что обсуждалось в этом топике?
  6. Всем доброго времени суток. Я создал с помощью Xilinx MIG 3.92 контроллер для DDR3 SDRAM, почитал вроде некоторые мануалы и даташиты, разобрался с командами, формируемыми через cs|cas|ras|we, но несколько теряюсь и не могу понять, как посредством контроллера, создаваемого коркой, производить чтение и запись в SDRAM. И, собственно, вопрос, как правильно пользоваться коркой для чтения/записи в SDRAM?