Perché alcuni microcontrollori hanno ritardi di sincronizzazione così enormi?


11

Sui microcontrollori Atmel serie SAM-D21, molte periferiche utilizzano un clock asincrono rispetto al clock della CPU principale e gli accessi a queste periferiche devono passare attraverso la logica di sincronizzazione; su periferiche il cui clock è lento rispetto al tempo della CPU, questo può aggiungere dei ritardi davvero enormi. Ad esempio, se RTC è configurato per utilizzare un clock a 1024Hz (come sembra essere l'intenzione di progettazione) e la CPU funziona a 48Mhz, la lettura del registro "ora corrente" farà sì che la logica del bus inserisca oltre 200.000 stati di attesa (un minimo di cinque cicli dell'orologio a 1024Hz). Sebbene sia possibile fare in modo che la CPU generi una richiesta di lettura, esegua un altro codice non correlato e restituisca più di 200.000 cicli in seguito per recuperare il tempo, non sembra esserci alcun modo per leggere il tempo più velocemente.

Secondo la mia comprensione della sincronizzazione, un circuito di sincronizzazione a bit singolo ritarderà un segnale di 2-3 cicli del clock di destinazione; sincronizzare una quantità multi-bit è un po 'più difficile, ma ci sono una varietà di approcci che possono garantire un comportamento affidabile entro cinque cicli del clock di destinazione se è più veloce del clock sorgente e solo pochi cicli in più se non lo è. Cosa farebbe Atmel SAM-D21 che richiederebbe sei cicli nel dominio del clock di origine per la sincronizzazione, e quali fattori favorirebbero un progetto i cui ritardi di sincronizzazione sono così lunghi da richiedere un'interruzione "sincronizzazione eseguita" rispetto a quella che garantisce i ritardi di sincronizzazione sono abbastanza brevi da rendere superflue tali interruzioni?


2
Grazie per questa domanda Mi ha fatto finalmente capire il problema a portata di mano. Sono venuto qui perché non riuscivo a capire perché la cancellazione del Watchdog Timer (WDT) avrebbe richiesto quasi 5 tremendi millisecondi sul SAMD20 / 21. Ora so che è dalla progettazione hardware, non un mio errore. (Il WDT ha un clock a 1024 Hz, che è l'unica opzione sensata.) Ora posso almeno affrontarlo di conseguenza.
T-Bull,

2
@ T-Bull: La cosa davvero divertente del watchdog da quelle parti è che è disabilitato tra il momento in cui il software emette il comando reset e il tempo in cui il comando passa attraverso il sincronizzatore. Se il dispositivo entra in modalità di sospensione durante tale intervallo, il watchdog non funzionerà a meno che o fino a quando qualcos'altro non sveglia la parte.
supercat

Risposte:


2

È un modo diverso di fare le cose per me, sono abituato alle mie architetture in cui i miei registri sono sul mio clock della CPU o almeno 1/2 di quel clock. Quindi scrivi i tuoi registri e sono subito pronti. Forse lo stanno facendo in questo modo per risparmiare energia? Se stanno inserendo i registri delle periferiche nel proprio dominio di clock veramente lento separato, forse non devono svegliarsi ed eseguire l'oscillatore principale o il clock della CPU, ma possono continuare ad aggiornare i valori sulla periferica.

In tal caso, potresti scrivere un registro nel tuo blocco periferico super slow, quindi disabilitare l'isola di alimentazione per l'intera CPU o il clock clock e lasciare che il sincronizzatore lento lo legga fino a quando non è felice e quindi interrompere la CPU per farlo uscire Del sonno.

In alternativa, potrebbe consentirti di inserire la massima quantità di istruzioni nel tuo momento di sveglia, invece di girare sei cicli e attendere ogni scrittura.

Per quanto riguarda il motivo per cui usano così tanti cicli di sincronizzazione, potrebbero essere paranoia o potrebbero soddisfare alcuni standard di alta affidabilità per uno dei loro clienti. Non posso dirlo con certezza, ma so di aver visto clienti con richieste come ogni ram devono avere ecc ed essere precaricato su un valore impostato, ecc.

Immagino che non sia una risposta definitiva, ma quelli sono i miei pensieri dopo aver guardato un po 'nel foglio dati.


2
I "sei cicli" sono sei cicli dell'orologio periferico; se si imposta, ad esempio, il modulo dell'orologio in tempo reale da alimentare a 1024Hz (che sembra essere la raccomandazione di Atmel) e l'orologio della CPU è a 48 MHz, sei cicli dell'orologio periferico saranno 281.250 cicli dell'orologio della CPU che è terribilmente lungo è tempo di girare, soprattutto se ci sono interruzioni che richiedono manutenzione. La rotazione è moderatamente orribile solo se il clock lento è 8Mhz (che significa uno spin del ciclo a 36 CPU) ma un errore grave sarebbe meglio di uno spin su un clock a 1024Hz.
supercat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.