Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从AtMega328迁移到AtMega644p_C_Embedded_Avr_Cpu Registers_Atmega - Fatal编程技术网

C 从AtMega328迁移到AtMega644p

C 从AtMega328迁移到AtMega644p,c,embedded,avr,cpu-registers,atmega,C,Embedded,Avr,Cpu Registers,Atmega,我有一个机器人,它使用AtMega 328/L 40pin,直到最近我需要更多的资源,所以我转向了AtMega 644p 这两个寄存器和位名称是不同的,老实说,我就是不能让新的正常工作。我确信我已经遵循了数据表中所述的变化,但我觉得我的知识不足阻碍了我的工作 下面是328函数,它确实起了作用: { portInit(); // Setup port directions and initial values. // This is the most imp

我有一个机器人,它使用AtMega 328/L 40pin,直到最近我需要更多的资源,所以我转向了AtMega 644p

这两个寄存器和位名称是不同的,老实说,我就是不能让新的正常工作。我确信我已经遵循了数据表中所述的变化,但我觉得我的知识不足阻碍了我的工作

下面是328函数,它确实起了作用:

{
portInit();     // Setup port directions and initial values.
                // This is the most important step!

cli();          // Disable global interrupts.

// UART:
UBRRH = UBRR_BAUD_LOW >> 8; // Setup UART: Baud is Low Speed
UBRRL = (uint8_t) UBRR_BAUD_LOW;
UCSRA = 0x00;
     UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
     UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);

// Initialize ADC:
ADMUX = 0; //external reference 
ADCSRA = (0<<ADIE) | (0<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADIF);
SFIOR = 0;

// Initialize External interrupts - all disabled:
MCUCR = (1 << ISC11) | (1 << ISC10) | (1 << ISC01) | (1 << ISC00);
GICR = (0 << INT2) | (0 << INT1) | (0 << INT0);
MCUCSR = (0 << ISC2);


// 10kHz Timer 0:
TCCR0 =   (0 << WGM00) 
        | (1 << WGM01) 
        | (0 << COM00) 
        | (0 << COM01) 
        | (0 << CS02)  
        | (1 << CS01) 
        | (0 << CS00);
OCR0  = 199;


//Timer 1 is free for your application!


// Timer 2 - used for beeper:
TCCR2 =  0; 
OCR2  = 0xFF; 

// Enable timer interrupts:
TIMSK =   (1 << OCIE0); 

sei(); // Enable Global Interrupts
}
下面是我正在尝试使用的代码:

{
portInit();     // Setup port directions and initial values.
                // This is the most important step!


cli();          // Disable global interrupts.


     // UART:
//UBRRH = UBRR_BAUD_LOW >> 8;   // Setup UART: Baud is Low Speed
//UBRR0L = (uint8_t) UBRR_BAUD_LOW;
//UCSR0A = 0x00;
     //UCSR0C = ((1<<UCSZ00));
     //UCSR0B = (1 << TXEN0) | (1 << RXEN0) | (1 << RXCIE0);

// Initialize ADC:
ADMUX = 0; //external reference 
ADCSRA = (0<<ADIE) | (0<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADIF);
ADCSRB = 0;

// Initialize External interrupts - all disabled:
//MCUCR 
SMCR = (1 << ISC11) | (1 << ISC10) | (1 << ISC01) | (1 << ISC00);
EIMSK = (0 << INT2) | (0 << INT1) | (0 << INT0);
MCUSR = (0 << ISC20);


// 10kHz Timer 0:
TCCR0A =   (0 << WGM00) 
        | (1 << WGM01) 
        | (0 << COM0A0) 
        | (0 << COM0A1);

TCCR0B = (0 << CS02)  
        | (1 << CS01) 
        | (0 << CS00);
OCR0A  = 199;
/*
Timer 1 is free for your application!
*/

// Timer 2 - used for beeper:
TCCR2A =  0; 
OCR2A  = 0xFF; 

// Enable timer interrupts:
TIMSK0 =   (1 << OCIE0A); 

sei(); // Enable Global Interrupts
}
我从来没有与这些工作过,所以我正在尽我最大的努力

有没有什么明显的迹象表明我做错了

问候
Lee

什么是无效的,你如何知道/你想知道什么是无效的?你有没有尝试过一个全新的测试项目,你只需要设置你想要使用的外围设备,这样你就可以知道应该如何设置它?顺便说一句,我添加了嵌入式标签。嗨,tinman,我刚刚把芯片放进去,然后试了试,我相信我的问题与TMR有关,因为我使用的定时寻呼机每次使用时都会崩溃。再加上它不再喜欢TWI了。我将在试验板上进行一次新的试验。我知道它正在运行,因为我有一些LED闪烁,但没有其他工作,只是停止。对不起,我是指一个新的软件项目,而不是一个新的董事会。然后试着集中精力让计时器2工作。您的问题很大,涵盖了您使用的所有外围设备,并且遗漏了大量信息。例如,计时器2正在运行,但似乎没有驱动输出,也没有使用中断。因此,问题代码可能在其他地方。如果你能把它简化为对单个外设的理解,你就有了更完整的代码,可以在这里发布和询问。很高兴听到你修复了它。你应该将你的答案作为答案发布并接受它,这样你的问题就会显示为已回答并已解决,这可能会对未来的读者有所帮助。您可以在这里这样做,但我认为在提出问题和自己回答问题之间有时间限制。@user1167501,发布您遗漏的内容或解释出错的原因通常对其他人很有价值。另外,electronics.stackexchange.com是这类问题的好去处。它的哪些方面不起作用?您如何知道/您希望知道它不起作用?你有没有尝试过一个全新的测试项目,你只需要设置你想要使用的外围设备,这样你就可以知道应该如何设置它?顺便说一句,我添加了嵌入式标签。嗨,tinman,我刚刚把芯片放进去,然后试了试,我相信我的问题与TMR有关,因为我使用的定时寻呼机每次使用时都会崩溃。再加上它不再喜欢TWI了。我将在试验板上进行一次新的试验。我知道它正在运行,因为我有一些LED闪烁,但没有其他工作,只是停止。对不起,我是指一个新的软件项目,而不是一个新的董事会。然后试着集中精力让计时器2工作。您的问题很大,涵盖了您使用的所有外围设备,并且遗漏了大量信息。例如,计时器2正在运行,但似乎没有驱动输出,也没有使用中断。因此,问题代码可能在其他地方。如果你能把它简化为对单个外设的理解,你就有了更完整的代码,可以在这里发布和询问。很高兴听到你修复了它。你应该将你的答案作为答案发布并接受它,这样你的问题就会显示为已回答并已解决,这可能会对未来的读者有所帮助。您可以在这里这样做,但我认为在提出问题和自己回答问题之间有时间限制。@user1167501,发布您遗漏的内容或解释出错的原因通常对其他人很有价值。此外,electronics.stackexchange.com是解决此类问题的好去处。