首页 > 其他分享 >I2S中断问题记录

I2S中断问题记录

时间:2024-02-04 15:46:36浏览次数:30  
标签:DMA iis 记录 中断 I2S flag RXNEIE

之前写过一篇I2S+DMA的使用(I2S通信工程建立 - kkk123456** - 博客园 (cnblogs.com)

这次又用到了I2S+DMA,但是和上次不同,这次DMA使用Normal模式,我想等I2S接收完成之后再使用DMA把数据从外设搬到内存中

配置修改如下:

生成工程后,定义了一个标志位 iis_flag,在I2S接收回调函数里将iis_flag置1。在主循环中判断当iis_flag为1时,启动dma接收。主循环代码如下:

  while (1)
  {
      if(iis_flag == 1)
      {
          HAL_I2S_Receive_DMA(&hi2s2,iis_rec,64);
          iis_flag = 0;
      }
  }

I2S接收中断回调函数代码如下:

void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s)
{
    iis_flag =1;
}

进入debug,在“ iis_flag=0; ”处打断点, 发现没有程序没有执行到这里。觉得很奇怪,以为时中断没进去。于是把断点打到中断回调函数里。发现中断进去了,但是没有执行主循环的函数。

打开寄存器查看,中断标志位 RXNEIE,发现此位一直都是1,猜想可能是卡在中断没出去。

 于是在I2S中断回调函数里,手动将接收中断标志位清零。

void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s)
{
    SPI2->CR2 &= ~(1 << 6);
    iis_flag =1;
}

然后问题就解决了。

 

参考手册知识补充:

I2S和SPI共用中断,所以有些寄存器也是共用的。

首先我们看到章节28.4.9中有描述I2S中断相关的事件及标志位和使能控制bit

 可以看到RXNEIE是使能接收中断位。于是我们会在章节28.5.2中看到SPI control register 2中有RXNEIE的描述:

 大致意思就是,RXNE flag置1的时候,此时RXNEIE会被置1,然后产生一个中断

更详细的解释在章节25.4.4 I2S master mode中:

 

标签:DMA,iis,记录,中断,I2S,flag,RXNEIE
From: https://www.cnblogs.com/Kim-blog/p/18006339

相关文章

  • 2024年1月玩客云刷Armbian_20.11_Aml-s812_5.9.0-支持USB-WIFI最终完美版记录
    固件:https://www.right.com.cn/FORUM/thread-4103842-1-1.html写入emmc后aptupdateaptupgradee用armbian-config连接wifi,设置WiFiIP地址安装omv5(需要科学)参照:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=3049724&highlight=omv51.安装基础依赖(该步骤......
  • mit6.824lab2D-Debug记录
    1.死锁要提交快照的时候由于没有人取走applyCh通道里面的东西,导致死锁。具体解释:2D的测试代码中在日志达到一定大小时会调用snapshot,该函数需要申请rf.mu这个互斥锁。而在提交普通的日志条目时,错误地没有先释放锁,导致snapshot无法进行下去,相关的进程卡在rf.mu这个锁上,无法完成......
  • 安卓开发九——长按删除记录和定时刷新页面
    这里我们完成了账本条目数据的查看方法和账本条目的添加,但是当我们发现账本的数据有错误是,我们目前还不能删除。于是我们接下来要完成条目的删除的功能。这里我们在查看某个的账本的明细的页面来操作,我这里采用设置长按下删除。listView.setOnItemLongClickListener(new......
  • 记录--实现一个鼠标框选的功能,要怎么实现和设计 api?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言前两年在一家做电商的公司做了一个需求:鼠标框选商品卡片,开始拖拽的时候合成一个然后改变位置,页面上有几千个所以还要结合虚拟列表。当时不知道怎么做,就在github上到处找现成的库,最后找到了react-selectable......
  • EasyCVR视频融合平台如何助力执法记录仪高效使用
    旭帆科技的EasyCVR平台可接入的设备除了常见的智能分析网关与摄像头以外,还可通过GB28181协议接入执法记录仪,实现对执法过程的全称监控与录像,并对执法轨迹与路径进行调阅回看。那么,如何做到执法记录仪高效使用呢?由于执法记录仪支持GB28181协议,所以需要使用GB28181注册到EasyCVR......
  • Postman学习第2天心得记录
    经过昨天的学习,我对Postman有了基本的了解。今天,我进一步深入探索了它的功能和用法。今天的学习重点是如何利用环境变量、集合和测试脚本提升测试效率。环境变量允许我为不同的环境(如开发、测试、生产)设置不同的值,这样我就可以在不更改代码的情况下轻松切换环境。通过创建集合,我可......
  • 【路由器】电信光猫中兴 F7010C 折腾记录
    目录问题描述解锁超管密码前言配置安卓抓包环境抓包获取超管密码IPv6配置光猫拨号改用SLAAC路由器配置wan6配置wan配置lan配置验证参考资料问题描述近期家里更新了千兆宽带,电信光猫换成了中兴F7010C,默认光猫拨号,安装人员不给改桥接,而且路由器还获取不到IPv6地址尝试过......
  • electron 安装爬坑记录
    今天在electron官网查看教程时,决定跟着教程写一个demo,本以为很简单的一个过程,没想到出门就遇见了坑~1.首先,按照官网先下载electron包,执行命令如下npminstall--save-develectron结果如下图,根据提示,应该是网络不通。于是乎,将网改为WiFi,再试,依然不行;又把science上网打开,可......
  • 【2024】jmeter分布式压测记录
    一、分布式压测配置分布式压测分为一台master机器和多台slave机器,master机器主要用于控制多台slave机器运行并汇总运行结果。当然,压力机资源紧张时,master机器只做控制机有点浪费,也可以通过配置让master机器也作为施压机,既做控制机又做施压机。1.配置准备工作master配置:jmet......
  • 记录--前端金额运算精度丢失问题及解决方案
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言前端开发中难免会遇到价格和金额计算的需求,这类需求所要计算的数值大多数情况下是要求精确到小数点后的多少位。但是因为JS语言本身的缺陷,在处理浮点数的运算时会出现一些奇怪的问题,导致计算不精确。本文尝试......