Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Watchdog_sample_nocoverage by
Diff: main.cpp
- Revision:
- 0:5ce3cfc57999
- Child:
- 1:159a09ac60ba
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Nov 21 13:24:29 2015 +0000 @@ -0,0 +1,52 @@ +#include "mbed.h" + +//WATHDOG ENABLED IN OUR KL25Z_SystemInit.c (overloading library function SystemInit.c) +// It happens in this uC after reset watchdog is enabled with timeout=1024ms (2^10*LPO=1KHz) +// so mbed developers to allow a learning use of this board disable it on SystemInit.c +// **BUT** SIM_COPC register can only be written once after reset and so it can not be enabled later +// I think best solution is to overload SystemInit() using: void $Sub$$SystemInit (void) { +// original SystemInit() does not appear in export, it must be dowloaded from: +// https://developer.mbed.org/users/mbed_official/code/mbed-src/file/a11c0372f0ba/targets/cmsis/TARGET_Freescale/TARGET_KLXX/TARGET_KL25Z/system_MKL25Z4.c +// you can arrive there from: +// https://developer.mbed.org/handbook/mbed-SDK and https://developer.mbed.org/users/mbed_official/code/mbed-src/ +// +// MORE on this on: https://developer.mbed.org/users/chris/notebook/Patching-functions-and-libraries/ +// and searching "ARM Compiler toolchain Using the Linker" "Using $Super$$ and $Sub$$ to patch symbol definitions" + +// Kick (feed, reload) our watchdog timer +void wdt_kick(){ + SIM->SRVCOP = (uint32_t)0x55u; + SIM->SRVCOP = (uint32_t)0xAAu; +} + +// That set RED LED ON, do that first to evaluate boot time of peripherals +#define LIGHT 0 +#define DARK 1 +DigitalOut led_red(LED_RED, LIGHT); +DigitalOut led_green(LED_GREEN, DARK); +DigitalOut led_blue(LED_BLUE, DARK); + +//Virtual serial port over USB using inboard second USB connector (USBKL25Z port) +#include "USBSerial.h" +//USBSerial pc; +//...( vendor_id, product_id, product_release, connect_blocking ) +USBSerial pc( 0x1f00, 0x2012, 0x0001, false ); +//REMEMBER TO USE: class USBSerial -> connect_blocking = false (default is true) +// to avoid block of program when no USB cable connected in USBKL25Z port +//NOTE: USBSerial still blocks program when closing serial terminal, that is fixed by our watchdog + + +int main(void) { + //to evaluate boot time I set led RED ON at the beginning of our main.cpp. TODO?: do it in SystemInit? + led_blue = DARK; + led_green = DARK; + led_red = DARK; + while(1) + { + led_blue = LIGHT; + pc.printf("I am a virtual serial port\r\n"); // THAT COULD BLOCK + wdt_kick(); + led_blue = DARK; + wait(0.5); + } +} \ No newline at end of file