Ich versuche, meinen PIC24FJ64GA002 mit 32 MHz zum Laufen zu bringen. Ich messe die Frequenz am OSCO-Pin, und es sind nur 4 MHz. Hier ist mein Code:
config __FOSCSEL, FNOSC_FRCPLL & IESO_OFF
config __FOSC, FCKSM_CSECMD & OSCIOFNC_ON
mov #0x1182, W0 ; OSCCON
mov #0x0000, W1 ; CLKDIV
mov #0x0000, W3 ;OSCTUN
mov W0, OSCCON
mov W3, OSCTUN
mov W1, CLKDIV
Es sieht so aus, als würden Sie die Uhr nicht umschalten - wenn es so etwas wie der dsPIC ist, den ich kürzlich verwendet habe, können Sie nur auf die PLL umschalten, nachdem der primäre Oszillator (INTRC oder EXT XTAL) läuft.
Dazu verwenden Sie eine im Handbuch beschriebene Entsperrsequenz. Ich habe gerade kurz nachgesehen und es ist da für Ihren Chip mit Erklärung auf Seite 93.
Es gibt Makros in der C30-Bibliothek (nur zur Information, wenn Sie irgendwann C verwenden möchten), um die erforderlichen OSC-Register zu entsperren und zu schreiben und dasselbe zu tun, aber ich kann sie dort nicht erwähnt sehen (wird in der C30 Handbuch).
Versuchen Sie auf jeden Fall, die Anweisungen auf dieser Seite zu befolgen, und lassen Sie es uns wissen. Wenn es immer noch nicht funktioniert, werde ich noch einmal nachsehen (ich glaube, ich habe hier irgendwo einen dieser PIC24s, um ihn bei Bedarf zu testen).
BEARBEITEN - Als Referenz finden Sie unten den betreffenden Code. Sie müssen 0x03 (den Code für den externen Kristall mit PLL) in W0 eingeben, kurz bevor es ausgeführt wird. Wahrscheinlich möchten Sie nach dem Wechsel eine kleine Verzögerung haben, damit sich die neue Uhr einpendeln kann, und OSWEN und das LOCK-Bit überprüfen, um sicherzustellen, dass der Wechsel erfolgreich war.
;Place the new oscillator selection in W0
OSCCONH (high byte) Unlock Sequence
MOV #OSCCONH, w1
MOV #0x78, w2
MOV #0x9A, w3
MOV.b w2, [w1]
MOV.b w3, [w1]
;Set new oscillator selection
MOV.b WREG, OSCCONH
;OSCCONL (low byte) unlock sequence
MOV #OSCCONL, w1
MOV #0x46, w2
MOV #0x57, w3
MOV.b w2, [w1]
MOV.b w3, [w1]
;Start oscillator switch operation
BSET OSCCON,#0
BEARBEITEN
Ich habe noch einmal nachgesehen und ich denke, Sie sollten in der Lage sein, mit der Verwendung des FRC mit PLL auf diesem Chip zu beginnen (auf dem dsPIC war es sowieso nur mit xtal IIRC). Ich werde das Obige trotzdem als Referenz zum Umschalten lassen.
Meine zweite Vermutung ist, dass ich denke, dass Sie die Konfiguration falsch haben - und die .inc-Datei zeigt, dass die Konfigurationen für das OSC usw. in config2 und nicht in config sind.
Überzeugen Sie sich selbst in Ihrem ASM30-Ordner - er sollte etwa unter:
C:\Program Files\Microchip\MPLAB ASM30 Suite\Support\PIC24F\inc)
Beachten Sie auch die Hinweise zum Setzen der Config-Bits entweder mit Makro oder dem längeren Weg. Stellen Sie sicher, dass Sie diese korrekt haben.
Es könnte sich auch lohnen, das PLL LOCK-Bit (im OSCCON-Register) zu überprüfen - siehe dieses FRM-Oszillator-Dokument für die gründlichste Diskussion. Bei den größeren PICs benötigen Sie sowieso das Familienreferenzhandbuch, also schnappen Sie sich alle Teile vom Mikrochip, wenn Sie sie nicht haben)
Laut Datenblatt:
Die Prozessortaktquelle wird durch zwei geteilt, um den internen Befehlszyklustakt FCY zu erzeugen. In diesem Dokument wird der Befehlszyklus auch mit FOSC/2 bezeichnet. Der interne Befehlszyklustakt FOSC/2 kann für einige Betriebsarten des Primäroszillators auf dem OSCO-I/O-Pin bereitgestellt werden.
Wenn Sie also 4 MHz aus dem OSCO-Pin herausbekommen, muss der interne Oszillator mit 8 MHz laufen.
8MHz ist die Grundfrequenz des internen Fast-RC-Oszillators.
Um auf 32 MHz zu kommen, müssen die 8 MHz durch die PLL gehen, um sie mit 4 zu multiplizieren.
Theoretisch sollten Sie bei einem Takt von 32 MHz 16 MHz auf dem OSCO-Pin sehen.
Dies tun Sie angeblich bereits, sowohl über die Konfigurationseinstellungen als auch über das OSCCON-Register.
Alle Ihre Postscaler sind auf 1:1 eingestellt, was gut ist.
Dinge zu versuchen und/oder zu klären:
Adrian Sari
Oli Glaser
Adrian Sari
Adrian Sari