本帖最后由 meepo 于 2013-1-25 08:37 编辑
C8051F580用的外部12M晶振(起振电容为33pF,接10M电阻),示波器观察起振,但是时钟初始化程序中设置使用外部晶振总是失败,即无法从内部晶振切换到外部晶振
时钟初始化相关程序如下:
/****** XTAL1\XTAL2:P0.2,P0.3 ******/
void PORT_INIT(void)
{ U16 i;
U8 SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
//XTAL1,XTAL2,external osc init
P0MDIN &= ~0x0C; //P0.2,P0.3 analog in
P0SKIP |= 0x0C;
P0MDOUT &= ~0x0c;
P0 = P0|0x0c; //force P0.2 P0.3 in high votalg
//CROSSBAR INIT: UART0,SPI,SMBUS,T0
XBR0 = 0x0d; //UART0,SPI,SMBUS
XBR1 = 0x02; //T0 counter
XBR2 = 0x40; //enable crossbar
SFRPAGE = SFRPAGE_SAVE;
}
void SYSCLK_INIT(void)
{
U16 i;
U8 SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
//RSTSRC = 0x06; //Enable missing clock detector and
OSCXCN |= 0x67; //external osc enable,12M
for(i=0;i<255;i++); //Wait 1ms for initialization
while(!(OSCXCN & 0x80)); //waiting for external osc stable
CLKSEL |= 0x01; //switch to external osc
OSCICN = 0x00; //disable internal osc
SFRPAGE = SFRPAGE_SAVE; //JTAG调试时在此处加了断点
}
在SYSCLK_INIT{}中最后一句处设置断点,在线调试,运行到此处时右边的观察栏中相应寄存器数值:
OSCXCN 0xe7 //外部晶振起振且运行稳定
CLKSEL 0x00 //正常来讲此处应为0x01啊,已表示切换到了外部晶振
OSCICN 0x10 //
调试了一天也没结果,郁闷啊。。。
是否为起振电容33pF不合适?
程序是照着例程写的,自己也看了datasheet很多,程序的问题?
求各路哥哥姐姐相助。。。。。
补充说明:
开发工具 Selicon Lab IDE
廉价的JTAG仿真器 ,型号EC5
外部晶振12M, 起振电容33pF
|