В XPS собираю систему: microblaze, ddr, cdma, axi_pcie, порты вывода на led'ы.
Нажмите для просмотра прикрепленного файла
В настройках pcie ядра режим определил как end point, задал только BAR0 и его размер 64 кбайт 32 bit адресного пространства. На начальном этапе работаю без DMA, пытаюсь записать число микроблейзом в регистр BAR0
В SDK программа выполняет: мигание светодиодом и запись числа в первую ячейку BAR0 (для записи использую функцию вывода данных на периферию Xil_Out32).
Код
#include "xparameters.h"
#include "xil_io.h"
/************************** Function Prototypes *****************************/
int leds (void);
#define delay 250000
void main(void)
{
while(1)
{
leds();
Xil_Out32(XPAR_PCI_EXPRESS_AXIBAR_0, 0x01234567);
}
}
int leds (void)
{
int i;
for(i=0; i<delay; i++ );
Xil_Out8(XPAR_LEDS_8BITS_BASEADDR, 0x01);
for(i=0; i<delay; i++ );
Xil_Out8(XPAR_LEDS_8BITS_BASEADDR, 0x00);
return 0;
}
#include "xil_io.h"
/************************** Function Prototypes *****************************/
int leds (void);
#define delay 250000
void main(void)
{
while(1)
{
leds();
Xil_Out32(XPAR_PCI_EXPRESS_AXIBAR_0, 0x01234567);
}
}
int leds (void)
{
int i;
for(i=0; i<delay; i++ );
Xil_Out8(XPAR_LEDS_8BITS_BASEADDR, 0x01);
for(i=0; i<delay; i++ );
Xil_Out8(XPAR_LEDS_8BITS_BASEADDR, 0x00);
return 0;
}
Делаю след образом (плата в разъеме pcie):
-- заливаю .bit файл.
-- перезагружаю компьютер
-- в диспетчере наблюдаю pcie контроллер памяти
-- с помощью PcieTree вижу свою плату с заданными VID, размером BAR0 и его начальным адресом (в конфиг регистре) в оперативной памяти и т.д.
-- открываю содержимое BAR0
-- загружаю .elf файл содержимое в ячейках BAR0 изменилось на FFFFFFFF, светодиод моргнул только один раз,
при обновлении PcieTree начальный адрес BAR0 на 0000.
Нажмите для просмотра прикрепленного файла
Что делаю не так?