Top secrets sources NedoPC ngs

Rev

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 íå òðåáóåò.