我做的板卡是基于9052的,还没有写驱动,用windriver调试,生成驱动的时候用的都是默认的选项,我现在想测试板卡和主机通讯这部分是否有问题,插上板卡,装了刚生成的驱动后,打开DriverWizard,在“Define and test resource for your device”选项卡中,选了BAR1后点“read/write I/0”,读各个寄存器都没有问题,但是读写BAR2,都无效。
我板卡上用了TMS320VC5409,我想写数据给5409,如果写进来没有问题,就说明通讯正常,用过的同事讲,在“Define and test resource for your device”选项卡中,选了BAR2后点“read/write I/0”,就是对5409的读写。我操作步骤如下:
用windriver生成驱动,再插好板卡,装上驱动,打开windriver,选择create a new driver project, 点next, 在列表中选择自己的板,点next,就进入“Define and test resource for your device”对话框,在这个对话框中,有I/O,memory,Interruptors和registers四个选项卡,因为我的板卡是配置为I/O space的,所以就是注意I/O选项卡了。这里面有BAR0,BAR2,BAR5,我试了读BAR1,读到的都是我配置PCI9052时设置的LOCAL寄存器值,是不是选BAR2后,点“read/write I/0”,就是对板卡上CPU的读写?
我用的是片选0,PCI本地端寄存器设置如下:
L00H Range for PCI-to-Local Space 0: FFFF FF01
(将PCI存储器空间映射为I/O空间)
L14H Local Base Address(Remap) for PCI-to-Local Address Space 0: 0000 0001
(使能空间0)
Bus Region Descriptors for Local Address Space 0: D428 5400
(禁能连续发送数据,LRDYi#,BTERM#,预取计数,总线宽设为8,字节次序为小ENDIA,并在数据传送和地址传送之间插入1个周期的等待状态。因为我不使用LRDYi,所以插入等待状态来处理PCI和DSP时钟不同步问题。)
Chip Select (CS) 0 Base and Range: 0000 0041
(这个解码出来的基地址为C400(就是BAR2基地址吧?),RANGE为100,我觉得按照PCI手册上101页第六章讲的,不应该是这个地址的。)
Interrupt Control/Status: 0000 0000
(我这里主机和DSP之间的通讯都采用查询的方式进行,所以禁用所有的中断,但是我这里硬件上做了连接。)
User I/O, Direct Slave Response, Serial EEPROM, and Initialization Control:0022 D02F
配合上我的原理简图,请教哪里有错误吗?