PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : بوت لودر



alighasemi72
28-01-2016, 10:19
سلام
میخوای یک برنامه بوت لودر خاص برای اتمگا 128 بنویسم، ولی برنامه اصلا چیزی رو نمینویسه روی حافظه فلش، برنامه مشابه ( با تغییر متغییرها و آدرس حافظه و .. ) روی اتمگا 8 و 32 کار کرده. ممنون میشم اگه راهنمایی کنید.




#define F_CPU 8000000UL




#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <inttypes.h>
#include <avr/boot.h>
#include <avr/wdt.h>
#include <avr/eeprom.h>




void boot_program_page (uint32_t page, uint8_t *buf);


int main(void)
{
_delay_ms(100);
uint8_t A [ SPM_PAGESIZE ]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0};
_delay_ms(100);
boot_program_page(0,A);
_delay_ms(100);
DDRC = 255;
PORTC = 1;
while (1)
{
}
}


void boot_program_page (uint32_t page, uint8_t *buf)
{
uint16_t i;
uint8_t sreg;


// Disable interrupts.


sreg = SREG;
cli();

eeprom_busy_wait ();


boot_page_erase (page);
boot_spm_busy_wait (); // Wait until the memory is erased.


for (i=0; i<SPM_PAGESIZE; i+=2)
{
// Set up little-endian word.


uint16_t w = *buf++;
w += (*buf++) << 8;

boot_page_fill (page + i, w);
}


boot_page_write (page); // Store buffer in flash page.
boot_spm_busy_wait(); // Wait until the memory is written.


// Reenable RWW-section again. We need this if we want to jump back
// to the application after bootloading.


boot_rww_enable ();


// Re-enable interrupts (if they were ever enabled).


SREG = sreg;
}