今天在测试板子的时候发现一个问题:
我用的at90can128芯片,使用ADC采集电压值,用CAN接收、发送数据,发现可以采集到电压值,也可以发送CAN消息,但是就是不能接收,开始我以为是用的CAN芯片问题,后来我下载了另一个不带ADC功能的程序,发现可以接收、发送CAN消息。
void Adc_init(void)
{
ADCSRA=(1<<ADEN)|0x06; //使能ADC,时钟64分频
ADCSRA|=(1<<ADIE); //使能ADC中断
ADCSRA|=(1<<ADSC); //启动AD转换
}
于是,我在原程序中,注释掉所有有关ADC的语句,发现可以发送、也可以接收CAN消息。随后,我将有关ADC的语句逐条注释掉,发现只要ADC开始转换,程序就自动复位了。如果把开始转换的语句注释掉,也就是上面程序中的 ADCSRA|=(1<<ADSC); ,只要将这条注释掉,就可以接收CAN消息了,但是这样一来AD功能就没有了。
问下各位大神,是否是AT90CAN128芯片的ADC与CAN接收冲突? 如果不是,问题在哪里?有没有解决方法? 谢谢~~ |