Цитата(vadimuzzz @ Feb 4 2013, 10:05)

мне кажется, тут есть несколько вариантов. покажите, что за железка (с точки зрения SOPC - tri-state-bridge?), тайминги и фрагмент кода (можно с ассемблером для наглядности)
Ну да, почти. Проблема возникла с SD-card контроллером, цеплял его на avalon-MM, правда без tristate - не нужен он там. Организация там такая: регистр статуса, данных, управления и еще что-то. При инициализации (в частности) надо три раза записать в регистр данных 0. Эти три нуля уходят в фифо и потом последовательно на SD. Тайминги пока наверно лишнее. Понятно все на уровне кода вроде.
Это проблема с одним из компонентов, дальше (если ее решить) похожее наверняка с остальными какими-нибудь будет.
на С:
Код
SD_REG(CONTROLL)=1;
SD_REG(CONTROLL)=0;
//Reset SD Card. CMD 0, Arg 0.
//No response, wait for timeout
SD_REG(TX_CMD_FIFO)=0x40;
SD_REG(TX_CMD_FIFO)=0x00;
SD_REG(TX_CMD_FIFO)=0x00;
SD_REG(TX_CMD_FIFO)=0x00;
SD_REG(TX_CMD_FIFO)=0x00;
while ( SD_REG(TIMER_REG) != 0){}
ASM без оптимизации:
Код
/* initialise the MMC card into SD-Bus mode, is performed in HW*/
SD_REG(CONTROLL)=1;
200c568: 00c18034 movhi r3,1536
200c56c: 18c42504 addi r3,r3,4244
200c570: 00800044 movi r2,1
200c574: 18800005 stb r2,0(r3)
SD_REG(CONTROLL)=0;
200c578: 00818034 movhi r2,1536
200c57c: 10842504 addi r2,r2,4244
200c580: 10000005 stb zero,0(r2)
//Reset SD Card. CMD 0, Arg 0.
//No response, wait for timeout
SD_REG(TX_CMD_FIFO)=0x40;
200c584: 00c18034 movhi r3,1536
200c588: 18c42004 addi r3,r3,4224
200c58c: 00801004 movi r2,64
200c590: 18800005 stb r2,0(r3)
SD_REG(TX_CMD_FIFO)=0x00;
200c594: 00818034 movhi r2,1536
200c598: 10842004 addi r2,r2,4224
200c59c: 10000005 stb zero,0(r2)
SD_REG(TX_CMD_FIFO)=0x00;
200c5a0: 00818034 movhi r2,1536
200c5a4: 10842004 addi r2,r2,4224
200c5a8: 10000005 stb zero,0(r2)
SD_REG(TX_CMD_FIFO)=0x00;
200c5ac: 00818034 movhi r2,1536
200c5b0: 10842004 addi r2,r2,4224
200c5b4: 10000005 stb zero,0(r2)
SD_REG(TX_CMD_FIFO)=0x00;
200c5b8: 00818034 movhi r2,1536
200c5bc: 10842004 addi r2,r2,4224
200c5c0: 10000005 stb zero,0(r2)
while ( SD_REG(TIMER_REG) != 0){}
200c5c4: 00818034 movhi r2,1536
200c5c8: 10842604 addi r2,r2,4248
200c5cc: 10800003 ldbu r2,0(r2)
200c5d0: 1005003a cmpeq r2,r2,zero
200c5d4: 1000011e bne r2,zero,200c5dc <mmc_init+0x90>
200c5d8: 003ffa06 br 200c5c4 <mmc_init+0x78>
ASM с оптимизацией:
Код
/* initialise the MMC card into SD-Bus mode, is performed in HW*/
SD_REG(CONTROLL)=1;
SD_REG(CONTROLL)=0;
20073f4: 10bfff04 addi r2,r2,-4
20073f8: 10000005 stb zero,0(r2)
//Reset SD Card. CMD 0, Arg 0.
//No response, wait for timeout
SD_REG(TX_CMD_FIFO)=0x40;
SD_REG(TX_CMD_FIFO)=0x00;
SD_REG(TX_CMD_FIFO)=0x00;
SD_REG(TX_CMD_FIFO)=0x00;
SD_REG(TX_CMD_FIFO)=0x00;
20073fc: 10bffb04 addi r2,r2,-20
2007400: 10000005 stb zero,0(r2)
2007404: 1807003a cmpeq r3,r3,zero
while ( SD_REG(TIMER_REG) != 0){}
2007408: 183fff26 beq r3,zero,2007408 <mmc_init+0x3c>