原创 【R8C\1B学习板项目专用贴第六篇】FoUSB下系统时钟处理

2011-2-25 14:25 1169 3 3 分类: MCU/ 嵌入式
来源:瑞萨单片机论坛 Fousb仿真(串口仿真)时,用户必须注意系统时钟的问题。 先介绍一下R8C1B的时钟系统: R8C1B芯片时钟有3种选择: 1)内部时钟125KHz 2)内部时钟8M 3)外部时钟 芯片默认上电之后启动内部125KHz的时钟,但是在用户使用Fousb软件进行仿真时,FoUSB会自动生成了仿真监控代码,并启动外部时钟,与PC机进行通讯。 所以用户在使用FoUSB软件时,即使不设置系统时钟,系统时钟也会运行在外部时钟状态。 此时,如果用户强行在代码中设置时钟,改变了时钟,芯片由于时钟发生变化,UART将改变波特率,从而和HEW软件无法通讯,造成系统假死,无法仿真 在FoUSB中如果用户需要设置时钟,必须设置为外部,并且不分频。 如果设置成其他时钟方式,例如内部时钟,或者分频方式,只能脱机运行,不能仿真运行,请注意。 附上时钟初始化代码,仅供参考。 /************************************************************************ *函数原型: void InitClock( unsigned char Out_In, unsigned char High_Low, unsigned char Dev) *功能 : 时钟初始化处理程序 Out_In 0--内部时钟 1--外时钟 High_Low 0--低速 1--高速 Dev 1 2 4 8 16 ************************************************************************/ void InitClock(unsigned char Out_In,unsigned char High_Low,unsigned char Dev) { prcr = 0x01; //关闭和时钟相关的保护寄存器,允许修改时钟 switch(Dev) { case 1: cm16=0;cm17=0;cm06=0;break; //f1 case 2: cm16=1;cm17=0;cm06=0;break; //f2 case 4: cm16=0;cm17=1;cm06=0;break; //f4 case 8: cm16=0;cm17=0;cm06=1;break; //f8 case 16:cm16=1;cm17=1;cm06=0;break; //f16 default:break; } if(High_Low) //高速时钟 { hra00 = 1; //高速内部振荡器振荡 hra01 = 1; //使用内部高速振荡器时钟(FRING-Fast)作为内部时钟(FRING) } else //低速时钟 { cm14=0; //低速内部振荡器振荡 hra01 = 0; //使用内部低速振荡器时钟(FRING-Fast)作为内部时钟(FRING) } if(Out_In) //使用外部时钟 { cm13 = 1; //XIN-XOUT引脚连接内部起振电路 cm15 = 1; //XIN-XOUT引脚使用高驱动能力 cm05 = 0; //开始振荡 asm("NOP\nNOP\nNOP\nNOP"); asm("NOP\nNOP\nNOP\nNOP"); asm("NOP\nNOP\nNOP\nNOP"); ocd2 = 0; //使用主时钟作为系统时钟 } else //使用内部时钟 { asm("NOP\nNOP\nNOP\nNOP"); ocd2 = 1; //使用内部时钟作为系统时钟 } prcr = 0; //打开保护寄存器 }

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条