2222#include "avr_eeprom.h"
2323#include "avr_watchdog.h"
2424#include "avr_extint.h"
25+ #include "avr_flash.h"
2526#include "avr_ioport.h"
2627#include "avr_uart.h"
2728#include "avr_timer.h"
@@ -44,6 +45,7 @@ static const struct mcu_t {
4445 avr_t core ;
4546 avr_eeprom_t eeprom ;
4647 avr_watchdog_t watchdog ;
48+ avr_flash_t selfprog ;
4749 avr_extint_t extint ;
4850 avr_ioport_t porta , portb , portd ;
4951 avr_uart_t uart ;
@@ -60,6 +62,15 @@ static const struct mcu_t {
6062 },
6163 AVR_EEPROM_DECLARE_8BIT (EEPROM_READY_vect ),
6264 AVR_WATCHDOG_DECLARE (WDTCSR , WDT_OVERFLOW_vect ),
65+ .selfprog = {
66+ .flags = 0 ,
67+ .r_spm = SPMCSR ,
68+ .spm_pagesize = SPM_PAGESIZE ,
69+ .selfprgen = AVR_IO_REGBIT (SPMCSR , SPMEN ),
70+ .pgers = AVR_IO_REGBIT (SPMCSR , PGERS ),
71+ .pgwrt = AVR_IO_REGBIT (SPMCSR , PGWRT ),
72+ .blbset = AVR_IO_REGBIT (SPMCSR , RFLB ),
73+ },
6374 .extint = {
6475 AVR_EXTINT_TINY_DECLARE (0 , 'D' , 2 , EIFR ),
6576 AVR_EXTINT_TINY_DECLARE (1 , 'D' , 3 , EIFR ),
@@ -251,6 +262,7 @@ static void init(struct avr_t * avr)
251262
252263 avr_eeprom_init (avr , & mcu -> eeprom );
253264 avr_watchdog_init (avr , & mcu -> watchdog );
265+ avr_flash_init (avr , & mcu -> selfprog );
254266 avr_extint_init (avr , & mcu -> extint );
255267 avr_ioport_init (avr , & mcu -> porta );
256268 avr_ioport_init (avr , & mcu -> portb );
0 commit comments