ds - dsPIC33e上的C - 振荡器配置

时间:2015-11-13 10:51:50

标签: c embedded microcontroller pic

我正在尝试将dsPIC33e的振荡器配置为达到40 MIPS,但达到的周期频率是我想要的一半。

以下是完整代码:

#include <p33EP32GS504.h>
#include <stdio.h>
#include <stdlib.h>
#include <xc.h> // Allow assembly code

/** OSCILLATOR CONFIGURATION **************/
// Select Internal FRC at POR
_FOSCSEL(FNOSC_FRC & IESO_OFF);
// Enable Clock Switching and Configure Primary Oscillator in XT mode
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_NONE);

void initOsc(void);

int main(int argc, char** argv) 
{
   initOsc(); // configure Osc
   TRISA =  0b00111; // Set PORTA I/O

   while(1) 
   { 
      asm("btg LATA, #3");
      asm("btg LATA, #3");
   }
   return (EXIT_SUCCESS);
}

void initOsc(void)
{
   PLLFBD = 63; // M=65
   CLKDIVbits.PLLPRE=1; // N1=3
   CLKDIVbits.PLLPOST=0; // N2=2

   // Initiate Clock Switch to FRC oscillator with PLL (NOSC=0b001)
   __builtin_write_OSCCONH(0x01);
   __builtin_write_OSCCONL(OSCCON | 0x01);
   // Wait for Clock switch to occur
   while (OSCCONbits.COSC!= 0b001);
   // Wait for PLL to lock
   while (OSCCONbits.LOCK!= 1);
}

在配置function initOsc()中,数据表提供Fout = Fin*M/(N1*N2),在我的情况下,Fout = 80 MHzFcycle = Fout/2 = 40MHz

在主功能中,调用配置功能后,我指示灯闪烁。然后,我用示波器观察PORTA引脚3的输出。引脚切换之间的时间为50ns(20MHz),OSCOUT引脚显示的fosc为25ns(40MHz)。

我在真实值和我想要的之间有一个因子2。

我想念什么?我的错误在哪里?

谢谢

0 个答案:

没有答案