Forum: Mikrocontroller und Digitale Elektronik dsPIC33 primary oscilator mode auslesen


von Aabeku K. (aabeku)


Lesenswert?

Hi,
ich versuche derzeit eine kleine Funktion zu schreiben, die den primary 
oscillator mode des dsPIC33CK32MC103 während der Laufzeit ausliest.
Im Datenblatt sind die betroffenen bits als "r/PO-1" markiert, das 
bedeutet sie sollten lesbar und einmal (mit den configuration bits) 
setzbar sein. Nun ist aber das Problem, dass ich das betroffene Register 
(FOSC) nicht ansprechen kann.
Habe im Header (xc.h->p33CK32MC103.h) nachgeschaut, dort ist das 
register nicht einmal als Struktur angelegt...

Kenn jmd. von euch eine Möglichkeit? Ziel der ganzen Geschichte ist es 
die Taktrate des µCs auslesen zu können. Dazu sollte ich den Modus des 
primary oscillators schon kennen.

Danke an alle

von Frank K. (fchk)


Lesenswert?

Aabeku K. schrieb:
> Hi,
> ich versuche derzeit eine kleine Funktion zu schreiben, die den primary
> oscillator mode des dsPIC33CK32MC103 während der Laufzeit ausliest.
> Im Datenblatt sind die betroffenen bits als "r/PO-1" markiert, das
> bedeutet sie sollten lesbar und einmal (mit den configuration bits)
> setzbar sein. Nun ist aber das Problem, dass ich das betroffene Register
> (FOSC) nicht ansprechen kann.

Das Register heißt OSCCON. Seite 156 im Datenblatt.

fchk

von Aabeku K. (aabeku)


Lesenswert?

Frank K. schrieb:
>
> Das Register heißt OSCCON. Seite 156 im Datenblatt.

Nope. Das Register heißt FOSC. Dort möchte ich Bits POSCMD [0:1] lesen. 
Das Problem ist aber, dass in den Headern des besagten µCs dieses 
Register nicht einemal
in dem dazugehörigen Headerfile als Struktur angelegt sind, so als wenn 
man dieses Register gar nicht lesen könnte. Nun steht aber an den Bits 
"R/PO-1", was soviel heißt wie "READ/PROGRAMMABLE ONCE-1", sprich man 
kann diese Bits nur in den Configuration-Bits setzen (einmalig via 
Präprozessoranweisung), jedoch beliebig oft lesen.

Also warum steht dort man könnte es lesen, kann es dann aber doch 
nicht??? Weiß keiner mehr?

Besagtes Register wird auf S.416 beschrieben.

https://ww1.microchip.com/downloads/aemDocuments/documents/MCU16/ProductDocuments/DataSheets/dsPIC33CK64MC105-Family-Data-Sheet-DS70005399D.pdf

P.S.: Du hast Seite 156 geschrieben, meintest aber glaube ich S.159. 
Oder wir haben verschiedene Versionen des Datenblatts erwischt :)

von Frank K. (fchk)


Lesenswert?

Aabeku K. schrieb:
> Frank K. schrieb:
>>
>> Das Register heißt OSCCON. Seite 156 im Datenblatt.
>
> Nope. Das Register heißt FOSC.

> Also warum steht dort man könnte es lesen, kann es dann aber doch
> nicht??? Weiß keiner mehr?

Das ist kein Prozessorregister (SFR) im eigentlichen Sinne, sondern es 
ist ein Configuration Word. Configuration Words sind Flashzellen an 
einer speziellen Adresse, die vor dem Prozessorstart in die eigentlichen 
SFRs (Special Function Registers) geladen werden. Der Inhalt des FOSC 
Config Words landet dabei z.B. im OSCCON SFR. Die Config Words befinden 
sich nicht im Datenadressraum, sondern im Programmadressraum. Den 
erreichst Du nur über ICSP oder über tblrd() und tblwr() Befehle. Siehe 
Seite 35 im Datenblatt. (und ja, ich meinte vorhin Seite 158/159)

8 und 16 Bit PICs haben wie AVRs und 8051 Architekturen getrennte 
Adressräume für Programmcode und Daten. Darüber stolperst Du gerade. C 
kann das nicht wirklich gut abbilden.

Und: Bei Deinem dsPIC kann man die CLock-Konfiguration zur Laufzeit 
ändern. Daher ist es sinnvoller, im passenden SFR nachzuschauen (OSCCON) 
und nicht im entsprechenden Config Word.

fchk

von Aabeku K. (aabeku)


Lesenswert?

Das hilft sehr weiter, danke :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.