结帖:KEA128使用外部时钟,无法实现20MHz总线频率

2020-02-11 08:50发布

本帖最后由 bailao99 于 2019-9-21 17:20 编辑

KEA128使用外部时钟,无法实现20MHz总线频率

代码如下:
void sysinit(void)
{

    OSC_CR = 0x96;   //选择外部时钟,高功耗高增益
    while ((OSC_CR & OSC_CR_OSCINIT_MASK) == 0);//等待OSC时钟设置完成
    //FEE模式
    ICS_C1 = 0x18;      //8M/256 = 31.25K  ICSOUT = 31.25*1280=40M
    ICS_C2 = 0x20;      //BDIV=1                  
    while ((ICS_S & ICS_S_IREFST_MASK) == 1);
    while ((ICS_S & ICS_S_LOCK_MASK) == 0);

    SIM_BUSDIV = 1 ;  // 40M BUS Clock = ICSOUT/2 20M

    ICS_C2 = 0x00;//BDIV=1
}

外部晶振8MHz,运行后总是进入Default_Handler
如果修改如下:
ICS_C2 = 0x20;//BDIV=2
程序就能正常运行,可是只能实现10MHz总线频率

程序无错,是其他东西导致了进入Default_Handler
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
anxiangbo
1楼-- · 2020-02-11 12:34
//外部晶振8M 设置内核40M 总线20M 参考代码
  
  OSC->CR = 0x96; //  选择外部时钟,高范围、高增益振荡器
  
  while ((OSC->CR & OSC_CR_OSCINIT_MASK) == 0); //  等待振荡器准备就绪
  
  //FFE模式
  
  ICS->C2 = 0x20;  // BDIV=1   
  
  ICS->C1 = 0x18;  //8M/256 = 31.25K  ICSOUT = 31.25*1280=40M
  
  while ((ICS->S & ICS_S_IREFST_MASK) == 1); //  等待选择外部源
  
  while ((ICS->S & ICS_S_LOCK_MASK) == 0); //    等待FLL锁定
  
  SIM->CLKDIV = 0x01100000; //  核心时钟=ICSOUT/1  40M      总线时钟=核心时钟/2  20M
  
  ICS->C2 = 0x00; // BDIV=1除以1–允许最大核心和总线时钟频率



你参考下吧

一周热门 更多>