Jag kör en ATmega128 och jobbar med "Extended Memory" via ett DPSRAM för att skapa en kommunikationskanal mellan ATmega128:an och en FPGA. DPSRAMet har bla. en BUSY-kanal som indikerar när båda sidorna accessar samma minnesarea. Den sida som förlorar får BUSY=LOW, vilket betyder att läsningen eller skrivningen inte gick att utföra. Detta medför självklart att man får försöka göra sin operation igen tills man lyckas.
Men, som det verkar finns det inget stöd för detta i "Extended Memory"-funktionen som medföljer ATmega128:an. Tanken är väl att det ska användas av endast en part och då uppstår ju aldrig ett läge där det är "BUSY" på linjen.
Frågan är alltså om det går att använda DPSRAM med "Extended Memory" i detta läge.
kan du inte göra så att du kopplar BUSY till en negative-edge triggad interrupt portpinne på AVR:n
om du skriver koden i C så kan du ha adressvariabeln som en global och när en interrupt kommer läser ISR:en av senaste lästa/skrivna address, och repeterar läsningen/skrivningen
chille: jag vet inte vad de kostar. kolla på farnell. 16k är de jag kör med.
macgyver: Du gav mej en idé. BUSY-signalen till cpu:n går nämligen via fpga:n. Om jag kollar mot den efter en skrivning samtidigt som jag låter fpga:n hålla BUSY-signalen till cpu:n tills jag ska göra en ny skrivning, då hinner cpu:n läsa den. Ägget är kläckt
japp det funkar ju, fast det blir ju lite långsamare att polla BUSY linjen efter varje skrivning/läsning än att använda interuppt vid kollision.
men om hastighet inte har nån betydelse så är det lättast som du säger att läsa av BUSY status från FPGA:n efter skrivning/läsning istället för att använda använda interuppt
I ett projekt där jag använde SPRAM upptäckte jag at det var 2 adressor (högsta) som var roliga: Om sida A skrev till ena adressen skickades ett interrupt ut till sida B och om sida B skrev till andra adressen kom det en interrupt ut till sida A. Skitsmidigt, snacka om att kunna fylla på och skriva "kör för fan!"
Då jag hade DPRAMen som "ena sidan skriver och andra läser enbart" använde jag aldrig "krock-skyddet" men jag ville ha gjort det vid att koppla Wait till "Halt" på processorerna, en krock-skrivning hade då stoppat den ena processor 1 skriv cyklus och sedan hade den kör sedan.
Minnet jag använde är från Cypress som har många roliga saker.