在线时间7 小时
UID3319325
注册时间2016-10-13
NXP金币0
该用户从未签到
注册会员
- 积分
- 53
- 最后登录
- 2022-6-23
|
本来想设置1ms中断,并且翻转IO口;但是参考范例程序配置,时间不准确,请教!以下是我的程序,谢谢!
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 93 TIM_Timer_Overflow(void) { // 320ms timer overflow
TIM_TFLG2_TOF = 1; //清定时器溢出标志位
PORTB_PB7=~PORTB_PB7;
TIM_TCNT = 0;
}
#pragma CODE_SEG DEFAULT
void main(void) {
/* put your own code here */
byte u8_cnt = 0;
//void setbusclock(void)
{
CLKSEL = 0x00; //选择外部晶振作为系统时钟
PLLCTL_PLLON = 0; //使能PLL// turn on PLL
SYNR = 0x67; // VCOFRQ[7:6];SYNDIV[5:0]
// fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)
// fPLL= fVCO/(2 × POSTDIV)
// fBUS= fPLL/2 = fVCO/(2 × POSTDIV)/2
// VCOCLK Frequency Ranges VCOFRQ[7:6]
// 32MHz <= fVCO <= 48MHz 00
// 48MHz < fVCO <= 80MHz 01
// Reserved 10
// 80MHz < fVCO <= 120MHz 11
//
REFDV = 0x0F; // REFFRQ[7:6];REFDIV[5:0]
// fREF=fOSC/(REFDIV + 1)
// REFCLK Frequency Ranges REFFRQ[7:6]
// 1MHz <= fREF <= 2MHz 00
// 2MHz < fREF <= 6MHz 01
// 6MHz < fREF <= 12MHz 10
// fREF > 12MHz 11
// pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
//
POSTDIV = 0x00; //fBUSCLOK = 16MHz //fPLL=fVCO,If POSTDIV = $00 then fPLL is identical to fVCO (divide by one).
PLLCTL_PLLON = 1; //使能PLL// turn on PLL
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL = 1; //engage PLL to system;确定时钟总线来自于PLL,48MHz
}
//static void TIM_Timer_Init(void)
{
TIM_TSCR1 = 0x90;//计数器使能TEN|快速清零TFFCA
TIM_TSCR2 = 0x87;//Timer Overflow Interrupt Enable,DIV 128->320ms
//000-Bus Clock/1
//001-Bus Clock/2
//010-Bus Clock/4
//011-Bus Clock/8
//100-Bus Clock/16
//101-Bus Clock/32
//110-Bus Clock/64
//111-Bus Clock/128
TIM_TCNT = 0; //
TIM_PACTL = 0X50; //IOC7使能,上升沿
/*
PITCFLMT_PITE = 1; //PIT 模块使能
PITCFLMT_PFLMT0 = 1; //选择0号8位计数器
PITFLT_PFLT0 = 1; //选择0号16位计数器
PITCE_PCE0 = 1; //定时器通道0使能
PITMUX_PMUX0 = 0;
PITMTLD0 = 240-1; //定时10us
PITLD0 = 1000-1; //定时10ms
PITINTE_PINTE0 = 1; //定时器通道0的中断允许使能
*/
}
//static void IO_Init(void)
{
DDRB = 0xff; //LED PTB0--7,
PORTB= 0x00; //LEDs on
}
EnableInterrupts;
for(;;) { PORTB_PB6=~PORTB_PB6;
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
|
|