硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6364|回复: 7
收起左侧

[ADC] AD7606在SPI下如何开启200K

[复制链接]

16

主题

18

回帖

66

积分

初级会员

积分
66
发表于 2021-4-14 23:11:22 | 显示全部楼层 |阅读模式
本人在使用SPI驱动AD7606过程中,最一开始使用的是没有DMA的硬件的SPI,用外部中断检测BUSY引脚,20k可以正常采样,但是开到200k的情况下就不行了。DEBUG查看,发现中断里面SPI读取时间就占用了40us,200k下最多只能5us,于是确定问题在于SPI读取速度跟不上,于是考虑开启SPI的DMA,单独开启RX的DMA会直接卡死,开启TX的DMA后问题解决了,DMA如果开启单次,他只有第一次工作不知为什么,再次调用HAL_SPI_Receive_DMA他不再更新数据,于是把DMA设置成了循环,但是数据出现了混乱。现在不知道该怎么解决。
开发使用的是,F1,cubemx。SPI工作在主全双工。还有就是如果让SPI工作在主只接受模式下,receive会很慢,1s多才进入一次中断,估计那里卡死等待了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-4-15 08:29:25 | 显示全部楼层
1、首先你这种方式用不用DMA都一样,因为仅仅是每次busy触发后读取的这一次使用DMA方式。正确的姿势应该是连续触发,连续采集。

2、然后就是完全处理不过来的,你可以简单换算下,200Ksps * 16bit * 8  = 25.6MHz,你用F1系列的,由于必须二分频下工作,最高也就是36MHz,处理起来捉襟见肘,基本没有余量留下来干别的了。

可以试试我这个方式,你仅需配置好SPI,然后中断里面连续读取,看看最大可以拉到多大的速度,这个和DMA差不多的

加快SPI连续读写速度的配置方式
http://www.armbbs.cn/forum.php?m ... id=91095&fromuid=58
(出处: 硬汉嵌入式论坛)


回复

使用道具 举报

16

主题

18

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2021-4-15 17:30:29 | 显示全部楼层
eric2013 发表于 2021-4-15 08:29
1、首先你这种方式用不用DMA都一样,因为仅仅是每次busy触发后读取的这一次使用DMA方式。正确的姿势应该是 ...

试了下,用寄存器操作来代替HAL_SPI_Receive,他会卡死,SR的RXNE一直不被置1
  1. static uint8_t Rece (void)
  2. {
  3.         /* 通过SPI接口读写一个字节 */
  4.         SPI1->DR = 0x00;

  5.         /* 等待数据接收完毕 */
  6.         while (!(SPI1->SR & 1<<0));//卡在这里
  7.         return (SPI1->DR);
  8. }
复制代码

请问是哪里还需要被配置吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-4-16 10:55:02 | 显示全部楼层
朗星骇客 发表于 2021-4-15 17:30
试了下,用寄存器操作来代替HAL_SPI_Receive,他会卡死,SR的RXNE一直不被置1

请问是哪里还需要被配置 ...

接收正常使能了没。
回复

使用道具 举报

16

主题

18

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2021-4-16 23:19:17 | 显示全部楼层
eric2013 发表于 2021-4-16 10:55
接收正常使能了没。

确实忘了,是_HAL_SPI_ENABLE(&hspi1)对吗?
还有就是H7的情况下,怎么使用寄存器加速呢?他的数据寄存器都变了,不太熟悉。
  1. uint8_t ad7606_ReadBytes()
  2. {
  3.         SPI1->TXDR = 0x00;

  4.         /* 等待数据接收完毕 */
  5.         while (!(SPI1->SR & 1<<0));//卡在这里
  6.         return (SPI1->RXDR);         
  7. }
复制代码
这样是否就可以了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-4-17 08:41:36 | 显示全部楼层
朗星骇客 发表于 2021-4-16 23:19
确实忘了,是_HAL_SPI_ENABLE(&hspi1)对吗?
还有就是H7的情况下,怎么使用寄存器加速呢?他的数据寄存 ...

直接给你附上完整的配置,这个是早期FlashFS的SPI Flash驱动加速版。你看下就会玩了
回复

使用道具 举报

16

主题

18

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2021-4-21 19:54:29 | 显示全部楼层
多谢硬汉,已经成功开启200k。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2021-6-16 15:11:55 | 显示全部楼层
楼主能否分享一下代码我也是用spi读取AD7607 想提速到200k
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 06:20 , Processed in 0.175514 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表