历史上的今天
返回首页

历史上的今天

今天是:2024年09月08日(星期日)

2020年09月08日 | STVD中断函数写法

2020-09-08 来源:eefocus

一、寄存器开发方式


1)以定时器TIM4为例,首先对TIM4的相关寄存器进行初始化,打开TIM4的中断,注意在STVD+COSMIC的开发环境下,开总中断使用语句_asm("rim");


void TIM4_init(void)        //TIM4 init

{

    TIM4_CR1=0x80;

    TIM4_PSCR=0x07;        //clock div : 128 (T=8us)

    TIM4_ARR=125;        //interrupt per 1ms

    TIM4_IER=0x01;        //enable update interrupt

    _asm("rim");        //enable EA

    TIM4_EGR=0x01;        //update case

    TIM4_CR1|=0x01;        //enable count

}


2)接下来编写TIM4的中断服务程序,可以直接写在main.c中,注意函数前一定要加@far @interrupt,中断服务函数的名称可以自己取,比如此处的TIM4_Interrupt;


@far @interrupt void TIM4_Interrupt(void)

{

    TIM4_SR&=0xfe;

    

    cnt_num4++;

    if(cnt_num4>10)

    {

        cnt_num4=0;

        flag_adc=1;

    }

}


3)接下来在stm8_interrupt_vector.c文件中对中断函数进行声明,并修改中断向量表中对应的中断服务函数名称为我们定义的名称,如TIM4_Interrupt为中断向量的第23个;


extern void _stext();     /* startup routine */

extern @far @interrupt void TIM4_Interrupt(void);

    {0x82, NonHandledInterrupt}, /* irq21 */

    {0x82, NonHandledInterrupt}, /* irq22 */

    {0x82, TIM4_Interrupt}, /* irq23 */

    {0x82, NonHandledInterrupt}, /* irq24 */

    {0x82, NonHandledInterrupt}, /* irq25 */   


二、库函数开发方式


1)以外部中断为例,可用按键触发,首先初始化对应引脚,开启外部中断和总中断,开总中断使用语句_asm("rim");


void main(void)

{

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

    GPIO_Init(GPIOA,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_FAST);

    GPIO_Init(GPIOA,GPIO_PIN_2,GPIO_MODE_IN_PU_IT);

    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA,EXTI_SENSITIVITY_FALL_ONLY);

    _asm("rim");

    /* Infinite loop */

  while (1)

  {

        ;

  }

}


2)接下来在stm8s_it.c文件中,找到对应中断向量的中断服务程序,在里面添加代码即可;


/**

  * @brief External Interrupt PORTA Interrupt routine.

  * @param  None

  * @retval None

  */

INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

    GPIO_WriteReverse(GPIOA,GPIO_PIN_3);

}


推荐阅读

史海拾趣

Dionics Inc公司的发展小趣事

为了进一步拓展国际市场,Dionics Inc开始寻求与国际知名企业的战略合作。经过多次洽谈,公司最终与一家国际知名电子企业达成战略合作协议,共同开发新一代智能穿戴设备。通过这一合作,Dionics Inc不仅获得了宝贵的技术支持和市场资源,还成功将其产品推向了国际市场。

Bergquist Company公司的发展小趣事

70年代,随着电子技术的飞速发展,导热材料行业迎来了前所未有的机遇。Bergquist Company敏锐地捕捉到了这一机遇,开始涉足导热材料领域。公司投入大量资金进行研发,成功开发出了一系列具有创新性的导热产品。这些产品不仅性能卓越,而且价格合理,深受市场欢迎。凭借这些优势,Bergquist Company逐渐在导热材料行业崭露头角,成为了行业的领军企业。

敦泰(FOCALTECH)公司的发展小趣事
压缩机启动电路故障通常涉及启动器和压缩机线圈。如果启动器损坏,可以购买同型号的新启动器进行更换。如果压缩机线圈断路,则可能需要更换整个压缩机。这些维修工作较为复杂,建议由专业维修人员进行操作。
Gem Asia Enterprise Co Ltd公司的发展小趣事

随着业务的不断扩展,Gem Asia意识到全球化布局的重要性。公司开始在全球范围内寻找合适的生产基地和市场机会。通过并购海外优质资产、建立海外研发中心和销售网络,Gem Asia成功实现了从本土企业向跨国公司的转变。特别是在亚洲和欧美市场,Gem Asia凭借其高质量的产品和灵活的市场策略,赢得了广泛的客户认可和市场份额。

Fairchild公司的发展小趣事

1961年,Fairchild公司向全世界介绍了第一个实用的集成电路(IC)。这个微小的芯片将多个晶体管和其他电子元件集成在一起,极大地提高了电子设备的性能和可靠性。这一创新对电子行业产生了深远的影响,并开启了集成电路技术的飞速发展。

ESS [ESS Technology,Inc]公司的发展小趣事

ESS不仅在个人电脑音频领域取得了显著成就,还在HIFI领域实现了突破。ESS的HIFI传承可以追溯到其创始人对音频技术的深刻理解和对市场需求的敏锐把握。通过多年的技术积累和不断创新,ESS成功推出了多款高性能的HIFI音频芯片,如ES9018,这些产品凭借其卓越的性能和音质赢得了广泛好评。

问答坊 | AI 解惑

程序中为什么要设置IE和IP

大家好:     在程序中为什么要设置IE和IP?有一段程序这样写,请大家帮忙看下         MOV TMOD,#00100001B;波特率发生T1定时工作模式2(自动装载), T0定时工作模式1(16位),     MOV TL0,#0caH ...…

查看全部问答>

简单的单片机控制系统,请各位朋友帮忙。

单片机控制系统 需求:1点输入,3点输出(其中2点控制电磁阀输出,1点控制继电器输出) 功能:对输入点记数 输入         输出 1次        电磁阀1输出 2次        电 ...…

查看全部问答>

提问+怎么为可穿戴设备的开发做准备

现在可穿戴设备正在越来越流行,那我们平时学的知识怎么应用到上面么,如果以后要开发可穿戴设备,现在应该怎么做准备?…

查看全部问答>

晒WEBENCH设计的过程+低通滤波器

利用TI的这个工具节约时间不用手算了! 1、填入相应的参数。 2。生成原理图 3、查看仿真波形 …

查看全部问答>

大侠们,怎么看数据手册写驱动程序啊,求解

像单片机怎么来阅读它的数据手册来写它的一些程序呢? 比如说STC15F204EA这款单片机,要使用它的ADC模块,不知道怎么怎么写它的程序。这部分手册 看的是说要设置些寄存器,但是具体要怎么写ADC程序且无从入手。 这个芯片手册该如何阅读,头疼, ...…

查看全部问答>

pH监测仪:带有温度补偿

实物展示: 电路功能与优势 图中所示电路是一个完全隔离式低功耗pH传感器信号调理器和数字化仪,并且带有自动温度补偿以实现高精度。         该电路可为0至14范围内的pH值提供精度为0.5%的读数,无噪声代码分辨率大于14 ...…

查看全部问答>