0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于LPC5500中USB的FRAME_INT中断

jf_pJlTbmA9 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2023-10-30 18:26 次阅读

USB中的SOF(Start Of Frame)包是USB开发中,经常接触也是很简单的一个概念:SOF由USB主机每1ms定时发出(FS),作用很多,相当于是一个时钟节拍基准,如果暂时用不到,就忽略也没有关系。LPC5528的USB模块中,有一个FRAME_INT中断描述如下:

wKgaomUD0hSAQTEAAAGbOuW9Nck634.png

这个中断 ”感觉好像就是SOF中断”,似乎只是名字换成了FRAME_INT,在手册中的描述也和SOF中断几乎一样,但是手册里就是没有说它就是SOF中断。

经过小编实测和向同事确认,发现这个中断实际上并不完全等同于SOF中断,两者还是有一定区别的。本文就来探讨一下这个问题:

事情是这样的: 小编最近支持一个客户,客户的代码中涉及低功耗按键唤醒,USB Remote wakeup, 也需要用到SOF中断做为定时器来驱动上层app事件。

客户发现:当PC关机的时候,LPC5528被按键唤醒,唤醒后执行Remote Wakeup(实际就是MCU将USB总线设置为K states),因为这时候主机Host已经关机,USB总线上没有任何信号,永远维持的K states上,但是MCU却莫名其妙的进入了FRAME_INT中断,而且还是1ms的周期!

测试使用一个GPIO引脚——GPIO_SOF_EVT,每当进入FRAME_INT中断后,Toggle一次;测试波形如下图:

wKgZomUD0hWAdkeaAAIeWz69IlA125.png

这有点奇怪了。。。USB总线上没有任何包发过来,但是还是会进FRAME_INT中断!难道FRAME_INT中断不是SOF中断?

结果确实是这样。。经过和同事确认,FRAME_INT中断确实不是SOF中断,它只是和SOF中断有点像而已。当VBUS没有掉电且MCU执行Remote wakeup(Resume)的时候, FEAME_INT还是会”如期而至”。。他和SOF包没有必然联系。。。疑惑中

那么如果想用SOF中断咋办呢?有一个简单的办法:USB->INFO寄存器中的前11位为FRAME_NR,它记录了正确解码SOF的帧号,每当收到一个真正的SOF帧,FRAME_NR都会自加,所以在FRAME_INT中断中可以读入FRAME_NR来辅助判断,这次FRAME_INT到底是不是真正的SOF包到来:

wKgaomUD0heADqkpAAFisCdhq68565.png

代码如下所示:

wKgaomUD0hiADdzdAARJLrlrPKc409.png

补充:

小编同时也测试了HS-USB的FRAME_INT中断,其结论和FS是一样的,只不过HS的FRAME_INT中断是微帧,125us一次。

FRAME_INT中断在SDK中默认是关闭的,需要在INTEN寄存器中打开对应的标志位才可以使用。

到此为止,有必要进一步地思考一下,为什么这个USB的内部模块中,没有专门的SOF中断,却出现了这个与SOF有关,又不来源于SOF的FRAME_INT中断。

尽管没有与芯片设计人员沟通,但可以合理地推论,这个FRAME_INT中断是为SOF相关应用而设计的,之所以没有直接使用SOF作为触发源,是因为在USB主机休眠时,不再有SOF信号,而对于在主机休眠时仍需要周期中断源的USB应用而言,则需要使用其它定时器资源来实现相应功能,这样就会占用其它片上资源,又会增加软件调度的负担。

而在片内USB模块中,设计这样的机制,即可以在没有外部SOF信号时,继续维持周期性的中断,也可以在SOF信号恢复后,保持这个周期中断与SOF同步,即实现了SOF中断的功能,又兼顾了软件的实现与层次划分。

最后,这样的设计并不增加硬件的成本。

来源:恩智浦MCU加油站

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    59

    文章

    7435

    浏览量

    258183
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41025
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112040
收藏 人收藏

    评论

    相关推荐

    基于恩智浦LPC5500系列MCU的OKDO E1开发板详解

    OKDO E1 开发板作为恩智浦 LPC5500 系列开发平台中独特的一员,以其小巧的尺寸,高易用性收获了许多用户的高度关注。开发板仅 2 枚硬币大小,却集成了 LPC55S69 主芯片
    发表于 11-13 15:20 1436次阅读

    基于Cortex M33的LPC5500系列MCU主要功能特性介绍

    (内置闪存)进行实时执行,并通过Arm TrustZone-M保护资产。此外,LPC5500系列MCU共有7个可扩展的家族,提供多种封装和内存选项,还具有全面的MCUXpresso软件和工具生态系统
    发表于 11-13 16:06 2181次阅读
    基于Cortex M33的<b class='flag-5'>LPC5500</b>系列MCU主要功能特性介绍

    恩智浦LPC55S16 MCU获得了PSA 2级和SESIP 2级保证认证

    LPC55S16 MCU属于恩智浦EdgeVerse™计算和安全产品组合,是基于Arm® Cortex®-M33内核的通用LPC5500 MCU系列的成员。
    发表于 11-21 09:28 1608次阅读

    LPC55S16-EVK MCU用于工业应用!!!

    LPC55S16-EVK功能和应用LPC55S16-EVK开发板基于LPC55S1x MCU系列,这是基于Arm®Cortex®-M33的LPC5500系列MCU
    发表于 09-08 17:08

    LPC55S69 Flashmagic不编程的原因?

    到我的主板。(这也为我的 PCB 供电)我遵循了 flashmagic 的设置:选择 USB LPC55S69。十六进制文件。设备 LPC55S69(USB
    发表于 03-15 07:54

    LPC5500 Flash过度编程是否可行?

    我了解 LPC5500 处理器具有带 ECC 的闪存,页面大小为 512 字节,用于擦除和编程。 在 LPC55S6x/LPC55S2x 用户手册的 5.7.13 ECC 部分,我发现它说 由于
    发表于 06-01 06:56

    INT0中断实验

    INT0中断实验。 1、按键中断实验。低电平中断,在中断中改变PB1电平状态。 2、内部1 M晶振,程序采用单任务方式,
    发表于 06-30 11:22 2889次阅读

    Proteus之 INT0和INT1两个中断的应用

    Proteus之 INT0和INT1两个中断的应用,很好的Proteus资料,快来下载吧。
    发表于 04-18 15:34 0次下载

    基于8051的Proteus仿真-INT0及INT1中断计数

    基于8051的Proteus仿真-INT0及INT1中断计数
    发表于 09-01 23:29 33次下载

    安全、高能、低耗!NXP正式开始量产LPC551x

    LPC551x/S1x作为系列中的入门级产品,提供出色的能效比的同时,依然继承了LPC5500系列的诸多安全功能。使其除了在物联网应用中游刃有余,还能扩展应用到消费类及工业自动化领域。
    的头像 发表于 06-03 11:25 4380次阅读

    51单片机之外部中断方式 ——— INT0 中断

    51单片机之外部中断方式 ——— INT0 中断
    发表于 11-22 11:51 146次下载
    51单片机之外部<b class='flag-5'>中断</b>方式 ———  <b class='flag-5'>INT</b>0 <b class='flag-5'>中断</b>

    串口DMA发送+中断接收的例程

    LPC5500的SDK中提供了非常丰富的串口例程(如下图所示)。
    的头像 发表于 07-21 09:14 2121次阅读

    LPC5500USBFRAME_INT中断问题

    这个中断 ”感觉好像就是SOF中断”,似乎只是名字换成了FRAME_INT,在手册中的描述也和SOF中断几乎一样,但是手册里就是没有说它就是SOF
    发表于 12-15 10:38 323次阅读

    STC单片机INT0-INT1-外中断测试源代码

    STC单片机INT0-INT1-外中断测试源代码
    发表于 05-17 15:08 0次下载

    LPC5500_SDK例程:串口DMA发送+中断接收

    LPC5500_SDK例程:串口DMA发送+中断接收
    的头像 发表于 10-30 16:59 527次阅读
    <b class='flag-5'>LPC5500</b>_SDK例程:串口DMA发送+<b class='flag-5'>中断</b>接收