我用pci9052做了一块pci卡,外部设备是通过存储器方式读写的。
在pciConfigOutWord(busNo,deviceNo,FunNo,PCI_CFG_COMMAND,PCI_CMD_MEM_ENABLE);之后
调用sysOutByte(address, 0x01);
pci总线上的信号都不对,到pci9052就一点反应都没有了。读pci9052的寄存器是好的
就是不能写到外设去,是用sysOutByte吗?
STATUS canpci_init(unsigned char word) { int busNo; int deviceNo; int FunNo; char irq; int rec_word[6],io_word[6]; UINT32 membaseCsr; UINT32 iobaseCsr; if(ERROR == pciFindDevice(CAN_VENDOR_ID, CAN_DEVICE_ID, 0, &busNo, &deviceNo, &FunNo)) { printErr("\ncan't find the can card\n"); return ERROR; } pciConfigInLong (busNo, deviceNo, FunNo, PCI_CFG_BASE_ADDRESS_2, &membaseCsr); membaseCsr &= 0xFFFFFFF0; pciConfigInByte (busNo, deviceNo, FunNo, PCI_CFG_DEV_INT_LINE, &irq); if (sysMmuMapAdd((void *)membaseCsr, 32,INIT_STATE_MASK, INIT_STATE) == ERROR) { printErr("\ncan't assign enough memory\n"); return ERROR; } else { pciConfigOutWord(busNo,deviceNo,FunNo,PCI_CFG_COMMAND,PCI_CMD_MEM_ENABLE); if(ERROR == taskSpawn("tcan",100,0,0x1000,(FUNCPTR)pciRe_Wr,membaseCsr,0,0,0,0,0,0,0,0,0)) { printErr("/ncan't create a task/n"); return ERROR; } } return OK; /* sysIntEnablePIC (irq); */ }
void pciRe_Wr(int address) { printf("memory address %x",address); FOREVER {
sysOutLong(address, 0x00000001); taskDelay(30); } }
写数据后pci9052的ALE没有反应
这是我的程序,各位看看有问题吗?如果没有问题,可能就是pci9052的问题了
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |