Microcontrolere STM8
Microcontrolere STM8. Sistem de ceas.
Bună ziua, Ultima dată am început să luăm în considerare cronometrele, iar astăzi ne vom da seama cum funcționează sistemul de ceas în STM8S. Comparativ cu AVR, STM8 are un avantaj puternic în ceea ce privește puterea și flexibilitatea de sincronizare. Singurul negativ este incapacitatea de a tasta de la cuarț cu o frecvență mai mică de 1 MHz, dar acest lucru este compensat de prezența unui oscilator intern de joasă frecvență. Cel mai important avantaj al STM8 față de AVR este absența biților FUSE! Toți parametrii de sincronizare sunt configurați direct în cursul programului. Deci, putem avea surse de frecvență de ceas: —un rezonator extern de cuarț cu o frecvență de 1-24MHz (HSE–High Speed External); —sursă de frecvență externă 1-24MHz (HSE-ext—Externă de mare viteză); —oscilator RC intern de mare viteză de 16 MHz (HSI–Intern de mare viteză); —Oscilator RC intern de viteză mică de 128 kHz (LSI–Intern de viteză mică). Așa arată schema bloc a modulului de ceas:
În diagramă, vedem că alegerea frecvenței principale are loc înComutatorul ceasului principalmodul. După aceasta, merge la dispozitivele periferice (timere, SPI etc.) și printr-un divizor la CPU. La pornire, sursa principală de ceas este HSI cu un divizor de 8, care ne oferă o frecvență de funcționare după pornire de 16/8=2 MHz. Este logic ca atunci când procesorul este pornit, acesta începe să funcționeze ca un generator intern - la urma urmei, este posibil să nu existe unul extern. Reducerea frecvenței se face astfel încât procesorul să poată porni într-o stare proastă de putere. Oscilatorul de viteză redusă poate acționa atât CPU-ul, cât și poate funcționa independent de sursele principale de ceas,controlarea unui temporizator de supraveghere independent (IWD) și a unui modul de trezire. Modulul sistemului de ceas poate declanșa două întreruperi - la comutatorul sursei ceasului (Evenimentul comutatorului sursei ceasului principal) și la declanșarea de securitate a ceasului (Evenimentul sistemului de securitate al ceasului). Semnalul de la oricare dintre sursele de ceas, indiferent dacă este activ sau nu în prezent, poate fi transmis în afara controlerului la pinulCCO. Puteți comuta sursa ceasului manual sau automat. Consultați Manualul de referință de la pagina64pentru informații despre cum să comutați. Comut astfel: 1. Scriem în registrulCLK_SWRvaloarea corespunzătoare sursei de ceas cerută. 2. Așteptăm ca sursa de frecvență să se stabilizeze prin monitorizarea bituluiSWIFdin registrulCLK_SWCR. 3. Activați comutarea sursei setând bitulSWENîn registrulCLK_SWCR. 4. Scriem în registrulCLK_SWRvaloarea corespunzătoare sursei de ceas cerută. Aceasta setează bitulSWBSYîn registrulCLK_SWCRși sursa de ceas corespunzătoare este pornită. În acest moment, microcontrolerul este încă tactat de la vechea sursă. După ce frecvența se stabilizează, valoarea din registrulCLK_SWReste copiată în CLK_CMSRși sursa de ceas este comutată. 5. Așteptăm ca steagulSWIFsă fie setat în registrulCLK_SWCR. După ce este setat, este apelată o întrerupere dacă este activată de bitulSWIEN.Luați în considerare registrele de control ale modulului de ceas: RegistrulCLK_CMSR-Registrul de stare master al ceasului. Registrul principal de stare a frecvenței. Acest registru stochează informații despreeste sursa ceasului care este curentă în acest moment. Registrul este doar pentru citire, scrierea în acest registru nu va avea niciun efect. Valori de registru posibile:
- 0xE1: sursa ceas curent - HSI (valoare după resetare);
- 0xD2: sursa ceas - LSI;
- 0xB4: sursă ceas - HSE.
- 00 - divizorul este 1 (frecvența nu este împărțită);
- 01 - divizorul este 2;
- 10 - divizorul este 4;
- 11 - divizorul este 8.
- 000 - fCPU=fMASTER
- 001 - fCPU=fMASTER/2
- 010 - fCPU=fMASTER/4
- 011 - fCPU=fMASTER/8
- 100 - fCPU=fMASTER/16
- 101 - fCPU=fMASTER/32
- 110 - fCPU=fMASTER/64
- 111 - fCPU=fMASTER/128
Este timpul să exersați pe pisici. Pe placa STM8S - Discovery este instalat quartz16 MHz și o vom folosi. Să schimbăm programul din articolul anterior despre cronometre: vom adăuga comutarea ceasului la cuarț. În același timp, vom crește prescalerul Timer1 pentru a vedea comutarea LED-ului, deoarece frecvența de ceas a temporizatorului va crește de la 2 MHz (valoare implicită) la 16 MHz, iar clipirea LED-ului va fi imperceptibilă pentru ochi.
STM8 are un modul minunat precumCSS(Clock Security System). El monitorizează funcționarea oscilatorului cu cristal și poate, în caz de defecțiune, comuta ceasul pe oscilatorul intern. În acest caz, divizorul de frecvență de intrare este setat la 8, ceea ce corespunde la 2 MHz. De asemenea, în momentul comutării, indicatorulCSSD(Detecție sistem de securitate ceas) este setat în registrulCLK_CSSRși se declanșează o întrerupere când securitatea ceasului sistemul este declanșat (Întreruperea detectării sistemului de securitate a ceasului) dacă este activat deCSSDIE(Activare a întreruperii detectării sistemului de securitate a ceasului). Acest modul este activat prin setarea bituluiCSSEN(Activare sistem de securitate ceas) în registrulCSSR. Să ne edităm programul astfel încât, în cazul unei defecțiuni de cuarț, acesta să treacă automat laHSI, să provoace o întrerupere și să efectueze unele acțiuni. Și aici am întâlnit o eroare în mediul de programare. Permiteți-mi să vă reamintesc că folosesc IAR Embedded Workbench pentru STMicroelectronics STM8, versiunea 1.20. Fișierul antet iostm8s105s6.h pe care îl folosesc are această descriere a registruluiCLK_CSSR:
Ne uităm la Manualul de referință de la pagina77pentru o descriere a acestui registru și suntem surprinși: bițiiCSSDșiCSSDIEsunt inversați! Să reparăm conținutul acestui fișier.
Și fixează măștile puțin mai jos.
În general, pentru oricefamily hidere iostm8.h aceasta eroare este si ea. Nu m-am uitat la anteturi pentru alte procesoare, dar bănuiesc că aceeași eroare este prezentă acolo. În plus, nu există numere de vector de întrerupere pentru sistemul de ceas în iostm8s105s6.h. Să le luăm de pe iostm8.h și să le introducem la sfârșitul antetului nostru. Arata asa:
Și cu fișierul antet deja corectat, vom scrie programul nostru.
Asta e tot pentru astăzi, dar data viitoare vom continua să ne ocupăm de cronometre.