微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第六帖 FoUSB下系统时钟处理

第六帖 FoUSB下系统时钟处理

时间:10-02 整理:3721RD 点击:

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;              //打开保护寄存器
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top