打印

[求教] 有没有成功用USB的SOF校准CTC实现USB免晶振的?

[复制链接]
71|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tomzbj|  楼主 | 2024-12-18 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上找不到例子, 官方包里只有CTC_GPIO和CTC_LXTAL, 没有用USB_SOF的. 自己改了一下,

  rcu_periph_clock_enable (RCU_CTC);
  ctc_refsource_prescaler_config (CTC_REFSOURCE_PSC_DIV128);
  ctc_refsource_signal_select (CTC_REFSOURCE_USB_SOF);
  ctc_refsource_polarity_config (CTC_REFSOURCE_POLARITY_FALLING);
  ctc_hardware_trim_mode_config (CTC_HARDWARE_TRIM_MODE_ENABLE);
  ctc_counter_reload_value_config(127);
  ctc_clock_limit_value_config(2);
  ctc_counter_enable();


结果一直也不成功.

哪位配成过的介绍一下?

使用特权

评论回复
沙发
tomzbj|  楼主 | 2024-12-18 11:31 | 只看该作者
本帖最后由 tomzbj 于 2024-12-18 11:32 编辑

解决了, SOF信号的频率应该是1kHz
修改如下
rcu_periph_clock_enable (RCU_CTC);
  ctc_refsource_prescaler_config (CTC_REFSOURCE_PSC_OFF);
  ctc_refsource_signal_select (CTC_REFSOURCE_USB_SOF);
  ctc_refsource_polarity_config (CTC_REFSOURCE_POLARITY_FALLING);
  ctc_hardware_trim_mode_config (CTC_HARDWARE_TRIM_MODE_ENABLE);
  ctc_counter_reload_value_config(47999);
  ctc_clock_limit_value_config(2);  // 这里用1的话得很久才能校准成功, 2就快多了, 似乎也不影响通讯
  ctc_counter_enable();

  while(1) {
    if(RESET == ctc_flag_get(CTC_FLAG_CKOK)) {
      printf("CTC Syncing... %d %d %d\n",
        ctc_counter_capture_value_read(), ctc_irc48m_trim_value_read(),
        ctc_counter_direction_read());
      _delay_ms_loop(100);
    }
    else {
      printf("CTC Sync done!\n");
      break;
    }
以及, 上面这个ctc_config的调用位置应该在  usbd_connect(&usbd_cdc); 这一行之后.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

85

帖子

2

粉丝