Как работает чтение / запись памяти на устройстве PCI в VxWorks 653? - PullRequest
2 голосов
/ 29 декабря 2010

Я использую VxWorks 653, и моя цель - Power PC wrSbc7457.

У меня мезонинная карта на моем wrSbc7457, и я пытаюсь записать / прочитать память на этой мезонинной карте.

Для тех из вас, кто знаком с VxWorks, в функции usrAppInit() моего ModuleOS есть следующее:

printf ( "Entering ModuleOS, usrAppInit() ...\n" ) ;
printf ( "sysModel() returns %s\n", sysModel() ) ;
pciDeviceShow ( 0 ) ;


{
int pciBus, pciDevice, pciFunc ;
UINT32  BAR_0_contents, BAR_1_contents ;

printf
    ( "\npciFindDevice returns STATUS %d\n",
            pciFindDevice ( my_VENDORID, my_PMC_DEVICEID, 0, &pciBus, &pciDevice, &pciFunc )
    ) ;
printf ( "\tand pciBus = %d, pciDevice = %d, pciFunc = %d\n", pciBus, pciDevice, pciFunc ) ;

printf ( "\npciConfigInLong returns STATUS %d\n",
        pciConfigInLong ( pciBus, pciDevice, pciFunc, PCI_CFG_BASE_ADDRESS_0, & BAR_0_contents ) ) ;
printf ( "\tand Base Address Register 0 contains 0x%X\n", BAR_0_contents ) ;
printf ( "\npciConfigInLong returns STATUS %d\n",
        pciConfigInLong ( pciBus, pciDevice, pciFunc, PCI_CFG_BASE_ADDRESS_1, & BAR_1_contents ) ) ;
printf ( "\tand Base Address Register 1 contains 0x%X\n", BAR_1_contents ) ;

Моя цель выдает следующее при загрузке образа загрузки ОС:

Entering ModuleOS, usrAppInit() ...

sysModel() returns wrSbc7457 Power PC

Scanning function 0 of each PCI device on bus 0
Using configuration mechanism 0
bus       device    function  vendorID  deviceID  class
00000000  00000000  00000000  0000----  0000----  000-----
00000000  00000001  00000000  0000----  0000----  00--0000
00000000  00000002  00000000  0000----  0000----  000-----

pciFindDevice returns STATUS 0 (OK)
        and pciBus = 0, pciDevice = 1, pciFunc = 0

pciConfigInLong returns STATUS 0 (OK)
        and Base Address Register 0 contains 0x50000000

pciConfigInLong returns STATUS 0 (OK)
        and Base Address Register 1 contains 0x58000000

Мой вопрос: как мне сопоставить память моей мезонинной карты с адресным пространством моего хоста, а затем как мне записать / прочитать память на этой мезонинной карте?

1 Ответ

1 голос
/ 23 февраля 2011

К сожалению, универсального ответа нет. Вы должны запрограммировать мост PCI. Отчасти это зависит от того, используете вы автоматическую конфигурацию PCI или нет.

Вы должны посмотреть ссылки на библиотеки для pciConfig и / или pciAutoConfig.

Ваше устройство выглядит так, как будто оно имеет два адресных пространства 0x50000000 и 0x58000000, но я считаю, что это адресное пространство PCI, а не отображение моста узла.

...