我正在尝试将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 MHz
和Fcycle = Fout/2 = 40MHz
在主功能中,调用配置功能后,我指示灯闪烁。然后,我用示波器观察PORTA引脚3的输出。引脚切换之间的时间为50ns(20MHz),OSCOUT引脚显示的fosc为25ns(40MHz)。
我在真实值和我想要的之间有一个因子2。
我想念什么?我的错误在哪里?
谢谢