View Single Post
Old 03-03-2008, 07:11 PM   #12
ajack
Nhập môn đệ tử
 
Tham gia ngày: Jan 2008
Bài gửi: 6
:
mình đã config cho dsPIC chạy ở chế độ 16 MPIs như sau:
Code:
_FOSCSEL(FNOSC_FRC);   // Select Internal FRC at POR
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);   // Enable Clock Switching and Configure POSC in XT mode
_FWDT(FWDTEN_OFF);   // Disable Watchdog Timer

int main (void)
{
             // Configure PLL prescaler, PLL postscaler, PLL divisor
	PLLFBD = 62;			// M = 64
	CLKDIVbits.PLLPOST = 1;	// N2 = 4	N2 = 2 x (PLLPOST+1)
	CLKDIVbits.PLLPRE = 2;	// N1 = 4	N1 = PLLPRE + 2

	// Fosc calculation equation:
	// Fosc = Fin x M/(N1+N2) = 8x64/(4x4) = 32MHz
	// Fcy = 0.5Fosc = 16MIPs

/******* Clock Switching *******/
	// Set New Oscillator Selection
	__builtin_write_OSCCONH(3);

	// Request Clock Switching by Setting OSWEN bit
	__builtin_write_OSCCONL(1);

	// Wait for Clock switch to occur
	while(OSCCONbits.LOCK != 1);
...
}
tại vì trong datasheet của dsPIC33F, mình thấy nó ghi là không nên thay đổi những thông số của PLL, nên để lúc đầu là internal FRC rồi chỉnh thông số, rồi sau đó hãy chuyển sang PriO w/ PLL
Nhưng bạn thấy trên phần init_Timer1 của mình intialize như vậy thì đúng là nếu như dsPIC chạy ở 16 MIPs thì timer sẽ interrupt ở 1ms chứ?
Hơn nữa, đây là intterupt trong timer1 để mình kiểm tra:
Code:
// Timer 1 Interrupt Routine
void __attribute__((__interrupt__)) _T1Interrupt( void )
{
	_count++;
	home_it();
	line_2();
	LATAbits.LATA4 = ~LATAbits.LATA4;
	if ( _count==1000 ) 
	{
		_count = 0;
		LATAbits.LATA5 = ~LATAbits.LATA5;   // PORTA.5 nối với đèn LED
	}

	IFS0bits.T1IF = 0;			// Clear Timer 1 flag
}
đáng lý ra thì cứ phải 1s là đèn LED sẽ nhấp nháy, vậy mà chắc cũng 10s...
ajack vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn