硬汉嵌入式论坛

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

[有问必答] 使能中断,但不指定中断函数,查询中断标志的方法,靠谱吗?

[复制链接]

45

主题

70

回帖

205

积分

高级会员

积分
205
发表于 2021-3-25 08:46:25 | 显示全部楼层 |阅读模式
可能是我的知识盲点,我之前一直以为使能了中断,就要有对应的中断函数。
但是今天看到一种新用法,检测DMA传输完成标志。使能了DMA中断,但是不执行NVIC那一套指定中断函数的函数。然后使用查询中断标志位的方式,等待传输完成。实测可行!
想问这种方法有问题吗,或者说本来就有这种用法啊?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2021-3-25 09:24:17 | 显示全部楼层
开一个中断,需要配置外设自己的中断寄存器同时,还要配置NVIC。
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2021-3-25 11:23:03 | 显示全部楼层
eric2013 发表于 2021-3-25 09:24
开一个中断,需要配置外设自己的中断寄存器同时,还要配置NVIC。

我以前也是这么认为的。
但有个代码这样写。
void ADC_DMA_Init(void)
{
  //DMA一些配置
   DMA_Cmd(DMA2_Stream0, ENABLE);
    /*清除一次DMA中断标志*/
    DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TC);
    /* DMA中断开 */
    DMA_ITConfig(DMA2_Stream0, DMA_IT_TC, ENABLE);
}
然后没有NVIC配置,这样就不用写中断函数了。

然后写一个查询dma完成中断标志 作为结束标志 这个函数在别的函数调用,
int wait_convert_complete(void)
{
    uint16_t timeout = 0;
   
    while(DMA_GetITStatus(DMA2_Stream0,DMA_IT_TCIF0) == RESET)
    {
        delay_us(1);
        timeout++;
        if(timeout > 10)
            return -1;
    };
    DMA_ClearITPendingBit(DMA2_Stream0,DMA_IT_TCIF0);
    return timeout;
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2021-3-25 11:38:44 | 显示全部楼层
chinashaoshu 发表于 2021-3-25 11:23
我以前也是这么认为的。
但有个代码这样写。
void ADC_DMA_Init(void)

没问题,参考手册的说明使能中断就会有相应的标志,并没有要求NVIC。
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2021-3-25 14:27:28 | 显示全部楼层
eric2013 发表于 2021-3-25 11:38
没问题,参考手册的说明使能中断就会有相应的标志,并没有要求NVIC。

那么,ADC+DMA的方式,如果不使用DMA中断,如何判断DMA传输完成了呢?
我试了DMA完成标志,和DMA2_stream0->NDTR==0 都不行。硬汉老师有没有方法。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2021-3-25 16:02:14 | 显示全部楼层
chinashaoshu 发表于 2021-3-25 14:27
那么,ADC+DMA的方式,如果不使用DMA中断,如何判断DMA传输完成了呢?
我试了DMA完成标志,和DMA2_strea ...

DMA双缓冲啊,看他当前使用的那个缓冲,是不是好思路,好办法。
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2021-3-26 11:50:37 | 显示全部楼层
中断标志位的使用可以:1. 轮询(不带后缀),2. 中断(带_IT后缀), 3. DMA(带_DMA后缀)。。。HAL库都有提供,怎么样用取决于程序员
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 15:21 , Processed in 0.040743 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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