;;;-*- Mode: Lisp; Package: cl-user -*- (in-package :cl-user) ; AVR (defparameter *title-avr* #"/* uLisp AVR Release ~a - www.ulisp.com David Johnson-Davies - www.technoblogy.com - ~a Licensed under the MIT license: https://opensource.org/licenses/MIT */"#) (defparameter *header-avr* #" // Lisp Library const char LispLibrary[] PROGMEM = ""; // Compile options #define checkoverflow // #define resetautorun #define printfreespace // #define printgcs // #define sdcardsupport // #define lisplibrary #define assemblerlist // #define lineeditor // #define vt100 // #define extensions // Includes // #include "LispLibrary.h" #include #include #include #include #if defined(sdcardsupport) #include #define SDSIZE 172 #else #define SDSIZE 0 #endif"#) (defparameter *workspace-avr* #" // Platform specific settings #define WORDALIGNED __attribute__((aligned (2))) #define OBJECTALIGNED __attribute__((aligned (4))) #define BUFFERSIZE 22 /* longest builtin name + 1 */ #if defined(ARDUINO_AVR_MEGA2560) #include #define WORKSPACESIZE (1344-SDSIZE) /* Objects (4*bytes) */ #define EEPROMSIZE 4096 /* Bytes */ #define STACKDIFF 320 #define CPU_ATmega2560 #elif defined(__AVR_ATmega1284P__) #include "optiboot.h" #define WORKSPACESIZE (2944-SDSIZE) /* Objects (4*bytes) */ // #define EEPROMSIZE 4096 /* Bytes */ #define FLASHWRITESIZE 16384 /* Bytes */ #define CODESIZE 96 /* Bytes <= 256 */ #define STACKDIFF 320 #define CPU_ATmega1284P #elif defined(__AVR_AVR128DA48__) #include #define Serial Serial1 #define WORKSPACESIZE (2920-SDSIZE) /* Objects (4*bytes) */ #define FLASHWRITESIZE 15872 /* Bytes */ #define CODESIZE 96 /* Bytes <= 512 */ #define STACKDIFF 320 #define CPU_AVR128DX48 #define LED_BUILTIN 20 #elif defined(__AVR_AVR128DB48__) #include #define Serial Serial3 #define WORKSPACESIZE (2920-SDSIZE) /* Objects (4*bytes) */ #define FLASHWRITESIZE 15872 /* Bytes */ #define CODESIZE 96 /* Bytes <= 512 */ #define STACKDIFF 320 #define CPU_AVR128DX48 #define LED_BUILTIN 20 #else #error "Board not supported!" #endif"#) (defparameter *watchdog-avr* #" // Watchdog void watchdogenable (int interval) { int i = 5; while (interval) { interval = interval>>1; i++; } wdt_enable(i); } void watchdogreset () { wdt_reset(); }"#) (defparameter *check-pins-avr* #" // Check pins - these are board-specific not processor-specific void checkanalogread (int pin) { #if defined(ARDUINO_AVR_MEGA2560) if (!(pin>=0 && pin<=15)) error(invalidpin, number(pin)); #elif defined(__AVR_ATmega1284P__) if (!(pin>=0 && pin<=7)) error(invalidpin, number(pin)); #elif defined(__AVR_AVR128DA48__) if (!(pin>=22 && pin<=39)) error(invalidpin, number(pin)); #endif } void checkanalogwrite (int pin) { #if defined(ARDUINO_AVR_MEGA2560) if (!((pin>=2 && pin<=13) || (pin>=44 && pin<=46))) error(invalidpin, number(pin)); #elif defined(__AVR_ATmega1284P__) if (!(pin==3 || pin==4 || pin==6 || pin==7 || (pin>=12 && pin<=15))) error(invalidpin, number(pin)); #elif defined(__AVR_AVR128DA48__) if (!((pin>=4 && pin<=5) || (pin>=8 && pin<=19) || (pin>=38 && pin<=39))) error(invalidpin, number(pin)); #endif }"#) (defparameter *note-avr* #" // Note #if defined(CPU_AVR128DX48) const int scale[] PROGMEM = {4186,4435,4699,4978,5274,5588,5920,6272,6645,7040,7459,7902}; #else const uint8_t scale[] PROGMEM = {239,226,213,201,190,179,169,160,151,142,134,127}; #endif void playnote (int pin, int note, int octave) { #if defined(CPU_ATmega2560) if (pin == 9) { DDRH = DDRH | 1<6) error(PSTR("octave out of range"), number(oct)); OCR2A = pgm_read_byte(&scale[note%12]) - 1; TCCR2B = 0<6) error(PSTR("octave out of range"), number(oct)); OCR2A = pgm_read_byte(&scale[note%12]) - 1; TCCR2B = 0<8) error(PSTR("octave out of range"), number(oct)); tone(pin, pgm_read_word(&scale[note%12])>>prescaler); #endif } void nonote (int pin) { #if defined(CPU_AVR128DX48) noTone(pin); #else (void) pin; TCCR2B = 0< 0) { sleep(); secs--; } WDTCSR = 1<