|
||||||||||||
|
||||||||||||
|
||||||||||||
Gli effetti audio in real time sono stati implementati sul processore per DSP TMS320C31 (TEXAS INSTRUMENTS). Per ciò che riguarda la parte di acquisizione e restituzione del segnale, sono stati utilizzati:
Il 'C3x DSK è una scheda che consente lo sviluppo di stand-alone application.
Il DSK ha a bordo un TMS320C31 floating point DSP, che può essere connesso con un host PC attraverso una interfaccia parallela. Questo consente di sviluppare il software su PC, scaricarlo sul DSK su cui il software stesso viene eseguito. L'acquisizione del segnale analogico è consentita dall'interfaccia single-channel TLC32040, costituita da:
L'input e l'output analogici sono collegati a connettori RCA e sono line-level compatibili. L'output, in particolare, può essere connesso direttamente ad uno speaker. Tuttavia, non avendo un livello significativo, è preferibile l'uso di un amplificatore esterno. La figura seguente mostra il diagramma a blocchi del TMS320C3x DSK hardware. |
||||||||||||
|
||||||||||||
L'AIC è collegato al TMS320C31 attraverso
la porta seriale. Un blocco di jumper consente di rimuovere questa connessione
in modo da indirizzare la porta seriale ad una
DSK-daughtercard.
Il TMS320C3x resetta l'AIC attraverso il pin esterno XF0. Esso genera inoltre il master clock per l'AIC tramite il pin TCLK0 (output del timer 0). A sua volta l'AIC genera i segnali CLKR0 e CLKX0, nonché FSR0 e FSX0 che costituiscono, rispettivamente, i clock di bit e di frame per le sezioni di ricezione e trasmissione della seriale. |
||||||||||||
L'uso dell'interfaccia analogica TLC32040 richiede l'inizializzazione ed il set-up della porta seriale, del timer, del convertitore e l'abilitazione delle neccessarie linee di interrupt. | ||||||||||||
![]() |
||||||||||||
'C31 TIMERS |
||||||||||||
![]() |
||||||||||||
I due timer del 'C31 sono contatori di eventi general purpose a 32 bit. |
||||||||||||
|
||||||||||||
Essi possono essere utilizzati nelle due modalità clock mode
o pulse mode e prevedono l'utilizzo di un clock interno o esterno.
Con un clock interno i timer possono essere usati per segnalare ad un
convertitore esterno di iniziare la conversione, mentre con un clock esterno
i timer possono interrompere la CPU dopo un numero fissato di eventi esterni.
I timer hanno un I/O pin che può essere utilizzato come input clock signal, come output clock signal oppure come general purpose I/O pin. |
||||||||||||
|
||||||||||||
L'inizializzazione ed il set-up dei timer vengono fatti per mezzo di
tre registri mappati in memoria:
|
||||||||||||
|
||||||||||||
![]() |
||||||||||||
'C31 SERIAL PORT |
||||||||||||
![]() |
||||||||||||
Il 'C31 è dotato di una porta seriale costituita da una sezione di ricezione e una di trasmissione che consentono l'uso full-duplex della seriale stessa. | ||||||||||||
|
||||||||||||
Ogni sezione comunica con l'esterno attraverso 3 pin:
Il clock di bit della seriale, per ogni sezione, può essere originato internamente dal serial port timer (TimerR, TimerX), o esternamente da un clock supplementare. In particolare, nel primo caso, il serial port timer è gestito attraverso registri analoghi a quelli del 'C31 timer. La funzione dei pin della porta seriale è gestita attraverso 8 registri mappati in memoria:
Per quanto riguarda la temporizzazione della porta seriale, questa è determinata, per ogni sezione, da due segnali di sincronismo: un clock di bit (CLKR/X) e uno di frame (FSR/X). Il dato è trasmesso sul fronte di salita della linea CLKX, mentre è caricato in RSR sul fronte di discesa di CLKR, benché sia possibile via software cambiare la polarità di tutti i segnali della porta seriale (bit 12÷17 del Global Control Register). I segnali di sincronismo di frame (FSR/X), che determinano l'inizio della trasmissione e ricezione del dato, hanno una relazione di fase, con i segnali di clock e dati, diversa in base alla modalità di utilizzo della seriale. Quando FSX è specificato come output, l'attività del segnale è determinata esclusivamente dallo stato interno della porta seriale. In fixed data rate mode, FSX viene alzato quando DXR è caricato in XSR per essere trasmesso. Dopo un ciclo di clock FSX torna inattivo e inizia la trasmissione del dato. In variable data rate mode, FSX viene attivato nel momento in cui inizia la trasmissione del dato e rimane attivo durante l'intera trasmissione. Anche in questo caso intercorre un ciclo di clock tra il caricamento del registro e l'inizio della trasmissione. Quando FSX è specificato come input, in fixed data rate mode la linea deve essere tenuta attiva per almeno un ciclo di clock e quindi abbassata per dare inizio al trasferimento. A questo punto il trasmettitore invia il numero di bit specificato dai bit XLEN. In variable data rate mode, la trasmissione ha inizio dal momento in cui FSX diventa attivo fino a quando il numero di bit specificato non è shiftato fuori. Se lo stato di FSX cambia prima che l'ultimo bit sia stato trasmesso, la trasmissione viene comunque completata. Il segnale FSR è sempre un input per la seriale e si comporta in modo analogo al FSX. Utilizzando un FSX esterno, se DXR e XSR sono vuoti, una scrittura su DXR causa un trasferimento da DXR a XSR in cui il dato resta fino al successivo segnale di sincronismo FSX. Una nuova scrittura su DXR, prima del segnale FSX, fa variare il contenuto di tale registro senza causare alcun trasferimento da DXR a XSR. |
||||||||||||
![]() |
||||||||||||
TLC32040 AIC |
||||||||||||
![]() |
||||||||||||
L'interfaccia analogica TLC32040 è
pilotata da un master clock (MCLK) che deve avere una frequenza compresa
tra 75 KHz e 10 MHz.
La frequenza di campionamento dell'AIC è determinata dai valori dei registri A e B delle sezioni di ricezione e trasmissione in base alla relazione: |
||||||||||||
|
||||||||||||
I valori di MCLK e di A determinano, oltre alla frequenza di conversione, anche le frequenze di taglio degli switched-capacitor filter. Tali filtri, lowpass in ingresso e bandpass in uscita, hanno caratteristiche che si adattano alla banda telefonica (300 ÷ 3600 Hz) se la frequenza di clock in ingresso agli switched-capacitor filter è pari a 288 KHz. Tale frequenza è espressa dalla relazione: | ||||||||||||
|
||||||||||||
Se il valore precedente è diverso dai
288 KHz, le frequenze di taglio dei filtri vengono variate di conseguenza.
Per inizializzare i registri A e B sono necessarie due comunicazioni: una primaria e una secondaria. La comunicazione primaria è costituita da una word di 16 bit. |
||||||||||||
|
||||||||||||
I 14 MSB rappresentano il data value; i 2 LSB sono bit di modo che vengono interpretati in base alla tabella seguente: | ||||||||||||
|
||||||||||||
La comunicazione secondaria segue immediatamente una comunicazione primaria con bit di modo 11. Questa comunicazione programma l'AIC mediante il caricamento dei registri A, A', B o di controllo. | ||||||||||||
|
||||||||||||
Il registro di controllo consente di abilitare e disabilitare eventuali ingressi ausiliari e il bandpass filter, di impostare il guadagno in ingresso, la modalità di trasmissione/ricezione e la funzione di loopback. | ||||||||||||
|
||||||||||||
![]() |
||||||||||||
'C31 INTERRUPTS |
||||||||||||
![]() |
||||||||||||
Il TMS320C31 supporta più linee di interrupt sia interni che esterni.
Quattro registri della CPU contengono bit utilizzati per il controllo degli interrupt:
Gli interrupt sono vettorizzati: ad ogni flag corrisponde una locazione di memoria nella quale è indicato l'indirizzo della corrispondente routine di servizio (microcomputer mode), ovvero una istruzione di salto all'inizio della routine stessa (microprocessor mode). |
||||||||||||
![]() |
||||||||||||
INIZIALIZZAZIONE E SET-UP |
||||||||||||
![]() |
||||||||||||
I seguenti segmenti di codice sono quelli utilizzati per la configurazione e l'inizializzazione dello Starter Kit: | ||||||||||||
|
||||||||||||
|
||||||||||||
|
|