[求助] SAM R21ADC转换卡死

lzjsqn   2015-8-26 11:21 楼主
R21ADC卡死在adc_module->SWTRIG.reg |= ADC_SWTRIG_START;语句后,这个语句是ASF自带的adc_start_conversion里面的,但是我用打印信息的方式调试,发现在这条语句之后程序就不往下执行了。我的外设是一个脉搏传感器,他的供电电压要求是3.3--5V,我直接接在了GPIO的VCC引脚,然后使用的还PA06引脚作为模拟通道,请大家帮我指条明路,用示波器测传感器是好的

回复评论 (12)

R21的ADC转换还好吧,是不是那个地方配置不对?
点赞  2015-8-26 11:43
引用: dcexpert 发表于 2015-8-26 11:43
R21的ADC转换还好吧,是不是那个地方配置不对?

我什么都没动过,就是加了IO重定向以及delay模块,我在想是不是要我手动加入对ADC中断的处理函数啊,是不是执行之后,就表示要调用ADC中断处理函数,但是没有清除中断标识什么的,可是我觉得Atmel的工程师应该把这些都做好了的啊!你可以把你的实验代码工程发给我吗?谢谢了
点赞  2015-8-26 11:59
引用: lzjsqn 发表于 2015-8-26 11:59
我什么都没动过,就是加了IO重定向以及delay模块,我在想是不是要我手动加入对ADC中断的处理函数啊,是不 ...

先用查询的方式进行ADC转换试试。AS6中有R21的ADC例程,不需要修改什么,只要选好通道就可以。参考我那个帖子就可以很快试验出来。

点赞  2015-8-26 12:07
引用: dcexpert 发表于 2015-8-26 12:07
先用查询的方式进行ADC转换试试。AS6中有R21的ADC例程,不需要修改什么,只要选好通道就可以。参考我那个 ...

好的,我下吃过饭试试看!不懂的地方还要麻烦您!谢谢了
点赞  2015-8-26 12:21
引用: lzjsqn 发表于 2015-8-26 12:21
好的,我下吃过饭试试看!不懂的地方还要麻烦您!谢谢了

int main(void)
{
        system_init();

        delay_init();
//! [setup_init]
        configure_adc();
//! [setup_init]

//! [main]
//! [start_conv]
        adc_start_conversion(&adc_instance);
//! [start_conv]

//! [get_res]
        uint16_t result;
        sio2host_init();
        printf("Hello\r\n");
        do {
                /* Wait for conversion to be done and read out result */
        } while (adc_read(&adc_instance, &result) == STATUS_BUSY);
//! [get_res]
        printf("Fuck\r\n");
//! [inf_loop]
        while (1) {
                /* Infinite loop
                 */
               
                delay_cycles_ms(5000);
                do {
                        /* Wait for conversion to be done and read out result */
                } while (adc_read(&adc_instance, &result) == STATUS_BUSY);
//! [get_res]
                printf("%d\r\n",result);
               
        }
//! [inf_loop]
//! [main]
}
点赞  2015-8-26 12:30
引用: dcexpert 发表于 2015-8-26 12:07
先用查询的方式进行ADC转换试试。AS6中有R21的ADC例程,不需要修改什么,只要选好通道就可以。参考我那个 ...

还是不可以,就是卡死
点赞  2015-8-26 12:31
引用: lzjsqn 发表于 2015-8-26 12:31
还是不可以,就是卡死

卡在什么地方了?我晚上回去把以前程序找出来给你参考一下。你也可以把完整程序发给我。
点赞  2015-8-26 14:10
引用: dcexpert 发表于 2015-8-26 14:10
卡在什么地方了?我晚上回去把以前程序找出来给你参考一下。你也可以把完整程序发给我。

我的QQ是2358098734,楼主你的呢?我好发代码给你,我现在轮询的方式可以了,但是callback的方式还是不行。。。。
点赞  2015-8-26 17:48
引用: lzjsqn 发表于 2015-8-26 17:48
我的QQ是2358098734,楼主你的呢?我好发代码给你,我现在轮询的方式可以了,但是callback的方式还是不行 ...

我不用QQ了。Callback方式没有怎么用,因为ADC速度够快了,一点延时影响不大的。
点赞  2015-8-26 21:18
引用: dcexpert 发表于 2015-8-26 21:18
我不用QQ了。Callback方式没有怎么用,因为ADC速度够快了,一点延时影响不大的。

嗯嗯,好的!我发现他就是没有进入adc_interrupt_hander函数!先用轮询吧
点赞  2015-8-27 00:25
引用: dcexpert 发表于 2015-8-26 21:18
我不用QQ了。Callback方式没有怎么用,因为ADC速度够快了,一点延时影响不大的。

谢谢了
点赞  2015-8-27 00:25
请问一个ADC的问题,我现在用SAM R21采集两路AD信号,但是从自带的例程中只能采集一路,如何采集两路AD呢,我已经在给的例程中(之前是PIN06引脚)配置好了,现在加上了PIN07引脚,但是程序执行后,只有PIN06引脚的数组中有数,PIN07没有转换!不知道为何?请大神帮忙看一下
点赞  2015-9-2 22:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复