| 566 |
|
|
| 567 |
#endif |
#endif |
| 568 |
|
|
|
#define __boot_eeprom_spm_safe(func, address, data) \ |
|
|
do { \ |
|
|
boot_spm_busy_wait(); \ |
|
|
eeprom_busy_wait(); \ |
|
|
func (address, data); \ |
|
|
} while (0) |
|
|
|
|
| 569 |
/** \ingroup avr_boot |
/** \ingroup avr_boot |
| 570 |
|
|
| 571 |
Same as boot_page_fill() except it waits for eeprom and spm operations to |
Same as boot_page_fill() except it waits for eeprom and spm operations to |
| 572 |
complete before filling the page. */ |
complete before filling the page. */ |
| 573 |
|
|
| 574 |
#define boot_page_fill_safe(address, data) \ |
#define boot_page_fill_safe(address, data) \ |
| 575 |
__boot_eeprom_spm_safe (boot_page_fill, address, data) |
do { \ |
| 576 |
|
boot_spm_busy_wait(); \ |
| 577 |
|
eeprom_busy_wait(); \ |
| 578 |
|
boot_page_fill(address, data); \ |
| 579 |
|
} while (0) |
| 580 |
|
|
| 581 |
/** \ingroup avr_boot |
/** \ingroup avr_boot |
| 582 |
|
|
| 583 |
Same as boot_page_erase() except it waits for eeprom and spm operations to |
Same as boot_page_erase() except it waits for eeprom and spm operations to |
| 584 |
complete before erasing the page. */ |
complete before erasing the page. */ |
| 585 |
|
|
| 586 |
#define boot_page_erase_safe(address, data) \ |
#define boot_page_erase_safe(address) \ |
| 587 |
__boot_eeprom_spm_safe (boot_page_erase, address, data) |
do { \ |
| 588 |
|
boot_spm_busy_wait(); \ |
| 589 |
|
eeprom_busy_wait(); \ |
| 590 |
|
boot_page_erase (address); \ |
| 591 |
|
} while (0) |
| 592 |
|
|
| 593 |
/** \ingroup avr_boot |
/** \ingroup avr_boot |
| 594 |
|
|
| 595 |
Same as boot_page_write() except it waits for eeprom and spm operations to |
Same as boot_page_write() except it waits for eeprom and spm operations to |
| 596 |
complete before writing the page. */ |
complete before writing the page. */ |
| 597 |
|
|
| 598 |
#define boot_page_write_safe(address, data) \ |
#define boot_page_write_safe(address) \ |
| 599 |
__boot_eeprom_spm_safe (boot_page_wrte, address, data) |
do { \ |
| 600 |
|
boot_spm_busy_wait(); \ |
| 601 |
|
eeprom_busy_wait(); \ |
| 602 |
|
boot_page_write (address); \ |
| 603 |
|
} while (0) |
| 604 |
|
|
| 605 |
/** \ingroup avr_boot |
/** \ingroup avr_boot |
| 606 |
|
|
| 607 |
Same as boot_rww_enable() except waits for eeprom and spm operations to |
Same as boot_rww_enable() except waits for eeprom and spm operations to |
| 608 |
complete before enabling the RWW mameory. */ |
complete before enabling the RWW mameory. */ |
| 609 |
|
|
| 610 |
#define boot_rww_enable_safe(address, data) \ |
#define boot_rww_enable_safe() \ |
| 611 |
__boot_eeprom_spm_safe (boot_rww_enable, address, data) |
do { \ |
| 612 |
|
boot_spm_busy_wait(); \ |
| 613 |
|
eeprom_busy_wait(); \ |
| 614 |
|
boot_rww_enable(); \ |
| 615 |
|
} while (0) |
| 616 |
|
|
| 617 |
/** \ingroup avr_boot |
/** \ingroup avr_boot |
| 618 |
|
|
| 619 |
Same as boot_lock_bits_set() except waits for eeprom and spm operations to |
Same as boot_lock_bits_set() except waits for eeprom and spm operations to |
| 620 |
complete before setting the lock bits. */ |
complete before setting the lock bits. */ |
| 621 |
|
|
| 622 |
#define boot_lock_bits_set_safe(address, data) \ |
#define boot_lock_bits_set_safe(lock_bits) \ |
| 623 |
__boot_eeprom_spm_safe (boot_lock_bits_set, address, data) |
do { \ |
| 624 |
|
boot_spm_busy_wait(); \ |
| 625 |
|
eeprom_busy_wait(); \ |
| 626 |
|
boot_lock_bits_set (lock_bits); \ |
| 627 |
|
} while (0) |
| 628 |
|
|
| 629 |
#endif /* _AVR_BOOT_H_ */ |
#endif /* _AVR_BOOT_H_ */ |