Blame | Last modification | View Log | Download | RSS feed | ?url?
Ïîðòû óïðàâëåíèÿ ïîñëåäîâàòåëüíûìè èíòåðôåéñàìè.
 NeoGS ñóùåñòâóåò òðè ïîñëåäîâàòåëüíûõ SPI-èíòåðôåéñà äëÿ ðàáîòû ñ SD-êàðòîé,
äëÿ óïðàâëåíèÿ MP3-äåêîäåðîì è äëÿ âûäà÷è äàííûõ â äåêîäåð. Êàæäûé èíòåðôåéñ
îáëàäàåò ñâîèìè ñâîéñòâàìè, êðîìå òîãî, äëÿ óïðàâëåíèÿ MP3-äåêîäåðîì
èñïîëüçóþòñÿ äîïîëíèòåëüíûå (ïî îòíîøåíèþ ê SPI-èíòåðôåéñàì) ñèãíàëû.
Äîïîëíèòåëüíûå ñèãíàëû, ðàâíî êàê è íåêîòîðûå ñâîéñòâà èíòåðôåéñîâ
êîíòðîëèðóþòñÿ ÷åðåç äâà ïîðòà: SSTAT è SCTRL.
Ïîðò SSTAT (òîëüêî ÷òåíèå) ñëóæèò äëÿ ÷òåíèÿ ñîñòîÿíèÿ íåêîòîðûõ ñèãíàëîâ,
èìåþùèõ îòíîøåíèå ê óñòðîéñòâàì è SPI-èíòåðôåéñàì è ñîäåðæèò â ñåáå áèòû
B_MDDRQ, B_SDDET, B_SDWP è B_MCRDY. ×òåíèå ïîðòà âîçâðàùàåò òåêóùåå
ñîñòîÿíèå áèòîâ.
Ïîðò SCTRL (÷òåíèå èëè çàïèñü) ñëóæèò äëÿ óïðàâëåíèÿ íåêîòîðûìè ñèãíàëàìè,
èìåþùèìè îòíîøåíèå ê óñòðîéñòâàì è SPI-èíòåðôåéñàì è ñîäåðæèò â ñåáå áèòû
B_SDNCS, B_MCNCS, B_MPXRS, B_MCSPD0, B_MCSPD1 è B_MDHLF. ×òåíèå ýòîãî ïîðòà
âîçâðàùàåò òåêóùåå ñîñòîÿíèå áèòîâ. Äëÿ èçìåíåíèÿ æå ñîñòîÿíèÿ áèòîâ
èñïîëüçóåòñÿ ñëåäóþùàÿ ïðîöåäóðà.
Äëÿ óñòàíîâêè êàêîãî-ëèáî îòäåëüíîãî áèòà â 1 â ïîðò SCTRL çàïèñûâàåòñÿ
÷èñëî (1<<B_SETNCLR) + (1<<B_bit), ãäå B_bit - îäèí èç âûøåïåðå÷èñëåííûõ áèòîâ
ïîðòà SCTRL, à B_SETNCLR - ñëóæåáíûé áèò ýòîãî ïîðòà.
Äëÿ óñòàâêè îòäåëüíîãî áèòà â 0 â ïîðò çàïèñûâàåòñÿ ÷èñëî
(0<<B_SETNCLR) + (1<<B_bit).
Îäíîâðåìåííî ïåðåâåñòè â 1 ëèáî â 0 ìîæíî íåñêîëüêî áèò, äëÿ ÷åãî ñëåäóåò íàáðàòü
èõ ìàñêó â çàïèñûâàåìîì ÷èñëå (ñì. ïðèìåðû).
Òàêèì îáðàçîì, ñîñòîÿíèå áèòà B_SETNCLR â çàïèñûâàåìîì ÷èñëå îïðåäåëÿåò, â êàêîå
ñîñòîÿíèå (0 èëè 1) óñòàíàâëèâàåòñÿ òîò èëè èíîé áèò, â òî âðåìÿ êàê îñòàëüíûå
áèòû çàïèñûâàåìîãî ÷èñëà âûáèðàþò áèòû ïîðòà, êîòîðûå è òðåáóåòñÿ óñòàíîâèòü
â 0 ëèáî â 1.
Ïðèìåðû:
ld A,(0<<B_SETNCLR) + (1<<B_MPXRS) ;óñòàíîâèòü B_MPXRS â íîëü
out (SCTRL),A
ld A,(1<<B_SETNCLR) + (1<<B_MDHLF) ;óñòàíîâèòü B_MDHLF â åäèíèöó
out (SCTRL),A
ld A,(1<<B_SETNCLR) + (1<<B_SDNCS) + (1<<B_MCNCS) ;óñòàíîâèòü B_SDNCS è B_MCNCS â åäèíèöó
out (SCTRL),A
ld A,(0<<B_SETNCLR) + (1<<B_MCSPD1) + (1<<B_MCSPD0) ;ñíà÷àëà î÷èñòèòü áèòû B_MCSPD1 è B_MCSPD1
out (SCTRL),A
ld A,(1<<B_SETNCLR) + (1<<B_MCSPD1) + (0<<B_MCSPD0) ;çàòåì óñòàíîâèòü èõ â ñîñòîÿíèå {B_MCSPD1,B_MCSPD0}={1,0}
out (SCTRL),A
Äàííàÿ ñõåìà óïðàâëåíèÿ áèòàìè ïîçâîëÿåò óïðàâëÿòü ðàçëè÷íûìè áèòàìè èç ðàçëè÷íûõ çàäà÷:
íàïðèìåð îñíîâíîé êîä ìîæåò óïðàâëÿòü áèòîì B_MCNCS, â òî âðåìÿ êàê êîä â ïðåðûâàíèè ìîæåò
óïðàâëÿòü áèòîì B_SDNCS. Òàê êàê êàæäîå îòäåëüíîå èçìåíåíèå áèòîâ â ïîðòó ÿâëÿåòñÿ àòîìàðíûì
è íå âëèÿåò íà äðóãèå áèòû ïîðòà, íå òðåáóåòñÿ çàïðåùàòü ïðåðûâàíèÿ íà ìîìåíòû èçìåíåíèÿ áèòîâ,
÷òî ïîòðåáîâàëîñü áû ïðè òðàäèöèîííîì ïîäõîäå (di:in A,(port):and MASK:or BITS:out (port),A:ei).
Êîíêðåòíîå íàçíà÷åíèå áèòîâ â ïîðòàõ SCTRL è SSTAT îïèñàíî íèæå â ãëàâàõ *SPI-èíòåðôåéñû*,
*Ðàáîòà ñ SD-êàðòîé* è *Ðàáîòà ñ MP3-äåêîäåðîì*.
SPI-èíòåðôåéñû.
SPI-èíòåðôåéñû èñïîëüçóþòñÿ äëÿ óïðàâëåíèÿ è îáìåíà äàííûìè ñ SD-êàðòîé è MP3-äåêîäåðîì.
SPI-ìàñòåð (ñõåìà, îñóùåñòâëÿþùàÿ òàêòèðîâàíèå íà SPI-øèíå) íàõîäèòñÿ â FPGA è óïðàâëÿåòñÿ
ïðîöåññîðîì Z80, SPI-ñëåéâ (ñõåìà, òàêòèðóåìàÿ ìàñòåðîì) íàõîäèòñÿ â òîì èëè èíîì óñòðîéñòâå.
Äàëåå ïðèâîäèòñÿ îáîáù¸ííîå îïèñàíèå SPI-èíòåðôåéñà ñ òî÷êè çðåíèÿ ïðîãðàììèñòà.  NeoGS èñïîëüçóåòñÿ
òðè ñïåöèàëèçèðîâàííûõ SPI-èíòåðôåéñà, îäèí èç êîòîðûõ îáìåíèâàåòñÿ äàííûìè ñ SD-êàðòîé, äðóãîé -
ñ óïðàâëÿþùèì êàíàëîì MP3-äåêîäåðà, à ïîñëåäíèé - ïîñûëàåò MP3-äàííûå â äåêîäåð. Êàæäûé
èç íèõ ìîæåò íå ïîääåðæèâàòü ïîëíûé íàáîð ñâîéñòâ, ïðèâåä¸ííûõ â îáîáù¸ííîì îïèñàíèè.
Îáìåí äàííûìè ÷åðåç SPI-èíòåðôåéñ ïðîèçâîäèòñÿ ïîáàéòíî.  ïðîöåññå êàæäîãî îáìåíà
àïïàðàòíî ïðîèçâîäèòñÿ ïåðåäà÷à áàéòà îò FPGA ê óñòðîéñòâó è îäíîâðåìåííî ïðè¸ì áàéòà
îò óñòðîéñòâà ïî äâóíàïðàâëåííîé ïîñëåäîâàòåëüíîé SPI-øèíå. Ýòà øèíà ñîñòîèò èç ñèãíàëîâ
MOSI (âûõîä SPI-ìàñòåðà è âõîä SPI-ñëåéâà, ïîñëåäîâàòåëüíàÿ ïåðåäà÷à äàííûõ îò ìàñòåðà ñëåéâó),
MISO (âõîä SPI-ìàñòåðà è âûõîä SPI-ñëåéâà, ïîñëåäîâàòåëüíàÿ ïåðåäà÷à äàííûõ îò ñëåéâà ìàñòåðó) è
SCK (âûõîä SPI-ìàñòåðà è âõîä SPI-ñëåéâà, ñèãíàë ñèíõðîíèçàöèè ïåðåäà÷è). Óïðàâëåíèå
âûøåîïèñàííûìè ñèãíàëàìè îñóùåñòâëÿåòñÿ ïîëíîñòüþ àïïàðàòíî, áåç ó÷àñòèÿ ïðîöåññîðà Z80.
 çàâèñèìîñòè îò èñïîëüçóåìîãî ïðîòîêîëà ðàáîòû ñ óñòðîéñòâîì,
çíà÷åíèå ìîãóò èìåòü îáà áàéòà, ïåðåäàííûõ â ðàçíûõ íàïðàâëåíèÿõ, îäèí èç íèõ èëè
íè îäíîãî (çíà÷åíèå èìååò òîëüêî ñàì ôàêò îáìåíà).
SPI-èíòåðôåéñ ñîäåðæèò òàêæå ñèãíàë âûáîðêè NCS. Ïðîöåññ îáìåíà, êàê ïðàâèëî, âûãëÿäèò
ñëåäóþùèì îáðàçîì: ïðîöåññîð Z80 ïåðåâîäèò ñèãíàë NCS èç íåàêòèâíîãî (=1) â àêòèâíîå (=0)
ñîñòîÿíèå, äàëåå ñëåäóåò ñåðèÿ îáìåíîâ áàéòàìè, ïîñëå îêîí÷àíèÿ êîòîðîé ïðîöåññîð
âîçâðàùàåò ñèãíàë NCS â íåàêòèâíîå ñîñòîÿíèå (=1).  íåêîòîðûõ ñëó÷àÿõ òðåáóåòñÿ
íà÷èíàòü îáìåí ïðè íåàêòèâíîì ñîñòîÿíèè NCS, ïðè ýòîì, êàê ïðàâèëî, èìååò çíà÷åíèå
ñàì ôàêò îáìåíà (íàëè÷èå òàêòèðîâàíèÿ ñèãíàëîì SCK íà SPI-øèíå), â òî âðåìÿ êàê ïåðåäàâàåìûå äàííûå
èãíîðèðóþòñÿ îáîèìè ó÷àñòíèêàìè îáìåíà (ìàñòåðîì è ñëåéâîì).
Ïðîöåññ îáìåíà áàéòàìè ïî SPI-øèíå èíèöèèðóåòñÿ ïðîöåññîðîì Z80 ïóò¸ì çàïèñè áàéòà â ïîðò
_SEND. Çàïèñàííûé áàéò ïåðåäà¸òñÿ óñòðîéñòâó, â òî âðåìÿ êàê ïðèíÿòûé â îáìåíå áàéò ñîõðàíÿåòñÿ
â âðåìåííîì ðåãèñòðå SPI-èíòåðôåéñà. Ïîñëå îêîí÷àíèÿ îáìåíà ïðèíÿòûé áàéò èç âðåìåííîãî ðåãèñòðà
ìîæíî ñ÷èòàòü èç ïîðòà _READ. Èç ïîðòà _RSTR ñ÷èòûâàåòñÿ òîò æå áàéò èç âðåìåííîãî ðåãèñòðà,
îäíàêî ôàêò ÷òåíèÿ ýòîãî ïîðòà òàêæå çàïóñêàåò îáìåí ïî SPI-øèíå ñ ïåðåäàâàåìûì áàéòîì 0xFF.
Òàêèì îáðàçîì, êîìàíäû
in A,(_RSTR)
ld B,A
ýêâèâàëåíòíû ñ òî÷êè çðåíèÿ ïåðåäàâàåìûõ ïî SPI-øèíå äàííûõ êîìàíäàì
in A,(_READ)
ld B,A
ld A,0xFF
out (_SEND),A
Ïðîöåññ áàéòîâîãî îáìåíà, èíèöèèðîâàííûé çàïèñüþ â ïîðò _SEND èëè ÷òåíèåì èç ïîðòà _RSTR, çàíèìàåò
êîíå÷íîå âðåìÿ. SPI-èíòåðôåéñû òàêòèðóþòñÿ ÷àñòîòîé ïðîöåññîðà Z80 Fcpu. Îäíàêî ñèãíàë SCK, ÿâëÿÿñü âûõîäîì
ñèíõðîííîé ñõåìû SPI-èíòåðôåéñà, ìîæåò èìåòü ÷àñòîòû Fcpu/2, Fcpu/4, Fcpu/8 èëè Fcpu/16.  NeoGS
íå ïðåäóñìîòðåí ñèãíàë /WAIT äëÿ ïðîöåññîðà Z80, ñëåäîâàòåëüíî ìåæäó ïîñëåäîâàòåëüíûìè èíèöèèðîâàíèÿìè
îáìåíà (çàïèñü â _SEND èëè ÷òåíèå _RSTR) äîëæíà ïðîãðàììíî ôîðìèðîâàòüñÿ ïàóçà â îïðåäåë¸ííîå ÷èñëî
òàêòîâ ïðîöåññîðà Z80. Êðîìå òîãî, ïàóçà äîëæíà ñîáëþäàòüñÿ ìåæäó èíèöèèðîâàíèåì îáìåíà è ÷òåíèåì ïðèíÿòîãî
áàéòà (÷òåíèå _READ èëè _RSTR), à òàêæå ìåæäó èíèöèèðîâàíèåì îáìåíà è óñòàíîâêîé NCS â íåàêòèâíîå ñîñòîÿíèå.
 SPI-èíòåðôåéñå ïðåäóñìîòðåí òàêæå áèò ãîòîâíîñòè RDY, êîòîðûé óñòàíàâëèâàåòñÿ â 0 ñðàçó æå ïîñëå
èíèöèèðîâàíèÿ îáìåíà è âîçâðàùàåòñÿ â 1, êàê òîëüêî îáìåí çàêîí÷èëñÿ. Äàííûé áèò èñïîëüçóåòñÿ, êàê ïðàâèëî,
â ñëó÷àå íèçêèõ ÷àñòîò ñèãíàëà SCK (íàïðèìåð, Fcpu/8 è íèæå) äëÿ óïðîùåíèÿ ïðîöåäóð îáìåíà.
-------------+------------------------------------+-----------------------------------
×àñòîòà SCK,| Ïàóçà ìåæäó èíèöèèðîâàíèÿìè îáìåíà | Ïàóçà ìåæäó èíèöèèðîâàíèåì îáìåíà
Fsck | èëè ìåæäó èíèöèèðîâàíèåì îáìåíà è | è ñíÿòèåì àêòèâíîãî óðîâíÿ NCS,
| ÷òåíèåì ïðèíÿòîãî áàéòà, òàêòû Z80 | òàêòû Z80
-------------+------------------------------------+-----------------------------------
Fcpu/2 | 16 (èñïîëüçîâàòü RDY íåýôôåêòèâíî) | 18 (èñïîëüçîâàòü RDY íåýôôåêòèâíî)
Fcpu/4 | 34 èëè èñïîëüçóéòå áèò RDY | 34 èëè èñïîëüçóéòå áèò RDY
Fcpu/8 | èñïîëüçóéòå áèò RDY | èñïîëüçóéòå áèò RDY
Fcpu/16 | èñïîëüçóéòå áèò RDY | èñïîëüçóéòå áèò RDY
-------------+------------------------------------+-----------------------------------
Ïîä ñëîâàìè "ïàóçà ìåæäó èíèöèèðîâàíèåì îáìåíà è ÷åì-ëèáî" ïîäðàçóìåâàåòñÿ êîëè÷åñòâî
òàêòîâ Z80 ìåæäó íà÷àëîì öèêëîâ ââîäà-âûâîäà, îñóùåñòâëÿþùèõ îïèñàííûå äåéñòâèÿ. Ïðèìåðû:
ld C,_SEND
out (C),D
nop
out (C),E ; âûäåðæàíà ïàóçà 16 òàêòîâ, èñïîëüçóéòå äëÿ ðàáîòû íà Fsck=Fcpu/2
ld C,_READ
out (_SEND),A
nop
in A,(C) ; âûäåðæàíà ïàóçà 16 òàêòîâ, èñïîëüçóéòå äëÿ ðàáîòû íà Fsck=Fcpu/2
ld C,_SEND
ld HL,buffer
outi
outi ; âûäåðæàíà ïàóçà 16 òàêòîâ, èñïîëüçóéòå äëÿ ðàáîòû íà Fsck=Fcpu/2
ld C,_RSTR
ld HL,buffer
ini
ini ; âûäåðæàíà ïàóçà 16 òàêòîâ, èñïîëüçóéòå äëÿ ðàáîòû íà Fsck=Fcpu/2
ld C,_SEND
out (C),A
nop
in A,(_READ) ; ÍÅÂÅÐÍÎ!!!! ïàóçà ìåæäó öèêëàìè ââîäà-âûâîäà ñîñòàâëÿåò 15 òàêòîâ!!!!!!
Ðàçëè÷íûå SPI-èíòåðôåéñû ÿâëÿþòñÿ ïîëíîñòüþ íåçàâèñèìûìè, ñîáëþäåíèå ïàóç îòíîñèòñÿ ê ïîñëåäîâàòåëüíûì
îáðàùåíèÿì ê îäíîìó è òîìó æå èíòåðôåéñó, íàïðèìåð:
ld C,SD_RSTR ;÷òåíèå äàííûõ ñ SD-êàðòû è íåìåäëåííàÿ ïåðåñûëêà èõ â MP3-äåêîäåð
in A,(C) ;ïðåäïîëàãàåòñÿ, ÷òî îáà èíòåðôåéñà ðàáîòàþò íà Fsck=Fcpu/2
out (MD_SEND),A ;èíòåðôåéñû íåçàâèñèìû, íåìåäëåííàÿ ïåðåñûëêà áàéòà
in A,(C) ;ìåæäó èíèöèèðîâàíèÿìè îáìåíà íà SPI-èíòåðôåéñå SD-êàðòû ïàóçà ñîñòàâëÿåò 23 òàêòà
out (MD_SEND),A ;ìåæäó èíèöèèðîâàíèÿìè îáìåíà íà SPI-èíòåðôåéñå MP3-äåêîäåðà ïàóçà ñîñòàâëÿåò 23 òàêòà
SPI-èíòåðôåéñ SD-êàðòû.
Êàê óïîìèíàëîñü âûøå, êîíêðåòíàÿ ðåàëèçàöèÿ SPI-èíòåðôåéñà íå îáëàäàåò âñåìè ñâîéñòâàìè îáîáù¸ííîãî îïèñàíèÿ.
SPI-èíòåðôåéñ, èñïîëüçóåìûé äëÿ îáìåíà ñ SD-êàðòîé, îáëàäàåò ëèøü ñëåäóþùèìè ñâîéñòâàìè.
Ïîðò ïîñûëêè áàéòà è èíèöèèðîâàíèÿ îáìåíà: SD_SEND
Ïîðò ÷òåíèÿ ïðèíÿòîãî áàéòà: SD_READ
Ïîðò ÷òåíèÿ ïðèíÿòîãî áàéòà è èíèöèèðîâàíèÿ ñëåäóþùåãî îáìåíà ñ ïîñûëàåìûì áàéòîì 0xFF: SD_RSTR
Áèò óïðàâëåíèÿ ñèãíàëîì NCS äëÿ SD-êàðòû, íàõîäÿùèéñÿ â ïîðòó SCTRL: B_SDNCS
×àñòîòà SCK ôèêñèðîâàíà è ñîñòàâëÿåò Fsck=Fcpu/2, áèò RDY îòñóòñòâóåò, ñëåäîâàòåëüíî
òðåáóåòñÿ ïðîãðàììíîå ñîáëþäåíèå ïàóç 16 èëè 18 òàêòîâ.
Óïðàâëÿþùèé SPI-èíòåðôåéñ MP3-äåêîäåðà.
Ýòîò èíòåðôåéñ îáëàäàåò ñëåäóþùèìè ñâîéñòâàìè.
Ïîðò ïîñûëêè áàéòà è èíèöèèðîâàíèÿ îáìåíà: MC_SEND
Ïîðò ÷òåíèÿ ïðèíÿòîãî áàéòà: MC_READ
Ïîðò ÷òåíèÿ è èíèöèèðîâàíèÿ îáìåíà îòñóòñòâóåò.
Áèò óïðàâëåíèÿ ñèãíàëîì NCS äëÿ MP3-äåêîäåðà, íàõîäÿùèéñÿ â ïîðòó SCTRL: B_MCNCS
Áèò ãîòîâíîñòè SPI-èíòåðôåéñà â ïîðòó SSTAT: B_MCRDY
ÂÍÈÌÀÍÈÅ! Ñëåäóåò ÷¸òêî ðàçëè÷àòü áèòû B_MCRDY è B_MDDRQ â ïîðòó SSTAT.
Áèò B_MCRDY îòíîñèòñÿ ê óïðàâëÿþùåìó SPI-èíòåðôåéñó MP3-äåêîäåðà, îòðàæàåò ñîñòîÿíèå
ãîòîâíîñòè èíòåðôåéñà è ãåíåðèðóåòñÿ ñõåìîé ýòîãî SPI-èíòåðôåéñà â FPGA.
Áèò B_MDDRQ îòíîñèòñÿ ê SPI-èíòåðôåéñó MP3-äàííûõ äåêîäåðà, è îòðàæàåò ãîòîâíîñòü
äåêîäåðà ïðèíÿòü î÷åðåäíîé áëîê äàííûõ ïî ýòîìó èíòåðôåéñó. Ñèãíàë ãåíåðèðóåòñÿ äåêîäåðîì
è ïðîñòî òðàíñëèðóåòñÿ FPGA ñ âûõîäà äåêîäåðà â áèò ïîðòà SSTAT.
Áèòû óñòàíîâêè ÷àñòîòû Fsck óïðàâëÿþùåãî èíòåðôåéñà MP3-äåêîäåðà B_MCSPD0 è B_MCSPD1 â ïîðòó SCTRL.
---------------------+---------
{B_MCSPD1,B_MCSPD0} | Fsck
---------------------+---------
{0,0} | Fcpu/2
{0,1} | Fcpu/4
{1,0} | Fcpu/8
{1,1} | Fcpu/16
---------------------+---------
SPI-èíòåðôåéñ MP3-äàííûõ äåêîäåðà.
Ïîðò ïîñûëêè áàéòà è èíèöèèðîâàíèÿ îáìåíà MD_SEND
Ïîðò ÷òåíèÿ ïðèíÿòîãî áàéòà - îòñóòñòâóåò.
Ïîðò ÷òåíèÿ è èíèöèèðîâàíèÿ - îòñóòñòâóåò.
ñèãíàë NCS è óïðàâëåíèå èì - îòñóñòâóåò.
Áèò ãîòîâíîñòè èíòåðôåéñà - îòñóòñòâóåò (ñëåäóåò ñîáëþäàòü ïàóçû ïðîãðàììíî).
Áèò óñòàíîâêè ÷àñòîòû Fsck èíòåðôåéñà äàííûõ B_MDHLF â ïîðòó SCTRL:
---------+--------
B_MDHLF | Fsck
---------+--------
0 | Fcpu/2
1 | Fcpu/4
---------+--------
×àñòîòû Fcpu/8 è Fcpu/16 íå ïîääåðæèâàþòñÿ.
Ðàáîòà ñ SD-êàðòîé.
Äëÿ ðàáîòû ñ SD-êàðòîé èñïîëüçóåòñÿ àïïàðàòíûé SPI-èíòåðôåéñ, îïèñàíèå êîòîðîãî íàõîäèòñÿ â ãëàâå *SPI-èíòåðôåéñû*
Êðîìå äàííîãî èíòåðôåéñà ïðåäóñìîòðåíû òàêæå áèòû B_SDDET è B_SDWP â ïîðòó SSTAT.
B_SDDET ðàâåí íóëþ (???) ïðè íàëè÷èè êàðòû â ñëîòå, èíà÷å åäèíèöà
B_SDWP ðàâåí íóëþ (???) ïðè óñòàíîâëåííîé íà êàðòå çàùèòå çàïèñè (ïðè ïîìîùè ôëàæêà íà êîðïóñå êàðòû), èíà÷å åäèíèöà.
ÂÍÈÌÀÍÈÅ! îáà ñèãíàëà ãåíåðÿòñÿ ìåõàíè÷åñêèìè êîíòàêòàìè â ñëîòå SD-êàðòû, ñëåäîâàòåëüíî èìåþò äðåáåçã.
Êîíòàêòû òàêæå ìîãóò íàðóøàòüñÿ (íàïðèìåð, åñëè ìåñòî êîíòàêòà çàãðÿçíåíî), è êàê ñëåäñòâèå, ìîãóò
âûäàâàòü ëîæíûå ïîêàçàíèÿ (åäèíèöà, êîãäà äîëæåí áûòü íóëü).
Ôëàæîê çàùèòû îò çàïèñè íèêàê íå ñâÿçàí ýëåêòðè÷åñêè ñ ýëåêòðîíèêîé SD-êàðòû, ñëåäîâàòåëüíî çàïèñûâàòü íà
êàðòó ìîæíî è ïðè ñîñòîÿíèè ñèãíàëà B_SDWP=0. Àíàëîãèåé ÿâëÿåòñÿ ôëàæîê çàùèòû îò çàïèñè íà ãèáêèõ ìàãíèòíûõ
äèñêàõ - îäíàêî îí, â îòëè÷èå îò B_SDWP èñïîëüçóåòñÿ àïïàðàòíî â êîíòðîëëåðå äèñêîâîäà è ñàìîì äèñêîâîäå.
Êðîìå òîãî, íà ïëàòàõ NeoGS rev.A ñèãíàë B_SDDET ïîâòîðÿåò ñîñòîÿíèå ñâåòîäèîäà (ãîðèò - 0, íå ãîðèò - 1).
Íà ïëàòàõ NeoGS rev.B îí îïðåäåëÿåòñÿ êîíòàêòàìè íà ñëîòå SD-êàðòû.
Íå ðåêîìåíäóåòñÿ èñïîëüçîâàòü äàííûå ñèãíàëû â ïðîãðàììàõ. Íàëè÷èå â ñëîòå SD-êàðòû ñëåäóåò îïðåäåëÿòü
ïðîãðàììíî (óäà¸òñÿ ëè ïðîâåñòè èíèöèàëèçàöèþ êàðòû çà êîíå÷íîå âðåìÿ).
Ïðîòîêîëû ïðîãðàììíîãî îáìåíà ñ êàðòîé ñëåäóåò èñêàòü â ñòàíäàðòàõ íà SD-êàðòû.
×àñòîòà ïðîöåññîðà â NeoGS âàðüèðóåòñÿ îò 10 äî 24 ÌÃö, ñëåäîâàòåëüíî, ÷àñòîòà Fsck èçìåíÿåòñÿ
îò 5 äî 12 ÌÃö, ÷òî ëåæèò â ïðåäåëàõ ñïåöèôèêàöèé SD-êàðò íà ýòó ÷àñòîòó (íå áîëåå 25 ÌÃö).
Ïîðò SD_RSTR, êîòîðûé âûäà¸ò ïðåäûäóùèé ïðèíÿòûé áàéò è èíèöèèðóåò îáìåí ñ ïåðåäàâàåìûì áàéòîì 0xFF,
ìîæåò èñïîëüçîâàòüñÿ äëÿ âñåõ ñöåíàðèåâ îáìåíà äàííûìè è êîìàíäàìè ñ SD-êàðòîé ïî àíàëîãèè ðàáîòû ñ
èíòåðôåéñîì SD-êàðòû â Z-controller'å, ñëåäóåò ëèøü ïîìíèòü ïðî ïðîãðàììíûå ïàóçû 16 èëè 18 òàêòîâ.
Ðàáîòà ñ MP3-äåêîäåðîì.
Ïîìèìî äâóõ SPI-èíòåðôåéñîâ (ñì. ãëàâó *SPI-èíòåðôåéñû*), äëÿ óïðàâëåíèÿ äåêîäåðîì èñïîëüçóþòñÿ
ñëåäóþùèå ñèãíàëû:
ñèãíàë â äåêîäåð, óïðàâëÿåìûé áèòîì B_MPXRS â ïîðòó SCTRL - àïïàðàòíûé ñáðîñ äåêîäåðà êîãäà áèò â íóëå,
íîðìàëüíàÿ ðàáîòà êîãäà áèò â åäèíèöå.
ñèãíàë ñ äåêîäåðà, ñîñòîÿíèå êîòîðîãî îòðàæàåòñÿ â áèòå B_MDDRQ ïîðòà SSTAT - ãîòîâíîñòü ïðè¸ìà ïîðöèè
MP3-äàííûõ ÷åðåç ñîîòâåòñòâóþùèé SPI-èíòåðôåéñ (MD_SEND).
 NeoGS èñïîëüçóþòñÿ MP3-äåêîäåðû äâóõ òèïîâ: MA8201 è MA8201A, êîòîðûå ÿâëÿþòñÿ àíàëîãàìè, ñîîòâåòñòâåííî,
äåêîäåðîâ VS1001 è VS1011 ôèðìû VLSI Solutions Oy (http://www.vlsi.fi). Ïîäðîáíûå îïèñàíèÿ è ïðèíöèïû ðàáîòû
ñëåäóåò èñêàòü â äàòàøèòàõ (datasheets) è àïïíîòàõ (application notes) íà ìèêðîñõåìû ôèðìû VLSI Solutions Oy
íà èõ èíòåðíåò-ñàéòå. Äàëüíåéøåå îáñóæäåíèå MP3-äåêîäåðîâ â äàííîì ðóêîâîäñòâå ïîäðàçóìåâàåò ïðåäâàðèòåëüíîå
îçíàêîìëåíèå ÷èòàòåëÿ ñ óêàçàííûìè äîêóìåíòàìè.
Çäåñü ïðèâåäåíû ëèøü îñîáî ñóùåñòâåííûå çàìå÷àíèÿ.
1. Äåêîäåðû òàêòèðóþòñÿ êâàðöåâûì ðåçîíàòîðîì 14 ÌÃö, ÷òî ÿâëÿåòñÿ íåáîëüøèì ïðåâûøåíèåì
îôèöèàëüíîé ìàêñèìàëüíîé ÷àñòîòû ñîãëàñíî äàòàøèòàì. Äëÿ íîðìàëüíîé ðàáîòû (äåêîäèðîâàíèå
MP3-ôàéëîâ ñ ëþáûì áèòðåéòîì) ñëåäóåò ÎÁßÇÀÒÅËÜÍÎ èñïîëüçîâàòü âíóòðåííåå óäâîåíèå òàêòîâîé
÷àñòîòû, ïðåäóñìîòðåííîå â äåêîäåðàõ (ðàáî÷àÿ ÷àñòîòà 28 ÌÃö).
2. Ìàêñèìàëüíûå ÷àñòîòû Fsck äëÿ îáîèõ SPI-èíòåðôåéñîâ äåêîäåðà îãðàíè÷åíû ñëåäóþùèìè âåëè÷èíàìè.
Ïðè ïåðåäà÷å áàéòîâ ïî óïðàâëÿþùåìó èíòåðôåéñó (ñîäåðæèìîå MC_READ íå èñïîëüçóåòñÿ),
ðàâíî êàê è ïî èíòåðôåéñó MP3-äàííûõ ÷àñòîòà ñèãíàëà SCK ñîîòâåòñâóþøåãî èíòåðôåéñà Fsck < Fdec/4,
ãäå Fdec - ÷àñòîòà, íà êîòîðîé ðàáîòàåò äåêîäåð (Fdec=14 ÌÃö, åñëè âíóòðåííåå óäâîåíèå âûêëþ÷åíî,
èëè Fdec=28 ÌÃö â ïðîòèâíîì ñëó÷àå).
Ïðè ïðè¸ìå áàéòîâ ïî óïðàâëÿþùåìó èíòåðôåéñó (ñîäåðæèìîå MC_READ èñïîëüçóåòñÿ) Fsck < Fdec/6.
 îáîèõ ñëó÷àÿõ ñëåäóåò ó÷èòûâàòü òåêóùóþ ÷àñòîòó ïðîöåññîðà Z80, ñîñòîÿíèå áèòîâ, çàäàþùèõ
Fsck êàæäîãî èíòåðôåéñà (B_MCSPD1,B_MCSPD0,B_MDHLF) è òî, âêëþ÷åíî ëè âíóòðåííåå óäâîåíèå
òàêòîâîé ÷àñòîòû äåêîäåðà èëè âûêëþ÷åíî.
3. Ïîñëå àïïàðàòíîãî èëè ïðîãðàììíîãî ñáðîñà âíóòðåííåå óäâîåíèå îêàçûâàåòñÿ âûêëþ÷åííûì.
Ñëåäóåò åãî âêëþ÷èòü, ïðîöåäóðà âêëþ÷åíèÿ îòëè÷àåòñÿ äëÿ ðàçíûõ (VS1001 è VS1011) äåêîäåðîâ.
 ñëó÷àå VS1001 ïîñëå óñòàíîâêè ðåãèñòðà CLOCKF ñëåäóåò çàïèñàòü êîíñòàíòó 0x8008 â íåäîêóìåíòèðîâàííûé
ðåãèñòð INT_FCNTLH (ñì. àïïíîò vs10XXan.pdf).  ñëó÷àå VS1011 íà ìåñòå ðåãèñòðà INT_FCNTLH îêàçûâàåòñÿ
äðóãîé ïî ôóíêöèè ðåãèñòð è çàïèñü â íåãî ïðîèçâîäèòü íå òðåáóåòñÿ, à äëÿ âêëþ÷åíèÿ óäâîèòåëÿ òðåáóåòñÿ
çàïèñàòü çíà÷åíèå ÷àñòîòû äèñêðåòèçàöèè (ëþáîå ïðèìåíèìîå) â ðåãèñòð AUDATA (ñì. àïïíîò vs10XXan.pdf).
 äàëüíåéøåì àêòóàëüíîå çíà÷åíèå ÷àñòîòû äèñêðåòèçàöèè óñòàíîâèòñÿ àâòîìàòè÷åñêè.  îáîèõ ñëó÷àÿõ êîíñòàíòà,
çàïèñûâàåìàÿ â ðåãèñòð CLOCKF, îñòà¸òñÿ íåèçìåííîé (0x9B58).
4. äëÿ îïðåäåëåíèÿ òèïà äåêîäåðà (VS1001 èëè VS1011) ñëåäóåò ïðî÷èòàòü ðåãèñòð STATUS è çàãëÿíóòü
â áèòû 7:4 ýòîãî ðåãèñòðà. Òàê êàê îïðåäåëÿòü òèï äåêîäåðà òðåáóåòñÿ äî âêëþ÷åíèÿ óäâîèòåëÿ (ïóíêò 3),
ñëåäóåò îñîáî âíèìàòåëüíî îòíåñòèñü ê ïóíêòó 2: Fdec/6 â ýòîì ñëó÷àå ñîñòàâèò 2.3 ÌÃö, è Fsck
äëÿ êîððåêòíîãî ÷òåíèÿ íå äîëæíà áûòü áîëåå ýòîãî çíà÷åíèÿ (ñì. ãëàâó *SPI-èíòåðôåéñû*).
5. Ïðè ïðîèãðûâàíèè íåêîððåêòíîãî èëè èñïîð÷åííîãî MP3-ôàéëà, âñëåäñòâèå ýëåêòðîìàãíèòíûõ ïîìåõ è ò.ä.
äåêîäåð ìîæåò çàâèñíóòü: ïðè ýòîì, êàê ïðàâèëî, ïðîèãðûâàíèå çâóêà ïðåêðàùàåòñÿ, à ñ÷¸ò÷èê âðåìåíè
ïðîèãðûâàíèÿ (ðåãèñòð DECODE_TIME) íå èíêðåìåíòèðóåòñÿ. Òàêæå ïðèçíàêîì çàâèñàíèÿ ÿâëÿåòñÿ ÷åðåñ÷óð
íèçêàÿ èëè ÷åðåc÷óð âûñîêàÿ ñêîðîñòü ïîòðåáëåíèÿ äåêîäåðîì MP3-äàííûõ (ñì. àïïíîò vs10XXan.pdf).
Ïðè îáíàðóæåíèè çàâèñàíèÿ íåîáõîäèìî âûïîëíèòü ïðîãðàììíûé ñáðîñ, ïîâòîðèòü ïðîöåäóðó èíèöèàëèçàöèè
è âíîâü îáðàòèòü âíèìàíèå íà ïðèçíàêè çàâèñàíèÿ.  ñëó÷àå, åñëè äåêîäåð íå 'îòâèñ', íåîáõîäèìî
ïðîâåñòè àïïàòàòíûé ñáðîñ (áèò B_MPXRS â ïîðòó SCTRL).
Ãðóáûé çàìåð ñêîðîñòè ïîòðåáëåíèÿ äåêîäåðîì MP3-äàííûõ ìîæíî ïðîâåñòè, èñïîëüçóÿ êàê ðåïåð
çâóêîâûå ïðåðûâàíèÿ NeoGS, ñëåäóþùèå ñ ÷àñòîòîé 37500 Ãö íåçàâèñèìî îò ÷àñòîòû ïðîöåññîðà Z80.
6. Ïîñëå îêîí÷àíèÿ äàííûõ â MP3-ôàéëå ðåêîìåíäóåòñÿ âûäàòü â äåêîäåð 2048 áàéò íóëåé (B_MDDRQ, MD_SEND),
ïîñëå ÷åãî äëÿ íà÷àëà äåêîäèðîâàíèÿ ñëåäóþùåãî ôàéëà íåîáõîäèìî ïðîâåñòè ïðîãðàììíûé ñáðîñ.
Ïðèìåíÿòü âìåñòî íåãî àïïàðàòíûé ñáðîñ íå ðåêîìåíäóåòñÿ, òàê êàê ïðè ýòîì âîçíèêàþò ùåë÷êè
â çâóêîâîì òðàêòå äåêîäåðà.
7. Ñëåäóåò îòìåòèòü, ÷òî óïðàâëåíèå ðåæèìàìè bass/treble è surround â îáîèõ òèïàõ äåêîäåðîâ
ñóùåñòâåííî ðàçëè÷àåòñÿ.
8. Â äåêîäåðå VS1011 ïðåäóñìîòðåíî íåñêîëüêî ðåæèìîâ ïîñûëêè MP3-äàííûõ. Ñëåäóåò èñïîëüçîâàòü ëèøü
óñòàíîâëåííûé ïî óìîë÷àíèþ ïîñëå ñáðîñà ðåæèì ñîâìåñòèìîñòè ñ äåêîäåðîì VS1001 ñ ó÷àñòèåì ñèãíàëà
áèòîâîé ñèíõðîíèçàöèè BSYNC. Ñèãíàë BSYNC ãåíåðèðóåòñÿ àïïàðàòíî ñõåìîé SPI-èíòåðôåéñà äëÿ
MP3-äàííûõ â FPGA è âíèìàíèÿ ê ñåáå ñî ñòîðîíû ïðîãðàììû Z80 íå òðåáóåò.