搜索
bottom↓
回复: 23

请教:关于STM8S003的中断响应时间,经测试时9us,能否加快!

[复制链接]

出0入0汤圆

发表于 2019-10-28 09:05:42 | 显示全部楼层 |阅读模式
大家好!
关于STM8S003的中断响应时间,经测试时耗时9us,能否加快!
采用网上例程:《第三讲_库函数移植_GPIO外部中断》程序如附件:
系统采用最简系统,取内部16MRC时钟,不分频。
PC5中断信号输入,
PD2电平取反输出。
在PC5口线加上20us的低电平脉冲,
但是PD2上的电平取反输出延时将近9us,
请各位高手指点,为什么中断响应这么久,可否缩短,怎么改进。
谢谢大家!
用自己写的程序也是如此。中断响应时间都是9us左右。



在stm8_it.c中中断处理程序
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
   /* In order to detect unexpected events during development,
      it is recommended to set a breakpoint on the following instruction.
   */
   GPIO_WriteReverse(GPIOD , GPIO_PIN_2); //对LED1灯进行异或取反控制
}
在main.c程序如下:
void KEY2_Init()
{
   GPIO_Init(GPIOC , GPIO_PIN_5 ,  GPIO_MODE_IN_PU_IT);   //配置PA3为带上拉电阻并产生中断的输入
  
   EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC , EXTI_SENSITIVITY_FALL_ONLY);  //配置PC端口为下降沿产生中断
}
void LED1_Init()
{
   GPIO_Init(GPIOD , GPIO_PIN_2 , GPIO_MODE_OUT_PP_LOW_FAST);  //配置PD2为输出
}
int main(void)
{
                                                                                                                                             disableInterrupts();    //首先关闭系统的总中断
  CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);     // 配置系统时钟为1分频,即系统时钟为16MHZ
   LED1_Init();
   KEY2_Init();
   enableInterrupts();   //打开系统的总中断
  while(1);
   
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2019-10-28 09:26:13 | 显示全部楼层
是用 IAR 编译的吗?  你换 cosmic 编译看看。

出0入0汤圆

发表于 2019-10-28 09:28:09 | 显示全部楼层
检查下Option Byte,看看系统时钟到底是多少。

出0入0汤圆

发表于 2019-10-28 09:41:49 | 显示全部楼层
典型中断开销24个指令周期,如果代码执行驱动来源于中断,用WFI/HALT来加速中断响应

出0入0汤圆

 楼主| 发表于 2019-10-28 09:50:15 | 显示全部楼层
imliyucai 发表于 2019-10-28 09:26
是用 IAR 编译的吗?  你换 cosmic 编译看看。

谢谢!我用的iar for STM8S,cosmic还没用过。

出0入0汤圆

 楼主| 发表于 2019-10-28 09:51:27 | 显示全部楼层
dalige 发表于 2019-10-28 09:28
检查下Option Byte,看看系统时钟到底是多少。

程序里IO,置高后马上置低,我用示波器看脉宽是125US,

出0入0汤圆

 楼主| 发表于 2019-10-28 09:52:10 | 显示全部楼层
styleno1 发表于 2019-10-28 09:41
典型中断开销24个指令周期,如果代码执行驱动来源于中断,用WFI/HALT来加速中断响应 ...

谢谢!WFI/HALT是配置项吗?应该如何操作。

出0入213汤圆

发表于 2019-10-28 09:55:15 来自手机 | 显示全部楼层
io口操作直接寄存器操作试试。

出0入0汤圆

 楼主| 发表于 2019-10-28 10:43:00 | 显示全部楼层
jyrpxj 发表于 2019-10-28 09:55
io口操作直接寄存器操作试试。

已经试过了,改变不明显。如果已经到中断执行程序,也就耽搁1-2个机器周期,影响没这么大。

出0入0汤圆

发表于 2019-10-28 11:39:14 | 显示全部楼层
没戏了,就这么的了!

出70入145汤圆

发表于 2019-10-28 15:37:07 | 显示全部楼层
估计是你使用库函数来操作IO取反太费时间的缘故,我测试了下,中断中直接使用寄存器写IO,不管是PA还是PD的IO中断,进入后到LED电平变化都只要1us左右。
#include  <iostm8s103f3.h>

#define        PD4_PIN_INT          PD_DDR &=~(0x01<<4);PD_CR1 |= (0x01<<4);PD_CR2 |= (0x01<<4)
#define        PA3_PIN_INT          PA_DDR &=~(0x01<<3);PA_CR1 |= (0x01<<3);PA_CR2 |= (0x01<<3)
#define        PB5_PP_10M           PB_DDR |= (0x01<<5);PB_CR1 |= (0x01<<5);PB_CR2 |= (0x01<<5)

#define KEY1_ON         PD_IDR_IDR4==0
#define KEY1_OFF        PD_IDR_IDR4==1
#define KEY2_ON         PA_IDR_IDR3==0
#define LED3_ON         PB_ODR_ODR5=0
#define LED3_OFF        PB_ODR_ODR5=1
void main(void)         //
{
    asm("sim");// 关全局中断
        //PD4 KEY1 上拉输入
    PD4_PIN_INT;//-------
    EXTI_CR1_PDIS=2;//下降沿触发
        //PA3 key2 上拉输入
    PA3_PIN_INT;//--------
    //初始化
    CLK_CKDIVR = 0x00;//CLK_CKDIVR_HSIDIV = 0;    //1分频 16M时钟
    PB5_PP_10M;//-----
    LED3_OFF;

    asm("rim");// 开全局中断
    while(1)
    {
        LED3_OFF;

    }
}  
#pragma   vector =  0X08 //PD中断
__interrupt  void  K1_Key(void)
{
    LED3_ON;
}   

#pragma   vector =  0X05 //PA中断
__interrupt  void  K2_Key(void)
{
    LED3_ON;
}   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-10-28 16:19:42 来自手机 | 显示全部楼层
谢谢!hailing

出0入0汤圆

 楼主| 发表于 2019-10-28 16:21:09 来自手机 | 显示全部楼层
等一下,用的是什么编译环境?

出0入0汤圆

发表于 2019-10-28 16:25:45 | 显示全部楼层
IO的中断会快点,模拟看门狗中断可就没这么快咯

出70入145汤圆

发表于 2019-10-29 12:10:08 | 显示全部楼层
dbwu8280 发表于 2019-10-28 16:21
等一下,用的是什么编译环境?

iar 1.4版本

出0入0汤圆

发表于 2019-10-29 12:57:54 | 显示全部楼层
要想快速响应的,肯定是直接操作寄存器的比较快。库函数的只是适合快速应用
11楼的代码,明显就是IAR的

出0入0汤圆

 楼主| 发表于 2019-10-31 15:35:09 | 显示全部楼层

基本搞定了,编译环境设置成速度最快,延时为3us,谢谢大家!

出0入0汤圆

发表于 2019-10-31 16:02:22 | 显示全部楼层
iar有所为虚拟寄存器要保护和恢复, 比cosmic的中断要慢不少,

另外中断里调用库函数肯定慢

出0入0汤圆

 楼主| 发表于 2019-11-5 09:34:05 | 显示全部楼层
谢谢SNOOPYZZ!

出0入0汤圆

发表于 2020-6-11 11:06:30 | 显示全部楼层
dbwu8280 发表于 2019-10-31 15:35
基本搞定了,编译环境设置成速度最快,延时为3us,谢谢大家!

请问您说的编译环境设置具体指的哪方面的设置,有相关的资料介绍吗?谢谢!我也是遇到中断时间太长的问题,恳请赐教,谢谢!

出0入0汤圆

发表于 2020-6-11 11:33:25 | 显示全部楼层
是设置更改程序优化等级吗?这部分改到最高,周期也还是最小9us

出0入0汤圆

 楼主| 发表于 2020-6-11 13:10:11 | 显示全部楼层

你这个地方设置一下看看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-6-11 16:22:40 | 显示全部楼层
好的!谢谢,就是这里设置过了,最小周期还是9us 多,我再找找其他问题看吧!

出0入0汤圆

 楼主| 发表于 2020-6-12 09:57:31 | 显示全部楼层
应该不会这么久的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 09:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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