1 Indholdsfortegnelse.



Relaterede dokumenter
Netværk & elektronik

Quick Setup Guide SB168-ES og M7CL Dansk version

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

WT-1011RC Programmer User Guide

System Arkitektur og Integration

Datamaters arkitektur og programmering

Microcontroller, Arduino

Arduino Programmering

AVR MP Ingeniørhøjskolen i Århus Michael Kaalund

Internt interrupt - Arduino

ECE 551: Digital System * Design & Synthesis Lecture Set 5

Brugermanual. EnVivo Cassette Converter

WT-1011RC Programmer User Guide

Total systembeskrivelse af AD1847

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax

2x50 ETHERNET MODUL. RS485 slave med Ethernet-IP. Gælder for: Program nr.: AUXSLAVE v1 Dokument nr.: 0422md2x50-2v1 Dato:

Brugermanual Model Raxtune Oxygen

Quick Setup Guide SB168-ES og LS9 Dansk version

Projekt - RoboNet Del Journal.

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor.

Opsætning af xcon og Logix Controller

Video Projector Controller. Brugermanual

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

Hurtigt i gang med LinMot DeviceNet til Allen Bradley Logix Plc

// Definition af porte og funktioner


INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen. I3PRG3 + I3DTM3 + I3ISY1-3. semester

Diagnostic og Toolbox Instruktion. Lindgaard Pedersen A/S. Rev. 1.0 Side 1 / 14

PA system i studie 2. Indholdsfortegnelse: 1. GENEREL BESKRIVELSE 2. DETALJERET BESKRIVELSE 3. SIMPEL BRUG AF PA SYSTEMET BRUG AF PA SYSTEMET:...

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Delta Elektronik A/S - AKD

SPECIALTRYKKERIETS KUNDE WEBPORTAL KOM GODT I GANG

WEA-Base Brugervejledning til vejetransmitter

Intro til AVR. Mads Pedersen, OZ6HR

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

MANUAL. DIGITAL DESIGN s AUDIO- RUM. God Fornøjelse. Før ibrugtagning af DD s Audio- rum SKAL man gøre sig bekendt med indholdet i denne manual!

Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)

MCE2040 SERIEL KOMMUNIKATIONSMODUL

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Start på Arduino og programmering

Efter installation af GEM Drive Studio software fra Delta s CD-rom, skal hoved skærmbilledet se således ud: (koden til administrator adgang er: admin)

uprocessorens hardware

Ruko SmartAir. Updater installation

ELCANIC A/S. ENERGY METER Type ENG110. Version Inkl. PC program: ENG110. Version Betjeningsvejledning

IAI Quick Start Guide

MultiProgrammer Manual

Analoge indgange og A/D konvertering. Analoge udgange

Embedded controller, almen.

Ved indkøring påtrykkes en kendt amplitude (HUSK 50 ohms afslutning) og displayet aflæses.

16. september 2013 InClimate funktionalitets og modbus setup version 7.1 Side 2

Emergency call button. Stabilt og simpelt

Adobe Digital Editions

Delfi Connect. Bruger vejledning 1. TILSLUTNING INSTALLATION MENUSTRUKTUR...4

Boligsøgning / Search for accommodation!

MobileCTI Dialer Installations og konfigurations vejledning

Hjælp, mine deltagere aflytter og øver sig til YouTube men i forkert toneart.

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval).

Løsning af skyline-problemet

Wahlberg Surtitle Display

Vejledning til at tjekke om du har sat manuel IP på din computer.

CANSAT & ARDUINO step by step

Planen for idag. Kontrol af ydre enheder. Systemarkitektur. Synkronisering ved aktiv venten. Multiprogrammering[1]: Ydre enheder og multiprogrammer

Vejledning INSTALLATION AF ZHC5010 BETJENINGSTRYK MED VERA SMART HOME CONTROLLER.

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet.

Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!)

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse.

MANUAL SKIOLD GØR EN FORSKEL DISTRIWIN SERVICE INSTALLATION

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Netkit Dokumentation

Wii Software Modificering. Uber Guide

LAB ØVELSE KONFIGURATION AF DHCP PÅ DANSK AF KIM DONNERBORG / RTS

OG-3600 Series Fiber Optic Transport for opengear card frame platform w/ SNMP Management

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

Westermo GDW-11 GSM Modem forbindelse til CXxxxx

Fra programmering til mikroprocessor

RoE timestamp and presentation time in past

Sådan bruger du BK- 9 Performance List. Formatering af USB- Memory. "Performance List" er en liste over dine registreringer.

DSP Digitale signal behandling Lkaa

Dansk version. Introduktion. Pakkens indhold. Tilslutninger. SC016 Sweex 7.1 eksternt USB lydkort

1 Indholdsfortegnelse.

Opsætning af Infranor CD1-a

OPTAC overførselsenhed Brugermanual

const int disponibel_10= 10; const int disponibel_11= 11; const int disponibel_12= 12; const int blinkled = 13; // pin 13 er LED på NANO

MP3 player med DMX interface.

tube tube Brugermanual Internet Radio Digital Radio OXX Digital Follow OXX DIGITAL on twitter Follow OXX DIGITAL Scandinavian

GSM SMS Modem MODEL: SA RTU-1 V1.01

MCE9637 DeviceNet Modul

Microcontroller, Arduino

Typisk PC arkitektur. Synkronisering ved aktiv venten

up/ansi Eksamensspørgsmål

Vejledning INSTALLATION AF ZHC5010 BETJENINGSTRYK MED VERA SMART HOME CONTROLLER. ZHC5010 Firmware Version: 0.14

Chapter. Information Representation

Podcast på TekX. Quick guide Sørg for at sætte mikrofoner i de stik, der skal bruges. Sæt GAIN til klokken 14

HUMANWARE BRAILLIANT INSTALLATIONSVEJLEDNING

Instruktioner i installation og afinstallation af Windows PostScript- og PCLprinterdrivere

Help / Hjælp

Antares Brugs- og monteringsanvisning. Programmeringssoftware for Cobra CAN BUS alarmer AK44XX & AK46XX

Allan Nelsson - OZ5XN. Licenced since 1970

Transkript:

ET106 Ringsted Tekniske Skole 21. maj 1999

1 Indholdsfortegnelse. 1 Indholdsfortegnelse. 2 2 Indledning. 3 3 Generelt om DSP. 3 4 Om EZ-kittet. 4 5 Signalbehandling. 5 5.1 Indgangs lavpasfilter. 5 5.2 Indgangs analog/digital konverter. 5 5.3 Signalprocessor. 5 5.4 Udgangs digital/analog konverter. 5 5.5 Udgangs lavpasfilter. 5 5.6 Vores fremgangsmåde. 6 5.7 CODEC kreds. 8 6 Konklusion. 9 7 Litteraturliste. 10 8 Appendiks A: Struktureret program. 11 9 Appendiks B: Talk Thru demoprogram. 12 9.1 void set_input_gain( void ) 14 9.2 void set_samplerate( void ) 15 9.3 void spt0_asserted() 15 9.4 void spr0_asserted() 16 9.5 void setup_sports ( void ) 16 9.6 void send_1847_config_cmds( void ) 17 9.7 void init_21k( void ) 18 9.8 void main ( void ) 18 Per Bruhn 2 af 19 21-05-99

2 Indledning. Vi skulle i dette projekt der hedder Simpel Signalbehandling prøve at få hul igennem et DSP kit af eget valg. Vi kunne vælge mellem: Motorola HC16 Motorola DSP 56000 Analog Devises SHARC EZ_Kit Lite Texas (?) Her valgte jeg at arbejde sammen med Casper og vi valgte at bruge et DSP kit fra Analog Devises som hedder SHARC EZ-KIT Lite. Dette kit er primært beregnet til at behandle lyd med. 3 Generelt om DSP. Digital signalbehandling DSP (engelsk: Digital Signal Processing) drejer sig om i realtidssammenhæng at behandle, detektere eller generere analoge signaler ved hjælp af digitale metoder, dette skal helst ske med en så lille tidsforskydelse som muligt. Teknikkerne bag digital signalbehandling har været brugt lige siden at computeren kom på markedet, der har den været anvendt til at behandle opsamlede og lagrede signaler. Anvendelsen af digital signalbehandling har taget fart de senere år, med udviklingen af hurtigere og hurtigere specielle signalbehandlings processorer, hurtigere analog/digital og digital/analog konvertere. Digital signal behandling er kommet ind på mange områder hvor der hovedsageligt har været analog teknik, det bliver typisk brugt i følgende områder: Automatisk test og måleudstyr. Datatransmission. Elektronisk filtrering og equalizing. Lagring og behandling af HI-FI og vidoesignaler. Talegenkaldelse og frembringelse af syntetisk tale. Per Bruhn 3 af 19 21-05-99

4 Om EZ-kittet. SHARC EZ-KIT Lite består af et lille ADSP-21061 baseret udviklings og demonstrations kort, som er et fuldt 16 bit stereo audio I/O kompatibelt. Brættets faciliteter inkluderer: Analog Devices ADSP-21061 DSP der kører 40 MHz. Analog Devices AD1847 16-bit Stereo Soundport (CODEC). RS-232 interface. EPROM i sokkel. Bruger trykknapper. Bruger programmerbar lysdioder. Udvidelses stik. Brættet kan køre alene eller det kan være forbundet til Pc en via RS232 porten. Per Bruhn 4 af 19 21-05-99

5 Signalbehandling. 5.1 Indgangs lavpasfilter. Der tilføres et signal til DSP kittet, det kan f.eks. gøres fra cd-rom drevet med en cd med noget musik på, det kommer ind til et lavpas filter der fjerner de højfrekvente signaler, for de frekvenser der er højere en den halve sample frekvens vil danne nogle uønskede frekvenser, så man ikke får noget meningsfyldt ud på systemets udgangssignal. 5.2 Indgangs analog/digital konverter. Analog/digital konverteren konverterer analogsignalets øjebliksværdi til et digitalt ord på 16 bit for hver kanal. 5.3 Signalprocessor. Signalprocessoren er hjernen i digital signalbehandling, den udfører processen med at behandle signalerne, og hvad den skal gøre bestemmes af programmøren der skriver hvad den skal gøre i et program f.eks. i C, det compileres med g21k.exe, det laver så en fil der kommer til at hedde xxx.21k den fil kan så downloades med DSP Host programmet der følger med kittet. Det er det programmøren har skrevet i programmet, der bestemmer hvad processoren skal gøre med signalet, den kan f.eks. lavet et elektronisk lavpasfilter, eller den kan dekode surroundsound lyd. 5.4 Udgangs digital/analog konverter. Digital/analog konverteren omsætter signalprocessorens digitale udgangssignal til et analogt signal. Signalet har på grund af at det er samplet et stort indhold af højfrekvente signaler. Signalet er ikke et sandt billede af det ønskede analoge udgangssignal. 5.5 Udgangs lavpasfilter. Lavpasfilteret i udgangen har til formål at rekonstruere det ønskede analoge udgangssignal, udfra digital/analog konverterens udgangssignal. Rekonstruktionen er udført effektivt, hvis filteret har reduceret de højfrekvente signaler til et ubetydeligt signalniveau. Per Bruhn 5 af 19 21-05-99

5.6 Vores fremgangsmåde. Da vi skulle have hul igennem sendte vi lyd fra cd-rom drevet til indgangen på SHARC kittet så brugte vi et demo program der hed Talk Thru, det henter signalet fra CODEC kredsen og sender det til DSP processoren via sport0, og sender det tilbage igen uden at der er gjort noget ved det. Når man skal have processoren til at ændre noget i signalet, kan man skrive det ind i den interrupt rutine der hedder void spr0_asserted( int sig_num ). I vores version af Talk Thru programmet kopieres indholdet af recive bufferen direkte til transmit bufferen, så der bliver ikke ændret noget i signalet. // Copy received data buffers to transmit data buffers. tx_buf[1] = rx_buf[1]; tx_buf[2] = rx_buf[2]; Men vil man f.eks. lave et lavpas filter i den ene kanal kan man skrive dette ind i funktionen. float k,uo,plus,ui; k=0.987; ui = (float)rx_buf[1]; uo = (ui*(1-k))+(z*k); z = uo; tx_buf[1] = (int)uo; og tilføje dette i definement: float z = 1; C programmet compileres så med linien: g21k -I..\include -o hdsp.21k hdsp.c..\libdh.a hdsp er navnet på programmet, det kan man ændre som man vil. Per Bruhn 6 af 19 21-05-99

Programmet kommer så til at hedde hdsp.21k og det kan man så downloade med det tilhørende softwareprogram som hedder EZ-KIT Lite Host, det ser sådan ud. det gør man ved først at finde det bibliotek man har lagt filen i og så at åbne den fil man skal downloade så sker det hele automatisk. Det er også her man kan downloade de forskellige demoprogrammer der følger med softwaren. Det er de 7 knapper der er til højre for åben fil knappen. Når man så har downloadet sit program kan man så høre hvad man har ændret hvis man sætter et par højttalere eller høretelefoner til Line out stikket. Per Bruhn 7 af 19 21-05-99

5.7 CODEC kreds. Som tidligere skrevet, består DSP-kittet blandt andet af en CODEC-kreds. Denne kreds, der også kaldes en soundport, gør det i stedet ud for en masse andre enheder, som ellers er nødvendige i forbindelse med DSP-kittet. Men fordi den gør det ud for dem, betyder det ikke, at de ikke indgår i systemet. I stedet er det hele samlet i CODEC'en, som så består af: line-in indgange, lavpasfilter, ADC, seriel interface, DAC, rekonstruktionsfilter, line-out udgange o.l. CODEC'en er koblet på processorens sport0. Gennem denne er det muligt at konfigurere CODEC'en til en masse forskellige indstillinger. Konfigureringen heraf, forgår ved at skrive til dens 16 registre. Blandt andet er det muligt at ændre samplefrekvensen, gain samt vælge mellem indgangene og mix her af. Per Bruhn 8 af 19 21-05-99

6 Konklusion. Vi har fået hul igennem SHARC kittet og det er jeg godt tilfreds med for der er mange ting at sætte sig ind i for at initialisere SHARC kittet, men når man først har grundskelettet som f.eks. det fra Talk Thru programmet går det lidt nemmere. Det har da været meget sjovt at snuse til DSP, men der er så meget at sætte sig ind i så man ikke ved hvor man skal begynde og hvor man skal ende. Vi fik også lavet et program, hvor vi kunne skrue op og ned for lyden ved at trykke på pil op og pil ned, og vi fik lavet flanger effekt, det vil sige at lyden cirkulerer fra den ene kanal til den anden, og med pil til højre og venstre kunne vi bestemme flanger hastigheden, det lyder meget sjovt, især når man har høretelefoner på, så er det er lige før at man føler øjnene følger med. På skærmen fik vi et vindue op hvor vi kunne se volumestyrken den kunne varieres fra 0 til 15 og vi kunne også se flangerhastigheden. Jeg har ikke nået at grave så dybt ned i opsætningen af SHARC kittet, da det er så omfattende, og vi havde ikke så meget tid, men det er også kun introduktion til DSP, så jeg regner med at vi for en større forståelse for det, når vi har været igennem det på 3.semester. Per Bruhn d. 21-05-99 Per Bruhn 9 af 19 21-05-99

7 Litteraturliste. Turbo C++ Finn Elvekjær Systime ISBN 87 7783 008 3 Digital Signal Behandling Erik Hüche Teknisk Forlag ISBN 87 571 0874 9 Elektronik Ståbi Teknisk Forlag ISBN 87 571 1481 1 Per Bruhn 10 af 19 21-05-99

8 Appendiks A: Struktureret program. Main Init_21k Setup_sports Send_1847_ config_cm ds Set_input_ gain Set_samplerate Tegnforklaring: Spt0_asserted (int sig_num) Spr0_asserted (int sig_num) Roterende pil: Indikerer at den underliggende funktion kaldes mere end en gang (Evt. en løkke). Stiplet pil: Viser at programkontrol er betinget, dvs. en betingelse skal være opfyldt for programkontrol overføres. Knækket pil: Viser at rutinen bliver kaldt når der kommer en interrupt. Per Bruhn 11 af 19 21-05-99

9 Appendiks B: Talk Thru demoprogram. /* The following attributes of the AD1847 operation can be altered while the program is running: input gain (16 levels), and samplerate (14 frequencies). Input Gain formula: level * 1.5dB (default level = 0 --> 0dB) Samplerates (in khz): ( 0) 8 ( 1) 5.5125 (default) ( 2) 16 ( 2) 11.025 ( 4) 27.42857 ( 5) 18.9 ( 6) 32 ( 7) 12.05 ( 8) N/A ( 9) 37.8 (10) N/A (11) 44.1 (12) 48 (13) 33.075 (14) 9.6 (15) 6.615 */ /* ADSP-2106x System Register bit definitions */ #include <def21060.h> #include <21060.h> #include <signal.h> #include <sport.h> #include <macros.h> /* DMA Chain pointer bit definitions */ #define CP_PCI 0x20000 /* Program-Controlled Interrupts bit */ #define CP_MAF 0x1ffff /* Valid memory address field bits */ #define SetIOP(addr, val) (* (int *) addr) = (val) #define GetIOP(addr) (* (int *) addr) Per Bruhn 12 af 19 21-05-99

#define SZ_regs_1847 16 int regs_1847[sz_regs_1847] = /* Note that the MCE bit is maintained throughout initial programming to hold off premature autocalibration. */ 0xc000, /* index 0 - left input control */ 0xc100, /* index 1 - right input control */ 0xc280, /* index 2 - left aux 1 input control */ 0xc380, /* index 3 - right aux 1 input control */ 0xc480, /* index 4 - left aux 2 input control */ 0xc580, /* index 5 - right aux 2 input control */ 0xc600, /* index 6 - left dac control */ 0xc700, /* index 7 - right dac control */ 0xc85c, /* index 8 - data format */ 0xc909, /* index 9 - interface configuration */ 0xca00, /* index 10 - pin control */ 0xcb00, /* index 11 - no register */ 0xcc40, /* index 12 - miscellaneous information */ 0xcd00, /* index 13 - digital mix control */ 0xce00, /* index 14 - no register */ 0x8f00; /* index 15 - no register */ int rx_buf[3]; /* receive buffer */ int tx_buf[3] = 0xcc40, 0, 0; /* transmit buffer */ /* DMA chaining Transfer Control Blocks */ typedef struct unsigned lpath3; /* for mesh mulitprocessing */ unsigned lpath2; /* for mesh multiprocessing */ unsigned lpath1; /* for mesh multiprocessing */ unsigned db; /* General purpose register */ unsigned gp; /* General purpose register */ unsigned** cp; /* Chain Pointer to next TCB */ unsigned c; /* Count register */ int im; /* Index modifier register */ unsigned * ii; /* Index register */ _tcb; _tcb rx_tcb = 0, 0, 0, 0, 0, 0, 3, 1, 0; /* receive tcb */ _tcb tx_tcb = 0, 0, 0, 0, 0, 0, 3, 1, 0; /* transmit tcb */ int cmd_blk[8]; /* command block */ static int xmit_count; static int * xmit_ptr; static int current_rate; static int current_gain; Per Bruhn 13 af 19 21-05-99

// Variables which the user may set to control the Codec. volatile static int ordered_gain; volatile static int ordered_rate; 9.1 void set_input_gain( void ) void set_input_gain( void ) // If still transmitting commands, wait until done. if( xmit_count!= 0 ) return; // Limit input gain to valid values. ordered_gain &= 0x0f; // Put new input gain into 1847 register commands. regs_1847[0] = (regs_1847[0] & ~0x0f) ordered_gain; regs_1847[1] = (regs_1847[1] & ~0x0f) ordered_gain; // Get 1847 commands to set input gain and terminating // command into command block for transmission. cmd_blk[0] = regs_1847[0]; cmd_blk[1] = regs_1847[1]; cmd_blk[2] = regs_1847[15]; // Set up pointer and counter to transmit commands. xmit_ptr = cmd_blk; xmit_count = 3; // Update current value to commanded value. current_gain = ordered_gain; return; Per Bruhn 14 af 19 21-05-99

9.2 void set_samplerate( void ) void set_samplerate( void ) // If still transmitting commands, wait until done. if( xmit_count!= 0 ) return; // Limit sample rate to valid values. ordered_rate &= 0x0f; if( ordered_rate == 8 ) ordered_rate = 9; if( ordered_rate == 10 ) ordered_rate = 11; // Put new sample rate into 1847 register commands. regs_1847[8] = (regs_1847[8] & ~0x0f) ordered_rate; // Get 1847 command to set sample rate and terminating // command into command block for transmission. cmd_blk[0] = regs_1847[8]; cmd_blk[1] = regs_1847[15]; // Set up pointer and counter to transmit commands. xmit_ptr = cmd_blk; xmit_count = 2; // Update current value to commanded value. current_rate = ordered_rate; return; /* Serial port transmit DMA complete */ 9.3 void spt0_asserted() void spt0_asserted() // Check if there are more commands left to transmit. if( xmit_count ) // If so, put the comand into the transmit buffer and update count. tx_buf[0] = *xmit_ptr++; xmit_count--; Per Bruhn 15 af 19 21-05-99

/* Serial port receive DMA complete */ 9.4 void spr0_asserted() void spr0_asserted() // Copy received data buffers to transmit data buffers. tx_buf[1] = rx_buf[1]; tx_buf[2] = rx_buf[2]; /* Setup SHARC serial port 0 */ /* (transmission channel to codec AD1847) */ 9.5 void setup_sports ( void ) void setup_sports ( void ) /* Configure SHARC serial port SPORT0 */ /* Multichannel communications setup */ sport0_iop.mtcs = 0x00070007; /* transmit on words 0,1,2,16,17,18 */ sport0_iop.mrcs = 0x00070007; /* receive on words 0,1,2,16,17,18 */ sport0_iop.mtccs = 0x00000000; /* no companding on transmit */ sport0_iop.mrccs = 0x00000000; /* no companding on receive */ /* TRANSMIT CONTROL REGISTER */ /* STCTL0 <= 0x001c00f2 */ SetIOP(STCTL0, 0x001c00f2); /* RECEIVE CONTROL REGISTER */ /* SRCTL0 <= 0x1f8c20f2 */ SetIOP(SRCTL0, 0x1f8c20f2); /* Enable sport0 xmit & rcv irqs (DMA enabled) */ interrupt(sig_spr0i, spr0_asserted); interrupt(sig_spt0i, spt0_asserted); Per Bruhn 16 af 19 21-05-99

/* Set up Transmit Transfer Control Block for chained DMA */ tx_tcb.ii = tx_buf; /* DMA source buffer address */ tx_tcb.cp = &tx_tcb.ii; /* define ptr to next TCB (point to self) */ SetIOP(CP2, (((int)&tx_tcb.ii) & CP_MAF) CP_PCI); /* define ptr to current TCB (kick off DMA) */ /* (SPORT0 transmit uses DMA ch 2) */ /* Set up Receive Transfer Control Block for chained DMA */ rx_tcb.ii = rx_buf; /* DMA destination buffer address */ rx_tcb.cp = &rx_tcb.ii; /* define ptr to next TCB (point to self) */ SetIOP(CP0, (((int)&rx_tcb.ii) & CP_MAF) CP_PCI); /* define ptr to current TCB (kick off DMA) */ /* (SPORT0 receive uses DMA ch 0) */ 9.6 void send_1847_config_cmds( void ) void send_1847_config_cmds( void ) // Set up pointer and counter to transmit commands. xmit_ptr = regs_1847; xmit_count = SZ_regs_1847; // Wait for all commands to be transmitted. while( xmit_count ) idle(); // Wait for AD1847 autocal to start. while(!(rx_buf[0] & 0x0002) ) idle(); // Wait for AD1847 autocal to finish. while( rx_buf[0] & 0x0002 ) idle(); return; Per Bruhn 17 af 19 21-05-99

9.7 void init_21k( void ) void init_21k( void ) // Initialize pointer and counter to transmit commands. xmit_count = 0; xmit_ptr = regs_1847; // Enable interrupt nesting. asm( "#include <def21060.h>" ); asm( "bit set mode1 NESTM;" ); return; 9.8 void main ( void ) void main ( void ) int x; // Initialize some SHARC registers. init_21k(); // Reset the Codec. set_flag( SET_FLAG0, CLR_FLAG ); /* Put CODEC into RESET */ for( x=0 ; x<0xffff ; x++ ) /* Hold CODEC in RESET */ ; set_flag( SET_FLAG0, SET_FLAG ); /* Release CODEC from RESET */ // Configure SHARC serial port. setup_sports(); // Send setup commands to CODEC. send_1847_config_cmds(); Per Bruhn 18 af 19 21-05-99

// Loop forever. for(;;) // Check if user has ordered an input gain change. if( current_gain!= ordered_gain ) set_input_gain(); // Check if user has ordered a sample rate change. if( current_rate!= ordered_rate ) set_samplerate(); idle(); ; // End of file Per Bruhn 19 af 19 21-05-99