870bfd08f5
* Add traceback after watchdog timeout Add the cpability to perform a traceback following a watchdog timeout. * Enhanced hardware SPI Allow use of either SSP0 or SSP1. Ensure that no data is left in I/O buffers after calls to enable sharing of SSP hardware. * Make flash emulation of eeprom the default Make use of flash for eeprom storage the default. This means that usage of eeprom will not cause USB drive mount/unmount operations. * Allow sharing of SD card SD card I/O operations from the USB stack take place in idle loop, rather than at interrupt time. Allowing sharing of the SPI bus. New configuration options to allow usage of the SD card to be specified. * Fix problem with hardware SPI pins
110 lines
2.9 KiB
C++
110 lines
2.9 KiB
C++
#ifdef TARGET_LPC1768
|
|
|
|
#include <LPC1768_PWM.h>
|
|
#include <usb/usb.h>
|
|
#include <usb/usbcfg.h>
|
|
#include <usb/usbhw.h>
|
|
#include <usb/usbcore.h>
|
|
#include <usb/cdc.h>
|
|
#include <usb/cdcuser.h>
|
|
#include <usb/mscuser.h>
|
|
#include <CDCSerial.h>
|
|
#include <usb/mscuser.h>
|
|
|
|
extern "C" {
|
|
#include <debug_frmwrk.h>
|
|
}
|
|
|
|
#include "../../sd/cardreader.h"
|
|
#include "../../inc/MarlinConfig.h"
|
|
#include "HAL.h"
|
|
#include "HAL_timers.h"
|
|
|
|
extern uint32_t MSC_SD_Init(uint8_t pdrv);
|
|
extern "C" int isLPC1769();
|
|
extern "C" void disk_timerproc(void);
|
|
|
|
void SysTick_Callback() {
|
|
disk_timerproc();
|
|
}
|
|
|
|
void HAL_init() {
|
|
#if PIN_EXISTS(LED)
|
|
SET_DIR_OUTPUT(LED_PIN);
|
|
WRITE_PIN_CLR(LED_PIN);
|
|
|
|
// MKS_SBASE has 3 other LEDs the bootloader uses during flashing. Clear them.
|
|
SET_DIR_OUTPUT(P1_19);
|
|
WRITE_PIN_CLR(P1_19);
|
|
SET_DIR_OUTPUT(P1_20);
|
|
WRITE_PIN_CLR(P1_20);
|
|
SET_DIR_OUTPUT(P1_21);
|
|
WRITE_PIN_CLR(P1_21);
|
|
|
|
// Flash status LED 3 times to indicate Marlin has started booting
|
|
for (uint8_t i = 0; i < 6; ++i) {
|
|
TOGGLE(LED_PIN);
|
|
delay(100);
|
|
}
|
|
#endif
|
|
//debug_frmwrk_init();
|
|
//_DBG("\n\nDebug running\n");
|
|
// Initialise the SD card chip select pins as soon as possible
|
|
#ifdef SS_PIN
|
|
digitalWrite(SS_PIN, HIGH);
|
|
pinMode(SS_PIN, OUTPUT);
|
|
#endif
|
|
#ifdef ONBOARD_SD_CS
|
|
digitalWrite(ONBOARD_SD_CS, HIGH);
|
|
pinMode(ONBOARD_SD_CS, OUTPUT);
|
|
#endif
|
|
USB_Init(); // USB Initialization
|
|
USB_Connect(FALSE); // USB clear connection
|
|
delay(1000); // Give OS time to notice
|
|
USB_Connect(TRUE);
|
|
#ifndef USB_SD_DISABLED
|
|
MSC_SD_Init(0); // Enable USB SD card access
|
|
#endif
|
|
const uint32_t usb_timeout = millis() + 2000;
|
|
while (!USB_Configuration && PENDING(millis(), usb_timeout)) {
|
|
delay(50);
|
|
HAL_idletask();
|
|
#if PIN_EXISTS(LED)
|
|
TOGGLE(LED_PIN); // Flash quickly during USB initialization
|
|
#endif
|
|
}
|
|
|
|
#if NUM_SERIAL > 0
|
|
MYSERIAL0.begin(BAUDRATE);
|
|
#if NUM_SERIAL > 1
|
|
MYSERIAL1.begin(BAUDRATE);
|
|
#endif
|
|
SERIAL_PRINTF("\n\necho:%s (%dMhz) Initialized\n", isLPC1769() ? "LPC1769" : "LPC1768", SystemCoreClock / 1000000);
|
|
SERIAL_FLUSHTX();
|
|
#endif
|
|
|
|
HAL_timer_init();
|
|
LPC1768_PWM_init();
|
|
}
|
|
|
|
// HAL idle task
|
|
void HAL_idletask(void) {
|
|
#if ENABLED(SDSUPPORT) && defined(SHARED_SD_CARD)
|
|
// If Marlin is using the SD card we need to lock it to prevent access from
|
|
// a PC via USB.
|
|
// Other HALs use IS_SD_PRINTING and IS_SD_FILE_OPEN to check for access but
|
|
// this will not reliably detect delete operations. To be safe we will lock
|
|
// the disk if Marlin has it mounted. Unfortuately there is currently no way
|
|
// to unmount the disk from the LCD menu.
|
|
// if (IS_SD_PRINTING || IS_SD_FILE_OPEN)
|
|
if (card.cardOK)
|
|
MSC_Aquire_Lock();
|
|
else
|
|
MSC_Release_Lock();
|
|
#endif
|
|
// Perform USB stack housekeeping
|
|
MSC_RunDeferredCommands();
|
|
}
|
|
|
|
#endif // TARGET_LPC1768
|