LABORATORIEOPPGAVE HØGSKOLEN I SØR-TRØNDELAG AVD. FOR TEKNOLOGI INSTITUTT FOR ELEKTROTEKNIKK 7005 TRONDHEIM FAG: WO633E Laboratorium ØVING: M3-A: INNFØRING I BRUK AV LOGIKKANALYSATOR UTARBEIDET: Des. 88 REVIDERT: R.M. Sept. 95 INNHOLD: INNLEDNING... 1 Logikkanalysatoren:... 1 Måleobjektet:... 2 FORARBEID... 2 Programmering.... 2 ARBEIDSFORSKRIFT... 2 1. Bruk av logikkanalysatoren HP1651A.... 2 2. Tidsmålinger.... 4 3. Måleoppgave:... 4 INNLEDNING Oppgaven skal gi en kort praktisk innføring i bruk av logikkanalysatoren HP 1651A. Denne logikkanalysatoren kan brukes både til tidsanalyse (TIMING) og tilstandsanalyse (STATE). I denne oppgaven skal vi konsentrere oss om tidsanalyse. Som måleobjekt skal vi benytte serieporten i R6522 VIA'en i mikroprosessor-treneren MAT965. Vi skal bruke logikkanalysatoren til å se på tidsforløpet når to trenere kommuniserer med hverandre ved hjelp av serieportene. Logikkanalysatoren: En logikkanalysator er i prinsippet et spesialisert oscilloskop, hvor vi kun måler tidsforløp og tilstander uten å interessere oss for spenningsverdier. Tidsforløpene kan presenteres som et tidsdiagram som viser hvordan enkeltsignaler endrer verdi som funksjon av tiden (TIMING), eller vi kan presentere grupper av signaler som binærtall eller hextall i et hendelsesforløp hvor hver tilstandsendring defineres som en ny hendelse (STATE). 1
Måleobjektet: Måleobjektet er to mikroprosessor-trenere som skal kommunisere ved hjelp av serieporten i VIA'en (R6522, IC 4 på hovedkortet). Maskinene sammenkobles ved at henholdsvis CB1 (CLOCK), CB2 (DATA) og jord er forbundet med hverandre. Dette gjøres enklest ved å bruke to flatkabler og det utlagte koblingskortet hvor sammenkoblingen er ferdiglaget. Serieporten i senderen skal konfigureres for serie ut med skiftklokke styrt av timer 2 (T2). T2 skal lastes opp med verdien 02, som dermed gir en passe høy baudrate. Serieporten i mottakeren skal konfigureres for serie inn med ekstern klokke, og interrupt fra skiftregisteret skal enables. FORARBEID Programmering. Denne delen av oppgaven skal gjøres FØR lab-dagen. Lag programmer for de to mikroprosessor-trenerne slik at de kan kommunisere ved hjelp av serieporten (se under beskrivelsen an måleobjektet). Senderen skal virke slik at når du trykker en tast på tastaturet, skal ASCII-koden for denne tasten sendes ut fra serieporten samtidig som displayet viser hvilken tast som ble trykket. Mottakeren skal hente inn nye karakterer fra serieporten og vise i displayet. Hint: Mottakerrutinen trenger ikke å være interruptdrevet selv om interrupt fra skiftregisteret enables. Det enkleste er å teste på flagget for skiftregisteret i IFR-registeret. Lag en "dummyread" av skiftregisteret i mottakeren i initieringsdelen av programmet. Dette må gjøres for å nullstille bit-telleren i serieporten. ARBEIDSFORSKRIFT 1. Bruk av logikkanalysatoren HP1651A. Studer vedlegget "Front and Rear Panel Controls", som beskriver bruken av frontpanelet og signaltilkoblingen for den aktuelle logikkanalysatoren. Utlagt på arbeidsplassen finnes en mer utførlig beskrivelse "Using the Front-Panel User Interface". Oversiktsskjema for MAT965 og dokumentasjon for R65C22 er også utlagt. Tilkoblinger: Først kobles jordingspinnen i pod 1 til jord på koblingskortet. De tre første probene (pinnene) i pod 1 kobles henholdsvis til CB1, CB2 (tilgjengelig på koblingskortet) og CS2 på sender - VIA'en (pinne 23 på IC 4). Den fjerde proben kobles til R/WR signalet (pinne 22 på samme IC). Slå på strømmen til trenerne og logikkanalysatoren (disketten må stå i). Når analysatoren er klar, vises system-menyen på skjermen. Vi skal bruke analysator 1 med pod 1 tilordnet denne. Drei på rattet og se hvordan kursor flytter seg mellom de enkelte "rammer" i menyen. Ved å trykke SELECT-tasten får vi fram undermenyer (prøv dette på noen av alternativene). Du skal nå gi analysator nytt navn etter eget valg. Dette gjøres ved å flytte kursor til rammen etter "Name" (hvor det nå står MACHINE 1). Trykk SELECT og skriv det nye navnet (CLEAR ENTRY-tasten sletter det gamle navnet, DON'T CARE fungerer som ordskiller). Avslutt med "Done". Legg merke til at i rammen hvor det står "Pod 1" er det en indikator som viser aktiviteten på de enkelte pinnene i pod'en (høyt, lavt eller tidsvariabelt signal). 2
Trykk FORMAT-tasten. Du skal nå definere en del etiketter (labler) som skal tilordnes de enkelte signaler fra pod 1. Til venstre i skjermbildet har du nå 14 rammer for etikettnavn. Sett kursor til den øverste av disse og trykk SELECT. Velg deretter "Modify label", trykk SELECT og skriv inn nytt etikettnavn. Den lange rammen til høyre for etiketten bruker vi til å tilordne et av signalene fra pod 1 til denne etiketten. Flytt kursor til denne rammen og trykk SELECT. Stjerne (*) betyr at motsvarende pinne er tilordnet (tilkoblet). Drei på rattet og fjern "stjerner" til du står igjen med en stjerne lengst til høyre i rammen slik at bare CB1 signalet er tilordnet denne etiketten. Avslutt operasjonen med "Done". Gi på samme måte de tre neste etikettene fornuftige navn og knytt (tilordne) dem til sine respektive signaler (CB2, CS2 og R/WR). Du har nå definert fire etiketter og knyttet dem til hver sin pinne i pod 1. Før du forlater denne menyen bør du undersøke hvilke undermenyer du finner under rammen der det står TTL. Her kan du, om du arbeider med andre logikktyper, velge eller definere aktuelle logiske nivåer for de signalene du skal måle på. Trykk RUN-tasten en gang og du ser nå at skjermen begynner å ligne et oscilloskop-bilde med fire kanaler, Hvor hver kanal er merket med de etikettene du nettopp har definert. Det vi enda ikke har stilt inn på "skopet", er tidsenheten (timebase) og triggingen. Men før du gjør det, må vi sette i gang den signalaktiviteten du skal måle på. Legg inn og start opp senderrutinen i den mikro-maskinen du vil benytte som sender. Uavhengig om programmet virker eller ikke, kan du nå begynne å se på signalene med logikkanalysatoren, men da må du først sette opp triggevilkårene. Serieporten starter å sende straks det skrives til SR (skiftregisteret) i VIA'en. Skriving til VIA'en kan detekteres ved at chip select signalet (CS2 = 0) og write signalet (R/WR = 0) er aktive samtidig. Klarer vi å registrere når dette skjer, vil vi også kunne se når sendingen starter. For å sette triggevilkåret, går du inn i TRACE-menyen (trykk TRACE-tasten). Her finner du igjen de fire signaletikettene du definerte tidligere. Under disse har du rammer for "Base", som bestemmer hvordan registrerte data skal presenteres. Siden vi her opererer med enkeltsignaler, er det fornuftig å velg binær representasjon. Altså, skift fra hexadesimal (Hex) til binær (Bin) representasjon! Nedenfor "Base" finner du rammer for "Find Pattern". Her kan du sette opp en maske for det bitmønsteret du ønsker å knytte triggingen til (X betyr "don't care"). Vi ønsker å finne bitmønsteret 00 i CS2 og R/WR, og følgelig må du da sette inn 0 i begge rammene til høyre. Dette gjør du enklest ved å sette kursor i rammen og trykke 0. Avslutt med SELECT. Lenger nede finner du rammer for "Then find Edge". Her kan du bestemme hvilket signal og hvilken flanke du vil trigge på. Du kan enten trigge på positiv flanke i CS2 eller R/WR signalet (bruk det siste alternativet). Dette gjør du ved å flytte kursor til rammen lengst til høyre, trykk SELECT og drei rattet ett klikk til kursor forlater "Done". Trykk SELECT noen ganger og følg med i hvilke muligheter du har. Pil opp betyr positiv flanke osv., prikk (.) betyr at dette signalets flanker er uinteressante for triggingen. Når du har funnet rett flanke, avsluttes med "Done". Nå skulle alt være klart for den første "prøveturen". Ved å trykke RUN-tasten, vil nå logikkanalysatoren begynne å "se" etter triggevilkåret. Trykk nå en tast på treneren (sender). Nå skjedde det forhåpentligvis noe. Kanskje noe av hendelsesforløpet er utenfor skjermen? 3
Det kan i så fall skyldes den "sweep-hastigheten" (T/Div) som er innstilt. Endring av sweephastigheten gjøres ved å flytte kursor til rammen merket "T/Div" og trykke SELECT. Nå kan hastigheten endres ved enten å dreie på rattet, eller ved direkte inntasting fra tastaturet (bruker du tastaturet trenger du ikke å trykke SELECT først). Prøv begge metodene. Trykk RUN og en tast på treneren hver gang du vil ha en ny måling. Velg til slutt Time/Div = 6.000:s. Legg merke til at triggetidspunktet hele tiden har ligget midt i skjermbildet. Dette kan flyttes ved å endre tidsforsinkelsen "Delay" (på samme måte som du endret "Time/Div"). Sett Delay = 26.00:s. Nå skulle tidsforløpet stort sett fylle ut skjermen (forutsatt at senderrutinen virker). Legg inn og start opp mottakerrutinen i den andre treneren (mottakeren). VIA'en i denne maskinen skal nå være konfigurert slik at den gir aktivt signal på IRQ utgangen når den har mottatt en 8-bits karakter. Vi skal nå trigge på dette signalet, og må derfor ta det inn på neste ledige inngang på pod 1. Gjør dette (IRQ utgangen er pinne 21 på IC 4). Gå til FORMATmenyen og definer en ny etikett IRQN som tilordnes dette signalet! Gå deretter inn i TRACEmenyen og endre triggevilkåret slik at eneste vilkår blir negativ flanke i IRQN. Ta en måling og se hva som skjer. Dersom hele forløpet nå ligger utenfor skjermbildet, må du forsøke på egen hånd å få forløpet inn på skjermen igjen (det kan være nyttig å ta nye målinger når forløpet virker "avkortet"). Når du er fornøyd med skjermbildet, kan du kontrollere at den tidssekvensen du får for en bestemt karakter stemmer med ASCII-verdien til denne karakteren. 2. Tidsmålinger. Når vi skal måle tidsforsinkelser, periodetider m.m., kan vi benytte to markører X og O. Disse har været avslått til nå. Flytt kursor til "Markers" og velg "Time" fra undermenyen. Nå fikk du flere rammer i skjermbildet. Disse rammene har med markørene å gjøre. Samtidig fikk du X og O rett over markeringen av triggetidspunktet. Flytt kursor til "X to Trig", trykk SELECT og drei på rattet. Du ser nå at X-markøren flytter på seg samtidig som du kan lese av tidsavstanden mellom markøren og triggetidspunktet. Når markøren er plassert der du vil ha den, parkerer du den ved å avslutte med "Done". O-markøren flyttes på tilsvarende måte. Legg merke til at i hjørnet øverst til høyre kan du lese av tidsdifferansen mellom de to markørene. Dette kan du nå bruke til tidsmåling. 3. Måleoppgave: Studer signalforløpene og sammenlign med timingdiagrammene i databladet for R6522 VIA. Protokollen for denne oppgaven skal inneholde måleresultater med kommentarer, samt printerutskrift av siste skjermbilde på logikkanalysatoren. 3.1. Mål periodetiden for skiftklokka (CB1) og sammenlign med oppsettet av serieporten. 3.2. Mål tidsforsinkelsen mellom negativ flanke i skiftklokka og omslag på datautgangen. 3.3. Mål tidsforsinkelsen fra skrivingen til serieporten er ferdig til skiftklokka går lav første gang. 3.4. Mål tidsforsinkelsen mellom positiv flanke i siste klokkepuls og negativ flanke i IRQsignalet. Gjenta samme måling 4 ganger. Hva kan årsaken være til eventuelle forskjeller i de 4 tilfellene? 4
Utskrift til printer: Gå til I/O-menyen og ta en utskrift av siste skjermbilde. Når vi som her har brukt logikkanalysatoren til å se på tidsforløp og til å måle tid, sier vi at vi har brukt den til TIMING-analyse. Vi kan også bruke den til såkalt STATE-analyse. Dette er spesielt nyttig når vi ønsker å se på hva som skjer på data- og adresse-bussen i en prosessor. Slik kan vi kontrollere at programmet går som det skal. Presentasjonen på skjermen i en STATE-analyse kan være binær, hexadesimal eller i ASSEMBLY-kode (dersom analysatoren har disassembler for den aktuelle prosessoren). Se for øvrig i kapittel 8 i brukermanualen - Using the State Analyser. Så langt tiden tillater det anbefales det at du "utforsker" analysatoren på egen hånd. For å komme til systemmenyen, plasserer du bare kursor i rammen øverst til venstre og trykker SELECT. Velg så "System" fra den undermenyen du da får. 5