/** * Marlin 3D Printer Firmware * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * Description: HAL for Arduino Due and compatible (SAM3X8E) * * For ARDUINO_ARCH_SAM */ #ifdef ARDUINO_ARCH_SAM // -------------------------------------------------------------------------- // Includes // -------------------------------------------------------------------------- #include "../../inc/MarlinConfig.h" #include "HAL.h" #include #include "usb/usb_task.h" // -------------------------------------------------------------------------- // Externals // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Local defines // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Types // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Variables // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Public Variables // -------------------------------------------------------------------------- uint16_t HAL_adc_result; // -------------------------------------------------------------------------- // Private Variables // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Function prototypes // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Private functions // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Public functions // -------------------------------------------------------------------------- // HAL initialization task void HAL_init(void) { // Initialize the USB stack #if ENABLED(SDSUPPORT) OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up #endif usb_task_init(); } // HAL idle task void HAL_idletask(void) { // Perform USB stack housekeeping usb_task_idle(); } // Disable interrupts void cli(void) { noInterrupts(); } // Enable interrupts void sei(void) { interrupts(); } void HAL_clear_reset_source(void) { } uint8_t HAL_get_reset_source(void) { switch ((RSTC->RSTC_SR >> 8) & 0x07) { case 0: return RST_POWER_ON; case 1: return RST_BACKUP; case 2: return RST_WATCHDOG; case 3: return RST_SOFTWARE; case 4: return RST_EXTERNAL; default: return 0; } } void _delay_ms(const int delay_ms) { // Todo: port for Due? delay(delay_ms); } extern "C" { extern unsigned int _ebss; // end of bss section } // Return free memory between end of heap (or end bss) and whatever is current int freeMemory() { int free_memory, heap_end = (int)_sbrk(0); return (int)&free_memory - (heap_end ? heap_end : (int)&_ebss); } // -------------------------------------------------------------------------- // ADC // -------------------------------------------------------------------------- void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRead(adc_pin); } uint16_t HAL_adc_get_result(void) { // nop return HAL_adc_result; } #endif // ARDUINO_ARCH_SAM