diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2018-12-12 19:01:21 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2018-12-12 19:01:21 +0200 |
| commit | 83483b721876c87151ffd73b1aa3d73a9fabc339 (patch) | |
| tree | c4c09e183bd10cfad4a767e97fad2e8fb9ade2e1 /Software/Embedded_SW/Embedded/Common | |
| parent | 7854cf060611517c50c824fd4143e600a9d98442 (diff) | |
| download | Tango-83483b721876c87151ffd73b1aa3d73a9fabc339.tar.gz Tango-83483b721876c87151ffd73b1aa3d73a9fabc339.zip | |
Version 1.2.2.0 DFU Support
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 | ||||
| -rw-r--r-- | Software/Embedded_SW/Embedded/Common/Utilities/Update.c | 110 |
2 files changed, 111 insertions, 1 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 70f3fe92f..2da8581c0 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {001,002,001,000}; +TangoVersion_t _gTangoVersion = {001,002,002,000}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Update.c b/Software/Embedded_SW/Embedded/Common/Utilities/Update.c new file mode 100644 index 000000000..422c1632b --- /dev/null +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Update.c @@ -0,0 +1,110 @@ + +#include "include.h" +//#include <stdbool.h> +#include <ti/sysbios/knl/Semaphore.h> +#include <ti/sysbios/BIOS.h> + +#include <driverlib/rom.h> +#include <driverlib/sysctl.h> +#include <driverlib/usb.h> +#include <usblib/usblib.h> +#include <usblib/device/usbdevice.h> +#include <inc/hw_nvic.h> +#include <inc/hw_types.h> +#include <inc/hw_memmap.h> + + +#include "Drivers/USB_Communication/USBCDCD.h" + + +extern Semaphore_Handle updateSem; + + +void UpdateUsb(void) +{ + // + // Terminate the USB device and detach from the bus. + // + USBDCDTerm(0); + + // + // Disable all interrupts. + // + ROM_IntMasterDisable(); + + // + // Disable SysTick and its interrupt. + // + ROM_SysTickIntDisable(); + ROM_SysTickDisable(); + + // + // Disable all processor interrupts. Instead of disabling them one at a + // time, a direct write to NVIC is done to disable all peripheral + // interrupts. + // + HWREG(NVIC_DIS0) = 0xffffffff; + HWREG(NVIC_DIS1) = 0xffffffff; + HWREG(NVIC_DIS2) = 0xffffffff; + HWREG(NVIC_DIS3) = 0xffffffff; + HWREG(NVIC_DIS4) = 0xffffffff; + + // + // Enable and reset the USB peripheral. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_USB0); + ROM_USBClockEnable(USB0_BASE, 8, USB_CLOCK_INTERNAL); + + // + // Wait for about a second. + // + ROM_SysCtlDelay(SYS_CLK_FREQ / 3); + + // + // Re-enable interrupts at the NVIC level. + // + ROM_IntMasterEnable(); + + // + // Call the USB boot loader. + // + ROM_UpdateUSB(0); + + // + // Should never get here, but just in case. + // + while(1) + { + } +} + +Void updateTask(UArg arg0, UArg arg1) +{ + + // + // Wait until new updTE ARRIVED + // + Semaphore_pend(updateSem, BIOS_WAIT_FOREVER); + UpdateUsb(); +} +extern Semaphore_Handle ReconnectSem; + + +void ReconnectUsb(void) +{ + //USBCDC_close(); +} + +Void ReconnectTask(UArg arg0, UArg arg1) +{ + + // + // Wait until new updTE ARRIVED + // + while (1) + { + Semaphore_pend(ReconnectSem, BIOS_WAIT_FOREVER); + ReconnectUsb(); + } +} |
