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

请教STC8H1K系列外部中断响应速度

[复制链接]

该用户从未签到

1

主题

1

回帖

57

积分

注册会员

积分
57
发表于 2023-4-27 19:22:04 | 显示全部楼层 |阅读模式
各位大佬们好!我想了解一下STC8H1K系列单片机的外部中断的响应速度。

具体地说,就是假设外设向INT0引脚发出一个脉冲,从这一瞬间开始计算,到单片机开始执行INT0的中断服务函数的第一条指令为止,一共需要经历多少个时钟周期。
不考虑中断嵌套,即INT0中断的优先级为最高。

我目前遇到的实际问题是采集一个外设总线上的数据。根据外设手册的描述,如下图所示,我将外设的地址总线和数据总线直接挂在STC的GPIO口,外设的CLK接到INT0引脚。
我是希望通过INT0检测到CLK的上升沿后触发中断,然后在中断服务中直接读GPIO获取到数据,并且进行后续处理。

外设时序图

外设时序图


由于CLK频率相当高(1MHz),所以留给我的时间十分紧张。尤其是我并不知晓STC的外部中断的响应速度到底有多快,所以特意过来咨询一下诸位大佬,关于外部中断响应速度方面是否有确切的数据。

希望大佬们能够给予我一些指点和建议!谢谢!
回复 送花

使用道具 举报

该用户从未签到

552

主题

9492

回帖

1万

积分

管理员

积分
14057
发表于 2023-4-27 19:39:11 | 显示全部楼层
我都忘了,
但按普通8051的来理解,当前指令执行完,去响应/LCALL ?的时间 ?

真忘了,下班时间也不想去问同事,望理解,  基本《 6个时钟  ? 这么快 ? 我都不信了
1.png
1.png

内部认真仿真后写了如下文章
http://www.stcmcudata.com/STC8F-DATASHEET/STC8H.pdf

现在的STC8系列 MCU 是多级流水线的8位现代8051,如下
截图202310151801263793.jpg

STC89C52RC/STC89C58RD+系列是传统的8051,如下
截图202310151800019267.jpg


回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

1

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 2023-4-27 19:48:01 | 显示全部楼层
感谢大佬指点!
不过中断和普通的函数调用不一样吧?毕竟中断还有触发信号采样、优先级裁决、标志位置位复位等等一系列硬件工作,它绝不可能只是一个LCALL指令的时间。

点评

搞生产N年了,您按普通8051的理解就对了, 我们只是指令平均快了 13.2倍  发表于 2023-4-27 19:53
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 19:56
  • 签到天数: 171 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1359

    积分

    荣誉版主

    积分
    1359
    发表于 2023-4-28 20:16:12 | 显示全部楼层
    我做过测试,6---8个时钟。
    测试方法:pwm输出100Khz接P32,INT0中断函数对P54取反。用逻辑分析仪和示波器抓这几个信号。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14057
    发表于 2023-4-28 20:48:35 | 显示全部楼层
    取反也需要时间,指令执行完,实际/O外部由于分布电容的原因还不一定立即就测试到反了
    ====基本《 6个时钟  ? 这么快 ? 我都不信了

    目测这3条指令需要的时钟数偏多
    1.png
    2.png

    3.png
    我都忘了,
    但按普通8051的来理解,当前指令执行完,去响应/LCALL ?的时间 ?

    真忘了,下班时间也不想去问同事,望理解,  基本《 6个时钟  ? 这么快 ? 我都不信了


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3038

    回帖

    6847

    积分

    超级版主

    积分
    6847
    发表于 2023-5-5 16:23:58 | 显示全部楼层
    STC8系列,按最长的时间大约分析,只考虑操作步骤,实际PC的运行可能有点出入,但差别不大。响应中断是硬件全自动执行的。
    1、1T。中断采样是一个时钟,也就是说,上升沿或下降沿出现后,最多一个时钟就能设置中断标志。
    2、1~6T。MCU准备响应中断,等待当前执行的指令完成,指令长度是1~6T。
    3、2T。  然后MCU响应中断,将PC指针入栈,执行2条入栈指令,2T。
    4、1T。装载中断服务地址到DPTR,1T。
    5、3T。执行长跳转指令LJMP,进入中断服务入口,3T。
    上述指令需要8~13个时钟,对于24MHz,就是0.33~0.54us。
    由于STC8系列绝大部分指令都是单周期,少数PC转向指令是3周期,2个指令4周期,1个指令6周期,所以响应中断时大概率是8周期。

    退出中断服务:
    1、2T。  将断点地址出栈给PC指针,执行2条出栈指令,2T。
    4、3T。中断返回指令RETI。

    用户可以看看STC8系列的汇编命令周期数,大部分指令基本就是1T的,真的是天花板了。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14057
    发表于 2023-5-6 11:12:56 | 显示全部楼层
    如果是如下算起:
    (1)采样感测 INT0,2个时钟,要判断高低变化
    (2)中断承诺 INT ACK, 0个时钟
    (3)去INT vector 取资料(通常放的內容是call), 3个时钟
    (4)执行LCALL, 3个时钟
    (5)第7个时钟, 是ISR第一个命令被执行
    STACK的处理,包含在(3)中
    至少7个时钟

    如果是如下算起:
    (1)已判断到中断条件发生,不算这2个时钟
    (2)中断承诺 INT ACK, 0个时钟
    (3)去INT vector 取资料(通常放的內容是call), 3个时钟
    (4)执行LCALL, 3个时钟
    (5)第5个时钟, 是ISR第一个命令被执行
    STACK的处理,包含在(3)中
    至少5个时钟


    如上内部研发答复,大家只要加上我提的,当前指令执行完这个跑不掉的槛
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14057
    发表于 2023-10-15 18:05:51 | 显示全部楼层
    内部认真仿真后写了如下文章
    http://www.stcmcudata.com/STC8F-DATASHEET/STC8H.pdf

    现在的STC8系列 MCU 是多级流水线的8位现代8051,如下


    STC89C52RC/STC89C58RD+系列是传统的8051,如下


    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-18 06:41 , Processed in 0.072007 second(s), 64 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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