历史上的今天
返回首页

历史上的今天

今天是:2025年06月15日(星期日)

2018年06月15日 | stm32学习笔记之USB中断配置初始化函数

2018-06-15 来源:eefocus



● 中断映射单元:将可能产生中断的USB事件映射到三个不同的NVIC请求线上:
─ USB低优先级中断(通道20):可由所有USB事件触发(正确传输,USB复位等)。固件在处理中断前应当首先确定中断源。
─ USB高优先级中断(通道19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最大的传输速率。


─ USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。

  USB_HP_CAN1_TX_IRQn= 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  USB_LP_CAN1_RX0_IRQn  = 20,   /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */

  USBWakeUp_IRQn= 42,     /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */

  1. /USB中断配置  

  2. void USB_Interrupts_Config(void)  

  3. {   

  4.     NVIC_InitTypeDef NVIC_InitStructure;  

  5.     EXTI_InitTypeDef EXTI_InitStructure;  

  6.   

  7.    

  8.     /* Configure the EXTI line 18 connected internally to the USB IP */  

  9.     EXTI_ClearITPendingBit(EXTI_Line18);  

  10.                                               //  开启线18上的中断  

  11.     EXTI_InitStructure.EXTI_Line = EXTI_Line18; // USB resume from suspend mode  

  12.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //line 18上事件上升降沿触发  

  13.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;  

  14.     EXTI_Init(&EXTI_InitStructure);        

  15.   

  16.     /* Enable the USB interrupt */  

  17.     NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;  //组2,优先级次之   

  18.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  

  19.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  20.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  21.     NVIC_Init(&NVIC_InitStructure);  

  22.       

  23.     /* Enable the USB Wake-up interrupt */  

  24.     NVIC_InitStructure.NVIC_IRQChannel = USBWakeUp_IRQn;   //组2,优先级最高     

  25.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  26.     NVIC_Init(&NVIC_InitStructure);     

  27. }     


复习关于STM32的中断与事件:



                        这张图是一条外部中断线或外部事件线的示意图


图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。


图中的蓝色虚线箭头,标出了外部中断信号的传输路径,

首先外部信号从编号1的芯片管脚进入,

经过编号2的边沿检测电路,

通过编号3的或门进入中断挂起请求寄存器,

最后经过编号4的与门输出到NVIC中断检测电路,

这个边沿检测电路受上升沿或下降沿选择寄存器控制,

用户可以使用这两个寄存器控制需要哪一个边沿产生中断,

因为选择上升沿或下降沿是分别受2个平行的寄存器控制,

所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了.


按下来是编号3的或门,这个或门的另一个输入是软件中断/事件寄存器,

从这里可以看出,软件可以优先于外部信号请求一个中断或事件,

即当软件中断/事件寄存器的对应位为"1"时,不管外部信号如何,编号3的或门都会输出有效信号.


一个中断或事件请求信号经过编号3的或门后,进入挂起请求寄存器,到此之前,中断和事件的信号传输通路都是一致的,也就是说,挂起请求寄存器中记录了外部信号的电平变化.


外部请求信号最后经过编号4的与门,向NVIC中断控制器发出一个中断请求,如果中断屏蔽寄存器的对应位为"0",则该请求信号不能传输到与门的另一端,实现了中断的屏蔽.



明白了外部中断的请求机制,就很容易理解事件的请求机制了.



图中红色虚线箭头,标出了外部事件信号的传输路径,

外部请求信号经过编号3的或门后,进入编号5的与门,

这个与门的作用与编号4的与门类似,

用于引入事件屏蔽寄存器的控制;最后脉冲发生器的一个跳变的信号转变为一个单脉冲,

输出到芯片中的其它功能模块.


从这张图上我们也可以知道,从外部激励信号来看,中断和事件的产生源都可以是一样的.之所以分成2个部分,由于中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等;



简单举例:


外部I/O触发AD转换,来测量外部物品的重量;如果使用传统的中断通道,需要I/O触发产生外部中断,外部中断服务程序启动AD转换,AD转换完成中断服务程序提交最后结果;要是使用事件通道,I/O触发产生事件,然后联动触发AD转换,AD转换完成中断服务程序提交最后结果;相比之下,后者不要软件参与AD触发,并且响应速度也更块;要是使用事件触发DMA操作,就完全不用软件参与就可以完成某些联动任务了。

总结:

可以这样简单的认为,事件机制提供了一个完全有硬件自动完成的触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法;


推荐阅读

史海拾趣

Digitron公司的发展小趣事

Digitron公司始终将创新作为企业发展的核心驱动力。公司投入大量资金用于研发新技术和新产品,不断提升产品的性能和功能。XXXX年,Digitron公司成功研发出一款具有无线传输功能的数据记录器,用户可以通过手机或电脑实时查看和监控数据。这一创新产品受到了市场的热烈欢迎,为Digitron公司带来了显著的增长。

Adaptive Interconnect Electronics, Inc. [AIE]公司的发展小趣事

随着电子技术的飞速发展,AIE公司不断投入研发力量,推出了一系列具有创新性的测试配件产品。其中,AIE金属探头以其高精度、高稳定性的特点,受到了市场的广泛认可。此外,AIE还针对汽车行业推出了ADK汽车诊断试剂盒,为汽车维修和诊断提供了便捷、高效的解决方案。这些技术创新和产品升级不仅提升了AIE的市场地位,也推动了电子测试技术的不断进步。

Anatech Electronics Inc公司的发展小趣事

自FCI成立以来,公司凭借其专业的设计、精密的制造工艺和创新精神,迅速在全球连接器市场上崭露头角。通过不断的技术创新和产品升级,FCI逐渐成为了全球领先的连接器制造商之一。其产品线涵盖了通讯、电源、医疗等多个领域,为全球众多知名品牌提供了优质的连接器解决方案。

Capax Technologies Inc公司的发展小趣事

Capax Technologies Inc在市场定位和产品策略上表现出色。公司深入调研市场需求,发现高端电子设备市场对于高性能、高可靠性的组件有着旺盛的需求。于是,Capax Technologies Inc将产品定位为高端市场,专注于研发和生产高品质的电子组件。通过精准的市场定位和优质的产品,Capax Technologies Inc迅速在高端市场中占据了一席之地。

辰颐电子公司的发展小趣事

在辰颐电子公司的发展历程中,品质和创新一直是其核心竞争力。公司始终坚持对产品品质的严格把控,从原材料采购到生产流程,再到售后服务,都力求做到精益求精。同时,公司还注重技术创新和研发投入,不断推出具有竞争力的新产品,满足市场不断变化的需求。这种品质与创新的双轮驱动模式,使辰颐电子在激烈的市场竞争中脱颖而出。

CANDD公司的发展小趣事

为了进一步提升品牌影响力和市场份额,CANDD公司开始实施国际化战略。公司首先在欧洲市场设立了分公司,并成功打开了欧洲市场的大门。随后,公司又进军亚洲市场,通过与当地企业的合作,逐渐在亚洲市场站稳了脚跟。随着国际化战略的深入实施,CANDD公司的品牌知名度和市场份额不断攀升。

问答坊 | AI 解惑

实用的各种电源电路

本帖最后由 paulhyde 于 2014-9-15 03:54 编辑 好的电源电路  …

查看全部问答>

能否用open打开打开usb节点?

本信息来自合作QQ群:arm linux fpga 嵌入0群  49900581(超级群)  群主在坛子里ID:wangkj 我问一下各位大虾, 我把U盘插入linux系统的电脑时有一个设备U盘节点/dev/sdb1 当我用open函数打开时打不开 open(\"/dev/sdb1\" ...…

查看全部问答>

辩论32位ARM那家的更有发展前途

现在32位ARM,正如火如荼,成为这一时代的宠儿,你看好那一家的呢?   1. STM32   2. LPC   3. TI   4. ATMEL   5.还是其他   说说你的看法,让时间验证你的观点。。。 [ 本帖最后由 zhaojun_xf 于 201 ...…

查看全部问答>

任意波形发生器通道数问题

请问这个通道数载硬件上市怎么实现的。…

查看全部问答>

和弱智的一个问题 大侠们忍住不要笑

在WINCE流驱动实验中 DWORD XXXXXXXXXXX, DWORD的在这是不是就是定义了一个双字节16位的变量…

查看全部问答>

evc 录音除噪声

   如题,在evc下编写了录音程序,但它把所有的声音都录下来了。 现考虑只要录下人说话的声音即可。有没有把噪声滤掉的程序???…

查看全部问答>

中国最好的私活联盟,欢迎大这的加入

中国最好的私活联盟,欢迎大这的加入 西北私活群  49492172 四川省私活交流 48663781 上海私活群 49493832                  陕西省私活交流群 49492617 山东省私活交 ...…

查看全部问答>

请教:使用Identify RTL Debugger出现的问题

我用的是V5 XC5VLX50的FPGA,我建了一个Synplify的工程,然后新建了一个identify instrument  ,然后就调用Launch identify instrument ,就在打开它的过程中,出现了一个db_assert的错误提示,点确定 然后就什么都没了     ...…

查看全部问答>

STM32中断学习

CM3可以实现256个异常和中断,其中异常占用16个向量位置,中断占用占用240个向量位置.STM32作为一种具体的芯片,实现了16个异常(其中6个保留),实现了60个中断,所以就有两个中断设置使能寄存器ISER0和ISER1,每个可以控制32个中断的使能,也有两个中 ...…

查看全部问答>

vxworks 更改后IP,如何重新建立UDP连接

例如通过telnet修改了IP,此时之前的UDP通信就不能工作,非要重启设备才行,有什么好方法…

查看全部问答>