跳到主要内容

模数转换器中断

6年前

邮寄人科斯塔基斯0分 5份答复
0票

你好有没有使用adc中断的例子?

6年前

维桑 0分

你好,科斯塔基斯,

我不完全确定,但是如果你看到asm文件boot_vectors.s你可以看到它是出口的导出ADC_处理程序[弱]

  1. 您可以在驱动程序(?)文件中使用此函数,方法如下:

    无效ADC_处理程序(无效){
    uint16\u t conversion=GetWord16(GP\u ADC\u RESULT\u REG);
    //做必要的事情和转换,可能传递到其他功能等。。。
    SetWord16(GP_ADC_CLEAR_INT_REG,0x0000);//我认为应该排除干扰
    }
  2. 启用ADC中断:

    NVIC_设置优先级(ADC_IRQn,2);
    NVIC_EnableIRQ(ADC_IRQn);
  3. 初始化ADC(可能在periph_setup.c?):

    adc_init(GP_adc_SE,0,GP_adc_ATTN3X);//例如,对于单端3倍注意力
    SetBits16(GP_ADC_CTRL_REG,GP_ADC_MINT,1);//重要,否则中断将被屏蔽
  4. 然后,使用ADC执行读取:

    设置16(GP\U ADC\U CTRL\U REG,GP\U ADC\U START,1);

我不完全确定是否有什么东西丢失/不完整。也许您应该在执行处理程序函数时禁用adc中断。

谢谢

5年前

巴拉斯 0分

我想用同样的方法。
你能告诉我什么是GP_ADC_CLK_SEL以及如何设置它吗?
我尝试了上面的代码,它没有产生任何中断。

请帮帮我。

谢谢
巴拉斯

5年前

MT_对话框 -30分

嗨,巴拉斯,

上面提到的步骤是正确的,应该触发一个中断,确保您已经为指定的中断启用了NVIC,还确保通过SetBits16(GP_ADC_CTRL_REG,GP_ADC_MINT,1)启用了中断,在进行测量之前调用中断的启用,这应该触发中断。

谢谢你的对话

5年前

巴拉斯 0分

它只触发了一次中断。为什么不重复?
如何使它以特定的速率重复?

谢谢
巴拉斯

5年前

MT_对话框 -30分

嗨,巴拉斯,

每次进行测量时,必须明确启动ADC转换,ADC不会自由运行。如果您查看580数据表,您将看到转换结束后GP_ADC_开始寄存器翻转为0,并且设置了中断位。

谢谢你的对话