Sunteți pe pagina 1din 5

Ce e ala un MAC.

===============================================
| Un bloc Multiply and Accumulate este un circuit
| combinational proiectat pentru eficientizarea
| operatiilor specifice prelucrarii numerice a
| semnalelor precum operatia de convolutie, FFT,
| filtre FIR.
| In cazul microprocesorului DSP BF537, operatiile
| de tip multiply and accumulate sunt efectuate
| de unitatea aritmetica pentru date prin
| circuite multiplicatoare pe 16 biti, si circuite
| sumatoare pe 40 de biti. Astfel, output-ul unui multiplicator cu 2 intrari
| pe 16 biti va avea 32b, devenind inputul unui sumator pe 40b.
| Cum suma a 2 numere pe 32b poate fi reprezentata pe 33b ,cei 40b ai sumatorului
| asigura posibilitatea efectuarii unui numar convenabil
| de multiplicari si insumari succesive.
|
| uDSP BF537 are 2 multiplicatoare 16b si 2 sumatoare 40b si poate efectua
| intr-un singur ciclu 2 operatii simultane pe 16 biti de MAC cu 2 output-uri pe 32
biti.
===============================================

Convertorul AD. Ce avem la intrare. Ce avem la iesire. Ce marcheaza pornirea


conversiei. Finalul conversiei. Tipuri conexiuni
============================================== //UPDATED1
| Convertorul AD primeste un semnal analogic de intrare UNIPOLAR sau BIPOLAR si
| pune la iesire un (cod convertor) semnal digital pe N biti, cu semn sau fara
semn. In utilizarea convertorului AD,
| semnalul SOC (Start Of Conversion) treabuie generat ( fiind un semnal
| de comanda) iar semnalul EOC(End Of Conversion) treabuie testat (trece in starea
| HIGH cand s-a primit SOC si revine in starea LOW cand conversia s-a terminat).
| Softul stie ca s-a terminat conversia prin interogare, prin intrerupere sau prin
| DMA.
| Conexiuniea la convertorul AD poate fi
| - conexiune cu masa comuna (Single Ended): De la sursa de semnal, la
convertorul
| AD exista un singur fir, celalat fir fiind conectat la masa.
| Avantaj: un singur canal.
| Dezavantaj: diferenta de impamantare.
| - conexiune diferentiala (D): De la sursa de semnal la convertorul AD se trag

| 2 fire.
| Avantaj: masuratoarea nu mai depinde de masa.
| Dezavantaj: folosesc 2 fire pentru un singur canal, ce ar trebui
torsadate sau ecranate.
|
| Convertorul AD din K60 implementeaza metoda de conversie analog numerica cu
aproximatie succesiva.
| ... merge dezvoltat cu numaraor + convertor DA + comparator (amplificator
operational) blabla.
==============================================

Secventiatorul DSP. Particularitati functionale care asigura cresterea vitezei de


executie a instructiunilor.
==================================================================
| Rolul secventiatorului DSP este acela de a controla fluxul de instructiuni,
| incluzand aliniera si decodarea lor. Acesta genereaza urmatoarea adresa (pe 32b)
| de la care sa se aduca instruciuni.
| Secventiatorul DSP citeste intotdeauna cate 64 de biti din memorie
| si realiniaza datele aduse in operatii individuale pe 16, 32, 64
| de biti inainte de a le trimite pipeline-ului de executie.
| La nivelul secventiatorului DSP se gestioneaza buclele, subrutinele, salturile,
| starea idle si exceptiile.
| Particular, in cazul buclelor, cu ajutorul registrilor de loop (LC0, LC1 (loop
counters), LT0, LT1 (loop top),
| LB0, LB1 (loop bottom)) folositi pentru controlul PC (program counter-ului),
| saltul de la ultima instructiune din bucla la prima se face cu cost zero.
| In registrii RETS (subroutine return), RETI (interrupt return),
| RETX (exception return), RETN (NMI return) se retin adresele la care
| fluxul secvential a fost intrerupt (de apel de subrutine, de intretuperi) pentru
a se putea intoarece
| la urmatoare instructiune secventiala cu cost zero.
==================================================================

Formate de reprezentare. De ce formate avem nevoie pentru a calcula un MAC? (la


intrare si la iesire)
==================================================================
| Operatia MAC consta intr-o operatie de multiplicare in care intra
| 2 operanzi pe 16 biti si rezulta un operand pe 32b, si o operatie de insumare
| cu un alt rezultat pe 32b. Sumatorul primeste operanzi pe 40b permitand
| un numar convenabil de insumari (acumulari) (mai exact 2^8 in worst case)
| --- TO BE CONTINUED ---
| char(8.0) * char(8.0) -> short(16.0)
| short(16.0) * short(16.0) -> int(32.0) -> 40.0
| fract16(1.15) * fract16(1.15) -> fract32(1.31) -> 9.31
==================================================================

Ce este un sistem Real-Time? Trebuia sa zici ca timpul de transfer dma + procesare


< perioada procesata
==================================================================
| Un sistem de timp real trebuie sa asigure ca:
| - nu pierde nici o cerere de intrerupere
| - raspunde cererii de intrerupere intr-un timp maxim de raspuns precizat.
| O alta particularitate a unui RTOS este existenta taskului 'dummy' care
| tine locul buclei while(1), si care, in intervalul maxim de raspuns
| trebuie sa se execute cel putin o data, deoarece el rearmeaza ceasul de
| garda (watchdog timer), un monostabil retrigherabil.
| Ceasul de garda genereaza un impuls cu latime programabila la primirea
| unui front crescator. Daca nu mai este armat, el genereaza fie o intrerupere
| nemascata, fie semnalul de reset.
==================================================================

Ceva despre VDK. Ce primitive pune la dispozitie VDK pentru a-l ajuta pe
programator.
Trebuia sa prezinti pentru achizitia unor esantioane de la un adc parca.. sa zici
de semafoare, intreruperi..nu mai stiu
+
Aplicatia Inregistrare-Redare "Talk Through" folosind VDK
================================================================== //UPDATED1
| VDK pune la dispozitie:
| - fire de executie cu mecanisme de prioritizare si planificare
| - primitive de sincronizare (semafoare, zone critice si zone neplanificate)
| - mecanisme de comunicare intre firele de executie (mesaje)
|
| Exemplu de utilizare a primitivelor VDK in aplicatia TalkThrough:
| Rutina de callback a ADC face POST unui semafor cand un esantion e convertit.
Acestui semafor ii
| face PEND un thred InputThread care preia informatia de la ADC si o muta in
| memorie, intr-un InputBuffer, dupa care ii semnalizeaza unui thread ProcessThread
| ce locatii de memorie au fost scrise. ProcessThread proceseaza informatia si o
muta
| OutputBuffer, semnalizand thread-ul InputBuffer despre ce zone de memorie au fost
| consumate si pot fi rescrise. La randul lui, ProcessThread semnalizeaza mai
departe
| thread-ului OutputThread ce zone din OutputBuffer au fost scrise.
| OutputThread consuma buffer-ul de iesire semnalizand zonele eliberate, si face
POST
| unui semafor partajat cu rutina de callback a DAC, care il decrementeaza pe
masura
| ce converteste esantioanele.
==================================================================

De scris 2 numere in format din ala, gen 1.15(este in carte cica cum se face).
==================================================================
| 0.000 0000 0000 0000 -> 0
| 1.100 0000 0000 0000 -> -0.5 (CC2)
==================================================================

Sistemul de intreruperi la ARM


==================================================================
| Spre deosebire de IA32, solicitantii de intreruperi sunt in cip.
| K60 contine un NVIC (Nested Vectored Interrupt Controller) care
| este responsabil pentru gestionarea a pana la 95 de intreruperi
| cu 16 niveluri de prioritate.
| Microcontroller-ul are implementeza Fast Interrupt Request,
| avand pt registrii r8-r14, registrii dublura r8_fiq - r14_fiq.
| La intreruperi frecvente se castiga timpul pentru salvarea/restaurarea
contextului
| deoarece intreruperea va utiliza registrii dublura, iar aplicatia isi
| poate pastra informatiile importante in r8-r14, iar prin r0-r7
| aplicatia poate transmite parametrii / returnare de rezultate din ISR.
|
| Pentru utilizarea sistemului de intreruperi, trebuie pus un pointer
| catre ISR in tabela vectorilor de intreruperi, la locatia specifica
| intreruperii perifericului dorit.
| In ISR trebuie dezactivat flag-ul de intrerupere in perifericul care a
| generat-o.
==================================================================

Led blink. Fluxul de prelucrare pentru aprinderea intermitenta a unui LED.


==================================================================
| GPIO + intrerupere de RTC
| In initializare se seteaza multiplexorul pinului la care este
| conectat ledul pe alternativa de GPIO. GPIO se seteaza astfel:
| registrul Data Direction pentru output, iar in registrul Data Out
| se foloseste pentru toggle leduri.
| Toggle se face in ISR a RTC.
==================================================================

Componentele unitatii de control (secventiatorul)


==================================================================
| Componentele unitatii de control:
| - circuitul pentru alinierea instructiunilor (poveste 64b -> 16b, 32b, 64b)
| - circuitul pentru decodarea instructiunilor
| - buffer-ul pentru operatii de ciclare:
| LC0, LC1 (loop counters),
| LT0, LT1 (loop top),
| LB0, LB1 (loop bottom))
==================================================================

Aplicatia Inregistrare-Redare "Talk Through". schema + explicare schema. resurse


hardware. intreruperer. rolul procesorului.
==================================================================
| Sursa de semnal audio (AD-ul CODEC-ului) foloseste un canal de comunicatie
| seriala SPORT0 care primeste esantioanele si care le transfera prin DMA
| in memorie, intr-un buffer de receptie.
| La sfarsitul transferului DMA, se genereaza o intrerupere.
| In ISR CPU muta esantioanele din buffer-ul de receptie, in alta zona
| de memorie, un buffer de transmisie, dupa care genereaza o cerere de
| transfer DMA care reface traseul: citeste prin DMA din tx_buffer,
| transmite pe interfata seriala SPORT0 catre CODEC (DAC) care are la
| iesire o pereche de casti.
| Resurse hardware: CODEC(ADC + DAC), interfata seriala SPORT0, DMA
| memoria L1, CPU.
| Rolul procesorului: muta din rx_buffer in tx_buffer, putand procesa informatia
| pe parcurs.
==================================================================

Comutarea intre task-uri la IA32.


==================================================================
| Comutarea intre task-uri la IA32 se face salvand contextul
| actual si modificand Task Register cu adresa din GDT(Global Descriptor Table),
| ce contine descriptorul TSS-ul(Task-State Segment) task-ului ce urmeaza
| sa se execute, urmand restaurarea contextului taskului urmator.
| plm :))
| // Sergiu stie mai multe aici ca e mai proaspat.
==================================================================

Comentati schema ierarhizata a mediului de lucru in timp real VDK.


==================================================================
| Schema ierarhizata aseaza la baza mediului de lucru Serviciile de sistem.
| Dintre serviciile de sistem enumeram:
| - controlul porturilor,
| - controlul flagurilor
| - controlul DMA,
| - Dynamic Power(prin care se poate modifica tensiunea de alimentare
| si frecventa de lucru - in ideea de a salva bateria),
| - EBIU (functionalitate care configureaza interfata externa),
| - Interrupt Manager Services:
| - Core Event Controller: precizeaza nivelurile de intrerupere pentru o
anumita seventa de cod (la nivelul nucleului)
| - System Interrupt Controller: activeaza perifericele legate la ceasul
de sistem sa genereze intreruperi.
| Peste serviciile de sistem vin Device Driverele care inglobeaza
| serviciile de sistem in functii din API, precum adi_dev_Open(),
| adi_dev_Close(), adi_dev_Read(), adi_dev_Write() si functii de callback.
| Device Driverele sunt utilizate de nucleul VDK care ofera facilitati
| de multitaking, sincronizare, si comincare intre firele de executie
| cu respectarea caracteristicilor te timp real.
| Facilitatile oferite de RTOS sunt utilizate de aplicatie,
| oferind usurinta in dezvoltare si modularitate. Cu toate acesta, in functie de
| necesitatile programatorului, aplicatia poate face uz de serviciile de
| sistem in mod direct fara a fi nevoie de straturile intermediare ale RTOS.
==================================================================