MILC logo

IndexVorigeVolgendeLeeg

Info over diverse MIDI chips
Onbekend, 00-00-00


    
-Informatie over de 8251 en 8253 , de midi chips van de turbo R GT 
-Informatie over de m6850 ACIA , de muziekmodule midi chip
-Informatie over de Z80 PIO, gebruikt in de midisaurus


Informatie uit : MICROCOMPUTER SYSTEEMACHITECTUUR Deel 3
		 KEMPER, J.P.
		 3e DRUK 1984
		 ISBN 90-6523-005-X

		 Bevat informatie over : 8255 PPI
					 Z80-PIO    (midi saurus)
					 6820/21 PIA
					 8251 USART (midi turbo R GT)
					 Z80-SIO
					 Z80-CTC
					 M6850 ACIA (midi muziekmodule)
					 M6852 SSDA
					 8253	    (midi turbo R)
				      







































8251A USART

E0 = buffer register voor de te zenden data of de ontvangen data 
E1 = status register of mode instruction/command register

******************* STATUS REGISTER ******************************************

Als het stauts register wordt uitgelezen, dan hebben de bits de volgende 
betekenis:

Bit 0	TxRDY	Transmitter Ready

De betekenis van dit bit is enigzins verschillend van de TxRDY pin. Het bit 
TxRDY is hoog als het data buffer van de zender leeg is. Voor het hoog zijn 
echter van de pin TxRDY is niet alleen het leeg zijn van het databuffer 
voldoende, maar ook moet de inputpin CTS (CLear To Send) laag zijn en moet de 
zender geenabled zijn (zie command instruction).

Bit 1	RxRDY	Receiver Ready

Dezelfde betekenis als de pin RxRDY

Bit 2	TxEMPTY Transmitter Empty

Dezelfde betekenis als de pin TxEMPTY

Bit 3	PE	Parity Error

De PE flag wordt geset als een pariteits fout door de ontvanger wordt 
gedetecteerd, Dit bit wordt gereset door het ER bit uit de command 
instruction.

Bit 4	OE	Overrun Error

De OE flag wordt geset als de processor een karakter in het ontvangbuffer niet 
gelezen heft als daar reeds een volgend ontvangen karakter wordt ingezet. Dit 
bit wordt gereset door het ER bit in de Command instruction.

Bit 5	FE	Framing Error

De FE flag wordt geset als aan het einde van een datawoord geen geldig stopbit 
wordt ontvangen. Dit bit kan worden gereset met het ER bit in de command 
instruction

Bit 6	SYNDET	Sync Detection

Dit bit heeft dezelfde betekenis als de pin SYNDET

Bit 7	DSR	Data Set Ready

Dit bit is 1 als de pin DSR laag is (actief) en 0 als de pin DSR hoog is (niet 
actief).


******************* MODE INSTRUCTION *****************************************

Moet als eerste opgegeven worden na een reset van de 8251
Hij moet gezet worden in het command register

Bit 1,0  B2,1	 00=synchrone mode
		 01=baud rate factor is 1
		 10=baud rate factor is 16
		 11=baud rate factor is 64

Bit 3,2  L2,1	 00=5 data bits
		 01=6 data bits
		 10=7 data bits
		 11=8 data bits

Als minder dan 8 bits karakters zijn gedefinieerd, dan moet bij schrijven naar 
de 8251 de actuele data op de minst significante plaatsen in het datawoord 
staan.De andere bits zijn don't cares.Bij het lezen van ontvangen data zijn 
deze bits 0.

Bit 4	 PEN	 0=geen pariteitsbit
		 1=pariteitsbit aanwezig

Als een paritietsbit aanwezig is dan maakt dit geen deel uit van de databits 
die door de processor worden gelezen of geschreven. Bij zenden wordt dit bit 
door de 8251A toegevoegd , bi ontvangen wordt het gecontroleerd.

Bit 5	 EP	 0=oneven pariteit
		 1=even pariteit

Dit bit is een don't care als voor het bit PEN een 0 is gedefinieerd.

Bit 7,6  S2,1	 00= niet toegestaan
		 01=1 stopbit
		 10=1.5 stopbit
		 11=2 stopbits	    

Deze bits hebben slechts betrekking op de zender. De ontvanger heeft altijd 
voldoende aan 1 stopbit.

Indien voor de bits B2,1 is gedefinieerd 00, dan heben we te maken met de 
synchrone mode. De betekenis van de bits S2,1 is dan als volgt:

Bit 6	 ESD	0=interne synchronisatie : pin SYNDET is output
		1=externe synchronisatie : pin SYNDET is input

Bit 7	 SCS	0=1 sync karakter
		1=2 sync karakters

Welke karakters als Sync karakter(s) dienen moet direct na de mode instruction 
in het commando register geschreven worden.

			____________________
		     E1 | mode instruction |
			--------------------
		     E1 | sync karakter 1  |------|
			--------------------	  |sync mode only
		     E1 | sync karakter 2  | -----|			   
			--------------------
		     E1 | command instr.   |
			--------------------
		     E0 |		   |
			|   DATA	   |
			/		   /
			/		   /
			|		   |
			--------------------
		     E1 | command instr.   |
			--------------------
		     E0 |		   |
			|   DATA	   |
			/		   /
			/		   /
			|		   |
			--------------------
		     E1 | command instr.   |
			--------------------


Asynchrone mode (zenden)

Als een karakter naar het data register van de 8251 is geschreven, dan wordt 
automatisch een startbit toegevoegd, gevolgd door de databits (minst 
significante bit eerst), eventueel een pariteitsbit als dat was aangegeven in 
de mode instruction en uiteindelijk het aantal gevraagde stopbits. Daarna 
wordt het aldus gevormde woord als een serieele bitreeks met een tempo gelijk 
aan 1x, 1/16x of 1/64x de frequentie van TxC, zoals aangegeven in de mode 
instruction.
Als geen data woorden naar de 8251 worden geschreven worden, dan blijft de TxD 
lijn in de mark state

Asynchrone mode (ontvangen)

De RxD lijn is normaal hoog (mark). een neergaande flank op deze lijn geeft 
het begin aan van een startbit. De geldigheid van dit startbit wordt een halve 
nittijd later opnieuw gecontroleerd (alleen in de 16x en de 64 x mode) als dan 
opnieuw een laag wordt gedetecteerd dan is een geldig startbit gezienen wordt 
de bit teller gestart. Op het nominale midden van de bits wordt een sample 
genomen en in het schuifregister geschoven (op de opgaande flank van RxC). Als 
een pariteitsfout optreed dan wordt de parity error flag geset. Als geen 
stopbit wordt gezien wordt de framing error flag geset. Let op dat de 
ontvanger slechts een enkel stopbit checkt, ook al zijn in de mode instruction 
meerder stopbits opgegeven.
Het ontvangen datawoord wordt vervolgens in het databuffer geklokt en de RxRDY 
pin wordt hoog. Als in het buffer nog een woord stond dat nog niet door de 
processor was gelezen, dan wordt de overrun error flag geset. Het optreden van 
een va de genoemde fouten heeft geen enkele invloed op de werking op de 
werking van de 8251A.

Synchrone mode (zenden)

Het verschil met de asynchrone mode is dat altijd data wordt uitgezonden in 
het tempo van TxC. Als er geen karakters worden geschreven naar het zend 
buffer, dan worden automatichs synckarakters door de 8251A uitgezonden, 1 of 2 
zoals in de mode instruction is aangegeven. Let op dat de pen TxEMPTY hoog 
blijft zolang synckarakters worden uitgezonden. TxEMPTY wordt weer laag als 
een data woord naar de 8251 wordt geschreven.

Synchrone mode (ontavngen)

In deze mode kan geprogrammeerd worden dat intern of extern gesynchroniseerd 
moet worden op de woordgrens. Als is geprogrameerd dat dit intern moet 
gebeuren, dan kan de 8251A in de zigenaamde hunt'-mode gezet worden (zie 
command reg.)
Data op de RxD pin wordt dan gesampled op de opgaande flank van RxC en na elk 
ingeschoven bit wordt de inhoud van het schuifregister vergeleken met het 
eerste synckarakter. Als er twee synckarakters zijn geprogrameerd dan wordt 
ook het daarop volgende datawoord met dit tweede synckarakter vergeleken. Als 
beide synckarakters zijn ontvangen dan ver laat de 8251 de hunt mode en is in 
karaktersynchronisatie.
Dit is te zien aan het feit dat het SYNDET bit en de SYNDET pen  1 zijn.
De eerst volgende keer dat de status wordt uitgelezen wordt SYNDET weer laag. 
Als een pariteitsbit  is geprogrameerd, dan wordt SYNDET pas hoog als ook het 
pariteits bit ontvangen is.

In de externe synchronisatie mode, wordt synchronisatie bereikt als de SYNDET 
pin van buiten af hoog wordt gemaakt. Hiermee wordt bereikt dat de 8251 de 
'hunt mode gedwongen verlaat. Na een cyclus van RxC mag SYNDET weer laag 
worden. Parity error en overrun error worden op dezelfde manier geset als in 
de asynchrone mode.


******************** COMMAND INSTRUCTION *************************************

Na het geven van de mode instruction kan op elk gewenst moment een command 
instruction gegeven worden.Een command instruction heeft alleen betrekking op 
de actuele uitvoering van het in de instruction gegeven formaat.
De betekenis van de commmand instruction woord is:

Bit 0	TxEN	0=disable zender
		1=enable zender

Bit 1	DTR	0=DTR pin is hoog (inactief)
		1=DTR pin is laag (actief)

Bit 2	RxEN	0=disable ontvanger
		1=enable ontvanger

Bit 3	SBRK	0=geen effect
		1=zend BREAK karakter (TxD laag)

Bit 4	ER	0=geen effect
		1=reset error flags PE,OE en FE

Bit 5	RTS	0=RTS pin is hoog (inactief)
		1=RTS pin is laag (actief)

Bit 6	IR	0=geen effect
		1=internal reset

Na een interne reset moet (evenals een externe reset) opnieuw een mode 
instructie naar de 8251 worden gestuurd.

Bit 7	EH	0=geen effect
		1=hunt mode (sync mode)
















































8253 programmeerbare timer/counter

De 8253 bevat 3 identieke 16 bits pre-settable downcounters.Elke counter heeft 
een klok ingang. Een opgaande flank op deze ingang verlaagt de 16 bits counter 
met 1.

		     ________
		     |count-|<---- clk 0/1/2
		     |	er  |
		     |0/1/2 |<---- gate 0/1/2
		     |	    |----> out 0/1/2
		     ________

Elke counter heeft verder een gate input waarmee in het algemeen het tellen 
van de counter kan worden geenable of gedisabled.Elke counter heeft tenslotte 
een multifunctionele uitgang , die aangeeft dat de timer/counter zijn taak 
heeft uitgevoerd. Deze uitgang kan aangesloten worden op een andere applicatie 
of hij kan als interrupt gebruikt worden.
Bij iedere tellet zijn 2 16 bits register aanwezig. Het ene register bevat de 
initiele tellerwaarde.
Vanuit dit register wordt een counter steeds geladen. In de autoload mode 
gebeurt dit laden automatische wanneer de counter naar 0 wordt verlaagd. Het 
tweede 16 bits register wordt gebruikt om eeb counter die nog loopt uit te 
lezen.

Het programmeren: De volgende byte moet naar het mode woord geschreven worden

Bit 7,6 SC1,0	00=select conter0
		01=select conter1
		10=select conter2
		11=niet toegestaan

Bit 5,4 RL1,0	00=latch counter
		01=lees/laad alleen MSB
		10=lees/laad alleen LSB
		11=lees/laad LSB en MSB
 
  00 In deze bits maakt het mogelijk, zonder dat het telen van de counter 
  wordt verstoord, een counter uit te lezen. Er ordt eenvoudig een latch 
  commando gegeven en een copie van de counter wordt in een 16 bits register 
  vastgelegd. Dit register kan dan met een normale lees-of input operatie 
  worden uitgelezen.
 
  01 Geeft aan dat bij een lees of schrijf operatie slechts het meest 
  significantie byte van de 16 bits counter bij de operatie wordt  betrokken.
 
  10 Echter definieert juist dat de minst significante 8 bits worden gelzen.

  11 programeert de 8253 zo ,dat steeds twee lees en schrijfoperaties moeten 
  worden uitgevoerd. Altijd heeft de eerste operatie betrekking op het minst 
  significante byte en de tweede operatie op ht meest significante byte.

Bit 3,2,1 M2,1,0  000=mode 0
		  001=mode 1
		  x10=mode 2
		  x11=mode 3
		  100=mode 4
		  101=mode 5

Bit 0	BCD	  0=binair tellen
		  1=BCD tellen

MODE 0 (interrupt on terminal count)

De ouput lijn is na de mode programmering laag. Nadat de counter is geladen 
blijft de output laag en de counter telt. als de teller 0 wordt dan zal de 
output hoog worden en hoog blijven totdat de betreffende counter opnieuw 
geladen wordt of opnieuw geprogrameerd wordt.
 Bijvoorbeeld:timeout van een modem.

MODE 1 (programmeerbare one-shot

De uitgang van de counter wordt laag op de telslag volgend op de opgaande 
flank van de gate input. De uitgang wordt hoog als de counter tot nul is 
afgelaagd. Als tijdens het laagzijn van de output een nieuwe waard in de 
counter wordt geladen heeft dat geen invloed op de duur van de oneshot puls. 
De one-shot is hertriggerbaar, dat wil zeggen dat de output laag blijft 
gedurende de volledige telcyclus na een opgaande flank van de gate lijn.

MODE 2 (Rate generator)

In deze mode is de 8253 een deler. De output is laag gedurende een enkele 
periode van ed clock ingang. De periode van de ene puls tot de volgende puls 
tot de volgende is gelijk aan de telwaarde.
Als de counter met een nieuwe waarde wordt geladen dan heeft dat pas effect op 
de volgende telcyclus. Aan het begin daarvan wordt immers de counter opnieuw 
gladen. De gate ingang kan gebruikt worden om de teller te synchroniseren.
 Bijvoorbeeld: real time clock

MODE 3 (block golf generator)

Deze mode is hetzelfde als mode 2, echter met dit verschil dat nu de output 
een halve periode hoog is en een halve periode laag. Wordt de counter met een 
oneven waarde geladen, dan is de uitgang hoog gedurende (N+1)/2 clk pulsen  en 
laag gedurende (n-1)/2 clk pulsen.
  Bijvoorbeeld: baudrate generator !!!!!!!
 Deze mode is zeer geschikt om een klok te realiseren voor een 8251A. Stel dat 
we te maken hebben met en asynchrone teerminel die op 300 Baud werkt. De USART 
is zo geprogrammeerd dat de aangeboden ontvanger en zenderklok door 16 wordt 
gedeeld. We moeten dan TxC en RxC gelik maken aan 300x16 = 4800 Hz. Dat 
betekent dat de periodeduur van de blokgolf 208.33 microseconden moet zijn. 
Als de cLK ingang van de gebruikte counter een periode duur van 500 
nanoseconden,dan moeten we de counter dus laden met 471 (1a1H)

MODE 4 (software triggered strobe)

In deze mode zal de uitgang na het zetten van de mode hoog worden. Als het 
countregister is geladen begint de counter te tellen. Als deze 0 is dan wordt 
de uitgang gedurende een enkele clk periode laag en wordt daarna weer hoog. De 
uitgang blijft hoog totdat de counter opnieuw wordt geladen.

MODE 5 (hardware triggered strobe)

In dit geval zal de counter gaan tellen na een opgaande flank van de gate 
lijn. Deze mode is hertriggerbaar. De counter zal een gehele geprogrammeerde 
tellerwaarde aftellen na een opgaande flank van de gat ingang.
 Bijvoorbeeld:pulsbreedte meting


**************** registers M6850 ACIA **************************************

command woord:

Bit 7	0=Disable receiver interrupts
	1=enable receiver interrupts

Bit 6,5 00=RTS laag, disable transmitterinterrupts
	01=RTS laag, enable transmitter interrupts
	10=RTS hoog, disable transmitter interrupts
	11=RTS laag, disable transmitter interrupts ;zend Break karakter

Bit 4,3,2 000= 7bits,  even pariteit, 2stopbits
	  001= 7bits,oneven pariteit, 2stopbits
	  010= 7bits,  even pariteit, 1stopbit		
	  011= 7bits,oneven pariteit, 1stopbit
	  100= 8bits,  geen pariteit, 2stopbits
	  101= 8bits,  geen pariteit, 1stopbit
	  110= 8bits,  even pariteit, 1stopbit
	  111= 8bits,oneven pariteit, 1stopbit
	    
Bit 1,0  00=1xclockrate
	 01=1/16xclockrate
	 10=1/64xclockrate
	 11=internal reset

Na het opstarten zal de M6850 ACIA eerst gereset moeten worden met Bit 1,0 
(11)

Status register:

Bit 7	IRQ	

Dit bit is hoog als er een interruptrequest loopt.

Bit 6	PE	Parity Error

Bit 5	OVRN	Overrun Error

Een overrun error error veroorzaakt een interrupt.

Bit 4	FE	Framing Error

Bit 5	CTS	Clear To Send

Als de CTS pin hoog (inactief) is dan wordt de statusbit 1 (Transmit data 
register empty) 0 gemaakt.Ok de hierbij behorende interrupt wordt niet op de 
IRQ pin geplatst. De software zal dientengevolge geen data naar het 
transmitbuffer zenden en aldus de zender disabelen.

Bit 2	DCD	Data Carrier Detect

Als DCD een laag -hoog overgang maakt dan wordt een interrupt gegenereerd en 
het DCD bit wordt 1. Bit 2 blijft 1 totdat het statusregister is gelezen door 
de processor, ook al was de DCD pin intussen weer laag.

Bit 1	TDRE	Transmit Data Register Empty

Dit bit wordt 1 als de inhoud van het zendbuffer in het schuifregister wordt 
geklokt. Het blijft 1 zolang geen nieuw karakter in het zendbuffer wordt 
geschreven. Dit bit veroorzaakt een interrupt als transmitter interrupts zijn 
geenabled.

Bit 0	RDRF	Receive Data Register Full

Dit bit wordt 1 als een volledig datawoord door de zender is ontvangen en in 
het ontvangbuffer is geplaatst. Als Receiver interrupts zijn 
geenabled,veroorzaakt een 1 in dit bit en interrupt. Als het bit DCD 1 is dan 
wordt het RDRF bit0 gehouden, zodat geen niet bestaande data door de processor 
wordt gelezen.

************************ Z80 PIO  en de MIDISAURUS ****************************

De midisaurus bestaat uit een z80 pio ,een groot flatpack,een eprom,een stukje 
s-ram en nog wat ondersteunende electronica 

De Midi saurus heeft 4 poortadressen:
&H70 buffer poort A voor de te lezen data of te schrijven data
&H71 register bij schrijven of 
&H72 buffer poort B voor de te lezen data of te schrijven data 
&H73 register voor uitgang B van de PIO

Het register (A&B) is als volgt opgebouwd:
 
		b7 b6 b5 b4 b3 b2 b1 b0
		|  |   |  |  |	|  |  |
		|  |   |  |  -------------- indentificatie als register data
		|  |   ----------  don't  care  
		------- mode:
			       b7 b6
			       0  0    = output (mode0)
			       0  1    = input	(mode1)
			       1  0    = bidirectioneel (mode3)
			       1  1    = bit control 

    

Index

Vorige

Volgende