6个帖子/ 0新
最后一篇
Kostakis.
离线
最后一次露面:2年11个月前
加入:2015-01-20 16:15
ADC中断

你好。是否有使用ADC中断的例子?

vesan.
离线
最后一次露面:5年5个月前
格鲁鲁 掌握
加入:2014-06-26 08:49
你好Kostakis,

你好Kostakis,

我并不完全确定,但如果你看到了亚军文件boot_vectors.s.您可以看到它出口导出adc_handler [弱]

  1. 只需在那里实现它,您可以在驱动程序(?)文件中使用此函数:

    void adc_handler(void){
    uint16_t转换= getword16(gp_adc_result_reg);
    //用转换做些东西,也许传递给其他功能等......
    setword16(gp_adc_clear_int_reg,0x0000);//我认为应该清除中断
    }
  2. 启用ADC中断:

    nvic_setpriority(ADC_IRQN,2);
    nvic_enableirq(ADC_IRQN);
  3. 初始化ADC(也许在periph_setup.c.?):

    adc_init(gp_adc_se,0,gp_adc_attn3x);//单一结束的3x extentuation,例如
    setbits16(gp_adc_ctrl_reg,gp_adc_mint,1);//重要或以其他方式中断将被屏蔽
  4. 然后,使用ADC进行读取:

    setBits16(gp_adc_ctrl_reg,gp_adc_start,1);

我并不完全确定是否缺少某些东西/不完整。也许您应该在执行处理程序函数时禁用ADC中断。

谢谢!

Bharath.
离线
最后一次露面:1年3个月前
加入:2016-04-14 07:03
我想使用它

我想使用相同的方法。
你能告诉我什么是gp_adc_clk_sel和如何设置它?
我尝试了上面的代码,它不会产生任何中断。

请帮帮我。

谢谢
Bharath.

mt_dialog.
离线
最后一次露面:1个月37分钟前
职员
加入:2015-06-08 11:34
嗨bharath,

嗨bharath,

上面提到的步骤是正确的,并且应该触发中断,确保您为指定的中断启用了NVIC,并确保SetBits16(GP_ADC_CTRL_REG,GP_ADC_MINT,1)启用中断,调用启用在拍摄测量之前的中断,这应该触发中断。

谢谢mt_dialog.

Bharath.
离线
最后一次露面:1年3个月前
加入:2016-04-14 07:03
它只触发了中断

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

谢谢
Bharath.

mt_dialog.
离线
最后一次露面:1个月37分钟前
职员
加入:2015-06-08 11:34
嗨bharath,

嗨bharath,

您必须在每次想要进行测量时立即启动ADC转换,ADC没有免费运行。如果您检查580数据表,则会看到转换后的GP_ADC_START寄存器翻转到0,中断位设置。

谢谢mt_dialog.