spinach Postat August 30, 2008 Partajează Postat August 30, 2008 salutam,Dupa ce am studiat problema , am capatat 3 semne de intrebare , astfel:1. Pot merge in paralel cele trei taimere/counter si programul din cod ?2. Pot fi utilizate in cod cele 6 flaguri disponibile (2 buc /taimer_counter)?3.Cum este mai bine de facut jonctiunea cu codul: a.prin flaguri b.prin intreruperi ? Link spre comentariu
Vizitator Postat August 30, 2008 Partajează Postat August 30, 2008 1. Da. Reciteste datasheetul.2. Ce flag-uri mai exact? Reciteste datasheet-ul si te prinzi. Probabil ca da.3. Nu exista metoda perfecta. Depinde ce vrei sa faci. Reciteste datasheet-ul. Dupa ce intelegi cum functioneaza iti dai seama singur ce metoda poate fi aplicata, in ce situatie si care sunt avantajele si dezavantajele fiecareia.Ca principiu contoarele alea functioneaza independent unele de altele si numara fiecare in legea lui, asa cum au fost programate, fara sa ii pese ce se intampla in celelalte numaratoare sau cu ce se ocupa unitatea centrala. Numaratorul numara in legea lui restul procesorului isi vede te treaba lui.Actualizarea bitilor de stare de prin registrii si alti indicatori ce tin de countere se face hardware, in timp real. Acei biti reflecta starea numaratoarelor indiferent ce executa restul procesorului, fara sa-l deranjeze, sa-l incurce sau sa-l incetineasca. Asta e valabil la orice periferic nu numai la timer.Exista unele bucati comune, cum ar fi prescalerele, dar scrie clar in datasheet care sunt bucatile comune mai multor timere sau chiar mai multor periferice, si in ce conditii pot fi folosite la comun sau separat..La fel se intampla si cu celelate periferice. Convertorul isi vede de treaba lui nestingherit, indiferent ce ruleaza uC in timpul ala cat se face conversia, numaratoarele numara, portul serial emite si receptioneaza, toate in acelasi timp fara sa se incomodeze unul pe altul. Bineinteles in tot timpul asta unitatea centrala (o botez UC) isi ruleaza programul nestingherita. Se intrerupe din ce (program) face ea numai daca un periferic genereaza o intrerupere. Evident ca daca nu sunt activate intreruperile UC nu se mai opreste chiar daca perifericul genereaza intreruperea.Mai reciteste datasheetul, uita-te la schema bloc a uC, incearca sa intelegi ce face fiecare bucata si cum sunt legate intre ele. Apoi vezi cum e organizata memoria. Pe urma incearca sa intelegi cum se executa instructiunile in uC. Se executa pe rand una cate una.Ca o regula generala, semnale importante de la/spre periferice sumt mapate in cate un bit dintr-un registru al perifericului.De exemplu, atunci cand citest registrul de date pentru un port de intrare:poti sa consideri ca citesti direct sarmele legate la piciorusele uC corespunzatoare portului x, nu te mai gandi ca de fapt citesti un registru care reflecta starea de pe sarmele de intrare ale portului x.Actualizarea asta (ce e pe portul x e si in registru) se face hardware nu software.Adica o face chiar schema interna a uC, nu e nevoie de niciun program pentru asta.In plus faptul ca ce e pe portul x e si in registrul corespunzator nu incetineste si nu incurca cu nimic executia programului din uC. Link spre comentariu
danzup Postat August 31, 2008 Partajează Postat August 31, 2008 1. Da. Reciteste datasheetul. 2. Ce flag-uri mai exact? Reciteste datasheet-ul si te prinzi. Probabil ca da. 3. Nu exista metoda perfecta. Depinde ce vrei sa faci. Reciteste datasheet-ul. Dupa ce intelegi cum functioneaza iti dai seama singur ce metoda poate fi aplicata, in ce situatie si care sunt avantajele si dezavantajele fiecareia. Ca principiu contoarele alea functioneaza independent unele de altele si numara fiecare in legea lui, asa cum au fost programate, fara sa ii pese ce se intampla in celelalte numaratoare sau cu ce se ocupa unitatea centrala. Numaratorul numara in legea lui restul procesorului isi vede te treaba lui. Actualizarea bitilor de stare de prin registrii si alti indicatori ce tin de countere se face hardware, in timp real. Acei biti reflecta starea numaratoarelor indiferent ce executa restul procesorului, fara sa-l deranjeze, sa-l incurce sau sa-l incetineasca. Asta e valabil la orice periferic nu numai la timer. Exista unele bucati comune, cum ar fi prescalerele, dar scrie clar in datasheet care sunt bucatile comune mai multor timere sau chiar mai multor periferice, si in ce conditii pot fi folosite la comun sau separat.. La fel se intampla si cu celelate periferice. Convertorul isi vede de treaba lui nestingherit, indiferent ce ruleaza uC in timpul ala cat se face conversia, numaratoarele numara, portul serial emite si receptioneaza, toate in acelasi timp fara sa se incomodeze unul pe altul. Bineinteles in tot timpul asta unitatea centrala (o botez UC) isi ruleaza programul nestingherita. Se intrerupe din ce (program) face ea numai daca un periferic genereaza o intrerupere. Evident ca daca nu sunt activate intreruperile UC nu se mai opreste chiar daca perifericul genereaza intreruperea. Mai reciteste datasheetul, uita-te la schema bloc a uC, incearca sa intelegi ce face fiecare bucata si cum sunt legate intre ele. Apoi vezi cum e organizata memoria. Pe urma incearca sa intelegi cum se executa instructiunile in uC. Se executa pe rand una cate una. Ca o regula generala, semnale importante de la/spre periferice sumt mapate in cate un bit dintr-un registru al perifericului. De exemplu, atunci cand citest registrul de date pentru un port de intrare: poti sa consideri ca citesti direct sarmele legate la piciorusele uC corespunzatoare portului x, nu te mai gandi ca de fapt citesti un registru care reflecta starea de pe sarmele de intrare ale portului x. Actualizarea asta (ce e pe portul x e si in registru) se face hardware nu software. Adica o face chiar schema interna a uC, nu e nevoie de niciun program pentru asta. In plus faptul ca ce e pe portul x e si in registrul corespunzator nu incetineste si nu incurca cu nimic executia programului din uC. Off-topic :@RoGeorge nu stiu cum de ai atata rabdare sa explici ceva ce se intelege din citirea datasheet-ului ......Ontopic : RTFM Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum