X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Favr%2Favr.c;fp=firmware%2Fapps%2Favr%2Favr.c;h=c659034b1fa5173c913145e91faed18453b1b796;hp=707ab9ebda2e4f6c712bddc3bf58476e87a7e4f5;hb=c84fe49161b904593101f7fa21aee65d54e03987;hpb=2d6cf1279657fb40d818675dd22923744ef178fc diff --git a/firmware/apps/avr/avr.c b/firmware/apps/avr/avr.c index 707ab9e..c659034 100644 --- a/firmware/apps/avr/avr.c +++ b/firmware/apps/avr/avr.c @@ -78,6 +78,11 @@ void avr_prgen(){ avrexchange(0xAC, 0x53, 0, 0); } +//! Is the AVR ready or busy? +u8 avr_isready(){ + return avrexchange(0xF0, 0, 0, 0); +} + //! Read AVR device code. u8 avr_sig(u8 i){ return avrexchange(0x30, //Read signature byte @@ -87,18 +92,40 @@ u8 avr_sig(u8 i){ ); } +//! Erase an AVR device +void avr_erase(){ + avrexchange(0xAC, 0x80, 0, 0); +} + +//! Read lock bits. +u8 avr_lockbits(){ + return avrexchange(0x58, 0, 0, 0); +} + +//! Read a byte of EEPROM. +u8 avr_peekeeprom(u16 adr){ + return avrexchange(0xA0, adr>>8, adr&0xFF, 0); +} +//! Read a byte of EEPROM. +u8 avr_pokeeeprom(u16 adr, u8 val){ + return avrexchange(0xC0, adr>>8, adr&0xFF, val); +} + //! Handles an AVR command. void avrhandle(unsigned char app, unsigned char verb, unsigned long len){ unsigned long i; + static u8 connected=0; + if(!avr_isready() && connected) + debugstr("AVR is not yet ready."); switch(verb){ case READ: case WRITE: for(i=0;i