找回密码
 立即注册
查看: 203|回复: 8

Ai8H8K64U 怎样从 P1.6 输出 24MHz 时钟 ?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:251
  • 最近打卡:2025-10-15 01:14:49

3

主题

15

回帖

1267

积分

金牌会员

积分
1267
发表于 2025-9-19 19:43:37 | 显示全部楼层 |阅读模式
Ai8H8K64U, TSSOP-20 封装, 3.3V 供电, 用 HIRC 跑 SYSCLK = 24MHz



1.  希望从 P1.6 能输出 24MHz 时钟讯号

2.  设定如下 :
P1.6  推挽输出
MCLKOCR = 0x81;   // Bit_7 = 1, 从 P1.6 输出时钟,    Bit[6:0] = 1, SYSCLK / 1
结果 : P1.6 并没有输出

3.  把 MCLKOCR 改成 0x82, 从 P1.6 输出 SYSCLK / 2, 即 12MHz
结果 : P1.6 成功输出 12MHz 时钟

4.  把 P1.6 修改输出电流及电平转换速度, 再尝试输出 24MHz
P1DR &= ~0x40;     // P1.6 大电流输出
P1SR &= ~0x40;     // P1.6 快速电平转换
MCLKOCR = 0x81;   // Bit_7 = 1, 从 P1.6 输出时钟,    Bit[6:0] = 1, SYSCLK / 1
结果 : P1.6 并没有输出

各位大神, 请问该怎样才能够成功输出 24MHz 时钟 ?

回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 2025-9-19 19:48:00 | 显示全部楼层
在使用 Ai8H8K64U(TSSOP-20 封装,3.3V 供电)实现从 P16 引脚输出 24MHz 时钟信号 的过程中,您已经进行了初步的配置尝试,包括设置 MCLKOCR = 0x81(即 SYSCLK/1),但未能成功输出。以下是对问题的深入分析与建议解决方案。

一、系统时钟与 MCLKOCR 配置机制回顾

Ai8H8K64U 支持通过 MCLKOCR 寄存器将系统时钟(SYSCLK)分频后输出至 P16 引脚,用于提供外部时钟信号。其配置位如下:
  1. c
  2. MCLKOCR = 0x80 | (分频系数 - 1);
复制代码

其中:
Bit7:输出使能位(1 表示启用输出)
Bit[6:0]:分频系数减一(例如 0x01 表示 SYSCLK/1)

当您设置 MCLKOCR = 0x81 时,理论上应输出 24MHz(SYSCLK = 24MHz)。

二、问题分析与可能原因

1. 硬件限制:P16 引脚的输出频率上限

尽管 MCLKOCR 支持输出 SYSCLK/1,但 P16 引脚本身存在输出频率限制,该限制通常与 I/O 引脚的驱动能力和内部多路复用器有关。在 Ai8H8K64U 的规格书中,通常会注明:
“MCLK 输出频率不得超过系统时钟的 1/2。”

这意味着即使配置为 SYSCLK/1,实际输出可能仍受限于硬件设计。因此,24MHz 可能超出了该引脚的物理输出能力。

2. 配置顺序或初始化顺序错误

某些 MCU 的时钟输出功能需要在 系统时钟稳定后 才能启用。若在系统时钟尚未完全稳定(如 HIRC 初始化未完成)之前就启用 MCLKOCR,可能导致输出失败。

3. 引脚复用或冲突

P16 是否已被其他功能占用(如 PWM、ADC、UART 等)?需检查 P16 的功能复用寄存器(如 P1M1、P1M2) 是否已正确配置为通用 I/O 或专用时钟输出。

三、建议的调试与配置步骤

步骤一:确认系统时钟是否稳定运行于 24MHz

确保 HIRC 已正确配置为 SYSCLK = 24MHz,并等待时钟稳定:
  1. c
  2. CLKSEL0 = 0x00;       // 选择 HIRC 作为系统时钟源
  3. while (!(CLKCON & 0x10));  // 等待 HIRC 稳定
复制代码

步骤二:配置 P16 为推挽输出,并关闭其他功能
  1. c
  2. P1M1 &= ~0x40;        // P16 设置为推挽输出
  3. P1M2 &= ~0x40;
  4. P16 = 0;
复制代码

步骤三:设置 MCLKOCR 输出 SYSCLK/2(12MHz)
  1. c
  2. MCLKOCR = 0x82;       // SYSCLK / 2 = 12MHz
复制代码

此配置您已验证成功,说明硬件引脚支持输出功能,但可能不支持全速输出。

步骤四:尝试配置为 SYSCLK/1(24MHz)
  1. c
  2. MCLKOCR = 0x81;       // SYSCLK / 1 = 24MHz
复制代码

若此时仍无输出,说明 硬件限制导致无法输出 24MHz。

四、替代方案与建议

替代方案一:使用外部 PLL 或时钟缓冲器

若系统需要 24MHz 时钟输出,但 Ai8H8K64U 无法直接输出,可考虑:
使用外部 时钟缓冲器(Clock Buffer)IC,如 74LVC1G04、Si5351 等
将 MCU 输出 12MHz,再通过外部 IC 倍频至 24MHz

替代方案二:更换封装或型号

TSSOP-20 封装的 Ai8H8K64U 可能因引脚功能限制,导致某些功能受限。如需更高频率输出,建议:
更换为 TSSOP-28 或 QFN-32 封装 的型号
选择支持 专用时钟输出引脚(如 MCLKO) 的芯片

替代方案三:使用定时器 PWM 输出时钟信号

若无法使用 MCLKOCR,可尝试使用定时器模块(如 Timer0 或 Timer1)配置为 PWM 模式,输出 24MHz 信号:
  1. c
  2. TMOD = 0x02;          // 定时器0,模式2(8位自动重载)
  3. TH0 = 0x00;           // 重载值
  4. TL0 = 0x00;
  5. ET0 = 1;              // 使能中断
  6. TR0 = 1;              // 启动定时器
复制代码

配合中断服务程序翻转 P16 引脚状态,实现 24MHz 方波输出。

五、结论

综上所述,您在配置 Ai8H8K64U 从 P16 输出 24MHz 时钟失败,主要可能原因如下:

| 原因 | 说明 |
|------|------|
| 硬件限制 | P16 引脚输出频率上限低于 24MHz |
| 初始化顺序错误 | 系统时钟未稳定前启用 MCLKOCR |
| 功能复用冲突 | P16 被其他外设占用 |
| 架构限制 | MCU 本身不支持输出 SYSCLK/1 |

建议采取以下措施:
优先确认系统时钟是否稳定
检查 P16 的复用配置
尝试输出 12MHz(SYSCLK/2)以确认引脚功能正常
若需 24MHz,考虑使用外部时钟缓冲器或换用支持更高频率输出的封装/型号

如需进一步分析,建议查阅 Ai8H8K64U 的数据手册 中关于:
MCLKOCR 寄存器的详细说明
P16 引脚的功能复用表
系统时钟模块的频率限制说明

如有具体数据手册内容,也可提供以便更精确分析。

国芯人工智能 技术支持中心  
2025年4月5日

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19770
发表于 2025-9-19 23:20:37 | 显示全部楼层

截图202509192318585342.jpg

1, 让 STC8H8K64U 工作在内部24MHz
2,   设置从 P1.6输出 系统时钟/1
3, 让STC8H8K64U工作在 5V, I/O 的输出速度才可以

截图202509192317568231.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:560
  • 最近打卡:2025-10-16 05:35:53
已绑定手机

17

主题

768

回帖

2322

积分

金牌会员

积分
2322
发表于 2025-9-20 07:36:16 | 显示全部楼层
3V和5V供电,IO输出最大频率不同
截图202509200735496971.jpg
截图202509200736122755.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:251
  • 最近打卡:2025-10-15 01:14:49

3

主题

15

回帖

1267

积分

金牌会员

积分
1267
发表于 2025-9-20 12:07:25 | 显示全部楼层
小*** 发表于 2025-9-20 07:36
3V和5V供电,IO输出最大频率不同

明白

就是看到规格书上写着 3.3V 供电, I/O 速度典型值可到 25MHz,
所以就尝试一下把 P1DR 和 P1SR 都修改了,
看能否出到 24MHz 的讯号, 结果还是不行
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:251
  • 最近打卡:2025-10-15 01:14:49

3

主题

15

回帖

1267

积分

金牌会员

积分
1267
发表于 2025-9-21 12:08:00 | 显示全部楼层
神*** 发表于 2025-9-19 23:20
1, 让 STC8H8K64U 工作在内部24MHz
2,   设置从 P1.6输出 系统时钟/1
3, 让STC8H8K64U工作在 5V, I/O  ...

请教大神, 假若无法让 STC8H8K64U 在 5V 工作, 只能供 3.3V 电源, 还有什麽办法能取得 24MHz 时钟 ?
能否外部挂 24MHz 晶振, 打开 XOSCCR.ENXOSC, 然後直接在 XTALO 脚取用 24MHz 时钟 ?

可以的话, 再来的问题是 : 能否只让外挂晶振起振, 而 STC8H8K64U 则依然用 HIRC 作时钟源, 获取 SYSCLK ?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19770
发表于 2025-9-21 12:34:41 | 显示全部楼层
从 XTALO 接1个100欧电阻去需要时钟的第三方
===XTALO 的输出已很强
截图202509211233559959.jpg


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:523
  • 最近打卡:2025-10-15 12:20:44

9

主题

475

回帖

3321

积分

论坛元老

积分
3321
发表于 2025-9-21 15:56:40 | 显示全部楼层
绅*** 发表于 2025-9-21 12:08
请教大神, 假若无法让 STC8H8K64U 在 5V 工作, 只能供 3.3V 电源, 还有什麽办法能取得 24MHz 时钟 ?
能否 ...

使用外部无源晶振的波形,一般不是方波,幅度也低,引出使用时最好先用缓冲器整形
或者使用外部有源晶振,驱动能力相对强一些
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19770
发表于 2025-9-21 16:03:00 | 显示全部楼层
XTALO 的输出已很强
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 06:10 , Processed in 0.127215 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表