m0_58360649 2021-06-07 11:40 采纳率: 0%
浏览 213

由按键产生外部中断,并设置为下降沿触发。

根据图1电路,实现如下功能:由按键产生外部中断,并设置为下降沿触发,初始化为向量IRQ中断,中断服务程序将蜂鸣器控制输出信号取反。 

按键蜂鸣器接口电路图阅读实验程序,回答问题(将注释补充完整): 

#include  "config.h" 

#define   LED     (1 << 7 ) 

void __irq  Eint0IRQ (void)

 {     if ((IO0PIN & (1 << 7)) == 0) 

{        IO0SET = 1 << 7;             /* 熄灭发光二极管        */     }     

else {          IO0CLR = 1 << 7;             /* 点亮发光二极管         */

}      while((IO0PIN & (1 << 3)) == 0);     /* 等待按键松开        */     

 EXTINT = 0x01;                   /*                           */     

 VICVectAddr = 0x00;               /*                          */

 } 

int main (void)

 {    

  PINSEL0 = PINSEL0 & (~0x03);     

 PINSEL0 = PINSEL0 | 0x01;         /* 设置P0.3 为外部中断0 管脚 */     

 PINSEL0= PINSEL0&(~(0x03 << 2));  /*设置P0. 7 为GPIO 功能   */      

IO0DIR    = LED;                 /* 设置P0. 7 为输出         */      

IO0SET    = LED;                 /* 设置输出为高电平        */      

IRQEnable();                       /* IRQ 中断使能       */       EXTMODE    = 0x00;               /* 设置外部中断为低电平触发*/     

 VICIntSelect   = 0 << 14;             /*                        */      VICVectCntl0  = 0x20 | 14;            /*                   */      VICVectAddr0  = (uint32)Eint0IRQ;   /* 设置中断服务程序地址    */     

 VICIntEnable  = 1 << 14;             /*                      */      EXTINT = 0x01;                     /*                         */      while(1);                            /*                         */  

   return 0; }

回答以下问题:嵌入式系统中,由C语言编写的中断处理程序,其最大特点是返回值和参数必须是                        类型。

#define的作用是                           __irq 标识具有                                         作用。 

IRQEnable(); 的中断使能作用是通过修改                  来实现的。

 

  • 写回答

1条回答 默认 最新

  • 一盏黄黄旧旧的灯 2024-03-26 14:44
    关注

    嵌入式系统中,由C语言编写的中断处理程序的最大特点是返回值和参数一般必须是特定类型,具体类型取决于编译器和微控制器架构的要求。在很多嵌入式环境中,中断服务程序(ISR)通常不需要返回值(void类型),并且也不接受任何参数(同样也是void类型),这是因为中断处理应当尽可能快地完成,减少在中断上下文中执行的代码量,避免阻塞其他中断或实时任务。
    这里的__irq标识符是用来标记函数为中断服务程序的关键字,它的作用是告知编译器该函数将作为中断处理程序使用,编译器会据此生成相应的中断向量表入口和必要的中断处理框架代码。

    至于IRQEnable(),这是一个假设的函数调用,通常在嵌入式系统中,中断使能是通过修改某个中断控制器寄存器(如VIC、NVIC或其他特定MCU的中断控制器)来实现的。这个函数的作用可能是设置相关中断的使能位,从而允许该中断源能够触发处理器的中断服务程序。例如,在Cortex-M系列微控制器中,中断使能通常涉及修改NVIC_EnableIRQ()函数,该函数会更改NVIC(Nested Vectored Interrupt Controller)中的中断使能寄存器。

    但由于具体的硬件平台不同,中断使能的具体实现会有所不同,因此IRQEnable()背后的底层操作不能准确给出,除非提供了特定微控制器或编译器体系结构的详细信息。

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?