From 751018ebf535ce680b0e08f763ddb8dfd2186a77 Mon Sep 17 00:00:00 2001 From: richardbarry Date: Mon, 17 Sep 2007 10:07:48 +0000 Subject: [PATCH] Update to V4.5.0 files and directory structure. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@109 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- Demo/ARM7_AT91FR40008_GCC/FreeRTOSConfig.h | 2 +- Demo/ARM7_AT91FR40008_GCC/Makefile | 2 +- Demo/ARM7_AT91FR40008_GCC/ParTest/ParTest.c | 2 +- Demo/ARM7_AT91FR40008_GCC/main.c | 2 +- Demo/ARM7_AT91FR40008_GCC/serial/serial.c | 2 +- Demo/ARM7_AT91FR40008_GCC/serial/serialISR.c | 2 +- Demo/ARM7_AT91SAM7S64_IAR/FreeRTOSConfig.h | 2 +- Demo/ARM7_AT91SAM7S64_IAR/ParTest/ParTest.c | 2 +- Demo/ARM7_AT91SAM7S64_IAR/USB/USBSample.c | 2 +- Demo/ARM7_AT91SAM7S64_IAR/main.c | 2 +- Demo/ARM7_AT91SAM7S64_IAR/serial/serial.c | 2 +- Demo/ARM7_LPC2106_GCC/FreeRTOSConfig.h | 2 +- Demo/ARM7_LPC2106_GCC/Makefile | 2 +- Demo/ARM7_LPC2106_GCC/ParTest/ParTest.c | 2 +- Demo/ARM7_LPC2106_GCC/main.c | 2 +- Demo/ARM7_LPC2106_GCC/serial/serial.c | 2 +- Demo/ARM7_LPC2106_GCC/serial/serialISR.c | 2 +- Demo/ARM7_LPC2129_IAR/FreeRTOSConfig.h | 2 +- Demo/ARM7_LPC2129_IAR/ParTest/ParTest.c | 2 +- Demo/ARM7_LPC2129_IAR/main.c | 2 +- Demo/ARM7_LPC2129_IAR/serial/serial.c | 2 +- Demo/ARM7_LPC2129_Keil/FreeRTOSConfig.h | 2 +- Demo/ARM7_LPC2129_Keil/ParTest/ParTest.c | 2 +- Demo/ARM7_LPC2129_Keil/main.c | 2 +- Demo/ARM7_LPC2129_Keil/serial/serial.c | 2 +- Demo/ARM7_LPC2129_Keil/serial/serialISR.c | 2 +- Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h | 3 +- Demo/ARM7_LPC2138_Rowley/main.c | 2 +- Demo/ARM7_LPC2138_Rowley/mainISR.c | 2 +- Demo/ARM7_LPC2368_Eclipse/.metadata/.lock | 0 .../org.eclipse.cdt.core/shareddefaults.xml | 1 + .../org.eclipse.cdt.make.core/RTOSDemo.sc | 155 + .../org.eclipse.cdt.make.core/specs.c | 1 + .../org.eclipse.cdt.make.core/specs.cpp | 1 + .../dialog_settings.xml | 5 + .../org.eclipse.cdt.ui/cHelpSettings.xml | 4 + .../org.eclipse.cdt.ui/dialog_settings.xml | 12 + .../.indexes/33/5b/e7/4/history.index | Bin 0 -> 314 bytes .../RTOSDemo/.indexes/69/history.index | Bin 0 -> 628 bytes .../RTOSDemo/.indexes/ad/history.index | Bin 0 -> 47 bytes .../.projects/RTOSDemo/.indexes/history.index | Bin 0 -> 3897 bytes .../RTOSDemo/.indexes/properties.index | Bin 0 -> 353 bytes .../.projects/RTOSDemo/.markers | Bin 0 -> 1434 bytes .../.root/.indexes/history.version | 1 + .../.root/.indexes/properties.index | Bin 0 -> 104 bytes .../.root/.indexes/properties.version | 1 + .../org.eclipse.core.resources/.root/.markers | Bin 0 -> 679 bytes .../org.eclipse.core.resources/.root/31.tree | Bin 0 -> 30614 bytes .../.safetable/org.eclipse.core.resources | Bin 0 -> 517 bytes .../org.eclipse.cdt.core.prj-RTOSDemo.prefs | 3 + .../org.eclipse.cdt.debug.core.prefs | 3 + .../.settings/org.eclipse.cdt.debug.ui.prefs | 5 + .../org.eclipse.cdt.managedbuilder.core.prefs | 3 + .../.settings/org.eclipse.cdt.ui.prefs | 12 + .../org.eclipse.core.resources.prefs | 5 + .../.settings/org.eclipse.debug.core.prefs | 3 + .../.settings/org.eclipse.debug.ui.prefs | 12 + .../.settings/org.eclipse.help.ui.prefs | 7 + .../.settings/org.eclipse.search.prefs | 3 + .../.settings/org.eclipse.team.ui.prefs | 3 + .../.settings/org.eclipse.ui.editors.prefs | 3 + .../.settings/org.eclipse.ui.ide.prefs | 4 + .../.settings/org.eclipse.ui.prefs | 3 + .../.settings/org.eclipse.ui.workbench.prefs | 3 + .../.launches/OpenOCD Programmer.launch | 7 + .../.launches/OpenOCD Server.launch | 7 + .../.launches/RTOSDemo.launch | 26 + .../org.eclipse.debug.ui/dialog_settings.xml | 34 + .../launchConfigurationHistory.xml | 24 + .../org.eclipse.help.ui/dialog_settings.xml | 3 + .../scope_sets/Default.pref | 2 + .../scope_sets/relative_path.hist | 4 + .../scope_sets/working_set.hist | 4 + .../scope_sets/working_sets.hist | 4 + .../dialog_settings.xml | 6 + .../org.eclipse.search/dialog_settings.xml | 46 + .../dialog_settings.xml | 10 + .../org.eclipse.ui.ide/dialog_settings.xml | 26 + .../org.eclipse.ui.intro/dialog_settings.xml | 4 + .../dialog_settings.xml | 38 + .../dialog_settings.xml | 19 + .../org.eclipse.ui.workbench/workbench.xml | 530 ++ .../org.eclipse.ui.workbench/workingsets.xml | 73 + .../org.eclipse.ui/dialog_settings.xml | 10 + .../org.eclipse.update.ui/dialog_settings.xml | 5 + .../.metadata/version.ini | 1 + Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.cproject | 230 + Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.project | 97 + .../org.eclipse.ltk.core.refactoring.prefs | 3 + .../RTOSDemo/FreeRTOSConfig.h | 108 + .../RTOSDemo/LCD/portlcd.c | 391 + .../RTOSDemo/LCD/portlcd.h | 31 + Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LPC23xx.h | 1138 +++ Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile | 128 + .../RTOSDemo/ParTest/ParTest.c | 114 + Demo/ARM7_LPC2368_Eclipse/RTOSDemo/boot.s | 157 + Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld | 67 + Demo/ARM7_LPC2368_Eclipse/RTOSDemo/main.c | 281 + .../RTOSDemo/webserver/EMAC_ISR.c | 29 + .../RTOSDemo/webserver/clock-arch.h | 42 + .../RTOSDemo/webserver/emac.c | 411 + .../RTOSDemo/webserver/emac.h | 322 + .../RTOSDemo/webserver/http-strings | 35 + .../RTOSDemo/webserver/http-strings.c | 102 + .../RTOSDemo/webserver/http-strings.h | 34 + .../RTOSDemo/webserver/httpd-cgi.c | 276 + .../RTOSDemo/webserver/httpd-cgi.h | 84 + .../RTOSDemo/webserver/httpd-fs.c | 132 + .../RTOSDemo/webserver/httpd-fs.h | 57 + .../RTOSDemo/webserver/httpd-fs/404.html | 8 + .../RTOSDemo/webserver/httpd-fs/index.html | 13 + .../RTOSDemo/webserver/httpd-fs/index.shtml | 20 + .../RTOSDemo/webserver/httpd-fs/io.shtml | 28 + .../RTOSDemo/webserver/httpd-fs/stats.shtml | 41 + .../RTOSDemo/webserver/httpd-fs/tcp.shtml | 21 + .../RTOSDemo/webserver/httpd-fsdata.c | 470 ++ .../RTOSDemo/webserver/httpd-fsdata.h | 64 + .../RTOSDemo/webserver/httpd.c | 346 + .../RTOSDemo/webserver/httpd.h | 62 + .../RTOSDemo/webserver/makefsdata | 78 + .../RTOSDemo/webserver/makestrings | 40 + .../RTOSDemo/webserver/uIP_Task.c | 318 + .../RTOSDemo/webserver/uip-conf.h | 157 + .../RTOSDemo/webserver/webserver.h | 49 + Demo/ARM7_LPC2368_Eclipse/lpc2368_flash.cfg | 35 + Demo/ARM7_LPC2368_Eclipse/lpc2xxx_pp.cfg | 33 + Demo/ARM7_LPC2368_Eclipse/program.script | 11 + Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h | 2 +- Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c | 2 +- Demo/ARM7_LPC2368_Rowley/main.c | 2 +- Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c | 2 +- Demo/ARM7_STR71x_IAR/FreeRTOSConfig.h | 2 +- Demo/ARM7_STR71x_IAR/ParTest/ParTest.c | 2 +- Demo/ARM7_STR71x_IAR/main.c | 2 +- Demo/ARM7_STR71x_IAR/serial/serial.c | 2 +- Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h | 2 +- Demo/ARM7_STR75x_GCC/ParTest/ParTest.c | 2 +- Demo/ARM7_STR75x_GCC/main.c | 2 +- Demo/ARM7_STR75x_GCC/serial/serial.c | 2 +- Demo/ARM7_STR75x_GCC/serial/serialISR.c | 2 +- Demo/ARM7_STR75x_IAR/FreeRTOSConfig.h | 2 +- Demo/ARM7_STR75x_IAR/ParTest/ParTest.c | 2 +- Demo/ARM7_STR75x_IAR/main.c | 2 +- Demo/ARM7_STR75x_IAR/serial/serial.c | 2 +- Demo/ARM9_STR91X_IAR/FreeRTOSConfig.h | 31 +- .../Library/include/91x_conf.h | 4 +- .../Library/include/91x_enet.h | 13 +- .../ARM9_STR91X_IAR/Library/include/91x_map.h | 10 +- .../ARM9_STR91X_IAR/Library/source/91x_enet.c | 33 +- Demo/ARM9_STR91X_IAR/Library/source/91x_it.c | 19 +- Demo/ARM9_STR91X_IAR/Library/source/91x_tim.c | 692 ++ Demo/ARM9_STR91X_IAR/Library/source/91x_vic.c | 6 +- Demo/ARM9_STR91X_IAR/ParTest/ParTest.c | 2 +- Demo/ARM9_STR91X_IAR/RTOSDemo.dep | 7386 +++++++++++++++-- Demo/ARM9_STR91X_IAR/RTOSDemo.ewd | 1933 ++++- Demo/ARM9_STR91X_IAR/RTOSDemo.ewp | 3899 ++++++++- Demo/ARM9_STR91X_IAR/STCode/lcd.c | 29 +- Demo/ARM9_STR91X_IAR/lwip/api/sys_arch.c | 391 + Demo/ARM9_STR91X_IAR/lwip/include/arch/cc.h | 78 + Demo/ARM9_STR91X_IAR/lwip/include/arch/cpu.h | 37 + .../lwip/include/arch/lwip_errno.h | 153 + Demo/ARM9_STR91X_IAR/lwip/include/arch/perf.h | 38 + .../lwip/include/arch/sys_arch.h | 62 + .../lwip/include/lwIPWebServer/BasicWEB.h | 90 + .../lwip/include/lwIPWebServer/fs.h | 45 + .../lwip/include/lwIPWebServer/fsdata.h | 50 + .../lwip/include/lwIPWebServer/httpd.h | 38 + .../lwip/include/lwip/lwipopts.h | 194 + Demo/ARM9_STR91X_IAR/lwip/include/lwip/opt.h | 722 ++ .../lwip/lwipWebServer/BasicWEB.c | 121 + Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/fs.c | 61 + .../lwip/lwipWebServer/fs/WS1/404.html | 8 + .../lwip/lwipWebServer/fs/WS1/index.html | 50 + .../lwip/lwipWebServer/fs/WS1/logo.gif | Bin 0 -> 5741 bytes .../lwip/lwipWebServer/fsdata.c | 953 +++ .../lwip/lwipWebServer/httpd.c | 244 + Demo/ARM9_STR91X_IAR/lwip/netif/ethernetif.c | 436 + Demo/ARM9_STR91X_IAR/main.c | 87 +- Demo/ARM9_STR91X_IAR/serial/serial.c | 38 +- .../settings/RTOSDemo.cspy.bat | 32 + Demo/ARM9_STR91X_IAR/settings/RTOSDemo.dbgdt | 76 +- Demo/ARM9_STR91X_IAR/settings/RTOSDemo.dni | 22 +- Demo/ARM9_STR91X_IAR/settings/RTOSDemo.wsdt | 28 +- Demo/ARM9_STR91X_IAR/webserver/uIP_Task.c | 26 +- Demo/AVR32_UC3/AT32UC3A/GCC/Makefile | 41 +- Demo/AVR32_UC3/AT32UC3A/GCC/config.mk | 2 +- .../AT32UC3A/IAR/Debug/Obj/rtosdemo.pbd | 27 + Demo/AVR32_UC3/AT32UC3A/IAR/rtosdemo.ewp | 6 +- Demo/AVR32_UC3/AT32UC3B/GCC/Makefile | 41 +- Demo/AVR32_UC3/AT32UC3B/GCC/config.mk | 2 +- Demo/AVR32_UC3/DRIVERS/INTC/intc.c | 5 + Demo/AVR32_UC3/DRIVERS/PM/pm.h | 12 +- Demo/AVR32_UC3/FreeRTOSConfig.h | 2 +- Demo/AVR32_UC3/UTILS/compiler.h | 46 +- Demo/AVR32_UC3/main.c | 18 +- Demo/AVR_ATMega323_IAR/FreeRTOSConfig.h | 2 +- Demo/AVR_ATMega323_IAR/ParTest/ParTest.c | 2 +- Demo/AVR_ATMega323_IAR/main.c | 2 +- Demo/AVR_ATMega323_IAR/regtest.c | 2 +- Demo/AVR_ATMega323_IAR/regtest.h | 2 +- Demo/AVR_ATMega323_IAR/serial/serial.c | 2 +- Demo/AVR_ATMega323_WinAVR/FreeRTOSConfig.h | 2 +- Demo/AVR_ATMega323_WinAVR/ParTest/ParTest.c | 2 +- Demo/AVR_ATMega323_WinAVR/main.c | 2 +- Demo/AVR_ATMega323_WinAVR/regtest.c | 2 +- Demo/AVR_ATMega323_WinAVR/regtest.h | 2 +- Demo/AVR_ATMega323_WinAVR/serial/serial.c | 2 +- .../CORTEX_LM3S102_GCC/Demo1/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_GCC/Demo1/main.c | 2 +- .../CORTEX_LM3S102_GCC/Demo2/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_GCC/Demo2/main.c | 2 +- Demo/CORTEX_LM3S102_GCC/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_GCC/ParTest/ParTest.c | 2 +- Demo/CORTEX_LM3S102_GCC/main.c | 2 +- .../Demo1/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_KEIL/Demo1/main.c | 2 +- .../Demo2/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_KEIL/Demo2/main.c | 2 +- Demo/CORTEX_LM3S102_KEIL/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_KEIL/ParTest/ParTest.c | 2 +- Demo/CORTEX_LM3S102_KEIL/main.c | 2 +- .../Demo1/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_Rowley/Demo1/ParTest.c | 2 +- Demo/CORTEX_LM3S102_Rowley/Demo1/main.c | 2 +- .../Demo2/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_Rowley/Demo2/ParTest.c | 2 +- Demo/CORTEX_LM3S102_Rowley/Demo2/main.c | 2 +- .../Demo3/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S102_Rowley/Demo3/ParTest.c | 2 +- Demo/CORTEX_LM3S102_Rowley/Demo3/main.c | 2 +- Demo/CORTEX_LM3S316_IAR/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S316_IAR/ParTest/ParTest.c | 2 +- Demo/CORTEX_LM3S316_IAR/commstest.c | 2 +- Demo/CORTEX_LM3S316_IAR/commstest.h | 2 +- Demo/CORTEX_LM3S316_IAR/main.c | 2 +- Demo/CORTEX_LM3S811_GCC/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S811_GCC/main.c | 2 +- Demo/CORTEX_LM3S811_IAR/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S811_IAR/main.c | 2 +- Demo/CORTEX_LM3S811_KEIL/FreeRTOSConfig.h | 2 +- Demo/CORTEX_LM3S811_KEIL/heap/heap_1.c | 2 +- Demo/CORTEX_LM3S811_KEIL/main.c | 2 +- Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.lock | 0 .../.plugins/org.eclipse.cdt.core/.log | 19 + .../org.eclipse.cdt.core/shareddefaults.xml | 1 + .../.plugins/org.eclipse.cdt.make.core/.log | 0 .../org.eclipse.cdt.make.core/RTOSDemo.sc | 117 + .../org.eclipse.cdt.make.core/specs.c | 1 + .../org.eclipse.cdt.make.core/specs.cpp | 1 + .../dialog_settings.xml | 5 + .../org.eclipse.cdt.ui/cHelpSettings.xml | 4 + .../org.eclipse.cdt.ui/dialog_settings.xml | 12 + .../RTOSDemo/.indexes/7f/history.index | Bin 0 -> 73 bytes .../.indexes/c5/5b/e7/7a/history.index | Bin 0 -> 712 bytes .../RTOSDemo/.indexes/c5/a8/history.index | Bin 0 -> 548 bytes .../RTOSDemo/.indexes/c5/history.index | Bin 0 -> 1531 bytes .../.projects/RTOSDemo/.indexes/history.index | Bin 0 -> 1034 bytes .../RTOSDemo/.indexes/properties.index | Bin 0 -> 354 bytes .../.root/.indexes/history.version | 1 + .../.root/.indexes/properties.index | Bin 0 -> 104 bytes .../.root/.indexes/properties.version | 1 + .../org.eclipse.core.resources/.root/19.tree | Bin 0 -> 24876 bytes .../.safetable/org.eclipse.core.resources | Bin 0 -> 520 bytes .../org.eclipse.cdt.core.prj-RTOSDemo.prefs | 3 + .../org.eclipse.cdt.debug.core.prefs | 3 + .../.settings/org.eclipse.cdt.debug.ui.prefs | 5 + .../org.eclipse.cdt.managedbuilder.core.prefs | 3 + .../.settings/org.eclipse.cdt.ui.prefs | 12 + .../org.eclipse.core.resources.prefs | 5 + .../.settings/org.eclipse.debug.ui.prefs | 7 + .../.settings/org.eclipse.help.ui.prefs | 7 + .../.settings/org.eclipse.search.prefs | 3 + .../.settings/org.eclipse.ui.editors.prefs | 3 + .../.settings/org.eclipse.ui.ide.prefs | 4 + .../.settings/org.eclipse.ui.prefs | 3 + .../.settings/org.eclipse.ui.workbench.prefs | 3 + .../.launches/OpenOCD Programmer.launch | 7 + .../.launches/OpenOCD Server.launch | 7 + .../.launches/RTOSDemo.launch | 26 + .../org.eclipse.debug.ui/dialog_settings.xml | 20 + .../launchConfigurationHistory.xml | 24 + .../org.eclipse.help.ui/dialog_settings.xml | 3 + .../scope_sets/Default.pref | 2 + .../scope_sets/relative_path.hist | 4 + .../scope_sets/working_set.hist | 4 + .../scope_sets/working_sets.hist | 4 + .../dialog_settings.xml | 6 + .../org.eclipse.search/dialog_settings.xml | 46 + .../dialog_settings.xml | 10 + .../org.eclipse.ui.ide/dialog_settings.xml | 19 + .../org.eclipse.ui.intro/dialog_settings.xml | 4 + .../dialog_settings.xml | 31 + .../dialog_settings.xml | 19 + .../org.eclipse.ui.workbench/workbench.xml | 532 ++ .../org.eclipse.ui.workbench/workingsets.xml | 68 + .../org.eclipse.ui/dialog_settings.xml | 10 + .../org.eclipse.update.ui/dialog_settings.xml | 5 + .../.metadata/version.ini | 1 + .../RTOSDemo/.cproject | 228 + .../CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/.project | 97 + .../org.eclipse.ltk.core.refactoring.prefs | 3 + .../RTOSDemo/FreeRTOSConfig.h | 82 + .../CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/Makefile | 106 + .../RTOSDemo/ParTest/ParTest.c | 83 + .../CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/bitmap.h | 171 + .../RTOSDemo/lcd_message.h | 9 + Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/main.c | 432 + .../RTOSDemo/osram128x64x4.c | 933 +++ .../RTOSDemo/osram128x64x4.h | 63 + .../RTOSDemo/rit128x96x4.c | 981 +++ .../RTOSDemo/standalone.ld | 60 + .../RTOSDemo/startup.c | 248 + .../RTOSDemo/timertest.c | 133 + .../RTOSDemo/webserver/Makefile.webserver | 1 + .../RTOSDemo/webserver/clock-arch.h | 42 + .../RTOSDemo/webserver/emac.c | 281 + .../RTOSDemo/webserver/emac.h | 322 + .../RTOSDemo/webserver/http-strings | 35 + .../RTOSDemo/webserver/http-strings.c | 102 + .../RTOSDemo/webserver/http-strings.h | 34 + .../RTOSDemo/webserver/httpd-cgi.c | 269 + .../RTOSDemo/webserver/httpd-cgi.h | 84 + .../RTOSDemo/webserver/httpd-fs.c | 132 + .../RTOSDemo/webserver/httpd-fs.h | 57 + .../RTOSDemo/webserver/httpd-fs/404.html | 8 + .../RTOSDemo/webserver/httpd-fs/index.html | 13 + .../RTOSDemo/webserver/httpd-fs/index.shtml | 20 + .../RTOSDemo/webserver/httpd-fs/io.shtml | 28 + .../RTOSDemo/webserver/httpd-fs/stats.shtml | 41 + .../RTOSDemo/webserver/httpd-fs/tcp.shtml | 21 + .../RTOSDemo/webserver/httpd-fsdata.c | 470 ++ .../RTOSDemo/webserver/httpd-fsdata.h | 64 + .../RTOSDemo/webserver/httpd.c | 346 + .../RTOSDemo/webserver/httpd.h | 62 + .../RTOSDemo/webserver/makefsdata | 78 + .../RTOSDemo/webserver/makestrings | 40 + .../RTOSDemo/webserver/uIP_Task.c | 305 + .../RTOSDemo/webserver/uip-conf.h | 159 + .../RTOSDemo/webserver/webserver.h | 49 + Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232.cfg | 28 + .../fury_ft2232_flash.cfg | 34 + Demo/CORTEX_LM3Sxxxx_Eclipse/program.script | 17 + .../Debug/Obj/RTOSDemo.pbd | 32 + .../CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h | 81 + .../ParTest/ParTest.c | 83 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Opt | 73 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Uv2 | 132 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.dep | 960 +++ Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewd | 586 ++ Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewp | 947 +++ Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.eww | 10 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.xcl | 56 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/bitmap.h | 171 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/lcd_message.h | 9 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/main.c | 361 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.c | 933 +++ Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.h | 63 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/rit128x96x4.c | 981 +++ .../settings/RTOSDemo.cspy.bat | 32 + .../settings/RTOSDemo.dbgdt | 5 + .../settings/RTOSDemo.dni | 4 + .../settings/RTOSDemo.wsdt | 97 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_ewarm.c | 265 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_rvmdk.S | 248 + Demo/CORTEX_LM3Sxxxx_IAR_Keil/timertest.c | 133 + .../webserver/Makefile.webserver | 1 + .../webserver/clock-arch.h | 42 + .../CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.c | 281 + .../CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.h | 322 + .../webserver/http-strings | 35 + .../webserver/http-strings.c | 102 + .../webserver/http-strings.h | 34 + .../webserver/httpd-cgi.c | 269 + .../webserver/httpd-cgi.h | 84 + .../webserver/httpd-fs.c | 132 + .../webserver/httpd-fs.h | 57 + .../webserver/httpd-fs/404.html | 8 + .../webserver/httpd-fs/index.html | 13 + .../webserver/httpd-fs/index.shtml | 20 + .../webserver/httpd-fs/io.shtml | 28 + .../webserver/httpd-fs/stats.shtml | 41 + .../webserver/httpd-fs/tcp.shtml | 21 + .../webserver/httpd-fsdata.c | 470 ++ .../webserver/httpd-fsdata.h | 64 + .../webserver/httpd.c | 346 + .../webserver/httpd.h | 62 + .../webserver/makefsdata | 78 + .../webserver/makestrings | 40 + .../webserver/uIP_Task.c | 316 + .../webserver/uip-conf.h | 159 + .../webserver/webserver.h | 49 + Demo/CORTEX_STM32F103_IAR/FreeRTOSConfig.h | 2 +- Demo/CORTEX_STM32F103_IAR/ParTest/ParTest.c | 2 +- Demo/CORTEX_STM32F103_IAR/main.c | 2 +- Demo/CORTEX_STM32F103_IAR/serial/serial.c | 2 +- Demo/CORTEX_STM32F103_IAR/timertest.c | 2 +- Demo/Common/Full/BlockQ.c | 2 +- Demo/Common/Full/PollQ.c | 2 +- Demo/Common/Full/comtest.c | 2 +- Demo/Common/Full/death.c | 2 +- Demo/Common/Full/dynamic.c | 2 +- Demo/Common/Full/events.c | 2 +- Demo/Common/Full/flash.c | 2 +- Demo/Common/Full/flop.c | 2 +- Demo/Common/Full/integer.c | 2 +- Demo/Common/Full/print.c | 2 +- Demo/Common/Full/semtest.c | 2 +- Demo/Common/Minimal/BlockQ.c | 2 +- Demo/Common/Minimal/GenQTest.c | 2 +- Demo/Common/Minimal/PollQ.c | 2 +- Demo/Common/Minimal/QPeek.c | 10 +- Demo/Common/Minimal/blocktim.c | 2 +- Demo/Common/Minimal/comtest.c | 2 +- Demo/Common/Minimal/crflash.c | 2 +- Demo/Common/Minimal/crhook.c | 2 +- Demo/Common/Minimal/death.c | 2 +- Demo/Common/Minimal/dynamic.c | 4 +- Demo/Common/Minimal/flash.c | 2 +- Demo/Common/Minimal/flop.c | 2 +- Demo/Common/Minimal/integer.c | 2 +- Demo/Common/Minimal/semtest.c | 2 +- Demo/Common/drivers/LuminaryMicro/EULA.txt | 131 + .../drivers/LuminaryMicro/IAR/driverlib.r79 | Bin 0 -> 193656 bytes .../drivers/LuminaryMicro/Keil/driverlib.lib | Bin 0 -> 1056038 bytes Demo/Common/drivers/LuminaryMicro/adc.h | 130 + .../arm-none-eabi-gcc/libdriver.a | Bin 0 -> 89696 bytes Demo/Common/drivers/LuminaryMicro/can.h | 441 + Demo/Common/drivers/LuminaryMicro/comp.h | 122 + Demo/Common/drivers/LuminaryMicro/cpu.h | 40 + Demo/Common/drivers/LuminaryMicro/debug.h | 56 + Demo/Common/drivers/LuminaryMicro/ethernet.h | 271 + Demo/Common/drivers/LuminaryMicro/gpio.h | 140 + Demo/Common/drivers/LuminaryMicro/hibernate.h | 119 + Demo/Common/drivers/LuminaryMicro/hw_adc.h | 343 + Demo/Common/drivers/LuminaryMicro/hw_can.h | 379 + Demo/Common/drivers/LuminaryMicro/hw_comp.h | 118 + .../drivers/LuminaryMicro/hw_ethernet.h | 213 + Demo/Common/drivers/LuminaryMicro/hw_flash.h | 147 + Demo/Common/drivers/LuminaryMicro/hw_gpio.h | 115 + .../drivers/LuminaryMicro/hw_hibernate.h | 145 + Demo/Common/drivers/LuminaryMicro/hw_i2c.h | 197 + Demo/Common/drivers/LuminaryMicro/hw_ints.h | 114 + Demo/Common/drivers/LuminaryMicro/hw_memmap.h | 81 + Demo/Common/drivers/LuminaryMicro/hw_nvic.h | 1050 +++ Demo/Common/drivers/LuminaryMicro/hw_pwm.h | 260 + Demo/Common/drivers/LuminaryMicro/hw_qei.h | 176 + Demo/Common/drivers/LuminaryMicro/hw_ssi.h | 120 + Demo/Common/drivers/LuminaryMicro/hw_sysctl.h | 703 ++ Demo/Common/drivers/LuminaryMicro/hw_timer.h | 235 + Demo/Common/drivers/LuminaryMicro/hw_types.h | 129 + Demo/Common/drivers/LuminaryMicro/hw_uart.h | 243 + .../drivers/LuminaryMicro/hw_watchdog.h | 116 + Demo/Common/drivers/LuminaryMicro/i2c.h | 143 + Demo/Common/drivers/LuminaryMicro/interrupt.h | 57 + Demo/Common/drivers/LuminaryMicro/lmi_flash.h | 78 + Demo/Common/drivers/LuminaryMicro/lmi_timer.h | 137 + Demo/Common/drivers/LuminaryMicro/pwm.h | 161 + Demo/Common/drivers/LuminaryMicro/qei.h | 104 + .../drivers/LuminaryMicro/rit128x96x4.h | 53 + Demo/Common/drivers/LuminaryMicro/ssi.h | 106 + Demo/Common/drivers/LuminaryMicro/sysctl.h | 306 + Demo/Common/drivers/LuminaryMicro/systick.h | 55 + Demo/Common/drivers/LuminaryMicro/timer.h | 137 + Demo/Common/drivers/LuminaryMicro/uart.h | 152 + Demo/Common/drivers/LuminaryMicro/ustdlib.c | 670 ++ Demo/Common/drivers/LuminaryMicro/watchdog.h | 63 + Demo/Common/drivers/OpenOCD/license.txt | 6 + Demo/Common/drivers/OpenOCD/openocd-pp.exe | Bin 0 -> 1759869 bytes Demo/Common/drivers/OpenOCD/openocd_ftdi.exe | Bin 0 -> 1806893 bytes Demo/Common/ethernet/lwIP/core/tcp_in.c | 36 +- Demo/Common/ethernet/uIP/uip-1.0/uip/uip.c | 2 +- Demo/Common/include/BlockQ.h | 2 +- Demo/Common/include/GenQTest.h | 2 +- Demo/Common/include/PollQ.h | 2 +- Demo/Common/include/QPeek.h | 2 +- Demo/Common/include/blocktim.h | 2 +- Demo/Common/include/comtest.h | 2 +- Demo/Common/include/comtest2.h | 2 +- Demo/Common/include/crflash.h | 2 +- Demo/Common/include/crhook.h | 2 +- Demo/Common/include/death.h | 2 +- Demo/Common/include/dynamic.h | 2 +- Demo/Common/include/fileIO.h | 2 +- Demo/Common/include/flash.h | 2 +- Demo/Common/include/flop.h | 2 +- Demo/Common/include/integer.h | 2 +- Demo/Common/include/mevents.h | 2 +- Demo/Common/include/partest.h | 2 +- Demo/Common/include/print.h | 2 +- Demo/Common/include/semtest.h | 2 +- Demo/Common/include/serial.h | 2 +- Demo/Cygnal/FreeRTOSConfig.h | 2 +- Demo/Cygnal/Makefile | 2 +- Demo/Cygnal/ParTest/ParTest.c | 2 +- Demo/Cygnal/main.c | 2 +- Demo/Cygnal/serial/serial.c | 2 +- Demo/Flshlite/FRConfig.h | 2 +- Demo/Flshlite/FileIO/fileIO.c | 2 +- Demo/Flshlite/FreeRTOSConfig.h | 2 +- Demo/Flshlite/ParTest/ParTest.c | 2 +- Demo/Flshlite/main.c | 2 +- Demo/Flshlite/serial/serial.c | 2 +- Demo/H8S/RTOSDemo/FreeRTOSConfig.h | 2 +- Demo/H8S/RTOSDemo/ParTest/ParTest.c | 2 +- Demo/H8S/RTOSDemo/main.c | 2 +- Demo/H8S/RTOSDemo/serial/serial.c | 2 +- .../HCS12_CodeWarrior_banked/FreeRTOSConfig.h | 2 +- .../ParTest/ParTest.c | 2 +- Demo/HCS12_CodeWarrior_banked/main.c | 2 +- Demo/HCS12_CodeWarrior_banked/serial/serial.c | 2 +- Demo/HCS12_CodeWarrior_small/FreeRTOSConfig.h | 2 +- .../HCS12_CodeWarrior_small/ParTest/ParTest.c | 2 +- Demo/HCS12_CodeWarrior_small/main.c | 2 +- Demo/HCS12_CodeWarrior_small/serial/serial.c | 2 +- Demo/HCS12_GCC_banked/FreeRTOSConfig.h | 2 +- Demo/HCS12_GCC_banked/ParTest.c | 2 +- Demo/HCS12_GCC_banked/main.c | 2 +- Demo/HCS12_GCC_banked/startup.c | 2 +- Demo/MicroBlaze/FreeRTOSConfig.h | 2 +- Demo/MicroBlaze/ParTest/ParTest.c | 2 +- Demo/MicroBlaze/main.c | 2 +- Demo/MicroBlaze/serial/serial.c | 2 +- Demo/PC/FRConfig.h | 2 +- Demo/PC/FileIO/fileIO.c | 2 +- Demo/PC/FreeRTOSConfig.h | 2 +- Demo/PC/ParTest/ParTest.c | 2 +- Demo/PC/main.c | 2 +- Demo/PC/serial/serial.c | 2 +- Demo/PIC18_MPLAB/FreeRTOSConfig.h | 2 +- Demo/PIC18_MPLAB/ParTest/ParTest.c | 2 +- Demo/PIC18_MPLAB/main1.c | 2 +- Demo/PIC18_MPLAB/main2.c | 2 +- Demo/PIC18_MPLAB/main3.c | 2 +- Demo/PIC18_MPLAB/serial/serial.c | 2 +- Demo/PIC18_WizC/Demo1/FreeRTOSConfig.h | 2 +- Demo/PIC18_WizC/Demo1/WIZCmake.h | 2 +- Demo/PIC18_WizC/Demo1/fuses.c | 2 +- Demo/PIC18_WizC/Demo1/interrupt.c | 2 +- Demo/PIC18_WizC/Demo1/main.c | 2 +- Demo/PIC18_WizC/Demo2/FreeRTOSConfig.h | 2 +- Demo/PIC18_WizC/Demo2/WIZCmake.h | 2 +- Demo/PIC18_WizC/Demo2/fuses.c | 2 +- Demo/PIC18_WizC/Demo2/interrupt.c | 2 +- Demo/PIC18_WizC/Demo2/main.c | 2 +- Demo/PIC18_WizC/Demo3/FreeRTOSConfig.h | 2 +- Demo/PIC18_WizC/Demo3/WIZCmake.h | 2 +- Demo/PIC18_WizC/Demo3/fuses.c | 2 +- Demo/PIC18_WizC/Demo3/interrupt.c | 2 +- Demo/PIC18_WizC/Demo3/main.c | 2 +- Demo/PIC18_WizC/Demo4/FreeRTOSConfig.h | 2 +- Demo/PIC18_WizC/Demo4/WIZCmake.h | 2 +- Demo/PIC18_WizC/Demo4/fuses.c | 2 +- Demo/PIC18_WizC/Demo4/interrupt.c | 2 +- Demo/PIC18_WizC/Demo4/main.c | 2 +- Demo/PIC18_WizC/Demo5/FreeRTOSConfig.h | 2 +- Demo/PIC18_WizC/Demo5/WIZCmake.h | 2 +- Demo/PIC18_WizC/Demo5/fuses.c | 2 +- Demo/PIC18_WizC/Demo5/interrupt.c | 2 +- Demo/PIC18_WizC/Demo5/main.c | 2 +- Demo/PIC18_WizC/Demo6/FreeRTOSConfig.h | 2 +- Demo/PIC18_WizC/Demo6/WIZCmake.h | 2 +- Demo/PIC18_WizC/Demo6/fuses.c | 2 +- Demo/PIC18_WizC/Demo6/interrupt.c | 2 +- Demo/PIC18_WizC/Demo6/main.c | 2 +- Demo/PIC18_WizC/Demo7/FreeRTOSConfig.h | 2 +- Demo/PIC18_WizC/Demo7/WIZCmake.h | 2 +- Demo/PIC18_WizC/Demo7/fuses.c | 2 +- Demo/PIC18_WizC/Demo7/interrupt.c | 2 +- Demo/PIC18_WizC/Demo7/main.c | 2 +- Demo/PIC18_WizC/ParTest/ParTest.c | 2 +- Demo/PIC18_WizC/serial/isrSerialRx.c | 2 +- Demo/PIC18_WizC/serial/isrSerialTx.c | 2 +- Demo/PIC18_WizC/serial/serial.c | 2 +- Demo/PIC24_MPLAB/FreeRTOSConfig.h | 2 +- Demo/PIC24_MPLAB/ParTest/ParTest.c | 2 +- Demo/PIC24_MPLAB/lcd.c | 2 +- Demo/PIC24_MPLAB/lcd.h | 2 +- Demo/PIC24_MPLAB/main.c | 2 +- Demo/PIC24_MPLAB/serial/serial.c | 2 +- Demo/PIC24_MPLAB/timertest.c | 2 +- Demo/PIC24_MPLAB/timertest.h | 2 +- Demo/WizNET_DEMO_GCC_ARM7/FreeRTOSConfig.h | 2 +- Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.c | 2 +- Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.h | 2 +- Demo/WizNET_DEMO_GCC_ARM7/Makefile | 2 +- Demo/WizNET_DEMO_GCC_ARM7/TCP.c | 2 +- Demo/WizNET_DEMO_GCC_ARM7/TCP.h | 2 +- Demo/WizNET_DEMO_GCC_ARM7/TCPISR.c | 2 +- Demo/WizNET_DEMO_GCC_ARM7/html_pages.h | 2 +- Demo/WizNET_DEMO_GCC_ARM7/i2c.c | 2 +- Demo/WizNET_DEMO_GCC_ARM7/i2c.h | 2 +- Demo/WizNET_DEMO_GCC_ARM7/i2cISR.c | 2 +- Demo/WizNET_DEMO_GCC_ARM7/main.c | 2 +- Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h | 2 +- Demo/WizNET_DEMO_TERN_186/HTTPTask.c | 2 +- Demo/WizNET_DEMO_TERN_186/HTTPTask.h | 2 +- Demo/WizNET_DEMO_TERN_186/main.c | 2 +- Demo/WizNET_DEMO_TERN_186/serial/serial.c | 2 +- Demo/dsPIC_MPLAB/FreeRTOSConfig.h | 2 +- Demo/dsPIC_MPLAB/ParTest/ParTest.c | 2 +- Demo/dsPIC_MPLAB/lcd.c | 2 +- Demo/dsPIC_MPLAB/lcd.h | 2 +- Demo/dsPIC_MPLAB/main.c | 2 +- Demo/dsPIC_MPLAB/serial/serial.c | 2 +- Demo/dsPIC_MPLAB/timertest.c | 2 +- Demo/dsPIC_MPLAB/timertest.h | 2 +- Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/Makefile | 41 +- Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/config.mk | 2 +- .../AT32UC3A/IAR/Debug/Obj/lwipdemo.pbd | 49 + Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.dep | 1165 +++ Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.ewp | 2 +- .../AT32UC3A/IAR/settings/lwipdemo.cspy.bat | 32 + .../AT32UC3A/IAR/settings/lwipdemo.dbgdt | 5 + .../AT32UC3A/IAR/settings/lwipdemo.dni | 5 + .../AT32UC3A/IAR/settings/lwipdemo.wsdt | 66 + Demo/lwIP_AVR32_UC3/DRIVERS/INTC/intc.c | 5 + Demo/lwIP_AVR32_UC3/DRIVERS/PM/pm.h | 12 +- Demo/lwIP_AVR32_UC3/FreeRTOSConfig.h | 4 +- Demo/lwIP_AVR32_UC3/UTILS/compiler.h | 46 +- Demo/lwIP_Demo_Rowley_ARM7/BasicWEB.c | 2 +- Demo/lwIP_Demo_Rowley_ARM7/BasicWEB.h | 2 +- Demo/lwIP_Demo_Rowley_ARM7/EMAC/SAM7_EMAC.c | 2 +- Demo/lwIP_Demo_Rowley_ARM7/EMAC/SAM7_EMAC.h | 2 +- .../EMAC/SAM7_EMAC_ISR.c | 2 +- Demo/lwIP_Demo_Rowley_ARM7/FreeRTOSConfig.h | 2 +- Demo/lwIP_Demo_Rowley_ARM7/ParTest/ParTest.c | 2 +- Demo/lwIP_Demo_Rowley_ARM7/USB/USB-CDC.c | 2 +- Demo/lwIP_Demo_Rowley_ARM7/USB/USB-CDC.h | 2 +- Demo/lwIP_Demo_Rowley_ARM7/USB/USBIsr.c | 2 +- Demo/lwIP_Demo_Rowley_ARM7/USB/descriptors.h | 2 +- Demo/lwIP_Demo_Rowley_ARM7/USB/usb.h | 2 +- Demo/lwIP_Demo_Rowley_ARM7/main.c | 2 +- Demo/lwIP_Demo_Rowley_ARM7/makefile | 2 +- Demo/msp430_CrossWorks/FreeRTOSConfig.h | 2 +- Demo/msp430_CrossWorks/ParTest/ParTest.c | 2 +- Demo/msp430_CrossWorks/main.c | 2 +- Demo/msp430_CrossWorks/serial/serial.c | 2 +- Demo/msp430_GCC/FreeRTOSConfig.h | 2 +- Demo/msp430_GCC/ParTest/ParTest.c | 2 +- Demo/msp430_GCC/main.c | 2 +- Demo/msp430_GCC/makefile | 2 +- Demo/msp430_GCC/serial/serial.c | 2 +- Demo/uIP_Demo_IAR_ARM7/EMAC/EMAClISR.s79 | 2 +- Demo/uIP_Demo_IAR_ARM7/EMAC/SAM7_EMAC.c | 2 +- Demo/uIP_Demo_IAR_ARM7/FreeRTOSConfig.h | 2 +- Demo/uIP_Demo_IAR_ARM7/ParTest/ParTest.c | 2 +- Demo/uIP_Demo_IAR_ARM7/main.c | 2 +- Demo/uIP_Demo_Rowley_ARM7/FreeRTOSConfig.h | 2 +- Demo/uIP_Demo_Rowley_ARM7/main.c | 2 +- Source/croutine.c | 2 +- Source/include/FreeRTOS.h | 2 +- Source/include/croutine.h | 2 +- Source/include/list.h | 2 +- Source/include/portable.h | 2 +- Source/include/projdefs.h | 2 +- Source/include/queue.h | 10 +- Source/include/semphr.h | 2 +- Source/include/task.h | 2 +- Source/list.c | 2 +- Source/portable/BCC/16BitDOS/Flsh186/port.c | 2 +- .../portable/BCC/16BitDOS/Flsh186/prtmacro.h | 2 +- Source/portable/BCC/16BitDOS/PC/port.c | 2 +- Source/portable/BCC/16BitDOS/PC/prtmacro.h | 2 +- Source/portable/BCC/16BitDOS/common/portasm.h | 2 +- .../portable/BCC/16BitDOS/common/portcomn.c | 2 +- Source/portable/CodeWarrior/HCS12/port.c | 2 +- Source/portable/CodeWarrior/HCS12/portmacro.h | 2 +- Source/portable/GCC/ARM7_AT91FR40008/port.c | 2 +- .../portable/GCC/ARM7_AT91FR40008/portISR.c | 2 +- .../portable/GCC/ARM7_AT91FR40008/portmacro.h | 2 +- Source/portable/GCC/ARM7_AT91SAM7S/port.c | 2 +- Source/portable/GCC/ARM7_AT91SAM7S/portISR.c | 2 +- .../portable/GCC/ARM7_AT91SAM7S/portmacro.h | 2 +- Source/portable/GCC/ARM7_LPC2000/port.c | 2 +- Source/portable/GCC/ARM7_LPC2000/portISR.c | 2 +- Source/portable/GCC/ARM7_LPC2000/portmacro.h | 2 +- Source/portable/GCC/ARM7_LPC23xx/port.c | 6 +- Source/portable/GCC/ARM7_LPC23xx/portISR.c | 7 +- Source/portable/GCC/ARM7_LPC23xx/portmacro.h | 2 +- Source/portable/GCC/ARM_CM3/port.c | 85 +- Source/portable/GCC/ARM_CM3/portmacro.h | 37 +- Source/portable/GCC/ATMega323/port.c | 2 +- Source/portable/GCC/ATMega323/portmacro.h | 2 +- Source/portable/GCC/AVR32_UC3/port.c | 17 +- Source/portable/GCC/AVR32_UC3/portmacro.h | 2 +- Source/portable/GCC/H8S2329/port.c | 2 +- Source/portable/GCC/H8S2329/portmacro.h | 2 +- Source/portable/GCC/HCS12/port.c | 2 +- Source/portable/GCC/HCS12/portmacro.h | 2 +- Source/portable/GCC/MSP430F449/port.c | 2 +- Source/portable/GCC/MSP430F449/portmacro.h | 2 +- Source/portable/GCC/MicroBlaze/port.c | 2 +- Source/portable/GCC/MicroBlaze/portmacro.h | 2 +- Source/portable/GCC/STR75x/port.c | 2 +- Source/portable/GCC/STR75x/portISR.c | 2 +- Source/portable/GCC/STR75x/portmacro.h | 2 +- Source/portable/IAR/ARM_CM3/port.c | 4 +- Source/portable/IAR/ARM_CM3/portasm.s | 71 +- Source/portable/IAR/ARM_CM3/portmacro.h | 3 +- Source/portable/IAR/ATMega323/port.c | 2 +- Source/portable/IAR/ATMega323/portmacro.h | 2 +- Source/portable/IAR/ATMega323/portmacro.s90 | 2 +- Source/portable/IAR/AVR32_UC3/exception.s82 | 42 +- Source/portable/IAR/AVR32_UC3/port.c | 15 +- Source/portable/IAR/AVR32_UC3/portmacro.h | 2 +- Source/portable/IAR/AtmelSAM7S64/port.c | 2 +- Source/portable/IAR/AtmelSAM7S64/portmacro.h | 2 +- Source/portable/IAR/LPC2000/port.c | 2 +- Source/portable/IAR/LPC2000/portmacro.h | 2 +- Source/portable/IAR/STR71x/port.c | 2 +- Source/portable/IAR/STR71x/portmacro.h | 2 +- Source/portable/IAR/STR75x/ISR_Support.h | 2 +- Source/portable/IAR/STR75x/port.c | 2 +- Source/portable/IAR/STR75x/portasm.s79 | 2 +- Source/portable/IAR/STR75x/portmacro.h | 2 +- Source/portable/IAR/STR91x/ISR_Support.h | 2 +- Source/portable/IAR/STR91x/port.c | 283 +- Source/portable/IAR/STR91x/portasm.s79 | 2 +- Source/portable/IAR/STR91x/portmacro.h | 2 +- Source/portable/Keil/ARM7/port.c | 2 +- Source/portable/Keil/ARM7/portISR.c | 2 +- Source/portable/Keil/ARM7/portmacro.h | 2 +- Source/portable/MPLAB/PIC18F/port.c | 2 +- Source/portable/MPLAB/PIC18F/portmacro.h | 2 +- Source/portable/MPLAB/PIC24_dsPIC/port.c | 2 +- Source/portable/MPLAB/PIC24_dsPIC/portmacro.h | 2 +- Source/portable/MemMang/heap_1.c | 2 +- Source/portable/MemMang/heap_2.c | 2 +- Source/portable/MemMang/heap_3.c | 2 +- .../Paradigm/Tern_EE/large_untested/port.c | 2 +- .../Paradigm/Tern_EE/large_untested/portasm.h | 2 +- .../Tern_EE/large_untested/portmacro.h | 2 +- Source/portable/Paradigm/Tern_EE/small/port.c | 2 +- .../portable/Paradigm/Tern_EE/small/portasm.h | 2 +- .../Paradigm/Tern_EE/small/portmacro.h | 2 +- Source/portable/RVDS/ARM_CM3/port.c | 33 +- Source/portable/RVDS/ARM_CM3/portmacro.h | 2 +- .../portable/Rowley/MSP430F449/Port1/port.c | 2 +- .../Rowley/MSP430F449/Port1/portmacro.h | 2 +- .../portable/Rowley/MSP430F449/Port2/port.c | 2 +- .../Rowley/MSP430F449/Port2/portmacro.h | 2 +- Source/portable/Rowley/MSP430F449/port.c | 2 +- Source/portable/Rowley/MSP430F449/portmacro.h | 2 +- Source/portable/SDCC/Cygnal/port.c | 2 +- Source/portable/SDCC/Cygnal/portmacro.h | 2 +- .../portable/WizC/PIC18/Drivers/Tick/Tick.c | 2 +- .../WizC/PIC18/Drivers/Tick/isrTick.c | 2 +- Source/portable/WizC/PIC18/addFreeRTOS.h | 2 +- Source/portable/WizC/PIC18/port.c | 2 +- Source/portable/WizC/PIC18/portmacro.h | 2 +- .../portable/oWatcom/16BitDOS/Flsh186/port.c | 2 +- .../oWatcom/16BitDOS/Flsh186/portmacro.h | 2 +- Source/portable/oWatcom/16BitDOS/PC/port.c | 2 +- .../portable/oWatcom/16BitDOS/PC/portmacro.h | 2 +- .../oWatcom/16BitDOS/common/portasm.h | 2 +- .../oWatcom/16BitDOS/common/portcomn.c | 2 +- Source/queue.c | 14 +- Source/tasks.c | 4 +- 758 files changed, 52099 insertions(+), 2061 deletions(-) create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.lock create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/33/5b/e7/4/history.index create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/69/history.index create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/ad/history.index create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/history.index create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/properties.index create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.markers create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.markers create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/31.tree create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml create mode 100644 Demo/ARM7_LPC2368_Eclipse/.metadata/version.ini create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.cproject create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.project create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LPC23xx.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/ParTest/ParTest.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/boot.s create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/main.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/clock-arch.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/404.html create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.html create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makefsdata create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makestrings create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uIP_Task.c create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uip-conf.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/webserver.h create mode 100644 Demo/ARM7_LPC2368_Eclipse/lpc2368_flash.cfg create mode 100644 Demo/ARM7_LPC2368_Eclipse/lpc2xxx_pp.cfg create mode 100644 Demo/ARM7_LPC2368_Eclipse/program.script create mode 100644 Demo/ARM9_STR91X_IAR/Library/source/91x_tim.c create mode 100644 Demo/ARM9_STR91X_IAR/lwip/api/sys_arch.c create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/arch/cc.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/arch/cpu.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/arch/lwip_errno.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/arch/perf.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/arch/sys_arch.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/lwIPWebServer/BasicWEB.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/lwIPWebServer/fs.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/lwIPWebServer/fsdata.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/lwIPWebServer/httpd.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/lwip/lwipopts.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/include/lwip/opt.h create mode 100644 Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/BasicWEB.c create mode 100644 Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/fs.c create mode 100644 Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/fs/WS1/404.html create mode 100644 Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/fs/WS1/index.html create mode 100644 Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/fs/WS1/logo.gif create mode 100644 Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/fsdata.c create mode 100644 Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/httpd.c create mode 100644 Demo/ARM9_STR91X_IAR/lwip/netif/ethernetif.c create mode 100644 Demo/ARM9_STR91X_IAR/settings/RTOSDemo.cspy.bat create mode 100644 Demo/AVR32_UC3/AT32UC3A/IAR/Debug/Obj/rtosdemo.pbd create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.lock create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/.log create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/.log create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/7f/history.index create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/c5/5b/e7/7a/history.index create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/c5/a8/history.index create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/c5/history.index create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/history.index create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/properties.index create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/19.tree create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/version.ini create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/.cproject create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/.project create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/FreeRTOSConfig.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/Makefile create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/ParTest/ParTest.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/bitmap.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/lcd_message.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/main.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/osram128x64x4.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/osram128x64x4.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/rit128x96x4.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/standalone.ld create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/startup.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/timertest.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/Makefile.webserver create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/clock-arch.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/emac.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/emac.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/http-strings create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/http-strings.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/http-strings.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-cgi.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-cgi.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/404.html create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.html create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makefsdata create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makestrings create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uIP_Task.c create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uip-conf.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/webserver.h create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232.cfg create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232_flash.cfg create mode 100644 Demo/CORTEX_LM3Sxxxx_Eclipse/program.script create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/Debug/Obj/RTOSDemo.pbd create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/ParTest/ParTest.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Opt create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Uv2 create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.dep create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewd create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewp create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.eww create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.xcl create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/bitmap.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/lcd_message.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/main.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/rit128x96x4.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.cspy.bat create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dbgdt create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dni create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.wsdt create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_ewarm.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_rvmdk.S create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/timertest.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/Makefile.webserver create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/clock-arch.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/404.html create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.html create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/io.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/stats.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/tcp.shtml create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makefsdata create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makestrings create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uIP_Task.c create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uip-conf.h create mode 100644 Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/webserver.h create mode 100644 Demo/Common/drivers/LuminaryMicro/EULA.txt create mode 100644 Demo/Common/drivers/LuminaryMicro/IAR/driverlib.r79 create mode 100644 Demo/Common/drivers/LuminaryMicro/Keil/driverlib.lib create mode 100644 Demo/Common/drivers/LuminaryMicro/adc.h create mode 100644 Demo/Common/drivers/LuminaryMicro/arm-none-eabi-gcc/libdriver.a create mode 100644 Demo/Common/drivers/LuminaryMicro/can.h create mode 100644 Demo/Common/drivers/LuminaryMicro/comp.h create mode 100644 Demo/Common/drivers/LuminaryMicro/cpu.h create mode 100644 Demo/Common/drivers/LuminaryMicro/debug.h create mode 100644 Demo/Common/drivers/LuminaryMicro/ethernet.h create mode 100644 Demo/Common/drivers/LuminaryMicro/gpio.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hibernate.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_adc.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_can.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_comp.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_ethernet.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_flash.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_gpio.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_hibernate.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_i2c.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_ints.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_memmap.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_nvic.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_pwm.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_qei.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_ssi.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_sysctl.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_timer.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_types.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_uart.h create mode 100644 Demo/Common/drivers/LuminaryMicro/hw_watchdog.h create mode 100644 Demo/Common/drivers/LuminaryMicro/i2c.h create mode 100644 Demo/Common/drivers/LuminaryMicro/interrupt.h create mode 100644 Demo/Common/drivers/LuminaryMicro/lmi_flash.h create mode 100644 Demo/Common/drivers/LuminaryMicro/lmi_timer.h create mode 100644 Demo/Common/drivers/LuminaryMicro/pwm.h create mode 100644 Demo/Common/drivers/LuminaryMicro/qei.h create mode 100644 Demo/Common/drivers/LuminaryMicro/rit128x96x4.h create mode 100644 Demo/Common/drivers/LuminaryMicro/ssi.h create mode 100644 Demo/Common/drivers/LuminaryMicro/sysctl.h create mode 100644 Demo/Common/drivers/LuminaryMicro/systick.h create mode 100644 Demo/Common/drivers/LuminaryMicro/timer.h create mode 100644 Demo/Common/drivers/LuminaryMicro/uart.h create mode 100644 Demo/Common/drivers/LuminaryMicro/ustdlib.c create mode 100644 Demo/Common/drivers/LuminaryMicro/watchdog.h create mode 100644 Demo/Common/drivers/OpenOCD/license.txt create mode 100644 Demo/Common/drivers/OpenOCD/openocd-pp.exe create mode 100644 Demo/Common/drivers/OpenOCD/openocd_ftdi.exe create mode 100644 Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/Debug/Obj/lwipdemo.pbd create mode 100644 Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.dep create mode 100644 Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/settings/lwipdemo.cspy.bat create mode 100644 Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/settings/lwipdemo.dbgdt create mode 100644 Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/settings/lwipdemo.dni create mode 100644 Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/settings/lwipdemo.wsdt diff --git a/Demo/ARM7_AT91FR40008_GCC/FreeRTOSConfig.h b/Demo/ARM7_AT91FR40008_GCC/FreeRTOSConfig.h index 841dcc810..07a2c8512 100644 --- a/Demo/ARM7_AT91FR40008_GCC/FreeRTOSConfig.h +++ b/Demo/ARM7_AT91FR40008_GCC/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91FR40008_GCC/Makefile b/Demo/ARM7_AT91FR40008_GCC/Makefile index 6aa05faf2..b4aee7bb7 100644 --- a/Demo/ARM7_AT91FR40008_GCC/Makefile +++ b/Demo/ARM7_AT91FR40008_GCC/Makefile @@ -1,4 +1,4 @@ -# FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. +# FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. # # This file is part of the FreeRTOS.org distribution. # diff --git a/Demo/ARM7_AT91FR40008_GCC/ParTest/ParTest.c b/Demo/ARM7_AT91FR40008_GCC/ParTest/ParTest.c index db3eca95f..3ddd9ffd7 100644 --- a/Demo/ARM7_AT91FR40008_GCC/ParTest/ParTest.c +++ b/Demo/ARM7_AT91FR40008_GCC/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91FR40008_GCC/main.c b/Demo/ARM7_AT91FR40008_GCC/main.c index 784409c34..edbdf3717 100644 --- a/Demo/ARM7_AT91FR40008_GCC/main.c +++ b/Demo/ARM7_AT91FR40008_GCC/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91FR40008_GCC/serial/serial.c b/Demo/ARM7_AT91FR40008_GCC/serial/serial.c index 24a0e5eb0..49ab7fabf 100644 --- a/Demo/ARM7_AT91FR40008_GCC/serial/serial.c +++ b/Demo/ARM7_AT91FR40008_GCC/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91FR40008_GCC/serial/serialISR.c b/Demo/ARM7_AT91FR40008_GCC/serial/serialISR.c index af9ac8bbd..4fdcab46c 100644 --- a/Demo/ARM7_AT91FR40008_GCC/serial/serialISR.c +++ b/Demo/ARM7_AT91FR40008_GCC/serial/serialISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91SAM7S64_IAR/FreeRTOSConfig.h b/Demo/ARM7_AT91SAM7S64_IAR/FreeRTOSConfig.h index 88882d0e1..76272a046 100644 --- a/Demo/ARM7_AT91SAM7S64_IAR/FreeRTOSConfig.h +++ b/Demo/ARM7_AT91SAM7S64_IAR/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91SAM7S64_IAR/ParTest/ParTest.c b/Demo/ARM7_AT91SAM7S64_IAR/ParTest/ParTest.c index 39ef8ddec..6c5ef809e 100644 --- a/Demo/ARM7_AT91SAM7S64_IAR/ParTest/ParTest.c +++ b/Demo/ARM7_AT91SAM7S64_IAR/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91SAM7S64_IAR/USB/USBSample.c b/Demo/ARM7_AT91SAM7S64_IAR/USB/USBSample.c index 197e13d77..90d7a1bbd 100644 --- a/Demo/ARM7_AT91SAM7S64_IAR/USB/USBSample.c +++ b/Demo/ARM7_AT91SAM7S64_IAR/USB/USBSample.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91SAM7S64_IAR/main.c b/Demo/ARM7_AT91SAM7S64_IAR/main.c index aabe3b047..a7f4a850b 100644 --- a/Demo/ARM7_AT91SAM7S64_IAR/main.c +++ b/Demo/ARM7_AT91SAM7S64_IAR/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_AT91SAM7S64_IAR/serial/serial.c b/Demo/ARM7_AT91SAM7S64_IAR/serial/serial.c index c6ca00f52..19c7b2235 100644 --- a/Demo/ARM7_AT91SAM7S64_IAR/serial/serial.c +++ b/Demo/ARM7_AT91SAM7S64_IAR/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2106_GCC/FreeRTOSConfig.h b/Demo/ARM7_LPC2106_GCC/FreeRTOSConfig.h index d5ee9d852..ffb291e88 100644 --- a/Demo/ARM7_LPC2106_GCC/FreeRTOSConfig.h +++ b/Demo/ARM7_LPC2106_GCC/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2106_GCC/Makefile b/Demo/ARM7_LPC2106_GCC/Makefile index 978dcd8c1..8880bf61d 100644 --- a/Demo/ARM7_LPC2106_GCC/Makefile +++ b/Demo/ARM7_LPC2106_GCC/Makefile @@ -1,4 +1,4 @@ -# FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. +# FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. # # This file is part of the FreeRTOS.org distribution. # diff --git a/Demo/ARM7_LPC2106_GCC/ParTest/ParTest.c b/Demo/ARM7_LPC2106_GCC/ParTest/ParTest.c index 28d35c9b9..0946ab474 100644 --- a/Demo/ARM7_LPC2106_GCC/ParTest/ParTest.c +++ b/Demo/ARM7_LPC2106_GCC/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2106_GCC/main.c b/Demo/ARM7_LPC2106_GCC/main.c index 6d4bd558c..f5bc1dd3c 100644 --- a/Demo/ARM7_LPC2106_GCC/main.c +++ b/Demo/ARM7_LPC2106_GCC/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2106_GCC/serial/serial.c b/Demo/ARM7_LPC2106_GCC/serial/serial.c index 5e522a110..bbb5b207a 100644 --- a/Demo/ARM7_LPC2106_GCC/serial/serial.c +++ b/Demo/ARM7_LPC2106_GCC/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2106_GCC/serial/serialISR.c b/Demo/ARM7_LPC2106_GCC/serial/serialISR.c index 509a21349..57a18e5c1 100644 --- a/Demo/ARM7_LPC2106_GCC/serial/serialISR.c +++ b/Demo/ARM7_LPC2106_GCC/serial/serialISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_IAR/FreeRTOSConfig.h b/Demo/ARM7_LPC2129_IAR/FreeRTOSConfig.h index 1606ce8b7..186f2ee2f 100644 --- a/Demo/ARM7_LPC2129_IAR/FreeRTOSConfig.h +++ b/Demo/ARM7_LPC2129_IAR/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_IAR/ParTest/ParTest.c b/Demo/ARM7_LPC2129_IAR/ParTest/ParTest.c index 7456dedcc..5d74aee05 100644 --- a/Demo/ARM7_LPC2129_IAR/ParTest/ParTest.c +++ b/Demo/ARM7_LPC2129_IAR/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_IAR/main.c b/Demo/ARM7_LPC2129_IAR/main.c index 8bee2260b..e8bacb736 100644 --- a/Demo/ARM7_LPC2129_IAR/main.c +++ b/Demo/ARM7_LPC2129_IAR/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_IAR/serial/serial.c b/Demo/ARM7_LPC2129_IAR/serial/serial.c index 199de46c4..c4b96011b 100644 --- a/Demo/ARM7_LPC2129_IAR/serial/serial.c +++ b/Demo/ARM7_LPC2129_IAR/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_Keil/FreeRTOSConfig.h b/Demo/ARM7_LPC2129_Keil/FreeRTOSConfig.h index 85c58f955..53f00b9c1 100644 --- a/Demo/ARM7_LPC2129_Keil/FreeRTOSConfig.h +++ b/Demo/ARM7_LPC2129_Keil/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_Keil/ParTest/ParTest.c b/Demo/ARM7_LPC2129_Keil/ParTest/ParTest.c index c41b98b90..7e3b5c5b8 100644 --- a/Demo/ARM7_LPC2129_Keil/ParTest/ParTest.c +++ b/Demo/ARM7_LPC2129_Keil/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_Keil/main.c b/Demo/ARM7_LPC2129_Keil/main.c index 954ee8937..eea635aae 100644 --- a/Demo/ARM7_LPC2129_Keil/main.c +++ b/Demo/ARM7_LPC2129_Keil/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_Keil/serial/serial.c b/Demo/ARM7_LPC2129_Keil/serial/serial.c index 85d7f723e..3e5cdacbc 100644 --- a/Demo/ARM7_LPC2129_Keil/serial/serial.c +++ b/Demo/ARM7_LPC2129_Keil/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2129_Keil/serial/serialISR.c b/Demo/ARM7_LPC2129_Keil/serial/serialISR.c index 75824c4d1..9480397ee 100644 --- a/Demo/ARM7_LPC2129_Keil/serial/serialISR.c +++ b/Demo/ARM7_LPC2129_Keil/serial/serialISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h b/Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h index 5fa9e191f..654b8e612 100644 --- a/Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h +++ b/Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -71,6 +71,7 @@ the CPU frequency. */ #define configUSE_TRACE_FACILITY 1 #define configUSE_16_BIT_TICKS 0 #define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 0 /* Co-routine definitions. */ #define configUSE_CO_ROUTINES 0 diff --git a/Demo/ARM7_LPC2138_Rowley/main.c b/Demo/ARM7_LPC2138_Rowley/main.c index 49b5f0af2..1e6e33944 100644 --- a/Demo/ARM7_LPC2138_Rowley/main.c +++ b/Demo/ARM7_LPC2138_Rowley/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2138_Rowley/mainISR.c b/Demo/ARM7_LPC2138_Rowley/mainISR.c index 1843a0299..ae9370562 100644 --- a/Demo/ARM7_LPC2138_Rowley/mainISR.c +++ b/Demo/ARM7_LPC2138_Rowley/mainISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.lock b/Demo/ARM7_LPC2368_Eclipse/.metadata/.lock new file mode 100644 index 000000000..e69de29bb diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml new file mode 100644 index 000000000..c4b91cfab --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc new file mode 100644 index 000000000..6643763dc --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c @@ -0,0 +1 @@ + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp @@ -0,0 +1 @@ + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml new file mode 100644 index 000000000..9e62c4bb5 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml @@ -0,0 +1,5 @@ + +
+
+
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml new file mode 100644 index 000000000..5240b1825 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml new file mode 100644 index 000000000..ab95b0564 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml @@ -0,0 +1,12 @@ + +
+ + + + + +
+
+
+
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/33/5b/e7/4/history.index b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/33/5b/e7/4/history.index new file mode 100644 index 0000000000000000000000000000000000000000..b5f9597a432ba35918c1395b8939d434013e1577 GIT binary patch literal 314 zcmZQ#U|?WkFx7V}N=*$4@ekI^FG^Pk&Mz%WPSr2SFDgk)%1PCCcXrly4DvOP_X%(| zGOnlq%jhLDFbUMMFkOsbkP%tim)$a-dBKe2<~<^e3=9*V-MfD^oIys+_*BBtR>5S? zKL6byaRv)AEbt0 ip-RZ&LCYcH3WwU{ki|>CbV1A!$YH;ZWbdaQh+hE9foROoS=_JB7OegO8;1q5_}p_g5b;w-rI5v~+#uo$Du1vdi_iIM4OV|3=i#qY zNbV0xfru+is(p+iUS|bXZxES!09jlz(*i8MAdDj)S^QA2Iapj_<~A2(@o8Voz~Tv? z49t+l-BTgr45CPhq0}=VJ|wX?8<-#%FZ?&VeG bhdagc8IcS!0?NnjpDs^h-dJ|-7)S#ErykmZ literal 0 HcmV?d00001 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/ad/history.index b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/ad/history.index new file mode 100644 index 0000000000000000000000000000000000000000..5ae7777f5fb754fcb1e57082aa5c7e69cae056b5 GIT binary patch literal 47 zcmZQ#U|?Wm;M4bUcF`}$FDl7NPSHzdU|g`OcKVHQ1{pEqQwc{~1(Of2H`pV>$iM&q DB_IwO literal 0 HcmV?d00001 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/history.index b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/history.index new file mode 100644 index 0000000000000000000000000000000000000000..7a847c7693866ff125efaf82f4cc9ec4cfa46017 GIT binary patch literal 3897 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 HPoG}_9S7Nf literal 0 HcmV?d00001 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version new file mode 100644 index 000000000..25cb955ba --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..567d91cd707e345c0ad0e09f06e362bed8c88b18 GIT binary patch literal 104 zcmYkzF$#n*5Czab_FGukc!;bZ0wCy|fMLG2U(YWCRJ*seoc>6Bn1_$)_~Fhdx|MM@H-Z5lGBG0!hG z(&f^QI~*zC0(uxo!~W{yV4xps5KxWr}>>}2EAUu_J`;OFu3UH=a@lP6{w)64% Ge(?=nDBz+1 literal 0 HcmV?d00001 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/31.tree b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/31.tree new file mode 100644 index 0000000000000000000000000000000000000000..fe99eb19207e5ce2fc309782f812812d1d889565 GIT binary patch literal 30614 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 Py2JWS^DSb+1={}tKgh^X literal 0 HcmV?d00001 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources new file mode 100644 index 0000000000000000000000000000000000000000..7a06fe0924269b4f4763fc19ce607107a225095d GIT binary patch literal 517 zcmZ?R*xjhShe1S2b=vdAllRFf=Oz}Hq!uZZBqrsg@^UE$m*y!1rxqv}7%3PTS{a*I znHnoN1&1gY85o%JawX@aCKkD*=9DDH=NF~xr6%WO78IxIC8w0=CFd8V+LjcR0u8~T zDkU|kG+nPW6RIi&WQ=P?L1s~6NoIZ?b^{F!EiBBF%cmERYsd2fEtb`3;-<9v_t>^ literal 0 HcmV?d00001 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs new file mode 100644 index 000000000..bb305ff00 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs @@ -0,0 +1,3 @@ +#Sun Aug 19 15:20:24 BST 2007 +eclipse.preferences.version=1 +indexer/preferenceScope=0 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs new file mode 100644 index 000000000..1c0fdf149 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs @@ -0,0 +1,3 @@ +#Sun Aug 19 15:19:23 BST 2007 +org.eclipse.cdt.debug.core.cDebug.common_source_containers=\r\n\r\n\r\n\r\n +eclipse.preferences.version=1 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs new file mode 100644 index 000000000..962a2b7ac --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs @@ -0,0 +1,5 @@ +#Sun Aug 19 23:06:50 BST 2007 +pref_state_memento.org.eclipse.cdt.debug.ui.ModulesView=\r\n +eclipse.preferences.version=1 +org.eclipse.debug.ui.DebugView.org.eclipse.cdt.debug.ui.cDebug.show_full_paths=true +org.eclipse.debug.ui.BreakpointView.org.eclipse.cdt.debug.ui.cDebug.show_full_paths=true diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs new file mode 100644 index 000000000..aa0ab5b81 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs @@ -0,0 +1,3 @@ +#Sun Sep 02 21:22:35 BST 2007 +eclipse.preferences.version=1 +properties/RTOSDemo.null.976634949/0.1109417601=\#\r\n\#Sun Sep 02 21\:22\:35 BST 2007\r\n0.1109417601\=\\\#\\r\\n\\\#Sun Sep 02 21\\\:22\\\:35 BST 2007\\r\\nrcState\\\=0\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.1502006385\=\\\#\\r\\n\\\#Sun Sep 02 21\\\:22\\\:35 BST 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.1021181093\=\\\#\\r\\n\\\#Sun Sep 02 21\\\:22\\\:35 BST 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.164584712\=\\\#\\r\\n\\\#Sun Sep 02 21\\\:22\\\:35 BST 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.libs.260784574\=\\\#\\r\\n\\\#Sun Sep 02 21\\\:22\\\:35 BST 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.prefbase.toolchain.1816209921\=\\\#\\r\\n\\\#Sun Sep 02 21\\\:22\\\:35 BST 2007\\r\\nrebuildState\\\=false\\r\\n\r\n diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs new file mode 100644 index 000000000..8a970dac4 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs @@ -0,0 +1,12 @@ +#Thu Aug 23 20:22:58 BST 2007 +useQuickDiffPrefPage=true +closeBrackets=false +ensureNewlineAtEOF=true +useAnnotationsPrefPage=true +closeAngularBrackets=false +eclipse.preferences.version=1 +org.eclipse.cdt.ui.text.templates.custom= +hoverModifierMasks=org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.ui.CSourceHover;131072;org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover;0;org.eclipse.cdt.ui.CDocHover;0;org.eclipse.cdt.ui.AnnotationHover;0; +hoverModifiers=org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.ui.CSourceHover;Shift;org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover;\!0;org.eclipse.cdt.ui.CDocHover;\!0;org.eclipse.cdt.ui.AnnotationHover;\!0; +closeBraces=false +closeStrings=false diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..242e94194 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +#Fri Aug 31 14:25:00 BST 2007 +version=1 +eclipse.preferences.version=1 +pathvariable.FreeRTOS_ROOT=C\:/E/Dev/FreeRTOS +description.autobuilding=false diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs new file mode 100644 index 000000000..205a07217 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs @@ -0,0 +1,3 @@ +#Sun Sep 02 17:49:35 BST 2007 +prefWatchExpressions=\r\n\r\n\r\n\r\n +eclipse.preferences.version=1 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs new file mode 100644 index 000000000..53bcfe87a --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs @@ -0,0 +1,12 @@ +#Sun Sep 02 17:49:35 BST 2007 +org.eclipse.debug.ui.PREF_FILTER_WORKING_SETS=false +org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\r\n\r\n +org.eclipse.debug.ui.BreakpointView+org.eclipse.debug.ui.ShowSupportedBreakpointsAction=true +pref_state_memento.org.eclipse.debug.ui.VariableView=\r\n +pref_state_memento.org.eclipse.debug.ui.RegisterView=\r\n +pref_state_memento.org.eclipse.debug.ui.ExpressionView=\r\n +org.eclipse.debug.ui.PREF_FILTER_LAUNCH_CLOSED=false +preferredDetailPanes=DefaultDetailPane\:DefaultDetailPane| +org.eclipse.debug.ui.PREF_FILTER_LAUNCH_DELETED=false +eclipse.preferences.version=1 +org.eclipse.debug.ui.user_view_bindings=\r\n\r\n\r\n\r\n\r\n\r\n diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs new file mode 100644 index 000000000..8d1b31164 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs @@ -0,0 +1,7 @@ +#Sun Aug 26 17:32:13 BST 2007 +browser.x=177 +browser.w=1024 +eclipse.preferences.version=1 +browser.h=768 +browser.maximized=false +browser.y=128 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs new file mode 100644 index 000000000..2426c2b79 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs @@ -0,0 +1,3 @@ +#Sun Aug 19 19:39:29 BST 2007 +org.eclipse.search.defaultPerspective=org.eclipse.search.defaultPerspective.none +eclipse.preferences.version=1 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs new file mode 100644 index 000000000..06f8f1043 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs @@ -0,0 +1,3 @@ +#Fri Aug 31 18:19:04 BST 2007 +eclipse.preferences.version=1 +org.eclipse.team.ui.first_time=false diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs new file mode 100644 index 000000000..1affd268e --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs @@ -0,0 +1,3 @@ +#Sun Aug 19 20:45:57 BST 2007 +eclipse.preferences.version=1 +overviewRuler_migration=migrated_3.1 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs new file mode 100644 index 000000000..b6611b723 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs @@ -0,0 +1,4 @@ +#Fri Aug 31 14:27:00 BST 2007 +eclipse.preferences.version=1 +tipsAndTricks=true +platformState=1187207632230 diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs new file mode 100644 index 000000000..3e5b2b17d --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs @@ -0,0 +1,3 @@ +#Sun Aug 19 20:45:58 BST 2007 +eclipse.preferences.version=1 +showIntro=false diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs new file mode 100644 index 000000000..06cd1e9cd --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs @@ -0,0 +1,3 @@ +#Mon Aug 20 21:59:49 BST 2007 +eclipse.preferences.version=1 +org.eclipse.ui.commands=\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch new file mode 100644 index 000000000..4175eca53 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch new file mode 100644 index 000000000..f70d8f970 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch new file mode 100644 index 000000000..acc651f5b --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml new file mode 100644 index 000000000..4b1222134 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml @@ -0,0 +1,34 @@ + +
+
+ + + + + +
+
+ + + + + + + + +
+
+ + + + + +
+
+ + + + + +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml new file mode 100644 index 000000000..598b376c8 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml new file mode 100644 index 000000000..1ef2b05b5 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml @@ -0,0 +1,3 @@ + +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref new file mode 100644 index 000000000..fc158177d --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref @@ -0,0 +1,2 @@ +#Sun Aug 26 17:54:18 BST 2007 +__DEFAULT__=true diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist new file mode 100644 index 000000000..713e72168 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist @@ -0,0 +1,4 @@ +#Sun Aug 26 17:36:29 BST 2007 +__DEFAULT__=false +org.eclipse.help.ui.localSearch.master=true +expression=relative path diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist new file mode 100644 index 000000000..197837b95 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist @@ -0,0 +1,4 @@ +#Sun Aug 26 17:29:25 BST 2007 +__DEFAULT__=false +org.eclipse.help.ui.localSearch.master=true +expression=working set diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist new file mode 100644 index 000000000..a88e15eb8 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist @@ -0,0 +1,4 @@ +#Sun Aug 26 17:54:21 BST 2007 +__DEFAULT__=false +org.eclipse.help.ui.localSearch.master=true +expression=working sets diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml new file mode 100644 index 000000000..ac671478c --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml @@ -0,0 +1,6 @@ + +
+
+ +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml new file mode 100644 index 000000000..839aca5ed --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml @@ -0,0 +1,46 @@ + +
+
+ +
+
+ + + + + +
+
+ + + + + + + + +
+
+ +
+
+ + + + +
+ + + + + + + + + +
+
+
+ +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml new file mode 100644 index 000000000..1df8b48c3 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml @@ -0,0 +1,10 @@ + +
+
+ + + + + +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml new file mode 100644 index 000000000..127582b33 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -0,0 +1,26 @@ + +
+
+ + +
+
+
+
+
+
+ + + + + +
+
+ + + + + + +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml new file mode 100644 index 000000000..d3014f5c1 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml @@ -0,0 +1,4 @@ + +
+ +
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml new file mode 100644 index 000000000..ec032bd0b --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml @@ -0,0 +1,38 @@ + +
+
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml new file mode 100644 index 000000000..77beade3e --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml @@ -0,0 +1,19 @@ + +
+
+ + +
+
+ + + + +
+
+ + + + +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml new file mode 100644 index 000000000..01621f472 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml new file mode 100644 index 000000000..ce2a93059 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml new file mode 100644 index 000000000..64561b65c --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml @@ -0,0 +1,10 @@ + +
+
+ + + + + +
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml new file mode 100644 index 000000000..86928e08c --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml @@ -0,0 +1,5 @@ + +
+
+
+
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/version.ini b/Demo/ARM7_LPC2368_Eclipse/.metadata/version.ini new file mode 100644 index 000000000..c51ff745b --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/.metadata/version.ini @@ -0,0 +1 @@ +org.eclipse.core.runtime=1 \ No newline at end of file diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.cproject b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.cproject new file mode 100644 index 000000000..bbcae405f --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.cproject @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.project b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.project new file mode 100644 index 000000000..b3776decb --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.project @@ -0,0 +1,97 @@ + + + RTOSDemo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/RTOSDemo} + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + false + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + ?children? + ?name?=outputEntries\|?children?=?name?=entry\\\\\\\\\\\\\\\|\\\\\\\|\|| + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.cnature + + + + Common Demo Files + 2 + FreeRTOS_ROOT/Demo/Common + + + FreeRTOS.org Source + 2 + FreeRTOS_ROOT/Source + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 000000000..a9f7e81cf --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,3 @@ +#Sun Aug 19 20:36:58 BST 2007 +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h new file mode 100644 index 000000000..f90931c99 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h @@ -0,0 +1,108 @@ +/* + FreeRTOS V3.2.3 - Copyright (C) 2003-2005 Richard Barry. + + This file is part of the FreeRTOS distribution. + + FreeRTOS 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 2 of the License, or + (at your option) any later version. + + FreeRTOS 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 FreeRTOS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +#include +#include "lpc23xx.h" +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 1 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 1 +#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 57600000 ) /* =12Mhz xtal multiplied by 5 using the PLL. */ +#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 104 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 18 * 1024 ) ) +#define configMAX_TASK_NAME_LEN ( 10 ) +#define configUSE_TRACE_FACILITY 1 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 + +/* Co-routine definitions. */ +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ + +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetCurrentTaskHandle 1 + + +#endif /* FREERTOS_CONFIG_H */ + + +#ifndef sbi +#define sbi(x,y) x|=(1 << (y)) +#endif + +#ifndef cbi +#define cbi(x,y) x&=~(1 << (y)) +#endif + +#ifndef tstb +#define tstb(x,y) (x & (1 << (y)) ? 1 : 0) +#endif + +#ifndef toggle +#define toggle(x,y) x^=(1 << (y)) +#endif + +#ifndef BIT +#define BIT(x) (1 << (x)) + +typedef struct +{ + long xColumn; + char *pcMessage; +} xLCDMessage; + +#endif diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.c new file mode 100644 index 000000000..55c538f22 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.c @@ -0,0 +1,391 @@ +/***************************************************************************** + * + * Project : lwIP Web + * Subproject : + * Name : portlcd.c + * Function : Routines for LCD + * Designer : K. Sterckx + * Creation date : 22/01/2007 + * Compiler : GNU ARM + * Processor : LPC2368 + * Last update : + * Last updated by : + * History : + * based on example code from NXP + * + ************************************************************************ + * + * This code is used to place text on the LCD. + * + ************************************************************************/ + +#include "portlcd.h" +#include "FreeRTOS.h" +#include "Task.h" + +/* Please note, on old MCB2300 board, the LCD_E bit is p1.30, on the new board +it's p1.31, please check the schematic carefully, and change LCD_CTRL and LCD_E +accordingly if you have a different board. */ + +/* LCD IO definitions */ +#define LCD_E 0x80000000 /* Enable control pin */ +#define LCD_RW 0x20000000 /* Read/Write control pin */ +#define LCD_RS 0x10000000 /* Data/Instruction control */ +#define LCD_CTRL 0xB0000000 /* Control lines mask */ +#define LCD_DATA 0x0F000000 /* Data lines mask */ + +/* Local variables */ +static unsigned int lcd_ptr; + +/* 8 user defined characters to be loaded into CGRAM (used for bargraph) */ +static const unsigned char UserFont[8][8] = { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 }, + { 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18 }, + { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C }, + { 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E }, + { 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } +}; + +/* Local Function Prototypes */ +static void lcd_write( unsigned int c ); +static void lcd_write_4bit( unsigned int c ); +static unsigned int lcd_read_stat( void ); +static void lcd_write_cmd( unsigned int c ); +static void lcd_write_data( unsigned int d ); +static void lcd_wait_busy( void ); + + +/****************************************************************************** +** Function name: lcd_write_4bit +** +** Descriptions: +** +** parameters: four bits to write +** Returned value: None +** +******************************************************************************/ +static void lcd_write_4bit(unsigned int c) +{ + /* Write a 4-bit command to LCD controller. */ + FIO1DIR |= LCD_DATA | LCD_CTRL; + FIO1CLR = LCD_RW | LCD_DATA; + FIO1SET = (c & 0xF) << 24; + FIO1SET = LCD_E; + vTaskDelay(0); + FIO1CLR = LCD_E; + vTaskDelay(0); + return; +} + +/****************************************************************************** +** Function name: lcd_write +** +** Descriptions: +** +** parameters: word to write +** Returned value: None +** +******************************************************************************/ +static void lcd_write(unsigned int c) +{ + /* Write data/command to LCD controller. */ + lcd_write_4bit (c >> 4); + lcd_write_4bit (c); + return; +} + +/****************************************************************************** +** Function name: lcd_read_stat +** +** Descriptions: +** +** parameters: None +** Returned value: status +** +******************************************************************************/ +static unsigned int lcd_read_stat(void) +{ + /* Read status of LCD controller (ST7066) */ + unsigned int stat; + + FIO1DIR &= ~LCD_DATA; + FIO1CLR = LCD_RS; + FIO1SET = LCD_RW; + vTaskDelay( 0 ); + FIO1SET = LCD_E; + vTaskDelay( 0 ); + stat = (FIO1PIN >> 20) & 0xF0; + FIO1CLR = LCD_E; + vTaskDelay( 0 ); + FIO1SET = LCD_E; + vTaskDelay( 0 ); + stat |= (FIO1PIN >> 24) & 0xF; + FIO1CLR = LCD_E; + return (stat); +} + +/****************************************************************************** +** Function name: lcd_wait_busy +** +** Descriptions: +** +** parameters: None +** Returned value: None +** +******************************************************************************/ +static void lcd_wait_busy(void) +{ + /* Wait until LCD controller (ST7066) is busy. */ + unsigned int stat; + + do + { + stat = lcd_read_stat(); + } + while (stat & 0x80); /* Wait for busy flag */ + + return; +} + +/****************************************************************************** +** Function name: lcd_write_cmd +** +** Descriptions: +** +** parameters: command word +** Returned value: None +** +******************************************************************************/ +static void lcd_write_cmd(unsigned int c) +{ + /* Write command to LCD controller. */ + lcd_wait_busy(); + FIO1CLR = LCD_RS; + lcd_write(c); + return; +} + +/****************************************************************************** +** Function name: lcd_write_data +** +** Descriptions: +** +** parameters: data word +** Returned value: None +** +******************************************************************************/ +static void lcd_write_data(unsigned int d) +{ + /* Write data to LCD controller. */ + lcd_wait_busy(); + FIO1SET = LCD_RS; + lcd_write(d); + return; +} + +/****************************************************************************** +** Function name: LCD_init +** +** Descriptions: +** +** parameters: None +** Returned value: None +** +******************************************************************************/ +void LCD_init(void) +{ + /* Initialize the ST7066 LCD controller to 4-bit mode. */ + PINSEL3 = 0x00000000; +#if USE_FIO + SCS |= 0x00000001;/* set GPIOx to use Fast I/O */ +#endif + FIO1DIR |= LCD_CTRL | LCD_DATA; + FIO1CLR = LCD_RW | LCD_RS | LCD_DATA; + + lcd_write_4bit(0x3); /* Select 4-bit interface */ + vTaskDelay(100); + lcd_write_4bit(0x3); + vTaskDelay(100); + lcd_write_4bit(0x3); + lcd_write_4bit(0x2); + + lcd_write_cmd(0x28); /* 2 lines, 5x8 character matrix */ + lcd_write_cmd(0x0e); /* Display ctrl:Disp/Curs/Blnk=ON */ + lcd_write_cmd(0x06); /* Entry mode: Move right, no shift */ + + LCD_load( (unsigned char *)&UserFont, sizeof (UserFont) ); + LCD_cls(); + return; +} + +/****************************************************************************** +** Function name: LCD_load +** +** Descriptions: +** +** parameters: pointer to the buffer and counter +** Returned value: None +** +******************************************************************************/ +void LCD_load(unsigned char *fp, unsigned int cnt) +{ + /* Load user-specific characters into CGRAM */ + unsigned int i; + + lcd_write_cmd( 0x40 ); /* Set CGRAM address counter to 0 */ + for (i = 0; i < cnt; i++, fp++) + { + lcd_write_data( *fp ); + } + return; +} + +/****************************************************************************** +** Function name: LCD_gotoxy +** +** Descriptions: +** +** parameters: pixel X and Y +** Returned value: None +** +******************************************************************************/ +void LCD_gotoxy(unsigned int x, unsigned int y) +{ + /* Set cursor position on LCD display. Left corner: 1,1, right: 16,2 */ + unsigned int c; + + c = --x; + if (--y) + { + c |= 0x40; + } + lcd_write_cmd (c | 0x80); + lcd_ptr = y*16 + x; + return; +} + +/****************************************************************************** +** Function name: LCD_cls +** +** Descriptions: +** +** parameters: None +** Returned value: None +** +******************************************************************************/ +void LCD_cls(void) +{ + /* Clear LCD display, move cursor to home position. */ + lcd_write_cmd (0x01); + LCD_gotoxy (1,1); + return; +} + +/****************************************************************************** +** Function name: LCD_cur_off +** +** Descriptions: +** +** parameters: None +** Returned value: None +** +******************************************************************************/ +void LCD_cur_off(void) +{ + /* Switch off LCD cursor. */ + lcd_write_cmd(0x0c); + return; +} + + +/****************************************************************************** +** Function name: LCD_on +** +** Descriptions: +** +** parameters: None +** Returned value: None +** +******************************************************************************/ +void LCD_on(void) +{ + /* Switch on LCD and enable cursor. */ + lcd_write_cmd (0x0e); + return; +} + +/****************************************************************************** +** Function name: LCD_putc +** +** Descriptions: +** +** parameters: unsigned char character +** Returned value: None +** +******************************************************************************/ +void LCD_putc(unsigned char c) +{ + /* Print a character to LCD at current cursor position. */ + if (lcd_ptr == 16) + { + lcd_write_cmd (0xc0); + } + lcd_write_data(c); + lcd_ptr++; + return; +} + +/****************************************************************************** +** Function name: LCD_puts +** +** Descriptions: +** +** parameters: pointer to the buffer +** Returned value: None +** +******************************************************************************/ +void LCD_puts(char *sp) +{ + /* Print a string to LCD display. */ + while (*sp) + { + LCD_putc (*sp++); + } + return; +} + +/****************************************************************************** +** Function name: LCD_bargraph +** +** Descriptions: +** +** parameters: value and size +** Returned value: None +** +******************************************************************************/ +void LCD_bargraph(unsigned int val, unsigned int size) +{ + /* Print a bargraph to LCD display. */ + /* - val: value 0..100 % */ + /* - size: size of bargraph 1..16 */ + unsigned int i; + + val = val * size / 20; /* Display matrix 5 x 8 pixels */ + for (i = 0; i < size; i++) + { + if (val > 5) + { + LCD_putc(5); + val -= 5; + } + else + { + LCD_putc(val); + break; + } + } + return; +} diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.h new file mode 100644 index 000000000..76962538f --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LCD/portlcd.h @@ -0,0 +1,31 @@ +/***************************************************************************** + * rtc.h: Header file for NXP LPC23xx/24xx Family Microprocessors + * + * Copyright(C) 2006, NXP Semiconductor + * All rights reserved. + * + * History + * 2006.07.13 ver 1.00 Prelimnary version, first Release + * +******************************************************************************/ +#ifndef __PORTLCD_H +#define __PORTLCD_H + +extern void LCD_init(void); +extern void LCD_load(unsigned char *fp, unsigned int cnt); +extern void LCD_gotoxy(unsigned int x, unsigned int y); +extern void LCD_cls(void); +extern void LCD_cur_off(void); +extern void LCD_on(void); +extern void LCD_putc(unsigned char c); +extern void LCD_puts(char *sp); +extern void LCD_bargraph(unsigned int val, unsigned int size); + +extern void LCD_putnibble(unsigned char nibble); +extern void LCD_puthexbyte(unsigned char abyte); + + +#endif /* end __PORTLCD_H */ +/***************************************************************************** +** End Of File +******************************************************************************/ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LPC23xx.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LPC23xx.h new file mode 100644 index 000000000..d3587f553 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/LPC23xx.h @@ -0,0 +1,1138 @@ +/***************************************************************************** + * + * Project : lwIP Web + * Subproject : + * Name : LPC23xx.h + * Function : register definitions + * Designer : K. Sterckx + * Creation date : 22/01/2007 + * Compiler : GNU ARM + * Processor : LPC23xx + * Last update : + * Last updated by : + * History : + * + ***************************************************************************** + * + * Hardware specific macro's and defines + * + ****************************************************************************/ + +#ifndef __LPC23xx_H +#define __LPC23xx_H + +/* Vectored Interrupt Controller (VIC) */ +#define VIC_BASE_ADDR 0xFFFFF000 +#define VICIRQStatus (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x000)) +#define VICFIQStatus (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x004)) +#define VICRawIntr (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x008)) +#define VICIntSelect (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x00C)) +#define VICIntEnable (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x010)) +#define VICIntEnClr (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x014)) +#define VICSoftInt (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x018)) +#define VICSoftIntClr (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x01C)) +#define VICProtection (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x020)) +#define VICSWPrioMask (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x024)) + +#define VICVectAddr0 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x100)) +#define VICVectAddr1 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x104)) +#define VICVectAddr2 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x108)) +#define VICVectAddr3 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x10C)) +#define VICVectAddr4 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x110)) +#define VICVectAddr5 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x114)) +#define VICVectAddr6 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x118)) +#define VICVectAddr7 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x11C)) +#define VICVectAddr8 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x120)) +#define VICVectAddr9 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x124)) +#define VICVectAddr10 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x128)) +#define VICVectAddr11 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x12C)) +#define VICVectAddr12 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x130)) +#define VICVectAddr13 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x134)) +#define VICVectAddr14 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x138)) +#define VICVectAddr15 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x13C)) +#define VICVectAddr16 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x140)) +#define VICVectAddr17 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x144)) +#define VICVectAddr18 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x148)) +#define VICVectAddr19 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x14C)) +#define VICVectAddr20 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x150)) +#define VICVectAddr21 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x154)) +#define VICVectAddr22 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x158)) +#define VICVectAddr23 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x15C)) +#define VICVectAddr24 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x160)) +#define VICVectAddr25 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x164)) +#define VICVectAddr26 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x168)) +#define VICVectAddr27 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x16C)) +#define VICVectAddr28 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x170)) +#define VICVectAddr29 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x174)) +#define VICVectAddr30 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x178)) +#define VICVectAddr31 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x17C)) + +/* The name convention below is from previous LPC2000 family MCUs, in LPC230x, +these registers are known as "VICVectPriority(x)". */ +#define VICVectCntl0 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x200)) +#define VICVectCntl1 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x204)) +#define VICVectCntl2 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x208)) +#define VICVectCntl3 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x20C)) +#define VICVectCntl4 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x210)) +#define VICVectCntl5 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x214)) +#define VICVectCntl6 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x218)) +#define VICVectCntl7 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x21C)) +#define VICVectCntl8 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x220)) +#define VICVectCntl9 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x224)) +#define VICVectCntl10 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x228)) +#define VICVectCntl11 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x22C)) +#define VICVectCntl12 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x230)) +#define VICVectCntl13 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x234)) +#define VICVectCntl14 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x238)) +#define VICVectCntl15 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x23C)) +#define VICVectCntl16 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x240)) +#define VICVectCntl17 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x244)) +#define VICVectCntl18 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x248)) +#define VICVectCntl19 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x24C)) +#define VICVectCntl20 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x250)) +#define VICVectCntl21 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x254)) +#define VICVectCntl22 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x258)) +#define VICVectCntl23 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x25C)) +#define VICVectCntl24 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x260)) +#define VICVectCntl25 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x264)) +#define VICVectCntl26 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x268)) +#define VICVectCntl27 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x26C)) +#define VICVectCntl28 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x270)) +#define VICVectCntl29 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x274)) +#define VICVectCntl30 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x278)) +#define VICVectCntl31 (*(volatile unsigned int *)(VIC_BASE_ADDR + 0x27C)) + +#define VICVectAddr (*(volatile unsigned int *)(VIC_BASE_ADDR + 0xF00)) + + +/* Pin Connect Block */ +#define PINSEL_BASE_ADDR 0xE002C000 +#define PINSEL0 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x00)) +#define PINSEL1 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x04)) +#define PINSEL2 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x08)) +#define PINSEL3 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x0C)) +#define PINSEL4 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x10)) +#define PINSEL5 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x14)) +#define PINSEL6 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x18)) +#define PINSEL7 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x1C)) +#define PINSEL8 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x20)) +#define PINSEL9 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x24)) +#define PINSEL10 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x28)) + +#define PINMODE0 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x40)) +#define PINMODE1 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x44)) +#define PINMODE2 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x48)) +#define PINMODE3 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x4C)) +#define PINMODE4 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x50)) +#define PINMODE5 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x54)) +#define PINMODE6 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x58)) +#define PINMODE7 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x5C)) +#define PINMODE8 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x60)) +#define PINMODE9 (*(volatile unsigned int *)(PINSEL_BASE_ADDR + 0x64)) + +/* General Purpose Input/Output (GPIO) */ +#define GPIO_BASE_ADDR 0xE0028000 +#define IOPIN0 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x00)) +#define IOSET0 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x04)) +#define IODIR0 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x08)) +#define IOCLR0 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x0C)) +#define IOPIN1 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x10)) +#define IOSET1 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x14)) +#define IODIR1 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x18)) +#define IOCLR1 (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x1C)) + +/* GPIO Interrupt Registers */ +#define IO0_INT_EN_R (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x90)) +#define IO0_INT_EN_F (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x94)) +#define IO0_INT_STAT_R (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x84)) +#define IO0_INT_STAT_F (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x88)) +#define IO0_INT_CLR (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x8C)) + +#define IO2_INT_EN_R (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0xB0)) +#define IO2_INT_EN_F (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0xB4)) +#define IO2_INT_STAT_R (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0xA4)) +#define IO2_INT_STAT_F (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0xA8)) +#define IO2_INT_CLR (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0xAC)) + +#define IO_INT_STAT (*(volatile unsigned int *)(GPIO_BASE_ADDR + 0x80)) + +#define PARTCFG_BASE_ADDR 0x3FFF8000 +#define PARTCFG (*(volatile unsigned int *)(PARTCFG_BASE_ADDR + 0x00)) + +/* Fast I/O setup */ +#define FIO_BASE_ADDR 0x3FFFC000 +#define FIO0DIR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x00)) +#define FIO0MASK (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x10)) +#define FIO0PIN (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x14)) +#define FIO0SET (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x18)) +#define FIO0CLR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x1C)) + +#define FIO1DIR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x20)) +#define FIO1MASK (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x30)) +#define FIO1PIN (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x34)) +#define FIO1SET (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x38)) +#define FIO1CLR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x3C)) + +#define FIO2DIR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x40)) +#define FIO2MASK (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x50)) +#define FIO2PIN (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x54)) +#define FIO2SET (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x58)) +#define FIO2CLR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x5C)) + +#define FIO3DIR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x60)) +#define FIO3MASK (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x70)) +#define FIO3PIN (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x74)) +#define FIO3SET (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x78)) +#define FIO3CLR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x7C)) + +#define FIO4DIR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x80)) +#define FIO4MASK (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x90)) +#define FIO4PIN (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x94)) +#define FIO4SET (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x98)) +#define FIO4CLR (*(volatile unsigned int *)(FIO_BASE_ADDR + 0x9C)) + +/* FIOs can be accessed through WORD, HALF-WORD or BYTE. */ +#define FIO0DIR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x01)) +#define FIO1DIR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x21)) +#define FIO2DIR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x41)) +#define FIO3DIR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x61)) +#define FIO4DIR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x81)) + +#define FIO0DIR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x02)) +#define FIO1DIR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x22)) +#define FIO2DIR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x42)) +#define FIO3DIR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x62)) +#define FIO4DIR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x82)) + +#define FIO0DIR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x03)) +#define FIO1DIR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x23)) +#define FIO2DIR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x43)) +#define FIO3DIR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x63)) +#define FIO4DIR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x83)) + +#define FIO0DIR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x04)) +#define FIO1DIR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x24)) +#define FIO2DIR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x44)) +#define FIO3DIR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x64)) +#define FIO4DIR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x84)) + +#define FIO0DIRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x00)) +#define FIO1DIRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x20)) +#define FIO2DIRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x40)) +#define FIO3DIRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x60)) +#define FIO4DIRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x80)) + +#define FIO0DIRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x02)) +#define FIO1DIRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x22)) +#define FIO2DIRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x42)) +#define FIO3DIRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x62)) +#define FIO4DIRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x82)) + +#define FIO0MASK0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x10)) +#define FIO1MASK0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x30)) +#define FIO2MASK0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x50)) +#define FIO3MASK0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x70)) +#define FIO4MASK0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x90)) + +#define FIO0MASK1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x11)) +#define FIO1MASK1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x21)) +#define FIO2MASK1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x51)) +#define FIO3MASK1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x71)) +#define FIO4MASK1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x91)) + +#define FIO0MASK2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x12)) +#define FIO1MASK2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x32)) +#define FIO2MASK2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x52)) +#define FIO3MASK2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x72)) +#define FIO4MASK2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x92)) + +#define FIO0MASK3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x13)) +#define FIO1MASK3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x33)) +#define FIO2MASK3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x53)) +#define FIO3MASK3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x73)) +#define FIO4MASK3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x93)) + +#define FIO0MASKL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x10)) +#define FIO1MASKL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x30)) +#define FIO2MASKL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x50)) +#define FIO3MASKL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x70)) +#define FIO4MASKL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x90)) + +#define FIO0MASKU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x12)) +#define FIO1MASKU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x32)) +#define FIO2MASKU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x52)) +#define FIO3MASKU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x72)) +#define FIO4MASKU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x92)) + +#define FIO0PIN0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x14)) +#define FIO1PIN0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x34)) +#define FIO2PIN0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x54)) +#define FIO3PIN0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x74)) +#define FIO4PIN0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x94)) + +#define FIO0PIN1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x15)) +#define FIO1PIN1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x25)) +#define FIO2PIN1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x55)) +#define FIO3PIN1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x75)) +#define FIO4PIN1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x95)) + +#define FIO0PIN2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x16)) +#define FIO1PIN2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x36)) +#define FIO2PIN2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x56)) +#define FIO3PIN2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x76)) +#define FIO4PIN2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x96)) + +#define FIO0PIN3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x17)) +#define FIO1PIN3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x37)) +#define FIO2PIN3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x57)) +#define FIO3PIN3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x77)) +#define FIO4PIN3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x97)) + +#define FIO0PINL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x14)) +#define FIO1PINL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x34)) +#define FIO2PINL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x54)) +#define FIO3PINL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x74)) +#define FIO4PINL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x94)) + +#define FIO0PINU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x16)) +#define FIO1PINU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x36)) +#define FIO2PINU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x56)) +#define FIO3PINU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x76)) +#define FIO4PINU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x96)) + +#define FIO0SET0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x18)) +#define FIO1SET0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x38)) +#define FIO2SET0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x58)) +#define FIO3SET0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x78)) +#define FIO4SET0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x98)) + +#define FIO0SET1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x19)) +#define FIO1SET1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x29)) +#define FIO2SET1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x59)) +#define FIO3SET1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x79)) +#define FIO4SET1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x99)) + +#define FIO0SET2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x1A)) +#define FIO1SET2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x3A)) +#define FIO2SET2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x5A)) +#define FIO3SET2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x7A)) +#define FIO4SET2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x9A)) + +#define FIO0SET3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x1B)) +#define FIO1SET3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x3B)) +#define FIO2SET3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x5B)) +#define FIO3SET3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x7B)) +#define FIO4SET3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x9B)) + +#define FIO0SETL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x18)) +#define FIO1SETL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x38)) +#define FIO2SETL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x58)) +#define FIO3SETL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x78)) +#define FIO4SETL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x98)) + +#define FIO0SETU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x1A)) +#define FIO1SETU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x3A)) +#define FIO2SETU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x5A)) +#define FIO3SETU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x7A)) +#define FIO4SETU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x9A)) + +#define FIO0CLR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x1C)) +#define FIO1CLR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x3C)) +#define FIO2CLR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x5C)) +#define FIO3CLR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x7C)) +#define FIO4CLR0 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x9C)) + +#define FIO0CLR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x1D)) +#define FIO1CLR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x2D)) +#define FIO2CLR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x5D)) +#define FIO3CLR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x7D)) +#define FIO4CLR1 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x9D)) + +#define FIO0CLR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x1E)) +#define FIO1CLR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x3E)) +#define FIO2CLR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x5E)) +#define FIO3CLR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x7E)) +#define FIO4CLR2 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x9E)) + +#define FIO0CLR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x1F)) +#define FIO1CLR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x3F)) +#define FIO2CLR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x5F)) +#define FIO3CLR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x7F)) +#define FIO4CLR3 (*(volatile unsigned char *)(FIO_BASE_ADDR + 0x9F)) + +#define FIO0CLRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x1C)) +#define FIO1CLRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x3C)) +#define FIO2CLRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x5C)) +#define FIO3CLRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x7C)) +#define FIO4CLRL (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x9C)) + +#define FIO0CLRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x1E)) +#define FIO1CLRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x3E)) +#define FIO2CLRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x5E)) +#define FIO3CLRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x7E)) +#define FIO4CLRU (*(volatile unsigned short *)(FIO_BASE_ADDR + 0x9E)) + + +/* System Control Block(SCB) modules include Memory Accelerator Module, +Phase Locked Loop, VPB divider, Power Control, External Interrupt, +Reset, and Code Security/Debugging */ +#define SCB_BASE_ADDR 0xE01FC000 + +/* Memory Accelerator Module (MAM) */ +#define MAMCR (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x000)) +#define MAMTIM (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x004)) +#define MEMMAP (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x040)) + +/* Phase Locked Loop (PLL) */ +#define PLLCON (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x080)) +#define PLLCFG (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x084)) +#define PLLSTAT (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x088)) +#define PLLFEED (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x08C)) + +/* Power Control */ +#define PCON (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x0C0)) +#define PCONP (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x0C4)) + +/* Clock Divider */ +#define APBDIV (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x100)) +#define CCLKCFG (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x104)) +#define USBCLKCFG (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x108)) +#define CLKSRCSEL (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x10C)) +#define PCLKSEL0 (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x1A8)) +#define PCLKSEL1 (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x1AC)) + +/* External Interrupts */ +#define EXTINT (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x140)) +#define INTWAKE (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x144)) +#define EXTMODE (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x148)) +#define EXTPOLAR (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x14C)) + +/* Reset, reset source identification */ +#define RSIR (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x180)) + +/* RSID, code security protection */ +#define CSPR (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x184)) + +/* AHB configuration */ +#define AHBCFG1 (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x188)) +#define AHBCFG2 (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x18C)) + +/* System Controls and Status */ +#define SCS (*(volatile unsigned int *)(SCB_BASE_ADDR + 0x1A0)) + +/*MPMC(EMC) registers*/ +#define STATIC_MEM0_BASE 0x80000000 +#define STATIC_MEM1_BASE 0x81000000 +#define STATIC_MEM2_BASE 0x82000000 +#define STATIC_MEM3_BASE 0x83000000 + +#define DYNAMIC_MEM0_BASE 0xA0000000 +#define DYNAMIC_MEM1_BASE 0xB0000000 +#define DYNAMIC_MEM2_BASE 0xC0000000 +#define DYNAMIC_MEM3_BASE 0xD0000000 + +/* External Memory Controller (EMC) */ +#define EMC_BASE_ADDR 0xFFE08000 +#define EMC_CTRL (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x000)) +#define EMC_STAT (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x004)) +#define EMC_CONFIG (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x008)) + +/* Dynamic RAM access registers */ +#define EMC_DYN_CTRL (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x020)) +#define EMC_DYN_RFSH (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x024)) +#define EMC_DYN_RD_CFG (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x028)) +#define EMC_DYN_RP (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x030)) +#define EMC_DYN_RAS (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x034)) +#define EMC_DYN_SREX (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x038)) +#define EMC_DYN_APR (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x03C)) +#define EMC_DYN_DAL (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x040)) +#define EMC_DYN_WR (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x044)) +#define EMC_DYN_RC (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x048)) +#define EMC_DYN_RFC (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x04C)) +#define EMC_DYN_XSR (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x050)) +#define EMC_DYN_RRD (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x054)) +#define EMC_DYN_MRD (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x058)) + +#define EMC_DYN_CFG0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x100)) +#define EMC_DYN_RASCAS0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x104)) +#define EMC_DYN_CFG1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x140)) +#define EMC_DYN_RASCAS1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x144)) +#define EMC_DYN_CFG2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x160)) +#define EMC_DYN_RASCAS2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x164)) +#define EMC_DYN_CFG3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x180)) +#define EMC_DYN_RASCAS3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x184)) + +/* static RAM access registers */ +#define EMC_STA_CFG0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x200)) +#define EMC_STA_WAITWEN0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x204)) +#define EMC_STA_WAITOEN0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x208)) +#define EMC_STA_WAITRD0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x20C)) +#define EMC_STA_WAITPAGE0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x210)) +#define EMC_STA_WAITWR0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x214)) +#define EMC_STA_WAITTURN0 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x218)) + +#define EMC_STA_CFG1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x220)) +#define EMC_STA_WAITWEN1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x224)) +#define EMC_STA_WAITOEN1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x228)) +#define EMC_STA_WAITRD1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x22C)) +#define EMC_STA_WAITPAGE1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x230)) +#define EMC_STA_WAITWR1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x234)) +#define EMC_STA_WAITTURN1 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x238)) + +#define EMC_STA_CFG2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x240)) +#define EMC_STA_WAITWEN2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x244)) +#define EMC_STA_WAITOEN2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x248)) +#define EMC_STA_WAITRD2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x24C)) +#define EMC_STA_WAITPAGE2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x250)) +#define EMC_STA_WAITWR2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x254)) +#define EMC_STA_WAITTURN2 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x258)) + +#define EMC_STA_CFG3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x260)) +#define EMC_STA_WAITWEN3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x264)) +#define EMC_STA_WAITOEN3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x268)) +#define EMC_STA_WAITRD3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x26C)) +#define EMC_STA_WAITPAGE3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x270)) +#define EMC_STA_WAITWR3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x274)) +#define EMC_STA_WAITTURN3 (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x278)) + +#define EMC_STA_EXT_WAIT (*(volatile unsigned int *)(EMC_BASE_ADDR + 0x880)) + + +/* Timer 0 */ +#define TMR0_BASE_ADDR 0xE0004000 +#define T0IR (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x00)) +#define T0TCR (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x04)) +#define T0TC (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x08)) +#define T0PR (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x0C)) +#define T0PC (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x10)) +#define T0MCR (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x14)) +#define T0MR0 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x18)) +#define T0MR1 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x1C)) +#define T0MR2 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x20)) +#define T0MR3 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x24)) +#define T0CCR (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x28)) +#define T0CR0 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x2C)) +#define T0CR1 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x30)) +#define T0CR2 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x34)) +#define T0CR3 (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x38)) +#define T0EMR (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x3C)) +#define T0CTCR (*(volatile unsigned int *)(TMR0_BASE_ADDR + 0x70)) + +/* Timer 1 */ +#define TMR1_BASE_ADDR 0xE0008000 +#define T1IR (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x00)) +#define T1TCR (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x04)) +#define T1TC (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x08)) +#define T1PR (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x0C)) +#define T1PC (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x10)) +#define T1MCR (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x14)) +#define T1MR0 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x18)) +#define T1MR1 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x1C)) +#define T1MR2 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x20)) +#define T1MR3 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x24)) +#define T1CCR (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x28)) +#define T1CR0 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x2C)) +#define T1CR1 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x30)) +#define T1CR2 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x34)) +#define T1CR3 (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x38)) +#define T1EMR (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x3C)) +#define T1CTCR (*(volatile unsigned int *)(TMR1_BASE_ADDR + 0x70)) + +/* Timer 2 */ +#define TMR2_BASE_ADDR 0xE0070000 +#define T2IR (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x00)) +#define T2TCR (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x04)) +#define T2TC (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x08)) +#define T2PR (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x0C)) +#define T2PC (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x10)) +#define T2MCR (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x14)) +#define T2MR0 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x18)) +#define T2MR1 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x1C)) +#define T2MR2 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x20)) +#define T2MR3 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x24)) +#define T2CCR (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x28)) +#define T2CR0 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x2C)) +#define T2CR1 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x30)) +#define T2CR2 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x34)) +#define T2CR3 (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x38)) +#define T2EMR (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x3C)) +#define T2CTCR (*(volatile unsigned int *)(TMR2_BASE_ADDR + 0x70)) + +/* Timer 3 */ +#define TMR3_BASE_ADDR 0xE0074000 +#define T3IR (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x00)) +#define T3TCR (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x04)) +#define T3TC (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x08)) +#define T3PR (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x0C)) +#define T3PC (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x10)) +#define T3MCR (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x14)) +#define T3MR0 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x18)) +#define T3MR1 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x1C)) +#define T3MR2 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x20)) +#define T3MR3 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x24)) +#define T3CCR (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x28)) +#define T3CR0 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x2C)) +#define T3CR1 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x30)) +#define T3CR2 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x34)) +#define T3CR3 (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x38)) +#define T3EMR (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x3C)) +#define T3CTCR (*(volatile unsigned int *)(TMR3_BASE_ADDR + 0x70)) + + +/* Pulse Width Modulator (PWM) */ +#define PWM0_BASE_ADDR 0xE0014000 +#define PWM0IR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x00)) +#define PWM0TCR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x04)) +#define PWM0TC (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x08)) +#define PWM0PR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x0C)) +#define PWM0PC (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x10)) +#define PWM0MCR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x14)) +#define PWM0MR0 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x18)) +#define PWM0MR1 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x1C)) +#define PWM0MR2 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x20)) +#define PWM0MR3 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x24)) +#define PWM0CCR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x28)) +#define PWM0CR0 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x2C)) +#define PWM0CR1 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x30)) +#define PWM0CR2 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x34)) +#define PWM0CR3 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x38)) +#define PWM0EMR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x3C)) +#define PWM0MR4 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x40)) +#define PWM0MR5 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x44)) +#define PWM0MR6 (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x48)) +#define PWM0PCR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x4C)) +#define PWM0LER (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x50)) +#define PWM0CTCR (*(volatile unsigned int *)(PWM0_BASE_ADDR + 0x70)) + +#define PWM1_BASE_ADDR 0xE0018000 +#define PWM1IR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x00)) +#define PWM1TCR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x04)) +#define PWM1TC (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x08)) +#define PWM1PR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x0C)) +#define PWM1PC (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x10)) +#define PWM1MCR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x14)) +#define PWM1MR0 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x18)) +#define PWM1MR1 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x1C)) +#define PWM1MR2 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x20)) +#define PWM1MR3 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x24)) +#define PWM1CCR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x28)) +#define PWM1CR0 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x2C)) +#define PWM1CR1 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x30)) +#define PWM1CR2 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x34)) +#define PWM1CR3 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x38)) +#define PWM1EMR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x3C)) +#define PWM1MR4 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x40)) +#define PWM1MR5 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x44)) +#define PWM1MR6 (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x48)) +#define PWM1PCR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x4C)) +#define PWM1LER (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x50)) +#define PWM1CTCR (*(volatile unsigned int *)(PWM1_BASE_ADDR + 0x70)) + + +/* Universal Asynchronous Receiver Transmitter 0 (UART0) */ +#define UART0_BASE_ADDR 0xE000C000 +#define U0RBR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x00)) +#define U0THR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x00)) +#define U0DLL (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x00)) +#define U0DLM (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x04)) +#define U0IER (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x04)) +#define U0IIR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x08)) +#define U0FCR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x08)) +#define U0LCR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x0C)) +#define U0LSR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x14)) +#define U0SCR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x1C)) +#define U0ACR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x20)) +#define U0ICR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x24)) +#define U0FDR (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x28)) +#define U0TER (*(volatile unsigned int *)(UART0_BASE_ADDR + 0x30)) + +/* Universal Asynchronous Receiver Transmitter 1 (UART1) */ +#define UART1_BASE_ADDR 0xE0010000 +#define U1RBR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x00)) +#define U1THR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x00)) +#define U1DLL (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x00)) +#define U1DLM (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x04)) +#define U1IER (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x04)) +#define U1IIR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x08)) +#define U1FCR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x08)) +#define U1LCR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x0C)) +#define U1MCR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x10)) +#define U1LSR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x14)) +#define U1MSR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x18)) +#define U1SCR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x1C)) +#define U1ACR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x20)) +#define U1FDR (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x28)) +#define U1TER (*(volatile unsigned int *)(UART1_BASE_ADDR + 0x30)) + +/* Universal Asynchronous Receiver Transmitter 2 (UART2) */ +#define UART2_BASE_ADDR 0xE0078000 +#define U2RBR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x00)) +#define U2THR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x00)) +#define U2DLL (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x00)) +#define U2DLM (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x04)) +#define U2IER (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x04)) +#define U2IIR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x08)) +#define U2FCR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x08)) +#define U2LCR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x0C)) +#define U2LSR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x14)) +#define U2SCR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x1C)) +#define U2ACR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x20)) +#define U2ICR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x24)) +#define U2FDR (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x28)) +#define U2TER (*(volatile unsigned int *)(UART2_BASE_ADDR + 0x30)) + +/* Universal Asynchronous Receiver Transmitter 3 (UART3) */ +#define UART3_BASE_ADDR 0xE007C000 +#define U3RBR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x00)) +#define U3THR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x00)) +#define U3DLL (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x00)) +#define U3DLM (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x04)) +#define U3IER (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x04)) +#define U3IIR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x08)) +#define U3FCR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x08)) +#define U3LCR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x0C)) +#define U3LSR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x14)) +#define U3SCR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x1C)) +#define U3ACR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x20)) +#define U3ICR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x24)) +#define U3FDR (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x28)) +#define U3TER (*(volatile unsigned int *)(UART3_BASE_ADDR + 0x30)) + +/* I2C Interface 0 */ +#define I2C0_BASE_ADDR 0xE001C000 +#define I20CONSET (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x00)) +#define I20STAT (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x04)) +#define I20DAT (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x08)) +#define I20ADR (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x0C)) +#define I20SCLH (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x10)) +#define I20SCLL (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x14)) +#define I20CONCLR (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x18)) +//Slightly different naming +#define I2C0CONSET (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x00)) +#define I2C0STAT (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x04)) +#define I2C0DAT (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x08)) +#define I2C0ADR (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x0C)) +#define I2C0SCLH (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x10)) +#define I2C0SCLL (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x14)) +#define I2C0CONCLR (*(volatile unsigned int *)(I2C0_BASE_ADDR + 0x18)) + + +/* I2C Interface 1 */ +#define I2C1_BASE_ADDR 0xE005C000 +#define I21CONSET (*(volatile unsigned int *)(I2C1_BASE_ADDR + 0x00)) +#define I21STAT (*(volatile unsigned int *)(I2C1_BASE_ADDR + 0x04)) +#define I21DAT (*(volatile unsigned int *)(I2C1_BASE_ADDR + 0x08)) +#define I21ADR (*(volatile unsigned int *)(I2C1_BASE_ADDR + 0x0C)) +#define I21SCLH (*(volatile unsigned int *)(I2C1_BASE_ADDR + 0x10)) +#define I21SCLL (*(volatile unsigned int *)(I2C1_BASE_ADDR + 0x14)) +#define I21CONCLR (*(volatile unsigned int *)(I2C1_BASE_ADDR + 0x18)) + +/* I2C Interface 2 */ +#define I2C2_BASE_ADDR 0xE0080000 +#define I22CONSET (*(volatile unsigned int *)(I2C2_BASE_ADDR + 0x00)) +#define I22STAT (*(volatile unsigned int *)(I2C2_BASE_ADDR + 0x04)) +#define I22DAT (*(volatile unsigned int *)(I2C2_BASE_ADDR + 0x08)) +#define I22ADR (*(volatile unsigned int *)(I2C2_BASE_ADDR + 0x0C)) +#define I22SCLH (*(volatile unsigned int *)(I2C2_BASE_ADDR + 0x10)) +#define I22SCLL (*(volatile unsigned int *)(I2C2_BASE_ADDR + 0x14)) +#define I22CONCLR (*(volatile unsigned int *)(I2C2_BASE_ADDR + 0x18)) + +/* SPI0 (Serial Peripheral Interface 0) */ +#define SPI0_BASE_ADDR 0xE0020000 +#define S0SPCR (*(volatile unsigned int *)(SPI0_BASE_ADDR + 0x00)) +#define S0SPSR (*(volatile unsigned int *)(SPI0_BASE_ADDR + 0x04)) +#define S0SPDR (*(volatile unsigned int *)(SPI0_BASE_ADDR + 0x08)) +#define S0SPCCR (*(volatile unsigned int *)(SPI0_BASE_ADDR + 0x0C)) +#define S0SPINT (*(volatile unsigned int *)(SPI0_BASE_ADDR + 0x1C)) + +/* SSP0 Controller */ +#define SSP0_BASE_ADDR 0xE0068000 +#define SSP0CR0 (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x00)) +#define SSP0CR1 (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x04)) +#define SSP0DR (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x08)) +#define SSP0SR (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x0C)) +#define SSP0CPSR (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x10)) +#define SSP0IMSC (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x14)) +#define SSP0RIS (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x18)) +#define SSP0MIS (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x1C)) +#define SSP0ICR (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x20)) +#define SSP0DMACR (*(volatile unsigned int *)(SSP0_BASE_ADDR + 0x24)) + +/* SSP1 Controller */ +#define SSP1_BASE_ADDR 0xE0030000 +#define SSP1CR0 (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x00)) +#define SSP1CR1 (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x04)) +#define SSP1DR (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x08)) +#define SSP1SR (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x0C)) +#define SSP1CPSR (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x10)) +#define SSP1IMSC (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x14)) +#define SSP1RIS (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x18)) +#define SSP1MIS (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x1C)) +#define SSP1ICR (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x20)) +#define SSP1DMACR (*(volatile unsigned int *)(SSP1_BASE_ADDR + 0x24)) + + +/* Real Time Clock */ +#define RTC_BASE_ADDR 0xE0024000 +#define RTC_ILR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x00)) +#define RTC_CTC (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x04)) +#define RTC_CCR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x08)) +#define RTC_CIIR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x0C)) +#define RTC_AMR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x10)) +#define RTC_CTIME0 (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x14)) +#define RTC_CTIME1 (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x18)) +#define RTC_CTIME2 (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x1C)) +#define RTC_SEC (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x20)) +#define RTC_MIN (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x24)) +#define RTC_HOUR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x28)) +#define RTC_DOM (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x2C)) +#define RTC_DOW (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x30)) +#define RTC_DOY (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x34)) +#define RTC_MONTH (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x38)) +#define RTC_YEAR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x3C)) +#define RTC_CISS (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x40)) +#define RTC_ALSEC (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x60)) +#define RTC_ALMIN (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x64)) +#define RTC_ALHOUR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x68)) +#define RTC_ALDOM (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x6C)) +#define RTC_ALDOW (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x70)) +#define RTC_ALDOY (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x74)) +#define RTC_ALMON (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x78)) +#define RTC_ALYEAR (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x7C)) +#define RTC_PREINT (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x80)) +#define RTC_PREFRAC (*(volatile unsigned int *)(RTC_BASE_ADDR + 0x84)) + + +/* A/D Converter 0 (AD0) */ +#define AD0_BASE_ADDR 0xE0034000 +#define AD0CR (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x00)) +#define AD0GDR (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x04)) +#define AD0INTEN (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x0C)) +#define AD0DR0 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x10)) +#define AD0DR1 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x14)) +#define AD0DR2 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x18)) +#define AD0DR3 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x1C)) +#define AD0DR4 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x20)) +#define AD0DR5 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x24)) +#define AD0DR6 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x28)) +#define AD0DR7 (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x2C)) +#define AD0STAT (*(volatile unsigned int *)(AD0_BASE_ADDR + 0x30)) + + +/* D/A Converter */ +#define DAC_BASE_ADDR 0xE006C000 +#define DACR (*(volatile unsigned int *)(DAC_BASE_ADDR + 0x00)) + + +/* Watchdog */ +#define WDG_BASE_ADDR 0xE0000000 +#define WDMOD (*(volatile unsigned int *)(WDG_BASE_ADDR + 0x00)) +#define WDTC (*(volatile unsigned int *)(WDG_BASE_ADDR + 0x04)) +#define WDFEED (*(volatile unsigned int *)(WDG_BASE_ADDR + 0x08)) +#define WDTV (*(volatile unsigned int *)(WDG_BASE_ADDR + 0x0C)) +#define WDCLKSEL (*(volatile unsigned int *)(WDG_BASE_ADDR + 0x10)) + +/* CAN CONTROLLERS AND ACCEPTANCE FILTER */ +#define CAN_ACCEPT_BASE_ADDR 0xE003C000 +#define CAN_AFMR (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x00)) +#define CAN_SFF_SA (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x04)) +#define CAN_SFF_GRP_SA (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x08)) +#define CAN_EFF_SA (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x0C)) +#define CAN_EFF_GRP_SA (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x10)) +#define CAN_EOT (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x14)) +#define CAN_LUT_ERR_ADR (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x18)) +#define CAN_LUT_ERR (*(volatile unsigned int *)(CAN_ACCEPT_BASE_ADDR + 0x1C)) + +#define CAN_CENTRAL_BASE_ADDR 0xE0040000 +#define CAN_TX_SR (*(volatile unsigned int *)(CAN_CENTRAL_BASE_ADDR + 0x00)) +#define CAN_RX_SR (*(volatile unsigned int *)(CAN_CENTRAL_BASE_ADDR + 0x04)) +#define CAN_MSR (*(volatile unsigned int *)(CAN_CENTRAL_BASE_ADDR + 0x08)) + +#define CAN1_BASE_ADDR 0xE0044000 +#define CAN1MOD (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x00)) +#define CAN1CMR (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x04)) +#define CAN1GSR (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x08)) +#define CAN1ICR (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x0C)) +#define CAN1IER (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x10)) +#define CAN1BTR (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x14)) +#define CAN1EWL (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x18)) +#define CAN1SR (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x1C)) +#define CAN1RFS (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x20)) +#define CAN1RID (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x24)) +#define CAN1RDA (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x28)) +#define CAN1RDB (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x2C)) + +#define CAN1TFI1 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x30)) +#define CAN1TID1 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x34)) +#define CAN1TDA1 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x38)) +#define CAN1TDB1 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x3C)) +#define CAN1TFI2 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x40)) +#define CAN1TID2 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x44)) +#define CAN1TDA2 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x48)) +#define CAN1TDB2 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x4C)) +#define CAN1TFI3 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x50)) +#define CAN1TID3 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x54)) +#define CAN1TDA3 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x58)) +#define CAN1TDB3 (*(volatile unsigned int *)(CAN1_BASE_ADDR + 0x5C)) + +#define CAN2_BASE_ADDR 0xE0048000 +#define CAN2MOD (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x00)) +#define CAN2CMR (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x04)) +#define CAN2GSR (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x08)) +#define CAN2ICR (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x0C)) +#define CAN2IER (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x10)) +#define CAN2BTR (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x14)) +#define CAN2EWL (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x18)) +#define CAN2SR (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x1C)) +#define CAN2RFS (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x20)) +#define CAN2RID (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x24)) +#define CAN2RDA (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x28)) +#define CAN2RDB (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x2C)) + +#define CAN2TFI1 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x30)) +#define CAN2TID1 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x34)) +#define CAN2TDA1 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x38)) +#define CAN2TDB1 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x3C)) +#define CAN2TFI2 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x40)) +#define CAN2TID2 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x44)) +#define CAN2TDA2 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x48)) +#define CAN2TDB2 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x4C)) +#define CAN2TFI3 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x50)) +#define CAN2TID3 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x54)) +#define CAN2TDA3 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x58)) +#define CAN2TDB3 (*(volatile unsigned int *)(CAN2_BASE_ADDR + 0x5C)) + + +/* MultiMedia Card Interface(MCI) Controller */ +#define MCI_BASE_ADDR 0xE008C000 +#define MCI_POWER (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x00)) +#define MCI_CLOCK (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x04)) +#define MCI_ARGUMENT (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x08)) +#define MCI_COMMAND (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x0C)) +#define MCI_RESP_CMD (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x10)) +#define MCI_RESP0 (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x14)) +#define MCI_RESP1 (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x18)) +#define MCI_RESP2 (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x1C)) +#define MCI_RESP3 (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x20)) +#define MCI_DATA_TMR (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x24)) +#define MCI_DATA_LEN (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x28)) +#define MCI_DATA_CTRL (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x2C)) +#define MCI_DATA_CNT (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x30)) +#define MCI_STATUS (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x34)) +#define MCI_CLEAR (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x38)) +#define MCI_MASK0 (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x3C)) +#define MCI_MASK1 (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x40)) +#define MCI_FIFO_CNT (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x48)) +#define MCI_FIFO (*(volatile unsigned int *)(MCI_BASE_ADDR + 0x80)) + + +/* I2S Interface Controller (I2S) */ +#define I2S_BASE_ADDR 0xE0088000 +#define I2S_DAO (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x00)) +#define I2S_DAI (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x04)) +#define I2S_TX_FIFO (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x08)) +#define I2S_RX_FIFO (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x0C)) +#define I2S_STATE (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x10)) +#define I2S_DMA1 (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x14)) +#define I2S_DMA2 (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x18)) +#define I2S_IRQ (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x1C)) +#define I2S_TXRATE (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x20)) +#define I2S_RXRATE (*(volatile unsigned int *)(I2S_BASE_ADDR + 0x24)) + + +/* General-purpose DMA Controller */ +#define DMA_BASE_ADDR 0xFFE04000 +#define GPDMA_INT_STAT (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x000)) +#define GPDMA_INT_TCSTAT (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x004)) +#define GPDMA_INT_TCCLR (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x008)) +#define GPDMA_INT_ERR_STAT (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x00C)) +#define GPDMA_INT_ERR_CLR (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x010)) +#define GPDMA_RAW_INT_TCSTAT (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x014)) +#define GPDMA_RAW_INT_ERR_STAT (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x018)) +#define GPDMA_ENABLED_CHNS (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x01C)) +#define GPDMA_SOFT_BREQ (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x020)) +#define GPDMA_SOFT_SREQ (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x024)) +#define GPDMA_SOFT_LBREQ (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x028)) +#define GPDMA_SOFT_LSREQ (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x02C)) +#define GPDMA_CONFIG (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x030)) +#define GPDMA_SYNC (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x034)) + +/* DMA channel 0 registers */ +#define GPDMA_CH0_SRC (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x100)) +#define GPDMA_CH0_DEST (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x104)) +#define GPDMA_CH0_LLI (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x108)) +#define GPDMA_CH0_CTRL (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x10C)) +#define GPDMA_CH0_CFG (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x110)) + +/* DMA channel 1 registers */ +#define GPDMA_CH1_SRC (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x120)) +#define GPDMA_CH1_DEST (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x124)) +#define GPDMA_CH1_LLI (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x128)) +#define GPDMA_CH1_CTRL (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x12C)) +#define GPDMA_CH1_CFG (*(volatile unsigned int *)(DMA_BASE_ADDR + 0x130)) + + +/* USB Controller */ +#define USB_INT_BASE_ADDR 0xE01FC1C0 +#define USB_BASE_ADDR 0xFFE0C200 /* USB Base Address */ + +#define USB_INT_STAT (*(volatile unsigned int *)(USB_INT_BASE_ADDR + 0x00)) + +/* USB Device Interrupt Registers */ +#define DEV_INT_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0x00)) +#define DEV_INT_EN (*(volatile unsigned int *)(USB_BASE_ADDR + 0x04)) +#define DEV_INT_CLR (*(volatile unsigned int *)(USB_BASE_ADDR + 0x08)) +#define DEV_INT_SET (*(volatile unsigned int *)(USB_BASE_ADDR + 0x0C)) +#define DEV_INT_PRIO (*(volatile unsigned int *)(USB_BASE_ADDR + 0x2C)) + +/* USB Device Endpoint Interrupt Registers */ +#define EP_INT_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0x30)) +#define EP_INT_EN (*(volatile unsigned int *)(USB_BASE_ADDR + 0x34)) +#define EP_INT_CLR (*(volatile unsigned int *)(USB_BASE_ADDR + 0x38)) +#define EP_INT_SET (*(volatile unsigned int *)(USB_BASE_ADDR + 0x3C)) +#define EP_INT_PRIO (*(volatile unsigned int *)(USB_BASE_ADDR + 0x40)) + +/* USB Device Endpoint Realization Registers */ +#define REALIZE_EP (*(volatile unsigned int *)(USB_BASE_ADDR + 0x44)) +#define EP_INDEX (*(volatile unsigned int *)(USB_BASE_ADDR + 0x48)) +#define MAXPACKET_SIZE (*(volatile unsigned int *)(USB_BASE_ADDR + 0x4C)) + +/* USB Device Command Reagisters */ +#define CMD_CODE (*(volatile unsigned int *)(USB_BASE_ADDR + 0x10)) +#define CMD_DATA (*(volatile unsigned int *)(USB_BASE_ADDR + 0x14)) + +/* USB Device Data Transfer Registers */ +#define RX_DATA (*(volatile unsigned int *)(USB_BASE_ADDR + 0x18)) +#define TX_DATA (*(volatile unsigned int *)(USB_BASE_ADDR + 0x1C)) +#define RX_PLENGTH (*(volatile unsigned int *)(USB_BASE_ADDR + 0x20)) +#define TX_PLENGTH (*(volatile unsigned int *)(USB_BASE_ADDR + 0x24)) +#define USB_CTRL (*(volatile unsigned int *)(USB_BASE_ADDR + 0x28)) + +/* USB Device DMA Registers */ +#define DMA_REQ_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0x50)) +#define DMA_REQ_CLR (*(volatile unsigned int *)(USB_BASE_ADDR + 0x54)) +#define DMA_REQ_SET (*(volatile unsigned int *)(USB_BASE_ADDR + 0x58)) +#define UDCA_HEAD (*(volatile unsigned int *)(USB_BASE_ADDR + 0x80)) +#define EP_DMA_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0x84)) +#define EP_DMA_EN (*(volatile unsigned int *)(USB_BASE_ADDR + 0x88)) +#define EP_DMA_DIS (*(volatile unsigned int *)(USB_BASE_ADDR + 0x8C)) +#define DMA_INT_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0x90)) +#define DMA_INT_EN (*(volatile unsigned int *)(USB_BASE_ADDR + 0x94)) +#define EOT_INT_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0xA0)) +#define EOT_INT_CLR (*(volatile unsigned int *)(USB_BASE_ADDR + 0xA4)) +#define EOT_INT_SET (*(volatile unsigned int *)(USB_BASE_ADDR + 0xA8)) +#define NDD_REQ_INT_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0xAC)) +#define NDD_REQ_INT_CLR (*(volatile unsigned int *)(USB_BASE_ADDR + 0xB0)) +#define NDD_REQ_INT_SET (*(volatile unsigned int *)(USB_BASE_ADDR + 0xB4)) +#define SYS_ERR_INT_STAT (*(volatile unsigned int *)(USB_BASE_ADDR + 0xB8)) +#define SYS_ERR_INT_CLR (*(volatile unsigned int *)(USB_BASE_ADDR + 0xBC)) +#define SYS_ERR_INT_SET (*(volatile unsigned int *)(USB_BASE_ADDR + 0xC0)) + + +/* USB Host Controller */ +#define USBHC_BASE_ADDR 0xFFE0C000 +#define HC_REVISION (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x00)) +#define HC_CONTROL (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x04)) +#define HC_CMD_STAT (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x08)) +#define HC_INT_STAT (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x0C)) +#define HC_INT_EN (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x10)) +#define HC_INT_DIS (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x14)) +#define HC_HCCA (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x18)) +#define HC_PERIOD_CUR_ED (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x1C)) +#define HC_CTRL_HEAD_ED (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x20)) +#define HC_CTRL_CUR_ED (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x24)) +#define HC_BULK_HEAD_ED (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x28)) +#define HC_BULK_CUR_ED (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x2C)) +#define HC_DONE_HEAD (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x30)) +#define HC_FM_INTERVAL (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x34)) +#define HC_FM_REMAINING (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x38)) +#define HC_FM_NUMBER (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x3C)) +#define HC_PERIOD_START (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x40)) +#define HC_LS_THRHLD (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x44)) +#define HC_RH_DESCA (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x48)) +#define HC_RH_DESCB (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x4C)) +#define HC_RH_STAT (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x50)) +#define HC_RH_PORT_STAT1 (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x54)) +#define HC_RH_PORT_STAT2 (*(volatile unsigned int *)(USBHC_BASE_ADDR + 0x58)) + +/* USB OTG Controller */ +#define USBOTG_BASE_ADDR 0xFFE0C100 +#define OTG_INT_STAT (*(volatile unsigned int *)(USBOTG_BASE_ADDR + 0x00)) +#define OTG_INT_EN (*(volatile unsigned int *)(USBOTG_BASE_ADDR + 0x04)) +#define OTG_INT_SET (*(volatile unsigned int *)(USBOTG_BASE_ADDR + 0x08)) +#define OTG_INT_CLR (*(volatile unsigned int *)(USBOTG_BASE_ADDR + 0x0C)) +#define OTG_STAT_CTRL (*(volatile unsigned int *)(USBOTG_BASE_ADDR + 0x10)) +#define OTG_TIMER (*(volatile unsigned int *)(USBOTG_BASE_ADDR + 0x14)) + +#define USBOTG_I2C_BASE_ADDR 0xFFE0C300 +#define OTG_I2C_RX (*(volatile unsigned int *)(USBOTG_I2C_BASE_ADDR + 0x00)) +#define OTG_I2C_TX (*(volatile unsigned int *)(USBOTG_I2C_BASE_ADDR + 0x00)) +#define OTG_I2C_STS (*(volatile unsigned int *)(USBOTG_I2C_BASE_ADDR + 0x04)) +#define OTG_I2C_CTL (*(volatile unsigned int *)(USBOTG_I2C_BASE_ADDR + 0x08)) +#define OTG_I2C_CLKHI (*(volatile unsigned int *)(USBOTG_I2C_BASE_ADDR + 0x0C)) +#define OTG_I2C_CLKLO (*(volatile unsigned int *)(USBOTG_I2C_BASE_ADDR + 0x10)) + +#define USBOTG_CLK_BASE_ADDR 0xFFE0CFF0 +#define OTG_CLK_CTRL (*(volatile unsigned int *)(USBOTG_CLK_BASE_ADDR + 0x04)) +#define OTG_CLK_STAT (*(volatile unsigned int *)(USBOTG_CLK_BASE_ADDR + 0x08)) + + +/* Ethernet MAC (32 bit data bus) -- all registers are RW unless indicated in parentheses */ +#define MAC_BASE_ADDR 0xFFE00000 /* AHB Peripheral # 0 */ +#define MAC_MAC1 (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x000)) /* MAC config reg 1 */ +#define MAC_MAC2 (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x004)) /* MAC config reg 2 */ +#define MAC_IPGT (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x008)) /* b2b InterPacketGap reg */ +#define MAC_IPGR (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x00C)) /* non b2b InterPacketGap reg */ +#define MAC_CLRT (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x010)) /* CoLlision window/ReTry reg */ +#define MAC_MAXF (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x014)) /* MAXimum Frame reg */ +#define MAC_SUPP (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x018)) /* PHY SUPPort reg */ +#define MAC_TEST (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x01C)) /* TEST reg */ +#define MAC_MCFG (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x020)) /* MII Mgmt ConFiG reg */ +#define MAC_MCMD (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x024)) /* MII Mgmt CoMmanD reg */ +#define MAC_MADR (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x028)) /* MII Mgmt ADdRess reg */ +#define MAC_MWTD (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x02C)) /* MII Mgmt WriTe Data reg (WO) */ +#define MAC_MRDD (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x030)) /* MII Mgmt ReaD Data reg (RO) */ +#define MAC_MIND (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x034)) /* MII Mgmt INDicators reg (RO) */ + +#define MAC_SA0 (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x040)) /* Station Address 0 reg */ +#define MAC_SA1 (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x044)) /* Station Address 1 reg */ +#define MAC_SA2 (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x048)) /* Station Address 2 reg */ + +#define MAC_COMMAND (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x100)) /* Command reg */ +#define MAC_STATUS (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x104)) /* Status reg (RO) */ +#define MAC_RXDESCRIPTOR (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x108)) /* Rx descriptor base address reg */ +#define MAC_RXSTATUS (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x10C)) /* Rx status base address reg */ +#define MAC_RXDESCRIPTORNUM (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x110)) /* Rx number of descriptors reg */ +#define MAC_RXPRODUCEINDEX (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x114)) /* Rx produce index reg (RO) */ +#define MAC_RXCONSUMEINDEX (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x118)) /* Rx consume index reg */ +#define MAC_TXDESCRIPTOR (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x11C)) /* Tx descriptor base address reg */ +#define MAC_TXSTATUS (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x120)) /* Tx status base address reg */ +#define MAC_TXDESCRIPTORNUM (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x124)) /* Tx number of descriptors reg */ +#define MAC_TXPRODUCEINDEX (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x128)) /* Tx produce index reg */ +#define MAC_TXCONSUMEINDEX (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x12C)) /* Tx consume index reg (RO) */ + +#define MAC_TSV0 (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x158)) /* Tx status vector 0 reg (RO) */ +#define MAC_TSV1 (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x15C)) /* Tx status vector 1 reg (RO) */ +#define MAC_RSV (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x160)) /* Rx status vector reg (RO) */ + +#define MAC_FLOWCONTROLCNT (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x170)) /* Flow control counter reg */ +#define MAC_FLOWCONTROLSTS (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x174)) /* Flow control status reg */ + +#define MAC_RXFILTERCTRL (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x200)) /* Rx filter ctrl reg */ +#define MAC_RXFILTERWOLSTS (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x204)) /* Rx filter WoL status reg (RO) */ +#define MAC_RXFILTERWOLCLR (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x208)) /* Rx filter WoL clear reg (WO) */ + +#define MAC_HASHFILTERL (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x210)) /* Hash filter LSBs reg */ +#define MAC_HASHFILTERH (*(volatile unsigned int *)(MAC_BASE_ADDR + 0x214)) /* Hash filter MSBs reg */ + +#define MAC_INTSTATUS (*(volatile unsigned int *)(MAC_BASE_ADDR + 0xFE0)) /* Interrupt status reg (RO) */ +#define MAC_INTENABLE (*(volatile unsigned int *)(MAC_BASE_ADDR + 0xFE4)) /* Interrupt enable reg */ +#define MAC_INTCLEAR (*(volatile unsigned int *)(MAC_BASE_ADDR + 0xFE8)) /* Interrupt clear reg (WO) */ +#define MAC_INTSET (*(volatile unsigned int *)(MAC_BASE_ADDR + 0xFEC)) /* Interrupt set reg (WO) */ + +#define MAC_POWERDOWN (*(volatile unsigned int *)(MAC_BASE_ADDR + 0xFF4)) /* Power-down reg */ +#define MAC_MODULEID (*(volatile unsigned int *)(MAC_BASE_ADDR + 0xFFC)) /* Module ID reg (RO) */ + + +#endif /* __LPC23xx_H */ + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile new file mode 100644 index 000000000..add5a481b --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile @@ -0,0 +1,128 @@ +# FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. +# +# This file is part of the FreeRTOS.org distribution. +# +# FreeRTOS.org 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 2 of the License, or +# (at your option) any later version. +# +# FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# A special exception to the GPL can be applied should you wish to distribute +# a combined work that includes FreeRTOS.org, without being obliged to provide +# the source code for any proprietary components. See the licensing section +# of http://www.FreeRTOS.org for full details of how and when the exception +# can be applied. +# +# *************************************************************************** +# See http://www.FreeRTOS.org for documentation, latest information, license +# and contact details. Please ensure to read the configuration and relevant +# port sections of the online documentation. +# *************************************************************************** + + +RTOS_SOURCE_DIR=../../../Source +DEMO_COMMON_DIR=../../Common/Minimal +DEMO_INCLUDE_DIR=../../Common/include +UIP_COMMON_DIR=../../Common/ethernet/uIP/uip-1.0/uip + +CC=arm-elf-gcc +OBJCOPY=arm-elf-objcopy +LDSCRIPT=lpc2368.ld + +LINKER_FLAGS=-mthumb -nostartfiles -Xlinker -oRTOSDemo.elf -Xlinker -M -Xlinker -Map=rtosdemo.map + +DEBUG=-g +OPTIM=-O1 + + +CFLAGS= $(DEBUG) \ + $(OPTIM) \ + -T$(LDSCRIPT) \ + -I . \ + -I $(RTOS_SOURCE_DIR)/include \ + -I $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx \ + -I $(DEMO_INCLUDE_DIR) \ + -I ./webserver \ + -I $(UIP_COMMON_DIR) \ + -D ROWLEY_LPC23xx \ + -D THUMB_INTERWORK \ + -mcpu=arm7tdmi \ + -D PACK_STRUCT_END=__attribute\(\(packed\)\) \ + -D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) \ + -fomit-frame-pointer \ + -mthumb-interwork + +THUMB_SOURCE= \ + main.c \ + ./ParTest/ParTest.c \ + ./LCD/portlcd.c \ + $(DEMO_COMMON_DIR)/BlockQ.c \ + $(DEMO_COMMON_DIR)/blocktim.c \ + $(DEMO_COMMON_DIR)/flash.c \ + $(DEMO_COMMON_DIR)/integer.c \ + $(DEMO_COMMON_DIR)/GenQTest.c \ + $(DEMO_COMMON_DIR)/QPeek.c \ + $(DEMO_COMMON_DIR)/dynamic.c \ + ./webserver/uIP_Task.c \ + ./webserver/emac.c \ + ./webserver/httpd.c \ + ./webserver/httpd-cgi.c \ + ./webserver/httpd-fs.c \ + ./webserver/http-strings.c \ + $(UIP_COMMON_DIR)/uip_arp.c \ + $(UIP_COMMON_DIR)/psock.c \ + $(UIP_COMMON_DIR)/timer.c \ + $(UIP_COMMON_DIR)/uip.c \ + $(RTOS_SOURCE_DIR)/list.c \ + $(RTOS_SOURCE_DIR)/queue.c \ + $(RTOS_SOURCE_DIR)/tasks.c \ + $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/port.c \ + $(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c + +ARM_SOURCE= \ + $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/portISR.c \ + ./webserver/EMAC_ISR.c + +THUMB_OBJS = $(THUMB_SOURCE:.c=.o) +ARM_OBJS = $(ARM_SOURCE:.c=.o) + + +all: RTOSDemo.bin + +RTOSDemo.bin : RTOSDemo.hex + $(OBJCOPY) RTOSDemo.elf -O binary RTOSDemo.bin + +RTOSDemo.hex : RTOSDemo.elf + $(OBJCOPY) RTOSDemo.elf -O ihex RTOSDemo.hex + +RTOSDemo.elf : $(THUMB_OBJS) $(ARM_OBJS) boot.s Makefile + $(CC) $(CFLAGS) $(ARM_OBJS) $(THUMB_OBJS) $(LIBS) boot.s $(LINKER_FLAGS) + +$(THUMB_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h + $(CC) -c $(CFLAGS) -mthumb $< -o $@ + +$(ARM_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h + $(CC) -c $(CFLAGS) $< -o $@ + +clean : + rm $(THUMB_OBJS) + rm $(ARM_OBJS) + touch Makefile + rm RTOSDemo.elf + rm RTOSDemo.hex + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/ParTest/ParTest.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/ParTest/ParTest.c new file mode 100644 index 000000000..11fc351a8 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/ParTest/ParTest.c @@ -0,0 +1,114 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ + +/* FreeRTOS.org includes. */ +#include "FreeRTOS.h" + +/* Demo application includes. */ +#include "partest.h" + +#define partstFIRST_IO ( ( unsigned portLONG ) 0x01 ) +#define partstNUM_LEDS ( 8 ) +#define partstALL_OUTPUTS_OFF ( ( unsigned portLONG ) 0xff ) + +/*----------------------------------------------------------- + * Simple parallel port IO routines. + *-----------------------------------------------------------*/ + +void vParTestInitialise( void ) +{ + PINSEL10 = 0; + FIO2DIR = 0x000000FF; + FIO2MASK = 0x00000000; + FIO2CLR = 0xFF; + SCS |= (1<<0); //fast mode for port 0 and 1 + + FIO2CLR = partstALL_OUTPUTS_OFF; +} +/*-----------------------------------------------------------*/ + +void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue ) +{ +unsigned portLONG ulLED = partstFIRST_IO; + + if( uxLED < partstNUM_LEDS ) + { + /* Rotate to the wanted bit of port */ + ulLED <<= ( unsigned portLONG ) uxLED; + + /* Set of clear the output. */ + if( xValue ) + { + FIO2CLR = ulLED; + } + else + { + FIO2SET = ulLED; + } + } +} +/*-----------------------------------------------------------*/ + +void vParTestToggleLED( unsigned portBASE_TYPE uxLED ) +{ +unsigned portLONG ulLED = partstFIRST_IO, ulCurrentState; + + if( uxLED < partstNUM_LEDS ) + { + /* Rotate to the wanted bit of port 0. Only P10 to P13 have an LED + attached. */ + ulLED <<= ( unsigned portLONG ) uxLED; + + /* If this bit is already set, clear it, and visa versa. */ + ulCurrentState = FIO2PIN; + if( ulCurrentState & ulLED ) + { + FIO2CLR = ulLED; + } + else + { + FIO2SET = ulLED; + } + } +} + +/*-----------------------------------------------------------*/ +unsigned portBASE_TYPE uxParTextGetLED( unsigned portBASE_TYPE uxLED ) +{ +unsigned portLONG ulLED = partstFIRST_IO; + + ulLED <<= ( unsigned portLONG ) uxLED; + + return ( FIO2PIN & ulLED ); +} + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/boot.s b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/boot.s new file mode 100644 index 000000000..f3c4ab0e3 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/boot.s @@ -0,0 +1,157 @@ + /* Sample initialization file */ + + .extern main + .extern exit + + .text + .code 32 + + + .align 0 + + .extern __bss_beg__ + .extern __bss_end__ + .extern __stack_end__ + .extern __data_beg__ + .extern __data_end__ + .extern __data+beg_src__ + + .global start + .global endless_loop + + /* Stack Sizes */ + .set UND_STACK_SIZE, 0x00000004 + .set ABT_STACK_SIZE, 0x00000004 + .set FIQ_STACK_SIZE, 0x00000004 + .set IRQ_STACK_SIZE, 0X00000100 + .set SVC_STACK_SIZE, 0x00000100 + + /* Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs */ + .set MODE_USR, 0x10 /* User Mode */ + .set MODE_FIQ, 0x11 /* FIQ Mode */ + .set MODE_IRQ, 0x12 /* IRQ Mode */ + .set MODE_SVC, 0x13 /* Supervisor Mode */ + .set MODE_ABT, 0x17 /* Abort Mode */ + .set MODE_UND, 0x1B /* Undefined Mode */ + .set MODE_SYS, 0x1F /* System Mode */ + + .equ I_BIT, 0x80 /* when I bit is set, IRQ is disabled */ + .equ F_BIT, 0x40 /* when F bit is set, FIQ is disabled */ + + +start: +_start: +_mainCRTStartup: + + /* Setup a stack for each mode - note that this only sets up a usable stack + for system/user, SWI and IRQ modes. Also each mode is setup with + interrupts initially disabled. */ + ldr r0, .LC6 + msr CPSR_c, #MODE_UND|I_BIT|F_BIT /* Undefined Instruction Mode + mov sp, r0 + sub r0, r0, #UND_STACK_SIZE + msr CPSR_c, #MODE_ABT|I_BIT|F_BIT /* Abort Mode */ + mov sp, r0 + sub r0, r0, #ABT_STACK_SIZE + msr CPSR_c, #MODE_FIQ|I_BIT|F_BIT /* FIQ Mode */ + mov sp, r0 + sub r0, r0, #FIQ_STACK_SIZE + msr CPSR_c, #MODE_IRQ|I_BIT|F_BIT /* IRQ Mode */ + mov sp, r0 + sub r0, r0, #IRQ_STACK_SIZE + msr CPSR_c, #MODE_SVC|I_BIT|F_BIT /* Supervisor Mode */ + mov sp, r0 + sub r0, r0, #SVC_STACK_SIZE + msr CPSR_c, #MODE_SYS|I_BIT|F_BIT /* System Mode */ + mov sp, r0 + + /* We want to start in supervisor mode. Operation will switch to system + mode when the first task starts. */ + msr CPSR_c, #MODE_SVC|I_BIT|F_BIT + + /* Clear BSS. */ + + mov a2, #0 /* Fill value */ + mov fp, a2 /* Null frame pointer */ + mov r7, a2 /* Null frame pointer for Thumb */ + + ldr r1, .LC1 /* Start of memory block */ + ldr r3, .LC2 /* End of memory block */ + subs r3, r3, r1 /* Length of block */ + beq .end_clear_loop + mov r2, #0 + +.clear_loop: + strb r2, [r1], #1 + subs r3, r3, #1 + bgt .clear_loop + +.end_clear_loop: + + /* Initialise data. */ + + ldr r1, .LC3 /* Start of memory block */ + ldr r2, .LC4 /* End of memory block */ + ldr r3, .LC5 + subs r3, r3, r1 /* Length of block */ + beq .end_set_loop + +.set_loop: + ldrb r4, [r2], #1 + strb r4, [r1], #1 + subs r3, r3, #1 + bgt .set_loop + +.end_set_loop: + + mov r0, #0 /* no arguments */ + mov r1, #0 /* no argv either */ + + bl main + +endless_loop: + b endless_loop + + + .align 0 + + .LC1: + .word __bss_beg__ + .LC2: + .word __bss_end__ + .LC3: + .word __data_beg__ + .LC4: + .word __data_beg_src__ + .LC5: + .word __data_end__ + .LC6: + .word __stack_end__ + + + /* Setup vector table. Note that undf, pabt, dabt, fiq just execute + a null loop. */ + +.section .startup,"ax" + .code 32 + .align 0 + + b _start /* reset - _start */ + ldr pc, _undf /* undefined - _undf */ + ldr pc, _swi /* SWI - _swi */ + ldr pc, _pabt /* program abort - _pabt */ + ldr pc, _dabt /* data abort - _dabt */ + nop /* reserved */ + ldr pc, [pc,#-0x120] /* IRQ - read the VIC */ + ldr pc, _fiq /* FIQ - _fiq */ + +_undf: .word __undf /* undefined */ +_swi: .word vPortYieldProcessor /* SWI */ +_pabt: .word __pabt /* program abort */ +_dabt: .word __dabt /* data abort */ +_fiq: .word __fiq /* FIQ */ + +__undf: b . /* undefined */ +__pabt: b . /* program abort */ +__dabt: b . /* data abort */ +__fiq: b . /* FIQ */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld new file mode 100644 index 000000000..79a37e6ec --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld @@ -0,0 +1,67 @@ +MEMORY +{ + flash : ORIGIN = 0x00000000, LENGTH = 500K + ram : ORIGIN = 0x40000000, LENGTH = 32K + usbram : ORIGIN = 0x7FD00000, LENGTH = 8K + ethram : ORIGIN = 0x7FE00000, LENGTH = 16K +} + +__stack_end__ = 0x40000000 + 32K - 4; + +SECTIONS +{ + . = 0; + startup : { *(.startup)} >flash + + prog : + { + *(.text) + *(.rodata) + *(.rodata*) + *(.glue_7) + *(.glue_7t) + } >flash + + __end_of_text__ = .; + + .data : + { + __data_beg__ = .; + __data_beg_src__ = __end_of_text__; + *(.data) + __data_end__ = .; + } >ram AT>flash + + .bss : + { + __bss_beg__ = .; + *(.bss) + } >ram + + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(32 / 8); + + .usbram (NOLOAD): + { + __usbram_beg__ = .; + *(.dmaram) + __usbram_end__ = .; + } >usbram + + .ethram (NOLOAD): + { + __ethram_beg__ = .; + *(.ethram) + __ethram_end__ = .; + } >ethram + + +} + . = ALIGN(32 / 8); + _end = .; + _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; + PROVIDE (end = .); + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/main.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/main.c new file mode 100644 index 000000000..077b6f07d --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/main.c @@ -0,0 +1,281 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ + +/* + * Creates all the demo application tasks, then starts the scheduler. The WEB + * documentation provides more details of the standard demo application tasks. + * In addition to the standard demo tasks, the following tasks and tests are + * defined and/or created within this file: + * + * "LCD" task - the LCD task is a 'gatekeeper' task. It is the only task that + * is permitted to access the display directly. Other tasks wishing to write a + * message to the LCD send the message on a queue to the LCD task instead of + * accessing the LCD themselves. The LCD task just blocks on the queue waiting + * for messages - waking and displaying the messages as they arrive. + * + * "Check" hook - This only executes every five seconds from the tick hook. + * Its main function is to check that all the standard demo tasks are still + * operational. Should any unexpected behaviour within a demo task be discovered + * the tick hook will write an error to the LCD (via the LCD task). If all the + * demo tasks are executing with their expected behaviour then the check task + * writes PASS to the LCD (again via the LCD task), as described above. + * + * "uIP" task - This is the task that handles the uIP stack. All TCP/IP + * processing is performed in this task. + */ + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "Task.h" +#include "queue.h" +#include "semphr.h" + +/* Demo app includes. */ +#include "BlockQ.h" +#include "death.h" +#include "blocktim.h" +#include "LCD/portlcd.h" +#include "flash.h" +#include "partest.h" +#include "GenQTest.h" +#include "QPeek.h" +#include "dynamic.h" + +/* Demo application definitions. */ +#define mainQUEUE_SIZE ( 3 ) +#define mainCHECK_DELAY ( ( portTickType ) 5000 / portTICK_RATE_MS ) +#define mainBASIC_WEB_STACK_SIZE ( configMINIMAL_STACK_SIZE * 6 ) + +/* Task priorities. */ +#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) +#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainFLASH_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) +#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY ) + +/* Constants to setup the PLL. */ +#define mainPLL_MUL ( ( unsigned portLONG ) ( 12 - 1 ) ) +#define mainPLL_DIV ( ( unsigned portLONG ) 0x0000 ) +#define mainCPU_CLK_DIV ( ( unsigned portLONG ) 0x0004 ) +#define mainPLL_ENABLE ( ( unsigned portLONG ) 0x0001 ) +#define mainPLL_CONNECT ( ( ( unsigned portLONG ) 0x0002 ) | mainPLL_ENABLE ) +#define mainPLL_FEED_BYTE1 ( ( unsigned portLONG ) 0xaa ) +#define mainPLL_FEED_BYTE2 ( ( unsigned portLONG ) 0x55 ) +#define mainPLL_LOCK ( ( unsigned portLONG ) 0x4000000 ) +#define mainPLL_CONNECTED ( ( unsigned portLONG ) 0x2000000 ) +#define mainOSC_ENABLE ( ( unsigned portLONG ) 0x20 ) +#define mainOSC_STAT ( ( unsigned portLONG ) 0x40 ) +#define mainOSC_SELECT ( ( unsigned portLONG ) 0x01 ) + +/* Constants to setup the MAM. */ +#define mainMAM_TIM_3 ( ( unsigned portCHAR ) 0x03 ) +#define mainMAM_MODE_FULL ( ( unsigned portCHAR ) 0x02 ) + +/* + * The task that handles the uIP stack. All TCP/IP processing is performed in + * this task. + */ +extern void vuIP_Task( void *pvParameters ); + +/* + * The LCD is written two by more than one task so is controlled by a + * 'gatekeeper' task. This is the only task that is actually permitted to + * access the LCD directly. Other tasks wanting to display a message send + * the message to the gatekeeper. + */ +static void vLCDTask( void *pvParameters ); + +/* Configure the hardware as required by the demo. */ +static void prvSetupHardware( void ); + +/* The queue used to send messages to the LCD task. */ +xQueueHandle xLCDQueue; + +/*-----------------------------------------------------------*/ + +int main( void ) +{ + prvSetupHardware(); + + /* Create the queue used by the LCD task. Messages for display on the LCD + are received via this queue. */ + xLCDQueue = xQueueCreate( mainQUEUE_SIZE, sizeof( xLCDMessage ) ); + + /* Create the uIP task. This uses the lwIP RTOS abstraction layer.*/ + xTaskCreate( vuIP_Task, ( signed portCHAR * ) "uIP", mainBASIC_WEB_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL ); + + /* Start the standard demo tasks. */ + vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY ); + vCreateBlockTimeTasks(); + vStartLEDFlashTasks( mainFLASH_PRIORITY ); + vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY ); + vStartQueuePeekTasks(); + vStartDynamicPriorityTasks(); + + /* Start the tasks defined within this file/specific to this demo. */ + xTaskCreate( vLCDTask, ( signed portCHAR * ) "LCD", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL ); + + /* Start the scheduler. */ + vTaskStartScheduler(); + + /* Will only get here if there was insufficient memory to create the idle + task. */ + return 0; +} +/*-----------------------------------------------------------*/ + +void vApplicationTickHook( void ) +{ +unsigned portBASE_TYPE uxColumn = 0; +static xLCDMessage xMessage = { 0, "PASS" }; +static unsigned portLONG ulTicksSinceLastDisplay = 0; + + /* Called from every tick interrupt. Have enough ticks passed to make it + time to perform our health status check again? */ + ulTicksSinceLastDisplay++; + if( ulTicksSinceLastDisplay >= mainCHECK_DELAY ) + { + ulTicksSinceLastDisplay = 0; + + /* Has an error been found in any task? */ + + if( xAreBlockingQueuesStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR - BLOCKQ"; + } + + if( xAreBlockTimeTestTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR - BLOCKTIM"; + } + + if( xAreGenericQueueTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR - GENQ"; + } + + if( xAreQueuePeekTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR - PEEKQ"; + } + + if( xAreDynamicPriorityTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR - DYNAMIC"; + } + + xMessage.xColumn++; + + /* Send the message to the LCD gatekeeper for display. */ + xQueueSendToBackFromISR( xLCDQueue, &xMessage, pdFALSE ); + } +} +/*-----------------------------------------------------------*/ + +void vLCDTask( void *pvParameters ) +{ +xLCDMessage xMessage; + + /* Initialise the LCD and display a startup message. */ + LCD_init(); + LCD_cur_off(); + LCD_cls(); + LCD_gotoxy( 1, 1 ); + LCD_puts( "www.FreeRTOS.org" ); + + for( ;; ) + { + /* Wait for a message to arrive that requires displaying. */ + while( xQueueReceive( xLCDQueue, &xMessage, portMAX_DELAY ) != pdPASS ); + + /* Display the message. Print each message to a different position. */ + LCD_cls(); + LCD_gotoxy( ( xMessage.xColumn & 0x07 ) + 1, ( xMessage.xColumn & 0x01 ) + 1 ); + LCD_puts( xMessage.pcMessage ); + } + +} +/*-----------------------------------------------------------*/ + +static void prvSetupHardware( void ) +{ + #ifdef RUN_FROM_RAM + /* Remap the interrupt vectors to RAM if we are are running from RAM. */ + SCB_MEMMAP = 2; + #endif + + /* Disable the PLL. */ + PLLCON = 0; + PLLFEED = mainPLL_FEED_BYTE1; + PLLFEED = mainPLL_FEED_BYTE2; + + /* Configure clock source. */ + SCS |= mainOSC_ENABLE; + while( !( SCS & mainOSC_STAT ) ); + CLKSRCSEL = mainOSC_SELECT; + + /* Setup the PLL to multiply the XTAL input by 4. */ + PLLCFG = ( mainPLL_MUL | mainPLL_DIV ); + PLLFEED = mainPLL_FEED_BYTE1; + PLLFEED = mainPLL_FEED_BYTE2; + + /* Turn on and wait for the PLL to lock... */ + PLLCON = mainPLL_ENABLE; + PLLFEED = mainPLL_FEED_BYTE1; + PLLFEED = mainPLL_FEED_BYTE2; + CCLKCFG = mainCPU_CLK_DIV; + while( !( PLLSTAT & mainPLL_LOCK ) ); + + /* Connecting the clock. */ + PLLCON = mainPLL_CONNECT; + PLLFEED = mainPLL_FEED_BYTE1; + PLLFEED = mainPLL_FEED_BYTE2; + while( !( PLLSTAT & mainPLL_CONNECTED ) ); + + /* Setup and turn on the MAM. Three cycle access is used due to the fast + PLL used. It is possible faster overall performance could be obtained by + tuning the MAM and PLL settings. */ + MAMCR = 0; + MAMTIM = mainMAM_TIM_3; + MAMCR = mainMAM_MODE_FULL; + + /* Setup the led's on the MCB2300 board */ + vParTestInitialise(); +} + + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c new file mode 100644 index 000000000..ba43f934e --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c @@ -0,0 +1,29 @@ +#include "FreeRTOS.h" +#include "Semphr.h" +#include "Task.h" + +void vEMAC_ISR( void ) __attribute__((naked)); + +extern xSemaphoreHandle xEMACSemaphore; + +void vEMAC_ISR( void ) +{ + portENTER_SWITCHING_ISR(); + + portBASE_TYPE xSwitchRequired = pdFALSE; + + /* Clear the interrupt. */ + MAC_INTCLEAR = 0xffff; + VICVectAddr = 0; + + /* Ensure the uIP task is not blocked as data has arrived. */ + if( xSemaphoreGiveFromISR( xEMACSemaphore, pdFALSE ) ) + { + xSwitchRequired = pdTRUE; + } + + /* Switch to the uIP task. */ + portEXIT_SWITCHING_ISR( xSwitchRequired ); +} + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/clock-arch.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/clock-arch.h new file mode 100644 index 000000000..cde657b62 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/clock-arch.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +#ifndef __CLOCK_ARCH_H__ +#define __CLOCK_ARCH_H__ + +#include "FreeRTOS.h" + +typedef unsigned long clock_time_t; +#define CLOCK_CONF_SECOND configTICK_RATE_HZ + +#endif /* __CLOCK_ARCH_H__ */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.c new file mode 100644 index 000000000..ab308e615 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.c @@ -0,0 +1,411 @@ +/****************************************************************** + ***** ***** + ***** Name: cs8900.c ***** + ***** Ver.: 1.0 ***** + ***** Date: 07/05/2001 ***** + ***** Auth: Andreas Dannenberg ***** + ***** HTWK Leipzig ***** + ***** university of applied sciences ***** + ***** Germany ***** + ***** Func: ethernet packet-driver for use with LAN- ***** + ***** controller CS8900 from Crystal/Cirrus Logic ***** + ***** ***** + ***** Keil: Module modified for use with Philips ***** + ***** LPC2378 EMAC Ethernet controller ***** + ***** ***** + ******************************************************************/ + +/* Adapted from file originally written by Andreas Dannenberg. Supplied with permission. */ + +#include "FreeRTOS.h" +#include "Semphr.h" +#include "task.h" +#include "EMAC.h" + +/* The semaphore used to wake the uIP task when data arives. */ +xSemaphoreHandle xEMACSemaphore = NULL; + +static unsigned short *rptr; +static unsigned short *tptr; + +// easyWEB internal function +// help function to swap the byte order of a WORD + +static unsigned short SwapBytes(unsigned short Data) +{ + return (Data >> 8) | (Data << 8); +} + +// Keil: function added to write PHY +void write_PHY (int PhyReg, int Value) +{ + unsigned int tout; + + MAC_MADR = DP83848C_DEF_ADR | PhyReg; + MAC_MWTD = Value; + + /* Wait utill operation completed */ + tout = 0; + for (tout = 0; tout < MII_WR_TOUT; tout++) { + if ((MAC_MIND & MIND_BUSY) == 0) { + break; + } + } +} + + +// Keil: function added to read PHY +unsigned short read_PHY (unsigned char PhyReg) +{ + unsigned int tout; + + MAC_MADR = DP83848C_DEF_ADR | PhyReg; + MAC_MCMD = MCMD_READ; + + /* Wait until operation completed */ + tout = 0; + for (tout = 0; tout < MII_RD_TOUT; tout++) { + if ((MAC_MIND & MIND_BUSY) == 0) { + break; + } + } + MAC_MCMD = 0; + return (MAC_MRDD); +} + + +// Keil: function added to initialize Rx Descriptors +void rx_descr_init (void) +{ + unsigned int i; + + for (i = 0; i < NUM_RX_FRAG; i++) { + RX_DESC_PACKET(i) = RX_BUF(i); + RX_DESC_CTRL(i) = RCTRL_INT | (ETH_FRAG_SIZE-1); + RX_STAT_INFO(i) = 0; + RX_STAT_HASHCRC(i) = 0; + } + + /* Set EMAC Receive Descriptor Registers. */ + MAC_RXDESCRIPTOR = RX_DESC_BASE; + MAC_RXSTATUS = RX_STAT_BASE; + MAC_RXDESCRIPTORNUM = NUM_RX_FRAG-1; + + /* Rx Descriptors Point to 0 */ + MAC_RXCONSUMEINDEX = 0; +} + + +// Keil: function added to initialize Tx Descriptors +void tx_descr_init (void) { + unsigned int i; + + for (i = 0; i < NUM_TX_FRAG; i++) { + TX_DESC_PACKET(i) = TX_BUF(i); + TX_DESC_CTRL(i) = 0; + TX_STAT_INFO(i) = 0; + } + + /* Set EMAC Transmit Descriptor Registers. */ + MAC_TXDESCRIPTOR = TX_DESC_BASE; + MAC_TXSTATUS = TX_STAT_BASE; + MAC_TXDESCRIPTORNUM = NUM_TX_FRAG-1; + + /* Tx Descriptors Point to 0 */ + MAC_TXPRODUCEINDEX = 0; +} + + +// configure port-pins for use with LAN-controller, +// reset it and send the configuration-sequence + +portBASE_TYPE Init_EMAC(void) +{ +portBASE_TYPE xReturn = pdPASS; + +// Keil: function modified to access the EMAC +// Initializes the EMAC ethernet controller + volatile unsigned int regv,tout,id1,id2; + + /* Enable P1 Ethernet Pins. */ + PINSEL2 = 0x55555555; + PINSEL3 = (PINSEL3 & ~0x0000000F) | 0x00000005; + + /* Power Up the EMAC controller. */ + PCONP |= 0x40000000; + vTaskDelay( 1 ); + + /* Reset all EMAC internal modules. */ + MAC_MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX | MAC1_SIM_RES | MAC1_SOFT_RES; + MAC_COMMAND = CR_REG_RES | CR_TX_RES | CR_RX_RES; + + /* A short delay after reset. */ + vTaskDelay( 1 ); + + /* Initialize MAC control registers. */ + MAC_MAC1 = MAC1_PASS_ALL; + MAC_MAC2 = MAC2_CRC_EN | MAC2_PAD_EN; + MAC_MAXF = ETH_MAX_FLEN; + MAC_CLRT = CLRT_DEF; + MAC_IPGR = IPGR_DEF; + + /* Enable Reduced MII interface. */ + MAC_COMMAND = CR_RMII | CR_PASS_RUNT_FRM; + + /* Reset Reduced MII Logic. */ + MAC_SUPP = SUPP_RES_RMII; + MAC_SUPP = 0; + + /* Put the DP83848C in reset mode */ + write_PHY (PHY_REG_BMCR, 0x8000); + write_PHY (PHY_REG_BMCR, 0x8000); + + /* Wait for hardware reset to end. */ + for (tout = 0; tout < 100; tout++) { + vTaskDelay( 10 ); + regv = read_PHY (PHY_REG_BMCR); + if (!(regv & 0x8000)) { + /* Reset complete */ + break; + } + } + + /* Check if this is a DP83848C PHY. */ + id1 = read_PHY (PHY_REG_IDR1); + id2 = read_PHY (PHY_REG_IDR2); + if (((id1 << 16) | (id2 & 0xFFF0)) == DP83848C_ID) { + /* Configure the PHY device */ + + /* Use autonegotiation about the link speed. */ + write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG); + /* Wait to complete Auto_Negotiation. */ + for (tout = 0; tout < 10; tout++) { + vTaskDelay( 100 ); + regv = read_PHY (PHY_REG_BMSR); + if (regv & 0x0020) { + /* Autonegotiation Complete. */ + break; + } + } + } + else + { + xReturn = pdFAIL; + } + + /* Check the link status. */ + if( xReturn == pdPASS ) + { + xReturn = pdFAIL; + for (tout = 0; tout < 10; tout++) { + vTaskDelay( 100 ); + regv = read_PHY (PHY_REG_STS); + if (regv & 0x0001) { + /* Link is on. */ + xReturn = pdPASS; + break; + } + } + } + + if( xReturn == pdPASS ) + { + /* Configure Full/Half Duplex mode. */ + if (regv & 0x0004) { + /* Full duplex is enabled. */ + MAC_MAC2 |= MAC2_FULL_DUP; + MAC_COMMAND |= CR_FULL_DUP; + MAC_IPGT = IPGT_FULL_DUP; + } + else { + /* Half duplex mode. */ + MAC_IPGT = IPGT_HALF_DUP; + } + + /* Configure 100MBit/10MBit mode. */ + if (regv & 0x0002) { + /* 10MBit mode. */ + MAC_SUPP = 0; + } + else { + /* 100MBit mode. */ + MAC_SUPP = SUPP_SPEED; + } + + /* Set the Ethernet MAC Address registers */ + MAC_SA0 = (emacETHADDR0 << 8) | emacETHADDR1; + MAC_SA1 = (emacETHADDR2 << 8) | emacETHADDR3; + MAC_SA2 = (emacETHADDR4 << 8) | emacETHADDR5; + + /* Initialize Tx and Rx DMA Descriptors */ + rx_descr_init (); + tx_descr_init (); + + /* Receive Broadcast and Perfect Match Packets */ + MAC_RXFILTERCTRL = RFC_UCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN; + + /* Create the semaphore used ot wake the uIP task. */ + vSemaphoreCreateBinary( xEMACSemaphore ); + + /* Reset all interrupts */ + MAC_INTCLEAR = 0xFFFF; + + /* Enable receive and transmit mode of MAC Ethernet core */ + MAC_COMMAND |= (CR_RX_EN | CR_TX_EN); + MAC_MAC1 |= MAC1_REC_EN; + } + + return xReturn; +} + + +// reads a word in little-endian byte order from RX_BUFFER + +unsigned short ReadFrame_EMAC(void) +{ + return (*rptr++); +} + +// reads a word in big-endian byte order from RX_FRAME_PORT +// (useful to avoid permanent byte-swapping while reading +// TCP/IP-data) + +unsigned short ReadFrameBE_EMAC(void) +{ + unsigned short ReturnValue; + + ReturnValue = SwapBytes (*rptr++); + return (ReturnValue); +} + + +// copies bytes from frame port to MCU-memory +// NOTES: * an odd number of byte may only be transfered +// if the frame is read to the end! +// * MCU-memory MUST start at word-boundary + +void CopyFromFrame_EMAC(void *Dest, unsigned short Size) +{ + unsigned short * piDest; // Keil: Pointer added to correct expression + + piDest = Dest; // Keil: Line added + while (Size > 1) { + *piDest++ = ReadFrame_EMAC(); + Size -= 2; + } + + if (Size) { // check for leftover byte... + *(unsigned char *)piDest = (char)ReadFrame_EMAC();// the LAN-Controller will return 0 + } // for the highbyte +} + +// does a dummy read on frame-I/O-port +// NOTE: only an even number of bytes is read! + +void DummyReadFrame_EMAC(unsigned short Size) // discards an EVEN number of bytes +{ // from RX-fifo + while (Size > 1) { + ReadFrame_EMAC(); + Size -= 2; + } +} + +// Reads the length of the received ethernet frame and checks if the +// destination address is a broadcast message or not +// returns the frame length +unsigned short StartReadFrame(void) { + unsigned short RxLen; + unsigned int idx; + + idx = MAC_RXCONSUMEINDEX; + RxLen = (RX_STAT_INFO(idx) & RINFO_SIZE) - 3; + rptr = (unsigned short *)RX_DESC_PACKET(idx); + return(RxLen); +} + +void EndReadFrame(void) { + unsigned int idx; + + /* DMA free packet. */ + idx = MAC_RXCONSUMEINDEX; + + if (++idx == NUM_RX_FRAG) + idx = 0; + + MAC_RXCONSUMEINDEX = idx; +} + +unsigned int CheckFrameReceived(void) { // Packet received ? + + if (MAC_RXPRODUCEINDEX != MAC_RXCONSUMEINDEX) // more packets received ? + return(1); + else + return(0); +} + +unsigned int uiGetEMACRxData( unsigned char *ucBuffer ) +{ +unsigned int uiLen = 0; + + if( MAC_RXPRODUCEINDEX != MAC_RXCONSUMEINDEX ) + { + uiLen = StartReadFrame(); + CopyFromFrame_EMAC( ucBuffer, uiLen ); + EndReadFrame(); + } + + return uiLen; +} + +// requests space in EMAC memory for storing an outgoing frame + +void RequestSend(void) +{ + unsigned int idx; + + idx = MAC_TXPRODUCEINDEX; + tptr = (unsigned short *)TX_DESC_PACKET(idx); +} + +// check if ethernet controller is ready to accept the +// frame we want to send + +unsigned int Rdy4Tx(void) +{ + return (1); // the ethernet controller transmits much faster +} // than the CPU can load its buffers + + +// writes a word in little-endian byte order to TX_BUFFER +void WriteFrame_EMAC(unsigned short Data) +{ + *tptr++ = Data; +} + +// copies bytes from MCU-memory to frame port +// NOTES: * an odd number of byte may only be transfered +// if the frame is written to the end! +// * MCU-memory MUST start at word-boundary + +void CopyToFrame_EMAC(void *Source, unsigned int Size) +{ + unsigned short * piSource; + + piSource = Source; + Size = (Size + 1) & 0xFFFE; // round Size up to next even number + while (Size > 0) { + WriteFrame_EMAC(*piSource++); + Size -= 2; + } +} + +void DoSend_EMAC(unsigned short FrameSize) +{ + unsigned int idx; + + idx = MAC_TXPRODUCEINDEX; + TX_DESC_CTRL(idx) = FrameSize | TCTRL_LAST; + if (++idx == NUM_TX_FRAG) idx = 0; + MAC_TXPRODUCEINDEX = idx; +} + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.h new file mode 100644 index 000000000..c3634217d --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/emac.h @@ -0,0 +1,322 @@ +/*---------------------------------------------------------------------------- + * LPC2378 Ethernet Definitions + *---------------------------------------------------------------------------- + * Name: EMAC.H + * Purpose: Philips LPC2378 EMAC hardware definitions + *---------------------------------------------------------------------------- + * Copyright (c) 2006 KEIL - An ARM Company. All rights reserved. + *---------------------------------------------------------------------------*/ +#ifndef __EMAC_H +#define __EMAC_H + +/* MAC address definition. The MAC address must be unique on the network. */ +#define emacETHADDR0 0 +#define emacETHADDR1 0xbd +#define emacETHADDR2 0x33 +#define emacETHADDR3 0x02 +#define emacETHADDR4 0x64 +#define emacETHADDR5 0x24 + + +/* EMAC Memory Buffer configuration for 16K Ethernet RAM. */ +#define NUM_RX_FRAG 4 /* Num.of RX Fragments 4*1536= 6.0kB */ +#define NUM_TX_FRAG 2 /* Num.of TX Fragments 2*1536= 3.0kB */ +#define ETH_FRAG_SIZE 1536 /* Packet Fragment size 1536 Bytes */ + +#define ETH_MAX_FLEN 1536 /* Max. Ethernet Frame Size */ + +/* EMAC variables located in 16K Ethernet SRAM */ +#define RX_DESC_BASE 0x7FE00000 +#define RX_STAT_BASE (RX_DESC_BASE + NUM_RX_FRAG*8) +#define TX_DESC_BASE (RX_STAT_BASE + NUM_RX_FRAG*8) +#define TX_STAT_BASE (TX_DESC_BASE + NUM_TX_FRAG*8) +#define RX_BUF_BASE (TX_STAT_BASE + NUM_TX_FRAG*4) +#define TX_BUF_BASE (RX_BUF_BASE + NUM_RX_FRAG*ETH_FRAG_SIZE) + +/* RX and TX descriptor and status definitions. */ +#define RX_DESC_PACKET(i) (*(unsigned int *)(RX_DESC_BASE + 8*i)) +#define RX_DESC_CTRL(i) (*(unsigned int *)(RX_DESC_BASE+4 + 8*i)) +#define RX_STAT_INFO(i) (*(unsigned int *)(RX_STAT_BASE + 8*i)) +#define RX_STAT_HASHCRC(i) (*(unsigned int *)(RX_STAT_BASE+4 + 8*i)) +#define TX_DESC_PACKET(i) (*(unsigned int *)(TX_DESC_BASE + 8*i)) +#define TX_DESC_CTRL(i) (*(unsigned int *)(TX_DESC_BASE+4 + 8*i)) +#define TX_STAT_INFO(i) (*(unsigned int *)(TX_STAT_BASE + 4*i)) +#define RX_BUF(i) (RX_BUF_BASE + ETH_FRAG_SIZE*i) +#define TX_BUF(i) (TX_BUF_BASE + ETH_FRAG_SIZE*i) + +/* MAC Configuration Register 1 */ +#define MAC1_REC_EN 0x00000001 /* Receive Enable */ +#define MAC1_PASS_ALL 0x00000002 /* Pass All Receive Frames */ +#define MAC1_RX_FLOWC 0x00000004 /* RX Flow Control */ +#define MAC1_TX_FLOWC 0x00000008 /* TX Flow Control */ +#define MAC1_LOOPB 0x00000010 /* Loop Back Mode */ +#define MAC1_RES_TX 0x00000100 /* Reset TX Logic */ +#define MAC1_RES_MCS_TX 0x00000200 /* Reset MAC TX Control Sublayer */ +#define MAC1_RES_RX 0x00000400 /* Reset RX Logic */ +#define MAC1_RES_MCS_RX 0x00000800 /* Reset MAC RX Control Sublayer */ +#define MAC1_SIM_RES 0x00004000 /* Simulation Reset */ +#define MAC1_SOFT_RES 0x00008000 /* Soft Reset MAC */ + +/* MAC Configuration Register 2 */ +#define MAC2_FULL_DUP 0x00000001 /* Full Duplex Mode */ +#define MAC2_FRM_LEN_CHK 0x00000002 /* Frame Length Checking */ +#define MAC2_HUGE_FRM_EN 0x00000004 /* Huge Frame Enable */ +#define MAC2_DLY_CRC 0x00000008 /* Delayed CRC Mode */ +#define MAC2_CRC_EN 0x00000010 /* Append CRC to every Frame */ +#define MAC2_PAD_EN 0x00000020 /* Pad all Short Frames */ +#define MAC2_VLAN_PAD_EN 0x00000040 /* VLAN Pad Enable */ +#define MAC2_ADET_PAD_EN 0x00000080 /* Auto Detect Pad Enable */ +#define MAC2_PPREAM_ENF 0x00000100 /* Pure Preamble Enforcement */ +#define MAC2_LPREAM_ENF 0x00000200 /* Long Preamble Enforcement */ +#undef MAC2_NO_BACKOFF /* Remove compiler warning. */ +#define MAC2_NO_BACKOFF 0x00001000 /* No Backoff Algorithm */ +#define MAC2_BACK_PRESSURE 0x00002000 /* Backoff Presurre / No Backoff */ +#define MAC2_EXCESS_DEF 0x00004000 /* Excess Defer */ + +/* Back-to-Back Inter-Packet-Gap Register */ +#define IPGT_FULL_DUP 0x00000015 /* Recommended value for Full Duplex */ +#define IPGT_HALF_DUP 0x00000012 /* Recommended value for Half Duplex */ + +/* Non Back-to-Back Inter-Packet-Gap Register */ +#define IPGR_DEF 0x00000012 /* Recommended value */ + +/* Collision Window/Retry Register */ +#define CLRT_DEF 0x0000370F /* Default value */ + +/* PHY Support Register */ +#undef SUPP_SPEED /* Remove compiler warning. */ +#define SUPP_SPEED 0x00000100 /* Reduced MII Logic Current Speed */ +#define SUPP_RES_RMII 0x00000800 /* Reset Reduced MII Logic */ + +/* Test Register */ +#define TEST_SHCUT_PQUANTA 0x00000001 /* Shortcut Pause Quanta */ +#define TEST_TST_PAUSE 0x00000002 /* Test Pause */ +#define TEST_TST_BACKP 0x00000004 /* Test Back Pressure */ + +/* MII Management Configuration Register */ +#define MCFG_SCAN_INC 0x00000001 /* Scan Increment PHY Address */ +#define MCFG_SUPP_PREAM 0x00000002 /* Suppress Preamble */ +#define MCFG_CLK_SEL 0x0000001C /* Clock Select Mask */ +#define MCFG_RES_MII 0x00008000 /* Reset MII Management Hardware */ + +/* MII Management Command Register */ +#undef MCMD_READ /* Remove compiler warning. */ +#define MCMD_READ 0x00000001 /* MII Read */ +#undef MCMD_SCAN /* Remove compiler warning. */ +#define MCMD_SCAN 0x00000002 /* MII Scan continuously */ + +#define MII_WR_TOUT 0x00050000 /* MII Write timeout count */ +#define MII_RD_TOUT 0x00050000 /* MII Read timeout count */ + +/* MII Management Address Register */ +#define MADR_REG_ADR 0x0000001F /* MII Register Address Mask */ +#define MADR_PHY_ADR 0x00001F00 /* PHY Address Mask */ + +/* MII Management Indicators Register */ +#undef MIND_BUSY /* Remove compiler warning. */ +#define MIND_BUSY 0x00000001 /* MII is Busy */ +#define MIND_SCAN 0x00000002 /* MII Scanning in Progress */ +#define MIND_NOT_VAL 0x00000004 /* MII Read Data not valid */ +#define MIND_MII_LINK_FAIL 0x00000008 /* MII Link Failed */ + +/* Command Register */ +#define CR_RX_EN 0x00000001 /* Enable Receive */ +#define CR_TX_EN 0x00000002 /* Enable Transmit */ +#define CR_REG_RES 0x00000008 /* Reset Host Registers */ +#define CR_TX_RES 0x00000010 /* Reset Transmit Datapath */ +#define CR_RX_RES 0x00000020 /* Reset Receive Datapath */ +#define CR_PASS_RUNT_FRM 0x00000040 /* Pass Runt Frames */ +#define CR_PASS_RX_FILT 0x00000080 /* Pass RX Filter */ +#define CR_TX_FLOW_CTRL 0x00000100 /* TX Flow Control */ +#define CR_RMII 0x00000200 /* Reduced MII Interface */ +#define CR_FULL_DUP 0x00000400 /* Full Duplex */ + +/* Status Register */ +#define SR_RX_EN 0x00000001 /* Enable Receive */ +#define SR_TX_EN 0x00000002 /* Enable Transmit */ + +/* Transmit Status Vector 0 Register */ +#define TSV0_CRC_ERR 0x00000001 /* CRC error */ +#define TSV0_LEN_CHKERR 0x00000002 /* Length Check Error */ +#define TSV0_LEN_OUTRNG 0x00000004 /* Length Out of Range */ +#define TSV0_DONE 0x00000008 /* Tramsmission Completed */ +#define TSV0_MCAST 0x00000010 /* Multicast Destination */ +#define TSV0_BCAST 0x00000020 /* Broadcast Destination */ +#define TSV0_PKT_DEFER 0x00000040 /* Packet Deferred */ +#define TSV0_EXC_DEFER 0x00000080 /* Excessive Packet Deferral */ +#define TSV0_EXC_COLL 0x00000100 /* Excessive Collision */ +#define TSV0_LATE_COLL 0x00000200 /* Late Collision Occured */ +#define TSV0_GIANT 0x00000400 /* Giant Frame */ +#define TSV0_UNDERRUN 0x00000800 /* Buffer Underrun */ +#define TSV0_BYTES 0x0FFFF000 /* Total Bytes Transferred */ +#define TSV0_CTRL_FRAME 0x10000000 /* Control Frame */ +#define TSV0_PAUSE 0x20000000 /* Pause Frame */ +#define TSV0_BACK_PRESS 0x40000000 /* Backpressure Method Applied */ +#define TSV0_VLAN 0x80000000 /* VLAN Frame */ + +/* Transmit Status Vector 1 Register */ +#define TSV1_BYTE_CNT 0x0000FFFF /* Transmit Byte Count */ +#define TSV1_COLL_CNT 0x000F0000 /* Transmit Collision Count */ + +/* Receive Status Vector Register */ +#define RSV_BYTE_CNT 0x0000FFFF /* Receive Byte Count */ +#define RSV_PKT_IGNORED 0x00010000 /* Packet Previously Ignored */ +#define RSV_RXDV_SEEN 0x00020000 /* RXDV Event Previously Seen */ +#define RSV_CARR_SEEN 0x00040000 /* Carrier Event Previously Seen */ +#define RSV_REC_CODEV 0x00080000 /* Receive Code Violation */ +#define RSV_CRC_ERR 0x00100000 /* CRC Error */ +#define RSV_LEN_CHKERR 0x00200000 /* Length Check Error */ +#define RSV_LEN_OUTRNG 0x00400000 /* Length Out of Range */ +#define RSV_REC_OK 0x00800000 /* Frame Received OK */ +#define RSV_MCAST 0x01000000 /* Multicast Frame */ +#define RSV_BCAST 0x02000000 /* Broadcast Frame */ +#define RSV_DRIB_NIBB 0x04000000 /* Dribble Nibble */ +#define RSV_CTRL_FRAME 0x08000000 /* Control Frame */ +#define RSV_PAUSE 0x10000000 /* Pause Frame */ +#define RSV_UNSUPP_OPC 0x20000000 /* Unsupported Opcode */ +#define RSV_VLAN 0x40000000 /* VLAN Frame */ + +/* Flow Control Counter Register */ +#define FCC_MIRR_CNT 0x0000FFFF /* Mirror Counter */ +#define FCC_PAUSE_TIM 0xFFFF0000 /* Pause Timer */ + +/* Flow Control Status Register */ +#define FCS_MIRR_CNT 0x0000FFFF /* Mirror Counter Current */ + +/* Receive Filter Control Register */ +#define RFC_UCAST_EN 0x00000001 /* Accept Unicast Frames Enable */ +#define RFC_BCAST_EN 0x00000002 /* Accept Broadcast Frames Enable */ +#define RFC_MCAST_EN 0x00000004 /* Accept Multicast Frames Enable */ +#define RFC_UCAST_HASH_EN 0x00000008 /* Accept Unicast Hash Filter Frames */ +#define RFC_MCAST_HASH_EN 0x00000010 /* Accept Multicast Hash Filter Fram.*/ +#define RFC_PERFECT_EN 0x00000020 /* Accept Perfect Match Enable */ +#define RFC_MAGP_WOL_EN 0x00001000 /* Magic Packet Filter WoL Enable */ +#define RFC_PFILT_WOL_EN 0x00002000 /* Perfect Filter WoL Enable */ + +/* Receive Filter WoL Status/Clear Registers */ +#define WOL_UCAST 0x00000001 /* Unicast Frame caused WoL */ +#define WOL_BCAST 0x00000002 /* Broadcast Frame caused WoL */ +#define WOL_MCAST 0x00000004 /* Multicast Frame caused WoL */ +#define WOL_UCAST_HASH 0x00000008 /* Unicast Hash Filter Frame WoL */ +#define WOL_MCAST_HASH 0x00000010 /* Multicast Hash Filter Frame WoL */ +#define WOL_PERFECT 0x00000020 /* Perfect Filter WoL */ +#define WOL_RX_FILTER 0x00000080 /* RX Filter caused WoL */ +#define WOL_MAG_PACKET 0x00000100 /* Magic Packet Filter caused WoL */ + +/* Interrupt Status/Enable/Clear/Set Registers */ +#define INT_RX_OVERRUN 0x00000001 /* Overrun Error in RX Queue */ +#define INT_RX_ERR 0x00000002 /* Receive Error */ +#define INT_RX_FIN 0x00000004 /* RX Finished Process Descriptors */ +#define INT_RX_DONE 0x00000008 /* Receive Done */ +#define INT_TX_UNDERRUN 0x00000010 /* Transmit Underrun */ +#define INT_TX_ERR 0x00000020 /* Transmit Error */ +#define INT_TX_FIN 0x00000040 /* TX Finished Process Descriptors */ +#define INT_TX_DONE 0x00000080 /* Transmit Done */ +#define INT_SOFT_INT 0x00001000 /* Software Triggered Interrupt */ +#define INT_WAKEUP 0x00002000 /* Wakeup Event Interrupt */ + +/* Power Down Register */ +#define PD_POWER_DOWN 0x80000000 /* Power Down MAC */ + +/* RX Descriptor Control Word */ +#define RCTRL_SIZE 0x000007FF /* Buffer size mask */ +#define RCTRL_INT 0x80000000 /* Generate RxDone Interrupt */ + +/* RX Status Hash CRC Word */ +#define RHASH_SA 0x000001FF /* Hash CRC for Source Address */ +#define RHASH_DA 0x001FF000 /* Hash CRC for Destination Address */ + +/* RX Status Information Word */ +#define RINFO_SIZE 0x000007FF /* Data size in bytes */ +#define RINFO_CTRL_FRAME 0x00040000 /* Control Frame */ +#define RINFO_VLAN 0x00080000 /* VLAN Frame */ +#define RINFO_FAIL_FILT 0x00100000 /* RX Filter Failed */ +#define RINFO_MCAST 0x00200000 /* Multicast Frame */ +#define RINFO_BCAST 0x00400000 /* Broadcast Frame */ +#define RINFO_CRC_ERR 0x00800000 /* CRC Error in Frame */ +#define RINFO_SYM_ERR 0x01000000 /* Symbol Error from PHY */ +#define RINFO_LEN_ERR 0x02000000 /* Length Error */ +#define RINFO_RANGE_ERR 0x04000000 /* Range Error (exceeded max. size) */ +#define RINFO_ALIGN_ERR 0x08000000 /* Alignment Error */ +#define RINFO_OVERRUN 0x10000000 /* Receive overrun */ +#define RINFO_NO_DESCR 0x20000000 /* No new Descriptor available */ +#define RINFO_LAST_FLAG 0x40000000 /* Last Fragment in Frame */ +#define RINFO_ERR 0x80000000 /* Error Occured (OR of all errors) */ + +#define RINFO_ERR_MASK (RINFO_FAIL_FILT | RINFO_CRC_ERR | RINFO_SYM_ERR | \ + RINFO_LEN_ERR | RINFO_ALIGN_ERR | RINFO_OVERRUN) + +/* TX Descriptor Control Word */ +#define TCTRL_SIZE 0x000007FF /* Size of data buffer in bytes */ +#define TCTRL_OVERRIDE 0x04000000 /* Override Default MAC Registers */ +#define TCTRL_HUGE 0x08000000 /* Enable Huge Frame */ +#define TCTRL_PAD 0x10000000 /* Pad short Frames to 64 bytes */ +#define TCTRL_CRC 0x20000000 /* Append a hardware CRC to Frame */ +#define TCTRL_LAST 0x40000000 /* Last Descriptor for TX Frame */ +#define TCTRL_INT 0x80000000 /* Generate TxDone Interrupt */ + +/* TX Status Information Word */ +#define TINFO_COL_CNT 0x01E00000 /* Collision Count */ +#define TINFO_DEFER 0x02000000 /* Packet Deferred (not an error) */ +#define TINFO_EXCESS_DEF 0x04000000 /* Excessive Deferral */ +#define TINFO_EXCESS_COL 0x08000000 /* Excessive Collision */ +#define TINFO_LATE_COL 0x10000000 /* Late Collision Occured */ +#define TINFO_UNDERRUN 0x20000000 /* Transmit Underrun */ +#define TINFO_NO_DESCR 0x40000000 /* No new Descriptor available */ +#define TINFO_ERR 0x80000000 /* Error Occured (OR of all errors) */ + +/* DP83848C PHY Registers */ +#define PHY_REG_BMCR 0x00 /* Basic Mode Control Register */ +#define PHY_REG_BMSR 0x01 /* Basic Mode Status Register */ +#define PHY_REG_IDR1 0x02 /* PHY Identifier 1 */ +#define PHY_REG_IDR2 0x03 /* PHY Identifier 2 */ +#define PHY_REG_ANAR 0x04 /* Auto-Negotiation Advertisement */ +#define PHY_REG_ANLPAR 0x05 /* Auto-Neg. Link Partner Abitily */ +#define PHY_REG_ANER 0x06 /* Auto-Neg. Expansion Register */ +#define PHY_REG_ANNPTR 0x07 /* Auto-Neg. Next Page TX */ + +/* PHY Extended Registers */ +#define PHY_REG_STS 0x10 /* Status Register */ +#define PHY_REG_MICR 0x11 /* MII Interrupt Control Register */ +#define PHY_REG_MISR 0x12 /* MII Interrupt Status Register */ +#define PHY_REG_FCSCR 0x14 /* False Carrier Sense Counter */ +#define PHY_REG_RECR 0x15 /* Receive Error Counter */ +#define PHY_REG_PCSR 0x16 /* PCS Sublayer Config. and Status */ +#define PHY_REG_RBR 0x17 /* RMII and Bypass Register */ +#define PHY_REG_LEDCR 0x18 /* LED Direct Control Register */ +#define PHY_REG_PHYCR 0x19 /* PHY Control Register */ +#define PHY_REG_10BTSCR 0x1A /* 10Base-T Status/Control Register */ +#define PHY_REG_CDCTRL1 0x1B /* CD Test Control and BIST Extens. */ +#define PHY_REG_EDCR 0x1D /* Energy Detect Control Register */ + +#define PHY_FULLD_100M 0x2100 /* Full Duplex 100Mbit */ +#define PHY_HALFD_100M 0x2000 /* Half Duplex 100Mbit */ +#define PHY_FULLD_10M 0x0100 /* Full Duplex 10Mbit */ +#define PHY_HALFD_10M 0x0000 /* Half Duplex 10MBit */ +#define PHY_AUTO_NEG 0x3000 /* Select Auto Negotiation */ + +#define DP83848C_DEF_ADR 0x0100 /* Default PHY device address */ +#define DP83848C_ID 0x20005C90 /* PHY Identifier */ + +// prototypes +portBASE_TYPE Init_EMAC(void); +unsigned short ReadFrameBE_EMAC(void); +void CopyToFrame_EMAC(void *Source, unsigned int Size); +void CopyFromFrame_EMAC(void *Dest, unsigned short Size); +void DummyReadFrame_EMAC(unsigned short Size); +unsigned short StartReadFrame(void); +void EndReadFrame(void); +unsigned int CheckFrameReceived(void); +void RequestSend(void); +unsigned int Rdy4Tx(void); +void DoSend_EMAC(unsigned short FrameSize); +void vEMACWaitForInput( void ); +unsigned int uiGetEMACRxData( unsigned char *ucBuffer ); + + +#endif + +/*---------------------------------------------------------------------------- + * end of file + *---------------------------------------------------------------------------*/ + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings new file mode 100644 index 000000000..0d3c30cdd --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings @@ -0,0 +1,35 @@ +http_http "http://" +http_200 "200 " +http_301 "301 " +http_302 "302 " +http_get "GET " +http_10 "HTTP/1.0" +http_11 "HTTP/1.1" +http_content_type "content-type: " +http_texthtml "text/html" +http_location "location: " +http_host "host: " +http_crnl "\r\n" +http_index_html "/index.html" +http_404_html "/404.html" +http_referer "Referer:" +http_header_200 "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_header_404 "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_content_type_plain "Content-type: text/plain\r\n\r\n" +http_content_type_html "Content-type: text/html\r\n\r\n" +http_content_type_css "Content-type: text/css\r\n\r\n" +http_content_type_text "Content-type: text/text\r\n\r\n" +http_content_type_png "Content-type: image/png\r\n\r\n" +http_content_type_gif "Content-type: image/gif\r\n\r\n" +http_content_type_jpg "Content-type: image/jpeg\r\n\r\n" +http_content_type_binary "Content-type: application/octet-stream\r\n\r\n" +http_html ".html" +http_shtml ".shtml" +http_htm ".htm" +http_css ".css" +http_png ".png" +http_gif ".gif" +http_jpg ".jpg" +http_text ".txt" +http_txt ".txt" + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.c new file mode 100644 index 000000000..ef7a41c7d --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.c @@ -0,0 +1,102 @@ +const char http_http[8] = +/* "http://" */ +{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, }; +const char http_200[5] = +/* "200 " */ +{0x32, 0x30, 0x30, 0x20, }; +const char http_301[5] = +/* "301 " */ +{0x33, 0x30, 0x31, 0x20, }; +const char http_302[5] = +/* "302 " */ +{0x33, 0x30, 0x32, 0x20, }; +const char http_get[5] = +/* "GET " */ +{0x47, 0x45, 0x54, 0x20, }; +const char http_10[9] = +/* "HTTP/1.0" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, }; +const char http_11[9] = +/* "HTTP/1.1" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, }; +const char http_content_type[15] = +/* "content-type: " */ +{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, }; +const char http_texthtml[10] = +/* "text/html" */ +{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_location[11] = +/* "location: " */ +{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, }; +const char http_host[7] = +/* "host: " */ +{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, }; +const char http_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, }; +const char http_index_html[12] = +/* "/index.html" */ +{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_404_html[10] = +/* "/404.html" */ +{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_referer[9] = +/* "Referer:" */ +{0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, }; +const char http_header_200[84] = +/* "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_header_404[91] = +/* "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_content_type_plain[29] = +/* "Content-type: text/plain\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_html[28] = +/* "Content-type: text/html\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_css [27] = +/* "Content-type: text/css\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_text[28] = +/* "Content-type: text/text\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_png [28] = +/* "Content-type: image/png\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_gif [28] = +/* "Content-type: image/gif\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_jpg [29] = +/* "Content-type: image/jpeg\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_binary[43] = +/* "Content-type: application/octet-stream\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, }; +const char http_html[6] = +/* ".html" */ +{0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_shtml[7] = +/* ".shtml" */ +{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_htm[5] = +/* ".htm" */ +{0x2e, 0x68, 0x74, 0x6d, }; +const char http_css[5] = +/* ".css" */ +{0x2e, 0x63, 0x73, 0x73, }; +const char http_png[5] = +/* ".png" */ +{0x2e, 0x70, 0x6e, 0x67, }; +const char http_gif[5] = +/* ".gif" */ +{0x2e, 0x67, 0x69, 0x66, }; +const char http_jpg[5] = +/* ".jpg" */ +{0x2e, 0x6a, 0x70, 0x67, }; +const char http_text[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; +const char http_txt[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.h new file mode 100644 index 000000000..acbe7e17f --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/http-strings.h @@ -0,0 +1,34 @@ +extern const char http_http[8]; +extern const char http_200[5]; +extern const char http_301[5]; +extern const char http_302[5]; +extern const char http_get[5]; +extern const char http_10[9]; +extern const char http_11[9]; +extern const char http_content_type[15]; +extern const char http_texthtml[10]; +extern const char http_location[11]; +extern const char http_host[7]; +extern const char http_crnl[3]; +extern const char http_index_html[12]; +extern const char http_404_html[10]; +extern const char http_referer[9]; +extern const char http_header_200[84]; +extern const char http_header_404[91]; +extern const char http_content_type_plain[29]; +extern const char http_content_type_html[28]; +extern const char http_content_type_css [27]; +extern const char http_content_type_text[28]; +extern const char http_content_type_png [28]; +extern const char http_content_type_gif [28]; +extern const char http_content_type_jpg [29]; +extern const char http_content_type_binary[43]; +extern const char http_html[6]; +extern const char http_shtml[7]; +extern const char http_htm[5]; +extern const char http_css[5]; +extern const char http_png[5]; +extern const char http_gif[5]; +extern const char http_jpg[5]; +extern const char http_text[5]; +extern const char http_txt[5]; diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.c new file mode 100644 index 000000000..62795e71c --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.c @@ -0,0 +1,276 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface + * \author + * Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2006, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "uip.h" +#include "psock.h" +#include "httpd.h" +#include "httpd-cgi.h" +#include "httpd-fs.h" + +#include +#include + +HTTPD_CGI_CALL(file, "file-stats", file_stats); +HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats); +HTTPD_CGI_CALL(net, "net-stats", net_stats); +HTTPD_CGI_CALL(rtos, "rtos-stats", rtos_stats ); +HTTPD_CGI_CALL(io, "led-io", led_io ); + + +static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, &rtos, &io, NULL }; + +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(nullfunction(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +httpd_cgifunction +httpd_cgi(char *name) +{ + const struct httpd_cgi_call **f; + + /* Find the matching name in the table, return the function. */ + for(f = calls; *f != NULL; ++f) { + if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) { + return (*f)->function; + } + } + return nullfunction; +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_file_stats(void *arg) +{ + char *f = (char *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f)); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(file_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static const char closed[] = /* "CLOSED",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0}; +static const char syn_rcvd[] = /* "SYN-RCVD",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56, + 0x44, 0}; +static const char syn_sent[] = /* "SYN-SENT",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e, + 0x54, 0}; +static const char established[] = /* "ESTABLISHED",*/ +{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, + 0x45, 0x44, 0}; +static const char fin_wait_1[] = /* "FIN-WAIT-1",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x31, 0}; +static const char fin_wait_2[] = /* "FIN-WAIT-2",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x32, 0}; +static const char closing[] = /* "CLOSING",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x49, + 0x4e, 0x47, 0}; +static const char time_wait[] = /* "TIME-WAIT,"*/ +{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41, + 0x49, 0x54, 0}; +static const char last_ack[] = /* "LAST-ACK"*/ +{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43, + 0x4b, 0}; + +static const char *states[] = { + closed, + syn_rcvd, + syn_sent, + established, + fin_wait_1, + fin_wait_2, + closing, + time_wait, + last_ack}; + + +static unsigned short +generate_tcp_stats(void *arg) +{ + struct uip_conn *conn; + struct httpd_state *s = (struct httpd_state *)arg; + + conn = &uip_conns[s->count]; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%d%u.%u.%u.%u:%u%s%u%u%c %c\r\n", + htons(conn->lport), + htons(conn->ripaddr[0]) >> 8, + htons(conn->ripaddr[0]) & 0xff, + htons(conn->ripaddr[1]) >> 8, + htons(conn->ripaddr[1]) & 0xff, + htons(conn->rport), + states[conn->tcpstateflags & UIP_TS_MASK], + conn->nrtx, + conn->timer, + (uip_outstanding(conn))? '*':' ', + (uip_stopped(conn))? '!':' '); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr)) +{ + + PSOCK_BEGIN(&s->sout); + + for(s->count = 0; s->count < UIP_CONNS; ++s->count) { + if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) { + PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s); + } + } + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_net_stats(void *arg) +{ + struct httpd_state *s = (struct httpd_state *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]); +} + +static +PT_THREAD(net_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + +#if UIP_STATISTICS + + for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t); + ++s->count) { + PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s); + } + +#endif /* UIP_STATISTICS */ + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ + +extern void vTaskList( signed char *pcWriteBuffer ); +static char cCountBuf[ 32 ]; +long lRefreshCount = 0; +static unsigned short +generate_rtos_stats(void *arg) +{ + lRefreshCount++; + sprintf( cCountBuf, "


Refresh count = %ld", lRefreshCount ); + vTaskList( uip_appdata ); + strcat( uip_appdata, cCountBuf ); + + return strlen( uip_appdata ); +} +/*---------------------------------------------------------------------------*/ + + +static +PT_THREAD(rtos_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_GENERATOR_SEND(&s->sout, generate_rtos_stats, NULL); + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ + +char *pcStatus[ 3 ]; +unsigned long ulString; +extern unsigned long uxParTextGetLED( unsigned long uxLED ); + +static unsigned short generate_io_state( void *arg ) +{ + for( ulString = 0; ulString < 4; ulString++ ) + { + if( uxParTextGetLED( ulString + 5 ) ) + { + pcStatus[ ulString ] = "checked"; + } + else + { + pcStatus[ ulString ] = ""; + } + } + + sprintf( uip_appdata, + "LED 2.5,"\ + "LED 2.6,"\ + "LED 2.7"\ + "

"\ + "", + pcStatus[ 0 ], + pcStatus[ 1 ], + pcStatus[ 2 ] ); + + return strlen( uip_appdata ); +} + +static PT_THREAD(led_io(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_GENERATOR_SEND(&s->sout, generate_io_state, NULL); + PSOCK_END(&s->sout); +} + +/** @} */ + + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.h new file mode 100644 index 000000000..7ae928321 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-cgi.h @@ -0,0 +1,84 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface header file + * \author + * Adam Dunkels + * + */ + + + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_CGI_H__ +#define __HTTPD_CGI_H__ + +#include "psock.h" +#include "httpd.h" + +typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *)); + +httpd_cgifunction httpd_cgi(char *name); + +struct httpd_cgi_call { + const char *name; + const httpd_cgifunction function; +}; + +/** + * \brief HTTPD CGI function declaration + * \param name The C variable name of the function + * \param str The string name of the function, used in the script file + * \param function A pointer to the function that implements it + * + * This macro is used for declaring a HTTPD CGI + * function. This function is then added to the list of + * HTTPD CGI functions with the httpd_cgi_add() function. + * + * \hideinitializer + */ +#define HTTPD_CGI_CALL(name, str, function) \ +static PT_THREAD(function(struct httpd_state *, char *)); \ +static const struct httpd_cgi_call name = {str, function} + +void httpd_cgi_init(void); +#endif /* __HTTPD_CGI_H__ */ + +/** @} */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.c new file mode 100644 index 000000000..dc4aef011 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ + +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-fsdata.h" + +#ifndef NULL +#define NULL 0 +#endif /* NULL */ + +#include "httpd-fsdata.c" + +#if HTTPD_FS_STATISTICS +static u16_t count[HTTPD_FS_NUMFILES]; +#endif /* HTTPD_FS_STATISTICS */ + +/*-----------------------------------------------------------------------------------*/ +static u8_t +httpd_fs_strcmp(const char *str1, const char *str2) +{ + u8_t i; + i = 0; + loop: + + if(str2[i] == 0 || + str1[i] == '\r' || + str1[i] == '\n') { + return 0; + } + + if(str1[i] != str2[i]) { + return 1; + } + + + ++i; + goto loop; +} +/*-----------------------------------------------------------------------------------*/ +int +httpd_fs_open(const char *name, struct httpd_fs_file *file) +{ +#if HTTPD_FS_STATISTICS + u16_t i = 0; +#endif /* HTTPD_FS_STATISTICS */ + struct httpd_fsdata_file_noconst *f; + + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + file->data = f->data; + file->len = f->len; +#if HTTPD_FS_STATISTICS + ++count[i]; +#endif /* HTTPD_FS_STATISTICS */ + return 1; + } +#if HTTPD_FS_STATISTICS + ++i; +#endif /* HTTPD_FS_STATISTICS */ + + } + return 0; +} +/*-----------------------------------------------------------------------------------*/ +void +httpd_fs_init(void) +{ +#if HTTPD_FS_STATISTICS + u16_t i; + for(i = 0; i < HTTPD_FS_NUMFILES; i++) { + count[i] = 0; + } +#endif /* HTTPD_FS_STATISTICS */ +} +/*-----------------------------------------------------------------------------------*/ +#if HTTPD_FS_STATISTICS +u16_t httpd_fs_count +(char *name) +{ + struct httpd_fsdata_file_noconst *f; + u16_t i; + + i = 0; + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + return count[i]; + } + ++i; + } + return 0; +} +#endif /* HTTPD_FS_STATISTICS */ +/*-----------------------------------------------------------------------------------*/ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.h new file mode 100644 index 000000000..b594eea56 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FS_H__ +#define __HTTPD_FS_H__ + +#define HTTPD_FS_STATISTICS 1 + +struct httpd_fs_file { + char *data; + int len; +}; + +/* file must be allocated by caller and will be filled in + by the function. */ +int httpd_fs_open(const char *name, struct httpd_fs_file *file); + +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 +u16_t httpd_fs_count(char *name); +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ + +void httpd_fs_init(void); + +#endif /* __HTTPD_FS_H__ */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/404.html b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/404.html new file mode 100644 index 000000000..43e7f4cad --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/404.html @@ -0,0 +1,8 @@ + + +

+

404 - file not found

+

Go here instead.

+
+ + \ No newline at end of file diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.html b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.html new file mode 100644 index 000000000..1d3bbeee1 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.html @@ -0,0 +1,13 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Loading index.shtml. Click here if not automatically redirected. + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml new file mode 100644 index 000000000..0ce405ba0 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml @@ -0,0 +1,20 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Task statistics

+Page will refresh evey 2 seconds.

+

Task          State  Priority  Stack	#
************************************************
+%! rtos-stats +
+
+ + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml new file mode 100644 index 000000000..0ffdbff7c --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml @@ -0,0 +1,28 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+LED and LCD IO
+ +

+ +Use the check boxes to select the LED's to turn on or off, enter text to display on the LCD, then click "Update IO". + + +

+

+%! led-io +

+ +

+

+ + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml new file mode 100644 index 000000000..d762f40d8 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml @@ -0,0 +1,41 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Network statistics

+ +
+IP           Packets dropped
+             Packets received
+             Packets sent
+IP errors    IP version/header length
+             IP length, high byte
+             IP length, low byte
+             IP fragments
+             Header checksum
+             Wrong protocol
+ICMP	     Packets dropped
+             Packets received
+             Packets sent
+             Type errors
+TCP          Packets dropped
+             Packets received
+             Packets sent
+             Checksum errors
+             Data packets without ACKs
+             Resets
+             Retransmissions
+	     No connection avaliable
+	     Connection attempts to closed ports
+
%! net-stats
+
+
+ + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml new file mode 100644 index 000000000..654d61f21 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml @@ -0,0 +1,21 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+
+

Network connections

+

+ + +%! tcp-connections + + + + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.c new file mode 100644 index 000000000..e7e29e344 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.c @@ -0,0 +1,470 @@ +static const unsigned char data_404_html[] = { + /* /404.html */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0x20, 0x20, + 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, + 0x22, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, + 0x34, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, + 0x68, 0x31, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, + 0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, + 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, + 0x33, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, + 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0}; + +static const unsigned char data_index_html[] = { + /* /index.html */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, + 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, + 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, + 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, + 0x31, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, + 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, + 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x4c, 0x6f, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x2e, 0x20, 0x20, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, + 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x3c, + 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, + 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0}; + +static const unsigned char data_index_shtml[] = { + /* /index.shtml */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, + 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, + 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, + 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, + 0x32, 0x30, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, + 0x66, 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, + 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, + 0x54, 0x4f, 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, + 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, + 0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, + 0x68, 0x72, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x54, 0x61, + 0x73, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, + 0x50, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, + 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x20, 0x65, 0x76, + 0x65, 0x79, 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x66, + 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, + 0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, + 0x70, 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x20, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, + 0x9, 0x23, 0x3c, 0x62, 0x72, 0x3e, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, + 0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, + 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, + 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0}; + +static const unsigned char data_io_shtml[] = { + /* /io.shtml */ + 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x3e, 0x4c, 0x45, 0x44, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x4c, 0x43, 0x44, 0x20, 0x49, 0x4f, + 0x3c, 0x2f, 0x62, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, + 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x55, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x20, 0x74, + 0x6f, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x4c, 0x45, 0x44, 0x27, 0x73, 0x20, 0x74, + 0x6f, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x20, + 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, + 0x6f, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, + 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x43, 0x44, + 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6c, 0x69, + 0x63, 0x6b, 0x20, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x20, 0x49, 0x4f, 0x22, 0x2e, 0xd, 0xa, 0xd, 0xa, 0xd, + 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x72, + 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x46, + 0x6f, 0x72, 0x6d, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x3d, 0x22, 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 0x3e, 0xd, 0xa, 0x25, + 0x21, 0x20, 0x6c, 0x65, 0x64, 0x2d, 0x69, 0x6f, 0xd, 0xa, + 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3d, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, + 0x49, 0x4f, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, + 0x72, 0x6d, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, + 0xa, 0xd, 0xa, 0}; + +static const unsigned char data_stats_shtml[] = { + /* /stats.shtml */ + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, + 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, + 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, + 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, + 0x66, 0x74, 0x22, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, + 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, + 0xd, 0xa, 0x49, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, + 0x49, 0x50, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, + 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xd, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x2c, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, + 0x74, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6c, 0x6f, + 0x77, 0x20, 0x62, 0x79, 0x74, 0x65, 0xd, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x49, 0x50, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x57, 0x72, + 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0xd, 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xd, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0xd, 0xa, 0x54, 0x43, 0x50, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, + 0x70, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, + 0x74, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, + 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x43, 0x4b, + 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x73, 0x65, + 0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, + 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, + 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, + 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, + 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25, 0x21, 0x20, 0x6e, 0x65, + 0x74, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, + 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0}; + +static const unsigned char data_tcp_shtml[] = { + /* /tcp.shtml */ + 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, 0x3c, + 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, 0x3c, + 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, + 0x3e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, + 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, + 0x6d, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, + 0x68, 0x3e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xd, 0xa, 0x25, + 0x21, 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xd, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, + 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, + 0xa, 0xd, 0xa, 0}; + +const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}}; + +const struct httpd_fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}}; + +const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13}}; + +const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10}}; + +const struct httpd_fsdata_file file_stats_shtml[] = {{file_io_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}}; + +const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}}; + +#define HTTPD_FS_ROOT file_tcp_shtml + +#define HTTPD_FS_NUMFILES 6 diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.h new file mode 100644 index 000000000..52d35c265 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd-fsdata.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FSDATA_H__ +#define __HTTPD_FSDATA_H__ + +#include "uip.h" + +struct httpd_fsdata_file { + const struct httpd_fsdata_file *next; + const char *name; + const char *data; + const int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +struct httpd_fsdata_file_noconst { + struct httpd_fsdata_file *next; + char *name; + char *data; + int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +#endif /* __HTTPD_FSDATA_H__ */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.c new file mode 100644 index 000000000..644cf16b7 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.c @@ -0,0 +1,346 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup httpd Web server + * @{ + * The uIP web server is a very simplistic implementation of an HTTP + * server. It can serve web pages and files from a read-only ROM + * filesystem, and provides a very small scripting language. + + */ + +/** + * \file + * Web server + * \author + * Adam Dunkels + */ + + +/* + * Copyright (c) 2004, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $ + */ + +#include "uip.h" +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-cgi.h" +#include "http-strings.h" + +#include + +#define STATE_WAITING 0 +#define STATE_OUTPUT 1 + +#define ISO_nl 0x0a +#define ISO_space 0x20 +#define ISO_bang 0x21 +#define ISO_percent 0x25 +#define ISO_period 0x2e +#define ISO_slash 0x2f +#define ISO_colon 0x3a + + +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_part_of_file(void *state) +{ + struct httpd_state *s = (struct httpd_state *)state; + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + memcpy(uip_appdata, s->file.data, s->len); + + return s->len; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + do { + PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s); + s->file.len -= s->len; + s->file.data += s->len; + } while(s->file.len > 0); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_part_of_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND(&s->sout, s->file.data, s->len); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static void +next_scriptstate(struct httpd_state *s) +{ + char *p; + p = strchr(s->scriptptr, ISO_nl) + 1; + s->scriptlen -= (unsigned short)(p - s->scriptptr); + s->scriptptr = p; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_script(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->scriptpt); + + + while(s->file.len > 0) { + + /* Check if we should start executing a script. */ + if(*s->file.data == ISO_percent && + *(s->file.data + 1) == ISO_bang) { + s->scriptptr = s->file.data + 3; + s->scriptlen = s->file.len - 3; + if(*(s->scriptptr - 1) == ISO_colon) { + httpd_fs_open(s->scriptptr + 1, &s->file); + PT_WAIT_THREAD(&s->scriptpt, send_file(s)); + } else { + PT_WAIT_THREAD(&s->scriptpt, + httpd_cgi(s->scriptptr)(s, s->scriptptr)); + } + next_scriptstate(s); + + /* The script is over, so we reset the pointers and continue + sending the rest of the file. */ + s->file.data = s->scriptptr; + s->file.len = s->scriptlen; + } else { + /* See if we find the start of script marker in the block of HTML + to be sent. */ + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + + if(*s->file.data == ISO_percent) { + ptr = strchr(s->file.data + 1, ISO_percent); + } else { + ptr = strchr(s->file.data, ISO_percent); + } + if(ptr != NULL && + ptr != s->file.data) { + s->len = (int)(ptr - s->file.data); + if(s->len >= uip_mss()) { + s->len = uip_mss(); + } + } + PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s)); + s->file.data += s->len; + s->file.len -= s->len; + + } + } + + PT_END(&s->scriptpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr)) +{ + char *ptr; + + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND_STR(&s->sout, statushdr); + + ptr = strrchr(s->filename, ISO_period); + if(ptr == NULL) { + PSOCK_SEND_STR(&s->sout, http_content_type_binary); + } else if(strncmp(http_html, ptr, 5) == 0 || + strncmp(http_shtml, ptr, 6) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_html); + } else if(strncmp(http_css, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_css); + } else if(strncmp(http_png, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_png); + } else if(strncmp(http_gif, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_gif); + } else if(strncmp(http_jpg, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_jpg); + } else { + PSOCK_SEND_STR(&s->sout, http_content_type_plain); + } + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_output(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->outputpt); + + if(!httpd_fs_open(s->filename, &s->file)) { + httpd_fs_open(http_404_html, &s->file); + strcpy(s->filename, http_404_html); + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_404)); + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_200)); + ptr = strchr(s->filename, ISO_period); + if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) { + PT_INIT(&s->scriptpt); + PT_WAIT_THREAD(&s->outputpt, handle_script(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } + } + PSOCK_CLOSE(&s->sout); + PT_END(&s->outputpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_input(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sin); + + PSOCK_READTO(&s->sin, ISO_space); + + + if(strncmp(s->inputbuf, http_get, 4) != 0) { + PSOCK_CLOSE_EXIT(&s->sin); + } + PSOCK_READTO(&s->sin, ISO_space); + + if(s->inputbuf[0] != ISO_slash) { + PSOCK_CLOSE_EXIT(&s->sin); + } + + if(s->inputbuf[1] == ISO_space) { + strncpy(s->filename, http_index_html, sizeof(s->filename)); + } else { + + s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0; + + /* Process any form input being sent to the server. */ + { + extern void vApplicationProcessFormInput( char *pcInputString, long xInputLength ); + vApplicationProcessFormInput( s->inputbuf, PSOCK_DATALEN(&s->sin) ); + } + + strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename)); + } + + /* httpd_log_file(uip_conn->ripaddr, s->filename);*/ + + s->state = STATE_OUTPUT; + + while(1) { + PSOCK_READTO(&s->sin, ISO_nl); + + if(strncmp(s->inputbuf, http_referer, 8) == 0) { + s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0; + /* httpd_log(&s->inputbuf[9]);*/ + } + } + + PSOCK_END(&s->sin); +} +/*---------------------------------------------------------------------------*/ +static void +handle_connection(struct httpd_state *s) +{ + handle_input(s); + if(s->state == STATE_OUTPUT) { + handle_output(s); + } +} +/*---------------------------------------------------------------------------*/ +void +httpd_appcall(void) +{ + struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate); + + if(uip_closed() || uip_aborted() || uip_timedout()) { + } else if(uip_connected()) { + PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1); + PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1); + PT_INIT(&s->outputpt); + s->state = STATE_WAITING; + /* timer_set(&s->timer, CLOCK_SECOND * 100);*/ + s->timer = 0; + handle_connection(s); + } else if(s != NULL) { + if(uip_poll()) { + ++s->timer; + if(s->timer >= 20) { + uip_abort(); + } + } else { + s->timer = 0; + } + handle_connection(s); + } else { + uip_abort(); + } +} +/*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the web server + * + * This function initializes the web server and should be + * called at system boot-up. + */ +void +httpd_init(void) +{ + uip_listen(HTONS(80)); +} +/*---------------------------------------------------------------------------*/ +/** @} */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.h new file mode 100644 index 000000000..7f7a6666e --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/httpd.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2001-2005, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_H__ +#define __HTTPD_H__ + +#include "psock.h" +#include "httpd-fs.h" + +struct httpd_state { + unsigned char timer; + struct psock sin, sout; + struct pt outputpt, scriptpt; + char inputbuf[50]; + char filename[20]; + char state; + struct httpd_fs_file file; + int len; + char *scriptptr; + int scriptlen; + + unsigned short count; +}; + +void httpd_init(void); +void httpd_appcall(void); + +void httpd_log(char *msg); +void httpd_log_file(u16_t *requester, char *file); + +#endif /* __HTTPD_H__ */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makefsdata b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makefsdata new file mode 100644 index 000000000..8d2715a8a --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makefsdata @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +open(OUTPUT, "> httpd-fsdata.c"); + +chdir("httpd-fs"); + +opendir(DIR, "."); +@files = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); +closedir(DIR); + +foreach $file (@files) { + + if(-d $file && $file !~ /^\./) { + print "Processing directory $file\n"; + opendir(DIR, $file); + @newfiles = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); + closedir(DIR); + printf "Adding files @newfiles\n"; + @files = (@files, map { $_ = "$file/$_" } @newfiles); + next; + } +} + +foreach $file (@files) { + if(-f $file) { + + print "Adding file $file\n"; + + open(FILE, $file) || die "Could not open file $file\n"; + + $file =~ s-^-/-; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + # for AVR, add PROGMEM here + print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); + print(OUTPUT "\t/* $file */\n\t"); + for($j = 0; $j < length($file); $j++) { + printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1))); + } + printf(OUTPUT "0,\n"); + + + $i = 0; + while(read(FILE, $data, 1)) { + if($i == 0) { + print(OUTPUT "\t"); + } + printf(OUTPUT "%#02x, ", unpack("C", $data)); + $i++; + if($i == 10) { + print(OUTPUT "\n"); + $i = 0; + } + } + print(OUTPUT "0};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@pfiles, $file); + } +} + +for($i = 0; $i < @fvars; $i++) { + $file = $pfiles[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, "); + print(OUTPUT "data$fvar + ". (length($file) + 1) .", "); + print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n"); +} + +print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n"); diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makestrings b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makestrings new file mode 100644 index 000000000..8a13c6d29 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "};\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("http-strings"); + +exit 0; + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uIP_Task.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uIP_Task.c new file mode 100644 index 000000000..1520d1524 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uIP_Task.c @@ -0,0 +1,318 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ +/* Standard includes. */ +#include + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" +#include "semphr.h" + +/* uip includes. */ +#include "uip.h" +#include "uip_arp.h" +#include "httpd.h" +#include "timer.h" +#include "clock-arch.h" + +/* Demo includes. */ +#include "emac.h" +#include "partest.h" + +/*-----------------------------------------------------------*/ + +/* MAC address configuration. */ +#define uipMAC_ADDR0 0x00 +#define uipMAC_ADDR1 0x12 +#define uipMAC_ADDR2 0x13 +#define uipMAC_ADDR3 0x10 +#define uipMAC_ADDR4 0x15 +#define uipMAC_ADDR5 0x11 + +/* IP address configuration. */ +#define uipIP_ADDR0 172 +#define uipIP_ADDR1 25 +#define uipIP_ADDR2 218 +#define uipIP_ADDR3 10 + +/* How long to wait before attempting to connect the MAC again. */ +#define uipINIT_WAIT 100 + +/* Shortcut to the header within the Rx buffer. */ +#define xHeader ((struct uip_eth_hdr *) &uip_buf[ 0 ]) + +/* Standard constant. */ +#define uipTOTAL_FRAME_HEADER_SIZE 54 + +/*-----------------------------------------------------------*/ + +/* + * Send the uIP buffer to the MAC. + */ +static void prvENET_Send(void); + +/* + * Setup the MAC address in the MAC itself, and in the uIP stack. + */ +static void prvSetMACAddress( void ); + +/* + * Port functions required by the uIP stack. + */ +void clock_init( void ); +clock_time_t clock_time( void ); + +/*-----------------------------------------------------------*/ + +/* The semaphore used by the ISR to wake the uIP task. */ +extern xSemaphoreHandle xEMACSemaphore; + +/*-----------------------------------------------------------*/ + +void clock_init(void) +{ + /* This is done when the scheduler starts. */ +} +/*-----------------------------------------------------------*/ + +clock_time_t clock_time( void ) +{ + return xTaskGetTickCount(); +} +/*-----------------------------------------------------------*/ + +void vuIP_Task( void *pvParameters ) +{ +portBASE_TYPE i; +uip_ipaddr_t xIPAddr; +struct timer periodic_timer, arp_timer; +extern void ( vEMAC_ISR )( void ); + + /* Create the semaphore used by the ISR to wake this task. */ + vSemaphoreCreateBinary( xEMACSemaphore ); + + /* Initialise the uIP stack. */ + timer_set( &periodic_timer, configTICK_RATE_HZ / 2 ); + timer_set( &arp_timer, configTICK_RATE_HZ * 10 ); + uip_init(); + uip_ipaddr( xIPAddr, uipIP_ADDR0, uipIP_ADDR1, uipIP_ADDR2, uipIP_ADDR3 ); + uip_sethostaddr( xIPAddr ); + httpd_init(); + + /* Initialise the MAC. */ + while( Init_EMAC() != pdPASS ) + { + vTaskDelay( uipINIT_WAIT ); + } + + portENTER_CRITICAL(); + { + MAC_INTENABLE = INT_RX_DONE; + VICIntEnable |= 0x00200000; + VICVectAddr21 = ( portLONG ) vEMAC_ISR; + prvSetMACAddress(); + } + portEXIT_CRITICAL(); + + + for( ;; ) + { + /* Is there received data ready to be processed? */ + uip_len = uiGetEMACRxData( uip_buf ); + + if( uip_len > 0 ) + { + /* Standard uIP loop taken from the uIP manual. */ + if( xHeader->type == htons( UIP_ETHTYPE_IP ) ) + { + uip_arp_ipin(); + uip_input(); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + uip_arp_out(); + prvENET_Send(); + } + } + else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) ) + { + uip_arp_arpin(); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + prvENET_Send(); + } + } + } + else + { + if( timer_expired( &periodic_timer ) ) + { + timer_reset( &periodic_timer ); + for( i = 0; i < UIP_CONNS; i++ ) + { + uip_periodic( i ); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + uip_arp_out(); + prvENET_Send(); + } + } + + /* Call the ARP timer function every 10 seconds. */ + if( timer_expired( &arp_timer ) ) + { + timer_reset( &arp_timer ); + uip_arp_timer(); + } + } + else + { + /* We did not receive a packet, and there was no periodic + processing to perform. Block for a fixed period. If a packet + is received during this period we will be woken by the ISR + giving us the Semaphore. */ + xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 2 ); + } + } + } +} +/*-----------------------------------------------------------*/ + +static void prvENET_Send(void) +{ + RequestSend(); + + /* Copy the header into the Tx buffer. */ + CopyToFrame_EMAC( uip_buf, uipTOTAL_FRAME_HEADER_SIZE ); + if( uip_len > uipTOTAL_FRAME_HEADER_SIZE ) + { + CopyToFrame_EMAC( uip_appdata, ( uip_len - uipTOTAL_FRAME_HEADER_SIZE ) ); + } + + DoSend_EMAC( uip_len ); +} +/*-----------------------------------------------------------*/ + +static void prvSetMACAddress( void ) +{ +struct uip_eth_addr xAddr; + + /* Configure the MAC address in the uIP stack. */ + xAddr.addr[ 0 ] = uipMAC_ADDR0; + xAddr.addr[ 1 ] = uipMAC_ADDR1; + xAddr.addr[ 2 ] = uipMAC_ADDR2; + xAddr.addr[ 3 ] = uipMAC_ADDR3; + xAddr.addr[ 4 ] = uipMAC_ADDR4; + xAddr.addr[ 5 ] = uipMAC_ADDR5; + uip_setethaddr( xAddr ); +} +/*-----------------------------------------------------------*/ + +void vApplicationProcessFormInput( portCHAR *pcInputString, portBASE_TYPE xInputLength ) +{ +char *c, *pcText; +static portCHAR cMessageForDisplay[ 32 ]; +extern xQueueHandle xLCDQueue; +xLCDMessage xLCDMessage; + + /* Process the form input sent by the IO page of the served HTML. */ + + c = strstr( pcInputString, "?" ); + if( c ) + { + /* Turn LED's on or off in accordance with the check box status. */ + if( strstr( c, "LED0=1" ) != NULL ) + { + vParTestSetLED( 5, 0 ); + } + else + { + vParTestSetLED( 5, 1 ); + } + + if( strstr( c, "LED1=1" ) != NULL ) + { + vParTestSetLED( 6, 0 ); + } + else + { + vParTestSetLED( 6, 1 ); + } + + if( strstr( c, "LED2=1" ) != NULL ) + { + vParTestSetLED( 7, 0 ); + } + else + { + vParTestSetLED( 7, 1 ); + } + + /* Find the start of the text to be displayed on the LCD. */ + pcText = strstr( c, "LCD=" ); + pcText += strlen( "LCD=" ); + + /* Terminate the file name for further processing within uIP. */ + *c = 0x00; + + /* Terminate the LCD string. */ + c = strstr( pcText, " " ); + if( c != NULL ) + { + *c = 0x00; + } + + /* Add required spaces. */ + while( ( c = strstr( pcText, "+" ) ) != NULL ) + { + *c = ' '; + } + + /* Write the message to the LCD. */ + strcpy( cMessageForDisplay, pcText ); + xLCDMessage.xColumn = 0; + xLCDMessage.pcMessage = cMessageForDisplay; + xQueueSend( xLCDQueue, &xLCDMessage, portMAX_DELAY ); + } +} + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uip-conf.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uip-conf.h new file mode 100644 index 000000000..3e6f7f381 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uip-conf.h @@ -0,0 +1,157 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 40 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 1480 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 0 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/*#include "smtp.h"*/ +/*#include "hello-world.h"*/ +/*#include "telnetd.h"*/ +#include "webserver.h" +/*#include "dhcpc.h"*/ +/*#include "resolv.h"*/ +/*#include "webclient.h"*/ + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/webserver.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/webserver.h new file mode 100644 index 000000000..1acb290b8 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/webserver.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ +#ifndef __WEBSERVER_H__ +#define __WEBSERVER_H__ + +#include "httpd.h" + +typedef struct httpd_state uip_tcp_appstate_t; +/* UIP_APPCALL: the name of the application function. This function + must return void and take no arguments (i.e., C type "void + appfunc(void)"). */ +#ifndef UIP_APPCALL +#define UIP_APPCALL httpd_appcall +#endif + + +#endif /* __WEBSERVER_H__ */ diff --git a/Demo/ARM7_LPC2368_Eclipse/lpc2368_flash.cfg b/Demo/ARM7_LPC2368_Eclipse/lpc2368_flash.cfg new file mode 100644 index 000000000..c45e902a8 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/lpc2368_flash.cfg @@ -0,0 +1,35 @@ +#daemon configuration +telnet_port 4444 +gdb_port 3333 + +#interface +interface parport +parport_port 0x378 +parport_cable wiggler +jtag_speed 2 + +#use combined on interfaces or targets that can't set TRST/SRST separately +reset_config trst_and_srst srst_pulls_trst + +#jtag scan chain +#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) +jtag_device 4 0x1 0xf 0xe + +#target configuration +daemon_startup reset + +#target +#target arm7tdmi +target arm7tdmi little run_and_init 0 arm7tdmi-s_r4 +run_and_halt_time 0 30 + +working_area 0 0x40000000 0x40000 nobackup + +#flash configuration +flash bank lpc2000 0x0 0x80000 0 0 0 lpc2000_v2 12000 calc_checksum +flash bank cfi 0x80000000 0x400000 2 2 0 + +# For more information about the configuration files, take a look at: +# http://openfacts.berlios.de/index-en.phtml?title=Open+On-Chip+Debugger + +target_script 0 reset program.script diff --git a/Demo/ARM7_LPC2368_Eclipse/lpc2xxx_pp.cfg b/Demo/ARM7_LPC2368_Eclipse/lpc2xxx_pp.cfg new file mode 100644 index 000000000..4c3b0ceb9 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/lpc2xxx_pp.cfg @@ -0,0 +1,33 @@ +#daemon configuration +telnet_port 4444 +gdb_port 3333 + +#interface +interface parport +parport_port 0x378 +parport_cable wiggler +jtag_speed 2 + +#use combined on interfaces or targets that can't set TRST/SRST separately +reset_config trst_and_srst srst_pulls_trst + +#jtag scan chain +#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) +jtag_device 4 0x1 0xf 0xe + +#target configuration +daemon_startup reset + +#target +#target arm7tdmi +target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4 +run_and_halt_time 0 30 + +working_area 0 0x40000000 0x40000 nobackup + +#flash configuration +flash bank lpc2000 0x0 0x80000 0 0 0 lpc2000_v2 12000 calc_checksum +flash bank cfi 0x80000000 0x400000 2 2 0 + +# For more information about the configuration files, take a look at: +# http://openfacts.berlios.de/index-en.phtml?title=Open+On-Chip+Debugger diff --git a/Demo/ARM7_LPC2368_Eclipse/program.script b/Demo/ARM7_LPC2368_Eclipse/program.script new file mode 100644 index 000000000..363913c7c --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/program.script @@ -0,0 +1,11 @@ +arm7_9 dcc_downloads enable +wait_halt +sleep 10 +poll +flash probe 0 +#flash protect 0 0 26 'off' +flash erase 0 0 26 +flash write 0 ./RTOSDemo/RTOSDemo.bin 0x0 +reset run +sleep 10 +shutdown diff --git a/Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h b/Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h index 80547d98e..2ef3f5470 100644 --- a/Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h +++ b/Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h @@ -101,7 +101,7 @@ to exclude the API function. */ #define VICVectAddr VICAddress - +#define VICVectCntl4 VICVectPriority4 typedef struct { long xColumn; diff --git a/Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c b/Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c index 1f5d7d2eb..11fc351a8 100644 --- a/Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c +++ b/Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2368_Rowley/main.c b/Demo/ARM7_LPC2368_Rowley/main.c index 9d302858e..77be6b9ae 100644 --- a/Demo/ARM7_LPC2368_Rowley/main.c +++ b/Demo/ARM7_LPC2368_Rowley/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c b/Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c index 7810b9a7b..304004f02 100644 --- a/Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c +++ b/Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR71x_IAR/FreeRTOSConfig.h b/Demo/ARM7_STR71x_IAR/FreeRTOSConfig.h index dd00f816a..15717c200 100644 --- a/Demo/ARM7_STR71x_IAR/FreeRTOSConfig.h +++ b/Demo/ARM7_STR71x_IAR/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR71x_IAR/ParTest/ParTest.c b/Demo/ARM7_STR71x_IAR/ParTest/ParTest.c index c13dc292b..8b477c6d5 100644 --- a/Demo/ARM7_STR71x_IAR/ParTest/ParTest.c +++ b/Demo/ARM7_STR71x_IAR/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR71x_IAR/main.c b/Demo/ARM7_STR71x_IAR/main.c index 73575899b..5c94f34b8 100644 --- a/Demo/ARM7_STR71x_IAR/main.c +++ b/Demo/ARM7_STR71x_IAR/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR71x_IAR/serial/serial.c b/Demo/ARM7_STR71x_IAR/serial/serial.c index 6e55a20ba..1e423cf07 100644 --- a/Demo/ARM7_STR71x_IAR/serial/serial.c +++ b/Demo/ARM7_STR71x_IAR/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h b/Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h index 47b69679a..c2073233c 100644 --- a/Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h +++ b/Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_GCC/ParTest/ParTest.c b/Demo/ARM7_STR75x_GCC/ParTest/ParTest.c index d9b6b455b..8a6fa0edf 100644 --- a/Demo/ARM7_STR75x_GCC/ParTest/ParTest.c +++ b/Demo/ARM7_STR75x_GCC/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_GCC/main.c b/Demo/ARM7_STR75x_GCC/main.c index 124b44dbe..c9501a412 100644 --- a/Demo/ARM7_STR75x_GCC/main.c +++ b/Demo/ARM7_STR75x_GCC/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_GCC/serial/serial.c b/Demo/ARM7_STR75x_GCC/serial/serial.c index ea1d3a51f..c2795560f 100644 --- a/Demo/ARM7_STR75x_GCC/serial/serial.c +++ b/Demo/ARM7_STR75x_GCC/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_GCC/serial/serialISR.c b/Demo/ARM7_STR75x_GCC/serial/serialISR.c index c8594d71f..fc727d2ca 100644 --- a/Demo/ARM7_STR75x_GCC/serial/serialISR.c +++ b/Demo/ARM7_STR75x_GCC/serial/serialISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_IAR/FreeRTOSConfig.h b/Demo/ARM7_STR75x_IAR/FreeRTOSConfig.h index 0aa09455c..6271a2312 100644 --- a/Demo/ARM7_STR75x_IAR/FreeRTOSConfig.h +++ b/Demo/ARM7_STR75x_IAR/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_IAR/ParTest/ParTest.c b/Demo/ARM7_STR75x_IAR/ParTest/ParTest.c index d9b6b455b..8a6fa0edf 100644 --- a/Demo/ARM7_STR75x_IAR/ParTest/ParTest.c +++ b/Demo/ARM7_STR75x_IAR/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_IAR/main.c b/Demo/ARM7_STR75x_IAR/main.c index 90c6f0c54..a1da8a47d 100644 --- a/Demo/ARM7_STR75x_IAR/main.c +++ b/Demo/ARM7_STR75x_IAR/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM7_STR75x_IAR/serial/serial.c b/Demo/ARM7_STR75x_IAR/serial/serial.c index 7f9f2af94..d5db3c066 100644 --- a/Demo/ARM7_STR75x_IAR/serial/serial.c +++ b/Demo/ARM7_STR75x_IAR/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/ARM9_STR91X_IAR/FreeRTOSConfig.h b/Demo/ARM9_STR91X_IAR/FreeRTOSConfig.h index 8f1b2c02f..688837326 100644 --- a/Demo/ARM9_STR91X_IAR/FreeRTOSConfig.h +++ b/Demo/ARM9_STR91X_IAR/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS distribution. @@ -46,19 +46,28 @@ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. *----------------------------------------------------------*/ +/** + * The STR9 port can use either the watchdog or the timer 2 interrupt to generate + * the system tick. Set configUSE_WATCHDOG_TICK to 1 to use the watchdog, or + * 0 to use timer 2. + */ +#define configUSE_WATCHDOG_TICK 1 + + #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK 0 #define configUSE_TICK_HOOK 0 #define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 96000000 ) #define configCPU_PERIPH_HZ ( ( unsigned portLONG ) 48000000 ) -#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configTICK_RATE_HZ ( ( portTickType ) 100 ) #define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 ) #define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 180 ) -#define configTOTAL_HEAP_SIZE ( ( size_t ) 50000 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) 52000 ) #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 1 #define configUSE_16_BIT_TICKS 0 #define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 /* Co-routine definitions. */ #define configUSE_CO_ROUTINES 0 @@ -67,13 +76,13 @@ /* Set the following definitions to 1 to include the API function, or zero to exclude the API function. */ -#define INCLUDE_vTaskPrioritySet 1 -#define INCLUDE_uxTaskPriorityGet 1 -#define INCLUDE_vTaskDelete 1 -#define INCLUDE_vTaskCleanUpResources 0 -#define INCLUDE_vTaskSuspend 1 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 - +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetCurrentTaskHandle 1 #endif /* FREERTOS_CONFIG_H */ diff --git a/Demo/ARM9_STR91X_IAR/Library/include/91x_conf.h b/Demo/ARM9_STR91X_IAR/Library/include/91x_conf.h index 565ec916e..4fc85fff1 100644 --- a/Demo/ARM9_STR91X_IAR/Library/include/91x_conf.h +++ b/Demo/ARM9_STR91X_IAR/Library/include/91x_conf.h @@ -59,10 +59,10 @@ /************************* WIU *************************/ //#define _WIU /************************* TIM *************************/ -//#define _TIM +#define _TIM //#define _TIM0 //#define _TIM1 -//#define _TIM2 +#define _TIM2 //#define _TIM3 /************************* GPIO ************************/ #define _GPIO diff --git a/Demo/ARM9_STR91X_IAR/Library/include/91x_enet.h b/Demo/ARM9_STR91X_IAR/Library/include/91x_enet.h index c22d8dd22..7ba5263e1 100644 --- a/Demo/ARM9_STR91X_IAR/Library/include/91x_enet.h +++ b/Demo/ARM9_STR91X_IAR/Library/include/91x_enet.h @@ -93,11 +93,12 @@ typedef struct { /* AddressFilteringMode */ #define MAC_Perfect_Multicast_Perfect 0x0 -#define MAC_Perfect_Muticast_Hash 0x1<<17 -#define MAC_Hash_Multicast_Hash 0x3<<17 -#define Inverse 0x4<<17 -#define Promiscuous 0x5<<17 -#define MAC_Hash_Muticast_All 0x6<<17 +#define MAC_Perfect_Multicast_Hash 0x1<<17 +#define MAC_Hash_Multicast_Hash 0x2<<17 +#define MAC_Inverse 0x3<<17 +#define MAC_Promiscuous 0x4<<17 +#define MAC_Perfect_Multicast_All 0x5<<17 +#define MAC_Hash_Multicast_All 0x6<<17 /* VLANFilteringMode */ #define VLANFilter_VLTAG_VLID 1 @@ -109,7 +110,7 @@ typedef struct { /* MAC Address*/ -#define MAC_ADDR0 0x0D +#define MAC_ADDR0 0x00 #define MAC_ADDR1 0x0A #define MAC_ADDR2 0x08 #define MAC_ADDR3 0x04 diff --git a/Demo/ARM9_STR91X_IAR/Library/include/91x_map.h b/Demo/ARM9_STR91X_IAR/Library/include/91x_map.h index e405a2630..147302ff6 100644 --- a/Demo/ARM9_STR91X_IAR/Library/include/91x_map.h +++ b/Demo/ARM9_STR91X_IAR/Library/include/91x_map.h @@ -271,7 +271,7 @@ typedef struct } ENET_MAC_TypeDef; /* DMA Registers */ -typedef struct +typedef struct { vu32 SCR; /* DMA Status and Control Register */ vu32 IER; /* DMA Interrupt Sources Enable Register */ @@ -510,10 +510,10 @@ typedef struct #define AHB_DMA_B (0x68000000) /* DMA Buffered Space */ #define AHB_ENET_MAC_U (0x7C000400) /* ENET_MAC UnBuffered Space */ -#define AHB_ENET_MAC_B (0x6C000000) /* ENET_MAC Buffered Space */ +#define AHB_ENET_MAC_B (0x6C000400) /* ENET_MAC Buffered Space */ #define AHB_ENET_DMA_U (0x7C000000) /* ENET_DMA Unbuffered Space */ -#define AHB_ENET_DMA_B (0x6C000400) /* ENET_DMA Buffered Space */ +#define AHB_ENET_DMA_B (0x6C000000) /* ENET_DMA Buffered Space */ #define AHB_VIC1_U (0xFC000000) /* Secondary VIC1 UnBuffered Space */ #define AHB_VIC0_U (0xFFFFF000) /* Primary VIC0 UnBuffered Space */ @@ -592,7 +592,7 @@ typedef struct /*----------------------------- Unbuffered Mode ------------------------------*/ /*----------------------------------------------------------------------------*/ -#ifndef Buffered +#ifndef Buffered /******************************************************************************* * AHBAPB peripheral Unbuffered Base Address * @@ -618,7 +618,7 @@ typedef struct * EMI peripheral Unbuffered Base Address * *******************************************************************************/ -#define EMI_BASE (AHB_EMI_U) +#define EMI_BASE (AHB_EMI_U) /******************************************************************************* * FMI peripheral Unbuffered Base Address * diff --git a/Demo/ARM9_STR91X_IAR/Library/source/91x_enet.c b/Demo/ARM9_STR91X_IAR/Library/source/91x_enet.c index 29650d345..4a7a99661 100644 --- a/Demo/ARM9_STR91X_IAR/Library/source/91x_enet.c +++ b/Demo/ARM9_STR91X_IAR/Library/source/91x_enet.c @@ -1,4 +1,4 @@ -/******************** +/******************** * Original work (C) COPYRIGHT 2006 STMicroelectronics ************************** * Modifications (C) CopyRight 2006 Richard barry * File Name : 91x_enet.c @@ -54,7 +54,8 @@ #define ENET_NUM_RX_BUFFERS 8 static ENET_DMADSCRBase dmaTxDscrBase, dmaRxDscrBase[ ENET_NUM_RX_BUFFERS ]; -static volatile u8 RxBuff[ ENET_NUM_RX_BUFFERS ][ENET_BUFFER_SIZE], TxBuff[ENET_BUFFER_SIZE]; +static u8 RxBuff[ ENET_NUM_RX_BUFFERS ][ENET_BUFFER_SIZE]; +u8 TxBuff[ENET_BUFFER_SIZE]; /* Private function prototypes -----------------------------------------------*/ extern MEMCOPY_L2S_BY4(); @@ -93,7 +94,7 @@ void ENET_MACControlConfig(ENET_MACConfig *MAC_Config) ENET_MAC->MCR |= MAC_Config->AddressFilteringMode; /* VLAN Filtering Mode */ - ENET_MAC->MCR = (MAC_Config->VLANFilteringMode)<<15; + ENET_MAC->MCR |= (MAC_Config->VLANFilteringMode)<<15; /*Wrong Frame Pass */ if (MAC_Config->PassWrongFrame == ENABLE) ENET_MAC->MCR |=MAC_MCR_PWF; @@ -104,8 +105,8 @@ void ENET_MACControlConfig(ENET_MACConfig *MAC_Config) else ENET_MAC->MCR &=~MAC_MCR_ELC; /* Broadcast Frame Reception */ - if (MAC_Config->BroadcastFrameReception == ENABLE) ENET_MAC->MCR |=MAC_MCR_DBF; - else ENET_MAC->MCR &=~MAC_MCR_DBF; + if (MAC_Config->BroadcastFrameReception == ENABLE) ENET_MAC->MCR &=~MAC_MCR_DBF; + else ENET_MAC->MCR |=MAC_MCR_DBF; /* PacketRetry */ if (MAC_Config->PacketRetry == ENABLE) ENET_MAC->MCR &=~MAC_MCR_DPR; @@ -361,7 +362,6 @@ void ENET_Init () vu32 regValue; ENET_MACConfig *MAC_Config; ENET_MACConfig config; - u32 macAddrLow, macAddrHigh; /* De-assert the SRESET bit of ENET + MAC devices */ ENET_DMA->SCR &=~DMA_SCR_SRESET; @@ -372,6 +372,7 @@ void ENET_Init () MAC_Config->MIIPrescaler = MIIPrescaler_2; MAC_Config->LoopbackMode = DISABLE; MAC_Config->AddressFilteringMode = MAC_Perfect_Multicast_Perfect; + MAC_Config->VLANFilteringMode = VLANfilter_VLTAG; MAC_Config->PassWrongFrame = DISABLE; MAC_Config->LateCollision = DISABLE; MAC_Config->BroadcastFrameReception = ENABLE; @@ -402,24 +403,26 @@ void ENET_Init () ENET_MIIWriteReg(0x0,MAC_MII_REG_XCR, 0x8000); /* Delay to assure PHY reset */ - vTaskDelay( 3000 ); + vTaskDelay( 3000 / portTICK_RATE_MS ); /* initialize the opearting mode */ while( ENET_SetOperatingMode() == pdFAIL ) { - vTaskDelay( 3000 ); + vTaskDelay( 3000 / portTICK_RATE_MS ); } - + /*set MAC physical*/ - macAddrLow = (MAC_ADDR3<<24) + (MAC_ADDR2<<16) + \ - (MAC_ADDR1<<8) + MAC_ADDR0; - - // Higher MAC address - macAddrHigh = (MAC_ADDR5<<8) + MAC_ADDR4; - + //ENET_MAC->MAH = (MAC_ADDR5<<8) + MAC_ADDR4; + //ENET_MAC->MAL = (MAC_ADDR3<<24) + (MAC_ADDR2<<16) + (MAC_ADDR1<<8) + MAC_ADDR0; + /* Initialize Rx and Tx descriptors in memory */ ENET_TxDscrInit(); ENET_RxDscrInit(); + + // What's happening ??? +#ifdef DEBUG + //int pippo = 1; // Do NOT remove!!! +#endif } /******************************************************************************** diff --git a/Demo/ARM9_STR91X_IAR/Library/source/91x_it.c b/Demo/ARM9_STR91X_IAR/Library/source/91x_it.c index cb09f2b93..adf5696c9 100644 --- a/Demo/ARM9_STR91X_IAR/Library/source/91x_it.c +++ b/Demo/ARM9_STR91X_IAR/Library/source/91x_it.c @@ -22,6 +22,7 @@ * OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. *******************************************************************************/ +#include "FreeRTOSConfig.h" #include "91x_it.h" /******************************************************************************* @@ -136,9 +137,9 @@ void TIM1_IRQHandler(void) * Output : None * Return : None *******************************************************************************/ -void TIM2_IRQHandler(void) -{ -} +//void TIM2_IRQHandler(void) +//{ +//} /******************************************************************************* * Function Name : TIM3_IRQHandler * Description : This function handles the TIM3 interrupt request @@ -371,4 +372,16 @@ void PFQBC_IRQHandler(void) { } +#if configUSE_WATCHDOG_TICK == 0 + /* The kernel is not using the watchdog interrupt so it can be defined here. */ + void WDG_IRQHandler( void ) + { + } +#else + /* The kernel is not using the timer 2 interrupt so it can be defined here. */ + void TIM2_IRQHandler( void ) + { + } +#endif /* configUSE_WATCHDOG_TICK */ + /******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/ diff --git a/Demo/ARM9_STR91X_IAR/Library/source/91x_tim.c b/Demo/ARM9_STR91X_IAR/Library/source/91x_tim.c new file mode 100644 index 000000000..a0e78f0fd --- /dev/null +++ b/Demo/ARM9_STR91X_IAR/Library/source/91x_tim.c @@ -0,0 +1,692 @@ +/******************** (C) COPYRIGHT 2006 STMicroelectronics ******************** +* File Name : 91x_tim.c +* Author : MCD Application Team +* Date First Issued : 05/18/2006 : Version 1.0 +* Description : This file provides all the TIM software functions. +******************************************************************************** +* History: +* 05/22/2007 : Version 1.2 +* 05/24/2006 : Version 1.1 +* 05/18/2006 : Version 1.0 +******************************************************************************** +* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH +* CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS +* A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT +* OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT +* OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION +* CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +*******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "91x_tim.h" + +/* Include of other module interface headers ---------------------------------*/ +/* Local includes ------------------------------------------------------------*/ +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* TIM Bits Masks */ + +#define TIM_PWM_MASK 0x0010 +#define TIM_OPM_MASK 0x0020 +#define TIM_OC1_ENABLE_MASK 0x0040 +#define TIM_OC1_DISABLE_MASK 0xFFBF +#define TIM_OC2_ENABLE_MASK 0x0080 +#define TIM_OC2_DISABLE_MASK 0xFF7F + +#define TIM_OLVL1_SET_MASK 0x0100 +#define TIM_OLVL1_RESET_MASK 0xFEFF + +#define TIM_OLVL2_SET_MASK 0x0200 +#define TIM_OLVL2_RESET_MASK 0xFDFF + +#define TIM_ENABLE_MASK 0x8000 +#define TIM_DISABLE_MASK 0x7FFF + +#define TIM_DMA_CLEAR_MASK 0xCFFF + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Interface functions -------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/******************************************************************************* +* Function Name : TIM_DeInit +* Description : Initializes TIM peripheral control and registers to their +* : default reset values. +* Input : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Output : None +* Return : None +*******************************************************************************/ +void TIM_DeInit(TIM_TypeDef *TIMx) +{ + if((TIMx == TIM0)||(TIMx == TIM1)) + { + SCU_APBPeriphReset(__TIM01, DISABLE); /* TIM0 & TIM1 Reset's off */ + } + else + { + SCU_APBPeriphReset(__TIM23, DISABLE); /* TIM2 & TIM3 Reset's off */ + } + + /* Set all the TIMx registers to thier default values */ + TIMx->OC1R = 0x8000; + TIMx->OC2R = 0x8000; + TIMx->CR1 = 0x0; + TIMx->CR2 = 0x1; + TIMx->CNTR = 0x1234; + TIMx->SR = 0x0; +} + +/******************************************************************************* +* Function Name : TIM_StructInit +* Description : Fills in a TIM_InitTypeDef structure with the reset value of +* each parameter. +* Input : TIM_InitStruct : pointer to a TIM_InitTypeDef structure + which will be initialized. +* Output : None +* Return : None. +*******************************************************************************/ +void TIM_StructInit(TIM_InitTypeDef *TIM_InitStruct) +{ + TIM_InitStruct->TIM_Mode = 0x0000; + TIM_InitStruct->TIM_OC1_Modes = 0x0000; + TIM_InitStruct->TIM_OC2_Modes = 0x0000; + TIM_InitStruct->TIM_Clock_Source = 0x0000; + TIM_InitStruct->TIM_Clock_Edge = 0x0000; + TIM_InitStruct->TIM_OPM_INPUT_Edge = 0x0000; + TIM_InitStruct->TIM_ICAP1_Edge = 0x0000; + TIM_InitStruct->TIM_ICAP2_Edge = 0x0000; + TIM_InitStruct->TIM_Prescaler = 0x0000; + TIM_InitStruct->TIM_Pulse_Level_1 = 0x0000; + TIM_InitStruct->TIM_Pulse_Level_2 = 0x0000; + TIM_InitStruct->TIM_Period_Level = 0x0000; + TIM_InitStruct->TIM_Pulse_Length_1 = 0x0000; + TIM_InitStruct->TIM_Pulse_Length_2 = 0x0000; + TIM_InitStruct->TIM_Full_Period = 0x0000; +} + +/******************************************************************************* +* Function Name : TIM_Init +* Description : Initializes TIM peripheral according to the specified +* parameters in the TIM_InitTypeDef structure. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_InitStruct: pointer to a TIM_InitTypeDef structure that +* contains the configuration information for the specified +* TIM peripheral. +* Output : None +* Return : None +*******************************************************************************/ + +void TIM_Init(TIM_TypeDef *TIMx, TIM_InitTypeDef *TIM_InitStruct) +{ +/***************************** Clock configuration ****************************/ + + if (TIM_InitStruct->TIM_Clock_Source == TIM_CLK_APB) + { + /* APB clock */ + TIMx->CR1 &= TIM_CLK_APB; + } + else + { + /* External/SCU clock */ + TIMx->CR1 |= TIM_CLK_EXTERNAL; + if (TIM_InitStruct->TIM_Clock_Edge == TIM_CLK_EDGE_RISING) + { + /* Clock rising edge */ + TIMx->CR1 |= TIM_CLK_EDGE_RISING; + } + else + { + /* Clock falling edge */ + TIMx->CR1 &= TIM_CLK_EDGE_FALLING; + } + } + +/************************** Prescaler configuration ***************************/ + + TIMx->CR2 =( TIMx->CR2 & 0xFF00 )|TIM_InitStruct->TIM_Prescaler ; + +/********************************** TIM Modes *********************************/ + + switch ( TIM_InitStruct->TIM_Mode) + { +/******************************* PWM Input mode *******************************/ + + case TIM_PWMI: + + /* Set the PWMI Bit */ + TIMx->CR1 |= TIM_PWMI; + + /* Set the first edge Level */ + if ( TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING) + { + TIMx->CR1 |= TIM_ICAP1_EDGE_RISING; + } + else + { + TIMx->CR1 &= TIM_ICAP1_EDGE_FALLING; + } + + /* Set the Second edge Level ( Opposite of the first level ) */ + if ( TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING) + { + TIMx->CR1 &= TIM_ICAP2_EDGE_FALLING; + } + else + { + TIMx->CR1 |= TIM_ICAP2_EDGE_RISING; + } + + break; + +/************************** Output compare channel 1 **************************/ + + case TIM_OCM_CHANNEL_1: + + if (TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL1_SET_MASK; + } + else + { + TIMx->CR1 &= TIM_OLVL1_RESET_MASK; + } + + TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1; + + if (TIM_InitStruct->TIM_OC1_Modes == TIM_TIMING) + { + TIMx->CR1 &= TIM_OC1_DISABLE_MASK; + } + else + { + TIMx->CR1 |= TIM_OC1_ENABLE_MASK; + } + + break; + +/************************** Output compare channel 2 **************************/ + + case TIM_OCM_CHANNEL_2: + + if (TIM_InitStruct->TIM_Pulse_Level_2 == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL2_SET_MASK; + } + else + { + TIMx->CR1 &= TIM_OLVL2_RESET_MASK; + } + + TIMx->OC2R = TIM_InitStruct->TIM_Pulse_Length_2; + + if (TIM_InitStruct->TIM_OC2_Modes == TIM_TIMING) + { + TIMx->CR1 &= TIM_OC2_DISABLE_MASK; + } + else + { + TIMx->CR1 |= TIM_OC2_ENABLE_MASK; + } + + break; + +/************************ Output compare channel 1 & 2 ************************/ + + case TIM_OCM_CHANNEL_12: + + TIMx->OC2R = TIM_InitStruct->TIM_Pulse_Length_2; + TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1; + + if (TIM_InitStruct->TIM_OC2_Modes == TIM_TIMING) + { + TIMx->CR1 &= TIM_OC2_DISABLE_MASK; + } + else + { + TIMx->CR1 |= TIM_OC2_ENABLE_MASK; + } + + if (TIM_InitStruct->TIM_OC1_Modes == TIM_TIMING) + { + TIMx->CR1 &= TIM_OC1_DISABLE_MASK; + } + else + { + TIMx->CR1 |= TIM_OC1_ENABLE_MASK; + } + + if (TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL1_SET_MASK; + } + else + { + TIMx->CR1 &= TIM_OLVL1_RESET_MASK; + } + + if (TIM_InitStruct->TIM_Pulse_Level_2 == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL2_SET_MASK; + } + else + { + TIMx->CR1 &= TIM_OLVL2_RESET_MASK; + } + + break; + +/********************************** PWM mode **********************************/ + + case TIM_PWM: + + /* Set the Level During the pulse */ + if ( TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL2_SET_MASK; + } + else + { + TIMx->CR1 &= TIM_OLVL2_RESET_MASK; + } + + /* Set the Level after the pulse */ + if (TIM_InitStruct->TIM_Period_Level == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL1_SET_MASK; + } + else + { + TIMx->CR1 &= TIM_OLVL1_RESET_MASK; + } + + /* Set the OCAE */ + TIMx->CR1 |= TIM_OC1_ENABLE_MASK; + + /* Set the PWM Bit */ + TIMx->CR1 |= TIM_PWM_MASK; + + /* Set the Duty Cycle value */ + + TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1 ; + + /* Set the Full Period */ + + TIMx->OC2R = TIM_InitStruct->TIM_Full_Period ; + + break; + +/******************************* One pulse mode *******************************/ + + case TIM_OPM: + + /* Set the Level During the pulse */ + if (TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL2_SET_MASK; + } + + /* Set the Level after the pulse */ + if (TIM_InitStruct->TIM_Period_Level == TIM_HIGH) + { + TIMx->CR1 |= TIM_OLVL1_SET_MASK; + } + + /* Set the Activation Edge on the ICAP 1 */ + if (TIM_InitStruct->TIM_OPM_INPUT_Edge == TIM_OPM_EDGE_RISING) + { + TIMx->CR1 |= TIM_OPM_EDGE_RISING; + } + + /* Set the Output Compare Function */ + TIMx->CR1 |= TIM_OC1_ENABLE_MASK; + + /* Set the One pulse mode */ + TIMx->CR1 |= TIM_OPM_MASK; + + /* Set the Pulse length */ + TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1; + + break; + +/*************************** Input capture channel 1 **************************/ + + case TIM_ICAP_CHANNEL_1: + + if (TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING) + { + TIMx->CR1 |= TIM_ICAP1_EDGE_RISING; + } + else + { + TIMx->CR1 &= TIM_ICAP1_EDGE_FALLING; + } + + break; + +/*************************** Input capture channel 2 **************************/ + + case TIM_ICAP_CHANNEL_2: + + if (TIM_InitStruct->TIM_ICAP2_Edge == TIM_ICAP2_EDGE_RISING) + { + TIMx->CR1 |= TIM_ICAP2_EDGE_RISING; + } + else + { + TIMx->CR1 &= TIM_ICAP2_EDGE_FALLING; + } + + break; + +/************************* Input capture channel 1 & 2 ************************/ + + case TIM_ICAP_CHANNEL_12: + if (TIM_InitStruct->TIM_ICAP2_Edge == TIM_ICAP2_EDGE_RISING) + { + TIMx->CR1 |= TIM_ICAP2_EDGE_RISING; + } + else + { + TIMx->CR1 &= TIM_ICAP2_EDGE_FALLING; + } + + if (TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING) + { + TIMx->CR1 |= TIM_ICAP1_EDGE_RISING; + } + else + { + TIMx->CR1 &= TIM_ICAP1_EDGE_FALLING; + } + + break; + + default: + break; + } +} + +/******************************************************************************* +* Function Name : TIM_CounterCmd +* Description : Enables or disables TIMx Counter peripheral. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_operation: specifies the new state of the TIMx Counter. +* This parameter can be one of the following values: +* - TIM_START: Start the timer counter. +* - TIM_STOP : Stop the timer counter. +* - TIM_CLEAR: Clear the timer counter. +* Output : None +* Return : None +*******************************************************************************/ +void TIM_CounterCmd(TIM_TypeDef *TIMx, TIM_CounterOperations TIM_operation) +{ + switch (TIM_operation) + { + case TIM_START: + TIMx->CR1 |= TIM_ENABLE_MASK; + break; + + case TIM_STOP: + TIMx->CR1 &= TIM_DISABLE_MASK; + break; + + case TIM_CLEAR: + TIMx->CNTR = 0x1234; + break; + + default: + break; + } +} + +/******************************************************************************* +* Function Name : TIM_PrescalerConfig +* Description : This routine is used to configure the TIMx prescaler value +* (when using the APB clock). +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_Prescaler: specifies the prescaler value. This parameter +* can be a value from 0x0 to 0xFF. +* Output : None +* Return : None +*******************************************************************************/ +void TIM_PrescalerConfig(TIM_TypeDef *TIMx, u8 TIM_Prescaler) +{ + TIMx->CR2 &= 0xFF00; + TIMx->CR2 |= TIM_Prescaler; + +} +/******************************************************************************* +* Function Name : TIM_GetPrescalerValue +* Description : This routine is used to get the TIMx prescaler value +* (when using the APB clock). +* Input : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Output : None +* Return : The prescaler value. +*******************************************************************************/ +u8 TIM_GetPrescalerValue(TIM_TypeDef *TIMx) +{ + return TIMx->CR2 & 0x00FF; +} + +/******************************************************************************* +* Function Name : TIM_GetCounterValue +* Description : This routine is used to get the TIMx counter value. +* Input : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Output : None +* Return : The counter value. +*******************************************************************************/ +u16 TIM_GetCounterValue(TIM_TypeDef *TIMx) +{ + return TIMx->CNTR; +} + +/******************************************************************************* +* Function Name : TIM_GetICAP1Value +* Description : This routine is used to get the Input Capture 1 value. +* Input : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Output : None +* Return : The Input Capture 1 value. +*******************************************************************************/ +u16 TIM_GetICAP1Value(TIM_TypeDef *TIMx) +{ + return TIMx->IC1R; +} + +/******************************************************************************* +* Function Name : TIM_GetICAP2Value +* Description : This routine is used to get the Input Capture 2 value. +* Input : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Output : None +* Return : The Input Capture 2 value. +*******************************************************************************/ +u16 TIM_GetICAP2Value(TIM_TypeDef *TIMx) +{ + return TIMx->IC2R; +} + +/******************************************************************************* +* Function Name : TIM_SetPulse +* Description : This routine is used to set the pulse value. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_Channel: specifies the needed channel. +* This parameter can be one of the following values: +* - TIM_PWM_OC1_Channel: PWM/Output Compare 1 Channel +* - TIM_OC2_Channel : Output Compare 2 Channel +* Input3 : TIM_Pulse: specifies the new pulse value. +* Output : None +* Return : None +*******************************************************************************/ +void TIM_SetPulse(TIM_TypeDef *TIMx,u16 TIM_Channel ,u16 TIM_Pulse) +{ + if (TIM_Channel == TIM_PWM_OC1_Channel) + { + TIMx->OC1R = TIM_Pulse; + } + else + { + TIMx->OC2R = TIM_Pulse; + } +} +/******************************************************************************* +* Function Name : TIM_GetFlagStatus +* Description : Checks whether the specified TIMx flag is set or not. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_Flag: specifies the flag to check. +* This parameter can be one of the following values: +* - TIM_FLAG_IC1: Input Capture Channel 1 Flag +* - TIM_FLAG_IC2: Input Capture Channel 2 Flag +* - TIM_FLAG_TO : Timer Overflow Flag +* - TIM_FLAG_OC1: Output Compare Channel 1 Flag +* - TIM_FLAG_OC2: Output Compare Channel 2 Flag +* Output : None +* Return : The NewState of the TIM_Flag (SET or RESET). +*******************************************************************************/ +FlagStatus TIM_GetFlagStatus(TIM_TypeDef *TIMx, u16 TIM_Flag) +{ + if((TIMx->SR & TIM_Flag) == RESET) + { + return RESET; + } + else + { + return SET; + } +} + +/******************************************************************************* +* Function Name : TIM_ClearFlag +* Description : Clears the TIM Flag passed as a parameter. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_Flag: specifies the flag to clear. +* This parameter can be one of the following values: +* - TIM_FLAG_IC1: Input Capture Channel 1 Flag +* - TIM_FLAG_IC2: Input Capture Channel 2 Flag +* - TIM_FLAG_TO : Timer Overflow Flag +* - TIM_FLAG_OC1: Output Compare Channel 1 Flag +* - TIM_FLAG_OC2: Output Compare Channel 2 Flag +* Output : None +* Return : None +*******************************************************************************/ +void TIM_ClearFlag(TIM_TypeDef *TIMx, u16 TIM_Flag) +{ + /* Clear TIM_Flag */ + TIMx->SR &= ~TIM_Flag; +} + +/******************************************************************************* +* Function Name : TIM_GetPWMIPulse +* Description : This routine is used to get the Pulse value in PWMI Mode. +* Input : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Output : None +* Return : The pulse value. +*******************************************************************************/ +u16 TIM_GetPWMIPulse(TIM_TypeDef *TIMx) +{ + return TIMx->IC2R; +} + +/******************************************************************************* +* Function Name : TIM_GetPWMIPeriod +* Description : This routine is used to get the Period value in PWMI Mode. +* Input : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Output : None +* Return : The period value. +*******************************************************************************/ +u16 TIM_GetPWMIPeriod(TIM_TypeDef *TIMx) +{ + return TIMx->IC1R; +} + +/******************************************************************************* +* Function Name : TIM_ITConfig +* Description : Configures the Timer interrupt source. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_IT: specifies the TIM interrupt source to be enabled. +* This parameter can be one of the following values: +* - TIM_IT_IC1: Input Capture 1 Interrupt source. +* - TIM_IT_OC1: Output Compare 1 Interrupt source. +* - TIM_IT_TO : Timer Overflow Interrupt source. +* - TIM_IT_IC2: Input Capture 2 Interrupt source. +* - TIM_IT_OC2: Output Compare 2 Interrupt source. +* Input3 : TIM_Newstate: specifies the new state of the TIMx IT. +* This parameter can be one of the following values: +* - ENABLE : Enable the needed interrupt. +* - DISABLE: Disable the needed interrupt. +* Output : None +* Return : None +*******************************************************************************/ +void TIM_ITConfig(TIM_TypeDef *TIMx, u16 TIM_IT, FunctionalState TIM_Newstate) +{ + if(TIM_Newstate == ENABLE) + { + TIMx->CR2 = (TIMx->CR2 & 0x00FF) | TIM_IT; + } + else + { + TIMx->CR2 &= ~TIM_IT; + } +} + +/******************************************************************************* +* Function Name : TIM_DMAConfig +* Description : Configures the Timer DMA source. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_DMA_Souces: specifies the TIM DMA source to be selected. +* This parameter can be one of the following values: +* - TIM_DMA_IC1: Input Capture 1 DMA source. +* - TIM_DMA_OCA1 Output Compare 1 DMA source. +* - TIM_DMA_TO: Timer Overflow DMA source. +* - TIM_DMA_IC2: Input Capture 2 DMA source. +* - TIM_DMA_OC2: Output Compare 2 DMA source. +* Output : None +* Return : None +*******************************************************************************/ +void TIM_DMAConfig(TIM_TypeDef *TIMx, u16 TIM_DMA_Sources) +{ + /* Reset the DMAS[1:0] bits */ + TIMx->CR1 &= TIM_DMA_CLEAR_MASK; + /* Set the DMAS[1:0] bits according to TIM_DMA_Sources parameter */ + TIMx->CR1 |= TIM_DMA_Sources; +} + +/******************************************************************************* +* Function Name : TIM_DMACmd +* Description : Enables or disables TIMx DMA peripheral. +* Input1 : TIMx: where x can be from 0 to 3 to select the TIM +* peripheral. +* Input2 : TIM_Newstate: new state of the TIMx DMA peripheral +* This parameter can be one of the following values: +* - ENABLE : Enable the TIMx DMA. +* - DISABLE: Disable the TIMx DMA. +* Output : None +* Return : None +*******************************************************************************/ +void TIM_DMACmd(TIM_TypeDef *TIMx, FunctionalState TIM_Newstate) +{ + if (TIM_Newstate == ENABLE) + { + TIMx->CR2 |= TIM_DMA_ENABLE; + } + else + { + TIMx->CR2 &= TIM_DMA_DISABLE; + } +} +/******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/ diff --git a/Demo/ARM9_STR91X_IAR/Library/source/91x_vic.c b/Demo/ARM9_STR91X_IAR/Library/source/91x_vic.c index fecb89096..fc202e920 100644 --- a/Demo/ARM9_STR91X_IAR/Library/source/91x_vic.c +++ b/Demo/ARM9_STR91X_IAR/Library/source/91x_vic.c @@ -364,7 +364,7 @@ void VIC_ITCmd(u16 VIC_Source, FunctionalState VIC_NewState) /******************************************************************************* * Function Name : VIC_SWITCmd -* Description : Generate a software interrupt for the specific source +* Description : Generate a software interrupt for the specific source * interrupt. * Input1 : VIC_Source: specifies the number of the source line. * This parameter can be one of the following values: @@ -505,7 +505,7 @@ u32 VIC_GetCurrentISRAdd(VIC_TypeDef* VICx) * - PFQBC_ITLine : VIC source 31 * Input2 : VIC_Priority: specifies the priority of the interrupt. * It can be a value from 0 to 15. 0 is the highest priority. -* Input3 : void (*VIC_VectAddress)(void): specifies the ISR vector +* Input3 : void (*VIC_VectAddress)(void): specifies the ISR vector * address pointer. * Output : None * Return : None @@ -675,7 +675,7 @@ static void VIC_ITSourceConfig(u16 VIC_Source, u16 VIC_Priority) /******************************************************************************* * Function Name : VIC_Config -* Description : Configure the ISR, the line, the mode and the priority for +* Description : Configure the ISR, the line, the mode and the priority for * each interrupt source line. * Input1 : VIC_Source: specifies the number of the source line. * This parameter can be one of the following values: diff --git a/Demo/ARM9_STR91X_IAR/ParTest/ParTest.c b/Demo/ARM9_STR91X_IAR/ParTest/ParTest.c index 9d48b20d9..9ea057f66 100644 --- a/Demo/ARM9_STR91X_IAR/ParTest/ParTest.c +++ b/Demo/ARM9_STR91X_IAR/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS distribution. diff --git a/Demo/ARM9_STR91X_IAR/RTOSDemo.dep b/Demo/ARM9_STR91X_IAR/RTOSDemo.dep index bb7376f2e..9e4386916 100644 --- a/Demo/ARM9_STR91X_IAR/RTOSDemo.dep +++ b/Demo/ARM9_STR91X_IAR/RTOSDemo.dep @@ -2,211 +2,336 @@ 2 + 2035077562 - ARM + ARM - lwIP - D - $PROJ_DIR$\ARM\Obj\comtest.r79 - $PROJ_DIR$\..\Common\include\BlockQ.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h - $PROJ_DIR$\ARM\Obj\lcd.r79 - $PROJ_DIR$\Library\include\91x_uart.h - $TOOLKIT_DIR$\inc\stdio.h - $TOOLKIT_DIR$\inc\math.h - $PROJ_DIR$\Library\include\91x_map.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h - $PROJ_DIR$\..\..\Source\include\FreeRTOS.h - $PROJ_DIR$\Library\include\91x_lib.h - $PROJ_DIR$\Library\include\91x_ahbapb.h - $PROJ_DIR$\Library\include\91x_scu.h - $PROJ_DIR$\..\..\Source\include\projdefs.h - $PROJ_DIR$\..\..\Source\include\croutine.h - $PROJ_DIR$\..\Common\include\flop.h - $TOOLKIT_DIR$\inc\ymath.h - $PROJ_DIR$\Library\include\91x_gpio.h - $PROJ_DIR$\..\Common\include\flash.h - $PROJ_DIR$\..\..\Source\include\list.h - $PROJ_DIR$\webserver\httpd-fs.h - $PROJ_DIR$\..\Common\Minimal\dynamic.c - $PROJ_DIR$\..\Common\include\integer.h - $PROJ_DIR$\webserver\uip-conf.h - $PROJ_DIR$\webserver\httpd-fsdata.c - $PROJ_DIR$\Library\include\91x_type.h - $PROJ_DIR$\Library\include\91x_vic.h - $TOOLKIT_DIR$\inc\intrinsics.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\snmp.h + $PROJ_DIR$\ARM - lwIP - D\Obj\mem.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\def.h + $PROJ_DIR$\ARM - lwIP - D\Obj\stats.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\tcp.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\QPeek.pbi $PROJ_DIR$\Library\include\91x_fmi.h - $TOOLKIT_DIR$\inc\DLib_Product.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h - $TOOLKIT_DIR$\inc\xencoding_limits.h - $PROJ_DIR$\..\Common\include\comtest.h - $PROJ_DIR$\..\Common\include\dynamic.h - $TOOLKIT_DIR$\inc\yvals.h - $PROJ_DIR$\webserver\webserver.h - $PROJ_DIR$\Library\include\91x_enet.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h - $TOOLKIT_DIR$\inc\stdint.h - $PROJ_DIR$\Library\include\91x_wdg.h - $PROJ_DIR$\STCode\lcd.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h - $PROJ_DIR$\..\Common\include\PollQ.h - $TOOLKIT_DIR$\inc\ysizet.h - $TOOLKIT_DIR$\inc\DLib_Threads.h - $PROJ_DIR$\..\..\Source\include\queue.h + $PROJ_DIR$\ARM - lwIP - D\Obj\ip_frag.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\stats.c + $PROJ_DIR$\ARM - lwIP - D\Obj\ip.r79 $PROJ_DIR$\..\Common\include\comtest2.h - $TOOLKIT_DIR$\inc\inttypes.h + $PROJ_DIR$\ARM - lwIP - D\Obj\udp.r79 $PROJ_DIR$\..\..\Source\include\portable.h + $PROJ_DIR$\ARM - lwIP - D\Obj\ParTest.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\sys.c + $PROJ_DIR$\ARM - lwIP - D\Obj\port.pbi + $PROJ_DIR$\lwip\include\lwip\opt.h + $PROJ_DIR$\ARM - lwIP - D\List\RTOSDemo.html + $PROJ_DIR$\ARM - lwIP - D\Obj\mib2.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\BasicWEB.pbi + $PROJ_DIR$\lwip\include\lwIPWebServer\fs.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_vect_IAR.r79 + $PROJ_DIR$\Library\include\91x_vic.h + $PROJ_DIR$\ARM - lwIP - D\Obj\flash.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\api_msg.h + $PROJ_DIR$\ARM - lwIP - D\Obj\list.r79 + $PROJ_DIR$\Library\source\91x_scu.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\netif.h + $PROJ_DIR$\lwip\include\arch\lwip_errno.h + $PROJ_DIR$\Library\source\91x_gpio.c + $PROJ_DIR$\..\..\Source\include\FreeRTOS.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\tcpip.h + $TOOLKIT_DIR$\inc\stdio.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_scu.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\QPeek.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\ParTest.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\icmp.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_gpio.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\dynamic.pbi + $TOOLKIT_DIR$\inc\DLib_Threads.h + $PROJ_DIR$\..\..\Source\include\queue.h + $PROJ_DIR$\ARM - lwIP - D\Obj\tcpip.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\serial.pbi $TOOLKIT_DIR$\inc\intrinsic.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h - $PROJ_DIR$\webserver\httpd.h - $PROJ_DIR$\..\Common\include\serial.h + $PROJ_DIR$\ARM - lwIP - D\Obj\GenQTest.r79 + $TOOLKIT_DIR$\inc\stdlib.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_fmi.pbi + $PROJ_DIR$\Library\include\91x_scu.h + $PROJ_DIR$\ARM - lwIP - D\Obj\sys.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_msg.c + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_uart.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\dhcp.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_tim.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\netif.r79 $PROJ_DIR$\..\Common\include\partest.h - $PROJ_DIR$\webserver\httpd-cgi.h - $PROJ_DIR$\..\Common\include\semtest.h + $PROJ_DIR$\ARM - lwIP - D\Obj\mib_structs.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\msg_out.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_tim.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\msg_in.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_vic.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\tcpip.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_vic.pbi + $PROJ_DIR$\..\..\Source\include\projdefs.h + $PROJ_DIR$\ARM - lwIP - D\Obj\main.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\RTOSDemo.pbd + $PROJ_DIR$\ARM - lwIP - D\Obj\icmp.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_fmi.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\sockets.pbi + $PROJ_DIR$\lwip\lwipWebServer\fs.c + $PROJ_DIR$\ARM - lwIP - D\Obj\netif.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\main.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\api_lib.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\err.r79 + $PROJ_DIR$\Library\source\91x_vic.c + $PROJ_DIR$\Library\source\91x_tim.c + $PROJ_DIR$\ARM - lwIP - D\Obj\ethernetif.r79 + $PROJ_DIR$\Library\include\91x_lib.h + $PROJ_DIR$\ARM - lwIP - D\Obj\msg_out.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\memp.h + $PROJ_DIR$\ARM - lwIP - D\Obj\flop.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\sys_arch.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\lcd.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\asn1_dec.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\dynamic.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + $PROJ_DIR$\ARM - lwIP - D\Obj\BlockQ.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\ethernetif.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\debug.h + $PROJ_DIR$\..\Common\include\flop.h $TOOLKIT_DIR$\inc\DLib_Defaults.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h - $PROJ_DIR$\webserver\clock-arch.h - $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\ARM - lwIP - D\Obj\tcp_in.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib2.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\pbuf.h $PROJ_DIR$\..\..\Source\include\semphr.h + $PROJ_DIR$\ARM - lwIP - D\Obj\ip.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\comtest.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\PollQ.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\httpd.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\etharp.r79 + $TOOLKIT_DIR$\lib\dl5tpainl8n.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_dec.c + $PROJ_DIR$\ARM - lwIP - D\Obj\inet.pbi + $TOOLKIT_DIR$\inc\DLib_Product.h $PROJ_DIR$\..\..\Source\include\task.h - $TOOLKIT_DIR$\inc\stdlib.h - $PROJ_DIR$\webserver\http-strings.h + $PROJ_DIR$\..\Common\Minimal\dynamic.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\err.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\ip_frag.h + $PROJ_DIR$\lwip\lwipWebServer\BasicWEB.c + $PROJ_DIR$\ARM - lwIP - D\Obj\comtest.r79 + $PROJ_DIR$\..\Common\include\PollQ.h + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\ISR_Support.h + $PROJ_DIR$\ARM - lwIP - D\Obj\BlockQ.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\arch.h + $PROJ_DIR$\ARM - lwIP - D\Obj\queue.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_it.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\fs.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\lcd.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\etharp.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\ip.h + $PROJ_DIR$\ARM - lwIP - D\Obj\msg_in.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\serial.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\BasicWEB.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\tcp_out.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip.c + $PROJ_DIR$\ARM - lwIP - D\Obj\asn1_dec.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\raw.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\dhcp.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\raw.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\mem.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp.c + $PROJ_DIR$\..\..\Source\include\croutine.h $TOOLKIT_DIR$\inc\stddef.h - $PROJ_DIR$\webserver\httpd-fsdata.h + $PROJ_DIR$\ARM - lwIP - D\Obj\mib_structs.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\dhcp.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_enc.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_in.c + $PROJ_DIR$\..\Common\include\semtest.h + $PROJ_DIR$\ARM - lwIP - D\Obj\heap_2.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + $TOOLKIT_DIR$\inc\errno.h + $PROJ_DIR$\ARM - lwIP - D\Obj\api_lib.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\semtest.r79 + $PROJ_DIR$\lwip\include\arch\cc.h + $PROJ_DIR$\ARM - lwIP - D\Obj\asn1_enc.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\icmp.h + $PROJ_DIR$\ARM - lwIP - D\Exe\RTOSDemo.d79 + $PROJ_DIR$\Library\source\91x_uart.c + $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\ARM - lwIP - D\Obj\tcp.pbi + $PROJ_DIR$\lwip\include\lwIPWebServer\fsdata.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_uart.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_init_IAR.r79 + $PROJ_DIR$\..\Common\Minimal\flash.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_out.c + $TOOLKIT_DIR$\inc\xencoding_limits.h + $PROJ_DIR$\ARM - lwIP - D\Obj\mib2.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\netif\etharp.h + $TOOLKIT_DIR$\inc\yvals.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_it.r79 + $PROJ_DIR$\STCode\lcd.h + $PROJ_DIR$\ParTest\ParTest.c + $PROJ_DIR$\ARM - lwIP - D\Obj\sys.r79 + $PROJ_DIR$\Library\include\91x_tim.h + $PROJ_DIR$\..\Common\include\flash.h + $PROJ_DIR$\..\Common\ethernet\lwIP\api\tcpip.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\api.h + $PROJ_DIR$\ARM - lwIP - D\Obj\ip_addr.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\queue.r79 + $PROJ_DIR$\Library\include\91x_ahbapb.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\udp.c $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h - $PROJ_DIR$\ARM\Obj\dynamic.r79 - $PROJ_DIR$\Library\include\91x_it.h - $PROJ_DIR$\..\Common\Minimal\comtest.c - $PROJ_DIR$\..\Common\Minimal\BlockQ.c - $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c - $PROJ_DIR$\..\Common\Minimal\integer.c - $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib_structs.c + $PROJ_DIR$\ARM - lwIP - D\Obj\tcp_out.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\GenQTest.pbi + $TOOLKIT_DIR$\inc\ymath.h + $PROJ_DIR$\ARM - lwIP - D\Exe\RTOSDemo.sim + $PROJ_DIR$\ARM - lwIP - D\Obj\list.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\pbuf.r79 $PROJ_DIR$\main.c - $PROJ_DIR$\..\Common\Minimal\semtest.c - $PROJ_DIR$\..\Common\Minimal\PollQ.c - $PROJ_DIR$\ParTest\ParTest.c - $PROJ_DIR$\serial\serial.c - $PROJ_DIR$\Library\source\91x_enet.c $PROJ_DIR$\Library\include\91x_conf.h $PROJ_DIR$\webserver\uIP_Task.c + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_gpio.r79 + $PROJ_DIR$\lwip\include\lwIPWebServer\BasicWEB.h + $PROJ_DIR$\ARM - lwIP - D\Obj\mem.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_lib.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\sys_arch.pbi + $TOOLKIT_DIR$\inc\intrinsics.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_wdg.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\sys.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_wdg.r79 + $PROJ_DIR$\..\Common\include\BlockQ.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_enet.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\port.r79 + $PROJ_DIR$\..\..\Source\include\list.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\tcp.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\mem.h + $PROJ_DIR$\ARM - lwIP - D\Obj\ip_frag.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\tasks.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\inet.h + $PROJ_DIR$\Library\source\91x_fmi.c + $PROJ_DIR$\ARM - lwIP - D\Obj\udp.pbi + $PROJ_DIR$\serial\serial.c + $PROJ_DIR$\ARM - lwIP - D\Obj\err.pbi + $PROJ_DIR$\Library\include\91x_wdg.h + $PROJ_DIR$\ARM - lwIP - D\Obj\api_msg.r79 + $PROJ_DIR$\lwip\include\lwip\lwipopts.h + $PROJ_DIR$\..\Common\ethernet\lwIP\netif\etharp.c + $TOOLKIT_DIR$\inc\math.h + $PROJ_DIR$\ARM - lwIP - D\Obj\memp.r79 + $PROJ_DIR$\..\Common\Minimal\comtest.c + $PROJ_DIR$\lwip\api\sys_arch.c + $PROJ_DIR$\..\Common\ethernet\lwIP\api\sockets.c + $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\pbuf.c + $PROJ_DIR$\Library\include\91x_map.h + $PROJ_DIR$\ARM - lwIP - D\Obj\flash.pbi + $PROJ_DIR$\Library\include\91x_type.h + $PROJ_DIR$\lwip\include\arch\perf.h + $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_lib.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_in.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\stats.h + $PROJ_DIR$\..\Common\include\GenQTest.h + $PROJ_DIR$\ARM - lwIP - D\Obj\memp.pbi + $PROJ_DIR$\Library\source\91x_enet.c + $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\Library\source\91x_it.c + $PROJ_DIR$\ARM - lwIP - D\Obj\asn1_enc.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_lib.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\PollQ.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\dhcp.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\sockets.h + $PROJ_DIR$\ARM - lwIP - D\Obj\flop.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\semtest.pbi + $PROJ_DIR$\..\Common\include\integer.h + $PROJ_DIR$\..\Common\include\comtest.h + $PROJ_DIR$\ARM - lwIP - D\Obj\api_msg.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\raw.h + $PROJ_DIR$\lwip\lwipWebServer\httpd.c + $TOOLKIT_DIR$\inc\assert.h + $PROJ_DIR$\ARM - lwIP - D\Obj\httpd.r79 + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $PROJ_DIR$\lwip\netif\ethernetif.c + $TOOLKIT_DIR$\inc\ysizet.h + $PROJ_DIR$\Library\include\91x_uart.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_out.c + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_scu.r79 + $PROJ_DIR$\lwip\include\lwIPWebServer\httpd.h + $PROJ_DIR$\lwip\include\arch\sys_arch.h + $PROJ_DIR$\..\Common\include\serial.h + $TOOLKIT_DIR$\lib\dl5tpainl8n.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\integer.pbi + $PROJ_DIR$\ARM - lwIP - D\Obj\sockets.r79 + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\Library\include\91x_it.h + $PROJ_DIR$\ARM - lwIP - D\Obj\tcp_in.pbi + $PROJ_DIR$\Library\include\91x_gpio.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\ip_addr.h + $PROJ_DIR$\ARM - lwIP - D\Obj\91x_enet.r79 $PROJ_DIR$\Library\source\91x_wdg.c - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c - $PROJ_DIR$\..\..\Source\queue.c - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 - $PROJ_DIR$\..\..\Source\tasks.c - $PROJ_DIR$\91x_init_IAR.s - $PROJ_DIR$\91x_vect_IAR.s - $PROJ_DIR$\lnkarm_flash.xcl - $PROJ_DIR$\lnkarm_ram.xcl - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + $PROJ_DIR$\ARM - lwIP - D\Obj\tasks.pbi + $PROJ_DIR$\Library\include\91x_enet.h + $PROJ_DIR$\ARM - lwIP - D\Obj\integer.r79 + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + $PROJ_DIR$\..\Common\Minimal\flop.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\inet.c + $PROJ_DIR$\lwip\lwipWebServer\fsdata.c + $PROJ_DIR$\ARM - lwIP - D\Obj\stats.r79 + $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\netif.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\memp.c + $PROJ_DIR$\..\Common\include\QPeek.h + $PROJ_DIR$\..\Common\ethernet\lwIP\api\err.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\udp.h + $PROJ_DIR$\..\Common\include\dynamic.h + $PROJ_DIR$\ARM - lwIP - D\Obj\portasm.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\ip_addr.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\icmp.c + $PROJ_DIR$\ARM - lwIP - D\Obj\fs.r79 $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c - $PROJ_DIR$\webserver\httpd-cgi.c - $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\ARM - lwIP - D\Obj\raw.r79 $PROJ_DIR$\webserver\httpd.c - $PROJ_DIR$\..\Common\Minimal\flash.c - $PROJ_DIR$\..\Common\Minimal\flop.c - $PROJ_DIR$\FreeRTOSConfig.h - $PROJ_DIR$\Library\source\91x_gpio.c - $PROJ_DIR$\Library\source\91x_fmi.c - $PROJ_DIR$\Library\source\91x_uart.c - $PROJ_DIR$\Library\source\91x_it.c - $PROJ_DIR$\Library\source\91x_lib.c - $PROJ_DIR$\Library\source\91x_scu.c + $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\91x_vect_IAR.s + $PROJ_DIR$\lnkarm_ram.xcl + $PROJ_DIR$\webserver\httpd-cgi.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + $PROJ_DIR$\..\Common\Minimal\QPeek.c + $PROJ_DIR$\lnkarm_flash.xcl + $PROJ_DIR$\91x_init_IAR.s + $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + $PROJ_DIR$\..\..\Source\queue.c $PROJ_DIR$\..\..\Source\list.c - $PROJ_DIR$\Library\source\91x_vic.c - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + $PROJ_DIR$\ARM - lwIP - D\Obj\heap_2.pbi + $PROJ_DIR$\FreeRTOSConfig.h + $PROJ_DIR$\lwip\include\arch\cpu.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\netif\loopif.h + $PROJ_DIR$\ARM - lwIP - D\Obj\inet.r79 $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c - $PROJ_DIR$\ARM\Obj\integer.r79 - $PROJ_DIR$\ARM\Obj\list.r79 - $PROJ_DIR$\ARM\Obj\port.r79 - $PROJ_DIR$\ARM\Obj\ParTest.r79 - $PROJ_DIR$\ARM\Obj\PollQ.r79 - $PROJ_DIR$\ARM\Obj\flash.r79 - $PROJ_DIR$\ARM\Obj\uip_arp.r79 - $PROJ_DIR$\ARM\Obj\portasm.r79 - $PROJ_DIR$\ARM\Obj\91x_init_IAR.r79 - $PROJ_DIR$\ARM\Obj\91x_vect_IAR.r79 - $PROJ_DIR$\ARM\Obj\comtest.pbi - $PROJ_DIR$\ARM\Obj\dynamic.pbi - $PROJ_DIR$\ARM\Obj\91x_lib.r79 - $PROJ_DIR$\ARM\Obj\91x_scu.r79 - $PROJ_DIR$\ARM\Obj\91x_uart.r79 - $PROJ_DIR$\ARM\Obj\91x_vic.r79 - $PROJ_DIR$\ARM\Obj\httpd-cgi.r79 - $PROJ_DIR$\ARM\Obj\httpd-fs.r79 - $PROJ_DIR$\ARM\Obj\httpd.r79 - $PROJ_DIR$\ARM\Obj\psock.r79 - $PROJ_DIR$\ARM\Obj\timer.r79 - $PROJ_DIR$\ARM\Obj\flop.pbi - $PROJ_DIR$\ARM\Obj\flop.r79 - $PROJ_DIR$\ARM\Obj\BlockQ.r79 - $PROJ_DIR$\ARM\Obj\serial.pbi - $PROJ_DIR$\ARM\Obj\uIP_Task.pbi - $PROJ_DIR$\ARM\Obj\91x_enet.pbi - $PROJ_DIR$\ARM\Obj\91x_fmi.pbi - $PROJ_DIR$\ARM\Obj\91x_gpio.pbi - $PROJ_DIR$\ARM\Obj\91x_it.pbi - $PROJ_DIR$\ARM\Obj\91x_lib.pbi - $PROJ_DIR$\ARM\Obj\91x_scu.pbi - $PROJ_DIR$\ARM\Obj\91x_uart.pbi - $PROJ_DIR$\ARM\Obj\91x_vic.pbi - $PROJ_DIR$\ARM\Obj\91x_wdg.r79 - $PROJ_DIR$\ARM\Obj\uip.r79 - $PROJ_DIR$\ARM\Obj\BlockQ.pbi - $PROJ_DIR$\ARM\Obj\queue.r79 - $PROJ_DIR$\ARM\Obj\tasks.r79 - $PROJ_DIR$\ARM\Obj\http-strings.r79 - $PROJ_DIR$\ARM\Obj\flash.pbi - $PROJ_DIR$\ARM\Obj\lcd.pbi - $PROJ_DIR$\ARM\Obj\heap_2.pbi - $PROJ_DIR$\ARM\Obj\integer.pbi - $PROJ_DIR$\ARM\Obj\main.pbi - $PROJ_DIR$\ARM\Obj\list.pbi - $PROJ_DIR$\ARM\Obj\ParTest.pbi - $PROJ_DIR$\ARM\Obj\PollQ.pbi - $PROJ_DIR$\ARM\Obj\semtest.pbi - $PROJ_DIR$\ARM\Obj\semtest.r79 - $PROJ_DIR$\ARM\Obj\serial.r79 - $PROJ_DIR$\ARM\Obj\uIP_Task.r79 - $PROJ_DIR$\ARM\Obj\91x_enet.r79 - $PROJ_DIR$\ARM\Obj\91x_fmi.r79 - $PROJ_DIR$\ARM\Obj\91x_gpio.r79 - $PROJ_DIR$\ARM\Obj\91x_it.r79 - $PROJ_DIR$\ARM\Obj\91x_wdg.pbi - $PROJ_DIR$\ARM\Obj\port.pbi - $PROJ_DIR$\ARM\Obj\uip.pbi - $PROJ_DIR$\ARM\Obj\queue.pbi - $PROJ_DIR$\ARM\Obj\tasks.pbi - $PROJ_DIR$\ARM\Obj\http-strings.pbi - $PROJ_DIR$\ARM\Obj\httpd-cgi.pbi - $PROJ_DIR$\ARM\Obj\httpd-fs.pbi - $PROJ_DIR$\ARM\Obj\httpd.pbi - $PROJ_DIR$\ARM\Obj\psock.pbi - $PROJ_DIR$\ARM\Obj\timer.pbi - $PROJ_DIR$\ARM\Obj\RTOSDemo.pbd - $PROJ_DIR$\ARM\Obj\uip_arp.pbi - $PROJ_DIR$\ARM\Exe\RTOSDemo.d79 - $PROJ_DIR$\ARM\Obj\main.r79 - $PROJ_DIR$\ARM\Obj\heap_2.r79 + $PROJ_DIR$\ARM - lwIP - D\Obj\pbuf.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c - $PROJ_DIR$\..\Common\Minimal\dynamic.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\stats.c ICCARM - 70 + 267 BICOMP - 124 + 3 + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 2 221 195 112 78 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 63 48 36 + 268 157 89 102 154 39 243 16 205 87 142 299 28 2 221 195 112 78 @@ -215,503 +340,675 @@ XLINK - 182 + 145 17 175 - $PROJ_DIR$\..\Common\Minimal\comtest.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\sys.c ICCARM - 0 + 161 BICOMP - 123 + 48 + + ICCARM + 188 142 299 28 16 205 87 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 2 78 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 55 35 56 + 188 142 299 28 16 205 87 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 2 78 - $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $PROJ_DIR$\Library\source\91x_scu.c ICCARM - 136 + 246 BICOMP - 149 + 33 + + ICCARM + 47 214 179 216 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 48 1 + 47 214 179 216 - $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\Library\source\91x_gpio.c ICCARM - 184 + 181 BICOMP - 155 + 37 + + ICCARM + 256 214 179 216 47 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 + 256 214 179 216 47 - $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_msg.c ICCARM - 113 + 204 BICOMP - 156 + 236 + + ICCARM + 16 205 87 142 299 28 112 24 92 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 118 2 257 105 274 198 194 195 144 27 165 237 78 31 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 23 + 16 205 87 142 299 28 112 24 92 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 118 2 257 105 274 198 194 195 144 27 165 237 78 31 - $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\ARM - lwIP - D\Obj\RTOSDemo.pbd + + + BILINK + 191 46 37 114 184 33 57 150 61 187 19 85 173 13 229 5 71 236 82 143 95 133 38 202 117 86 215 232 115 297 97 36 101 251 94 277 7 81 176 63 183 223 18 55 119 56 69 303 15 113 125 233 42 67 3 48 185 260 148 255 172 41 200 + + + + + $PROJ_DIR$\lwip\lwipWebServer\fs.c ICCARM - 3 + 279 BICOMP - 154 + 115 + + ICCARM + 2 142 299 28 20 149 266 268 157 89 99 102 154 39 243 + BICOMP - 11 7 83 26 12 29 27 71 18 13 4 42 39 43 10 67 37 59 30 34 47 46 14 102 51 69 52 28 64 20 + 2 142 299 28 20 149 266 268 157 89 102 154 39 243 - $PROJ_DIR$\main.c + $PROJ_DIR$\Library\source\91x_vic.c ICCARM - 183 + 59 BICOMP - 157 + 61 + + ICCARM + 22 214 179 216 254 76 168 6 162 47 256 244 203 261 + BICOMP - 5 37 59 30 34 47 46 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 14 102 51 69 52 28 64 20 48 43 19 23 45 1 58 36 56 16 49 55 + 22 214 179 216 254 76 168 6 162 47 256 244 203 261 - $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\Library\source\91x_tim.c ICCARM - 162 + 52 BICOMP - 161 + 57 + + ICCARM + 162 214 179 216 47 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 63 48 58 + 162 214 179 216 47 - $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c ICCARM - 117 + 196 BICOMP - 160 + 7 + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 118 112 2 92 257 105 106 27 198 0 274 221 195 78 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 48 45 + 268 157 89 102 154 39 243 16 205 87 142 299 28 118 112 2 92 257 105 106 27 198 0 274 221 195 78 - $PROJ_DIR$\ParTest\ParTest.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib2.c ICCARM - 116 + 155 BICOMP - 159 + 18 + + ICCARM + 142 299 28 16 205 87 + BICOMP - 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 37 59 30 34 47 46 14 102 51 69 52 28 56 + 142 299 28 16 205 87 - $PROJ_DIR$\serial\serial.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_dec.c ICCARM - 163 + 124 BICOMP - 137 + 82 + + ICCARM + 16 205 87 142 299 28 + BICOMP - 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 37 59 30 34 47 46 14 102 51 69 52 28 48 63 55 + 16 205 87 142 299 28 - $PROJ_DIR$\Library\source\91x_enet.c + $PROJ_DIR$\..\Common\Minimal\dynamic.c ICCARM - 165 + 83 BICOMP - 139 + 38 + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 93 40 275 + BICOMP - 10 67 37 59 30 34 47 46 14 102 51 69 52 28 64 20 11 7 83 26 12 29 27 71 18 13 4 42 39 62 + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 93 40 275 - $PROJ_DIR$\webserver\uIP_Task.c + $PROJ_DIR$\lwip\lwipWebServer\BasicWEB.c ICCARM - 164 + 121 BICOMP - 138 + 19 + + ICCARM + 32 157 89 99 102 154 39 243 268 30 131 62 298 12 170 43 186 103 193 93 40 182 216 165 16 205 87 142 299 28 92 188 248 118 112 2 257 105 237 198 274 194 195 144 27 31 24 78 221 300 159 76 214 179 168 6 22 254 162 47 256 244 203 261 247 + BICOMP - 62 37 59 30 34 47 46 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 14 102 51 69 52 28 64 20 63 48 9 53 24 50 41 38 54 60 31 8 40 21 33 44 2 61 + 32 157 89 102 154 39 243 268 30 131 62 298 12 170 43 186 103 193 93 40 182 216 165 16 205 87 142 299 28 92 188 248 118 112 2 257 105 237 198 274 194 195 144 27 31 24 78 221 300 159 76 214 179 168 6 22 254 162 47 256 244 203 261 247 - $PROJ_DIR$\Library\source\91x_wdg.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip.c ICCARM - 147 + 9 BICOMP - 169 + 94 + + ICCARM + 16 205 87 142 299 28 2 195 112 118 92 257 105 106 27 198 144 237 274 194 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 221 78 217 0 + BICOMP - 42 7 83 26 13 + 16 205 87 142 299 28 2 195 112 118 92 257 105 106 27 198 144 237 274 194 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 221 78 217 0 - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\raw.c ICCARM - 115 + 282 BICOMP - 170 + 125 + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 2 78 198 112 92 257 27 105 237 118 221 195 217 0 274 + BICOMP - 11 7 83 26 12 29 27 71 18 13 4 42 39 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 + 268 157 89 102 154 39 243 16 205 87 142 299 28 2 78 198 112 92 257 27 105 237 118 221 195 217 0 274 - $PROJ_DIR$\..\..\Source\queue.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\mem.c ICCARM - 150 + 1 BICOMP - 172 + 183 + + ICCARM + 268 157 89 99 102 154 39 243 112 142 299 28 16 205 87 2 195 188 248 30 131 62 298 12 170 43 186 103 193 40 93 221 78 + BICOMP - 65 37 59 30 34 47 46 62 10 67 14 102 51 69 52 28 64 20 15 + 268 157 89 102 154 39 243 112 142 299 28 16 205 87 2 195 188 248 30 131 62 298 12 170 43 186 103 193 40 93 221 78 - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp.c - AARM - 120 + ICCARM + 4 + + + BICOMP + 148 + + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 2 195 112 78 0 27 105 257 198 92 274 118 194 188 248 30 131 62 298 12 170 43 186 103 193 40 93 144 + + + BICOMP + 268 157 89 102 154 39 243 16 205 87 142 299 28 2 195 112 78 0 27 105 257 198 92 274 118 194 188 248 30 131 62 298 12 170 43 186 103 193 40 93 144 + + - $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_enc.c ICCARM - 151 + 227 BICOMP - 173 + 143 + + ICCARM + 16 205 87 142 299 28 + BICOMP - 5 37 59 30 34 47 46 65 62 10 67 14 102 51 69 52 28 64 20 + 16 205 87 142 299 28 - $PROJ_DIR$\91x_init_IAR.s + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_in.c - AARM - 121 + ICCARM + 90 + + + BICOMP + 255 + + + ICCARM + 2 142 299 28 16 205 87 257 112 27 105 198 92 195 78 194 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 118 144 221 217 0 274 + + + BICOMP + 2 142 299 28 16 205 87 257 112 27 105 198 92 195 78 194 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 118 144 221 217 0 274 + + - $PROJ_DIR$\91x_vect_IAR.s + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c - AARM - 122 + ICCARM + 166 + + + BICOMP + 277 + + + ICCARM + 257 112 142 299 28 198 16 205 87 92 27 105 + + + BICOMP + 257 112 142 299 28 198 16 205 87 92 27 105 + + - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + $PROJ_DIR$\ARM - lwIP - D\Exe\RTOSDemo.d79 + + + XLINK + 17 175 + + + + + XLINK + 290 258 66 181 151 158 228 246 52 50 21 59 189 121 111 44 35 96 34 140 204 124 227 108 51 83 72 98 75 23 79 279 137 240 65 301 262 9 166 196 116 25 70 1 208 155 132 58 77 53 177 192 276 167 282 141 120 252 267 161 80 197 4 90 122 60 11 250 + + + + + $PROJ_DIR$\Library\source\91x_uart.c ICCARM - 152 + 50 BICOMP - 174 + 150 + + + ICCARM + 244 214 179 216 47 + + + BICOMP + 244 214 179 216 47 + + - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + $PROJ_DIR$\Library\source\91x_lib.c ICCARM - 132 + 228 BICOMP - 178 + 184 + + ICCARM + 214 179 216 + BICOMP - 5 37 59 30 34 47 46 62 53 24 50 41 38 54 60 31 8 40 21 9 + 214 179 216 - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + $PROJ_DIR$\..\Common\Minimal\flash.c ICCARM - 119 + 23 BICOMP - 181 + 215 + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 54 163 + BICOMP - 33 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 62 46 + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 54 163 - $PROJ_DIR$\webserver\httpd-cgi.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_out.c ICCARM - 129 + 122 BICOMP - 175 + 172 + + ICCARM + 268 157 89 99 102 154 39 243 2 142 299 28 16 205 87 195 112 78 188 248 30 131 62 298 12 170 43 186 103 193 40 93 257 27 105 198 92 194 118 144 221 0 274 + BICOMP - 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 57 5 46 62 + 268 157 89 102 154 39 243 2 142 299 28 16 205 87 195 112 78 188 248 30 131 62 298 12 170 43 186 103 193 40 93 257 27 105 198 92 194 118 144 221 0 274 - $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\ParTest\ParTest.c ICCARM - 130 + 35 BICOMP - 176 + 13 + + ICCARM + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 54 + BICOMP - 54 60 53 24 50 41 37 59 30 34 47 38 31 8 40 21 68 9 25 + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 30 131 157 89 102 154 39 243 62 298 12 170 43 186 54 - $PROJ_DIR$\webserver\httpd.c + $PROJ_DIR$\..\Common\ethernet\lwIP\api\tcpip.c ICCARM - 131 + 60 BICOMP - 177 + 41 + + ICCARM + 16 205 87 142 299 28 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 78 92 118 112 2 257 105 106 27 198 274 194 195 144 31 24 165 237 + BICOMP - 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 57 66 62 46 + 16 205 87 142 299 28 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 78 92 118 112 2 257 105 106 27 198 274 194 195 144 31 24 165 237 - $PROJ_DIR$\..\Common\Minimal\flash.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\udp.c ICCARM - 118 + 11 BICOMP - 153 + 200 + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 2 78 198 112 92 257 27 105 274 118 144 221 195 217 0 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 56 19 + 268 157 89 102 154 39 243 16 205 87 142 299 28 2 78 198 112 92 257 27 105 274 118 144 221 195 217 0 - $PROJ_DIR$\..\Common\Minimal\flop.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib_structs.c ICCARM - 135 + 132 BICOMP - 134 + 55 + + ICCARM + 16 205 87 142 299 28 + BICOMP - 65 37 59 30 34 47 46 6 17 10 67 14 102 51 69 52 28 64 20 16 + 16 205 87 142 299 28 - $PROJ_DIR$\Library\source\91x_gpio.c + $PROJ_DIR$\main.c ICCARM - 167 + 70 BICOMP - 141 + 63 + + ICCARM + 32 157 89 99 102 154 39 243 76 214 179 216 168 6 22 254 162 47 256 244 203 261 30 131 62 298 12 170 43 186 103 193 40 159 163 234 109 190 136 275 54 88 10 249 222 272 182 188 142 299 28 16 205 87 248 93 + BICOMP - 18 7 83 26 13 + 32 157 89 102 154 39 243 76 214 179 216 168 6 22 254 162 47 256 244 203 261 30 131 62 298 12 170 43 186 103 193 40 159 163 234 109 190 136 275 54 88 10 249 222 272 182 188 142 299 28 16 205 87 248 93 @@ -720,1335 +1017,6447 @@ ICCARM - 166 + 66 BICOMP - 140 + 46 + + ICCARM + 6 214 179 216 + BICOMP - 29 7 83 26 + 6 214 179 216 - $PROJ_DIR$\Library\source\91x_uart.c + $PROJ_DIR$\serial\serial.c ICCARM - 127 + 120 BICOMP - 145 + 42 + + ICCARM + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 40 93 249 + BICOMP - 4 7 83 26 13 + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 30 131 157 89 102 154 39 243 62 298 12 170 43 186 40 93 249 - $PROJ_DIR$\Library\source\91x_it.c + $PROJ_DIR$\..\Common\ethernet\lwIP\netif\etharp.c ICCARM - 168 + 98 BICOMP - 142 + 117 + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 198 112 92 257 156 27 105 118 2 221 195 78 0 274 + BICOMP - 71 11 7 83 26 12 29 27 18 13 4 42 39 + 268 157 89 102 154 39 243 16 205 87 142 299 28 198 112 92 257 156 27 105 118 2 221 195 78 0 274 - $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\..\Common\Minimal\comtest.c ICCARM - 125 + 108 BICOMP - 143 + 95 + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 249 235 54 + BICOMP - 7 83 26 + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 249 235 54 - $PROJ_DIR$\Library\source\91x_scu.c + $PROJ_DIR$\lwip\api\sys_arch.c ICCARM - 126 + 80 BICOMP - 144 + 185 + + ICCARM + 87 142 299 28 2 188 16 205 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 195 112 32 + BICOMP - 13 7 83 26 + 87 142 299 28 2 188 16 205 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 195 112 32 - $PROJ_DIR$\..\..\Source\list.c + $PROJ_DIR$\..\Common\ethernet\lwIP\api\sockets.c ICCARM - 114 + 252 BICOMP - 158 + 67 + + ICCARM + 268 157 89 99 102 154 39 243 139 16 205 87 142 299 28 165 92 188 248 30 131 62 298 12 170 43 186 103 193 40 93 118 112 2 257 105 237 198 274 194 195 144 27 231 + BICOMP - 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 20 + 268 157 89 102 154 39 243 139 16 205 87 142 299 28 165 92 188 248 30 131 62 298 12 170 43 186 103 193 40 93 118 112 2 257 105 237 198 274 194 195 144 27 231 - $PROJ_DIR$\Library\source\91x_vic.c + $PROJ_DIR$\STCode\lcd.c ICCARM - 128 + 116 BICOMP - 146 + 81 + + ICCARM + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 159 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 + BICOMP - 27 7 83 26 71 11 12 29 18 13 4 42 39 + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 159 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\pbuf.c ICCARM - 133 + 177 BICOMP - 179 + 303 + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 221 195 112 78 2 92 188 248 30 131 62 298 12 170 43 186 103 193 40 93 217 + BICOMP - 2 61 10 67 37 59 30 34 47 46 14 102 51 69 52 28 44 + 268 157 89 102 154 39 243 16 205 87 142 299 28 221 195 112 78 2 92 188 248 30 131 62 298 12 170 43 186 103 193 40 93 217 - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + $PROJ_DIR$\..\Common\Minimal\integer.c ICCARM - 148 + 262 BICOMP - 171 + 251 + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 234 + BICOMP - 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 32 62 46 + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 234 - $PROJ_DIR$\ARM\Obj\RTOSDemo.pbd + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_lib.c + + + ICCARM + 140 + + + BICOMP + 71 + + - BILINK - 139 140 141 142 143 144 145 146 169 149 159 160 123 124 153 134 155 174 175 176 177 156 154 158 157 170 178 172 161 137 173 179 138 171 181 + ICCARM + 16 205 87 142 299 28 165 92 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 118 112 2 257 105 237 198 274 194 195 144 27 24 78 + + + BICOMP + 16 205 87 142 299 28 165 92 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 118 112 2 257 105 237 198 274 194 195 144 27 24 78 + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_in.c + + + ICCARM + 58 + + + BICOMP + 119 + + + + + ICCARM + 16 205 87 142 299 28 + + + BICOMP + 16 205 87 142 299 28 + + + + + $PROJ_DIR$\Library\source\91x_enet.c + + + ICCARM + 258 + + + BICOMP + 191 + + + + + ICCARM + 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 76 214 179 216 168 6 22 254 162 47 256 244 203 261 268 + + + BICOMP + 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 76 214 179 216 168 6 22 254 162 47 256 244 203 261 268 + + + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + + + ICCARM + 141 + + + BICOMP + 233 + + + + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 93 40 136 + + + BICOMP + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 93 40 136 + + + + + $PROJ_DIR$\Library\source\91x_it.c + + + ICCARM + 158 + + + BICOMP + 114 + + + + + ICCARM + 298 254 76 214 179 216 168 6 22 162 47 256 244 203 261 + + + BICOMP + 298 254 76 214 179 216 168 6 22 162 47 256 244 203 261 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\dhcp.c + + + ICCARM + 51 + + + BICOMP + 133 + + + + + ICCARM + 268 157 89 99 102 154 39 243 221 16 205 87 142 299 28 195 112 78 274 92 198 257 118 2 105 27 156 188 248 30 131 62 298 12 170 43 186 103 193 40 93 126 + + + BICOMP + 268 157 89 102 154 39 243 221 16 205 87 142 299 28 195 112 78 274 92 198 257 118 2 105 27 156 188 248 30 131 62 298 12 170 43 186 103 193 40 93 126 + + + + + $PROJ_DIR$\lwip\lwipWebServer\httpd.c + + + ICCARM + 240 + + + BICOMP + 97 + + + + + ICCARM + 87 142 299 28 221 16 205 195 112 78 247 194 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 92 118 2 257 105 144 27 198 20 268 + + + BICOMP + 87 142 299 28 221 16 205 195 112 78 247 194 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 92 118 2 257 105 144 27 198 20 268 + + + + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + + + ICCARM + 111 + + + BICOMP + 85 + + + + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 190 + + + BICOMP + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 190 + + + + + $PROJ_DIR$\lwip\netif\ethernetif.c + + + ICCARM + 75 + + + BICOMP + 86 + + + + + ICCARM + 16 205 87 142 299 28 2 195 112 92 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 221 78 156 257 27 105 198 118 261 76 214 179 216 168 6 22 254 162 47 256 244 203 268 + + + BICOMP + 16 205 87 142 299 28 2 195 112 92 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 221 78 156 257 27 105 198 118 261 76 214 179 216 168 6 22 254 162 47 256 244 203 268 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_out.c + + + ICCARM + 77 + + + BICOMP + 56 + + + + + ICCARM + 16 205 87 142 299 28 + + + BICOMP + 16 205 87 142 299 28 + + + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + + + ICCARM + 137 + + + BICOMP + 297 + + + + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 + + + BICOMP + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 + + + + + $PROJ_DIR$\Library\source\91x_wdg.c + + + ICCARM + 189 + + + BICOMP + 187 + + + + + ICCARM + 203 214 179 216 47 + + + BICOMP + 203 214 179 216 47 + + + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + + + ICCARM + 44 + + + BICOMP + 173 + + + + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 93 222 + + + BICOMP + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 93 222 + + + + + $PROJ_DIR$\..\Common\Minimal\flop.c + + + ICCARM + 79 + + + BICOMP + 232 + + + + + ICCARM + 45 157 89 99 102 154 39 243 207 174 30 131 62 298 12 170 43 186 103 193 88 + + + BICOMP + 45 157 89 102 154 39 243 207 174 30 131 62 298 12 170 43 186 103 193 88 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\inet.c + + + ICCARM + 301 + + + BICOMP + 101 + + + + + ICCARM + 16 205 87 142 299 28 112 2 198 92 257 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 + + + BICOMP + 16 205 87 142 299 28 112 2 198 92 257 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 + + + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + + + ICCARM + 96 + + + BICOMP + 229 + + + + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 109 + + + BICOMP + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 109 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\netif.c + + + ICCARM + 53 + + + BICOMP + 69 + + + + + ICCARM + 16 205 87 142 299 28 2 257 112 27 105 198 92 194 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 195 118 144 0 274 + + + BICOMP + 16 205 87 142 299 28 2 257 112 27 105 198 92 194 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 195 118 144 0 274 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\memp.c + + + ICCARM + 208 + + + BICOMP + 223 + + + + + ICCARM + 16 205 87 142 299 28 78 92 274 112 198 257 118 2 105 237 194 188 248 30 131 157 89 99 102 154 39 243 62 298 12 170 43 186 103 193 40 93 195 144 27 165 24 31 221 + + + BICOMP + 16 205 87 142 299 28 78 92 274 112 198 257 118 2 105 237 194 188 248 30 131 157 89 102 154 39 243 62 298 12 170 43 186 103 193 40 93 195 144 27 165 24 31 221 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\err.c + + + ICCARM + 72 + + + BICOMP + 202 + + + + + ICCARM + 105 16 205 87 142 299 28 + + + BICOMP + 105 16 205 87 142 299 28 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\icmp.c + + + ICCARM + 65 + + + BICOMP + 36 + + + + + ICCARM + 268 157 89 99 102 154 39 243 16 205 87 142 299 28 144 112 92 257 27 105 198 118 2 221 195 78 0 274 + + + BICOMP + 268 157 89 102 154 39 243 16 205 87 142 299 28 144 112 92 257 27 105 198 118 2 221 195 78 0 274 + + + + + $PROJ_DIR$\91x_vect_IAR.s + + + AARM + 21 + + + + + AARM + 298 110 + + + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + + + ICCARM + 34 + + + BICOMP + 5 + + + + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 93 272 + + + BICOMP + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 103 193 40 93 272 + + + + + $PROJ_DIR$\91x_init_IAR.s + + + AARM + 151 + + + + + $PROJ_DIR$\..\..\Source\tasks.c + + + ICCARM + 197 + + + BICOMP + 260 + + + + + ICCARM + 32 157 89 99 102 154 39 243 45 268 30 131 62 298 12 170 43 186 103 193 + + + BICOMP + 32 157 89 102 154 39 243 45 268 30 131 62 298 12 170 43 186 103 193 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + + + AARM + 276 + + + + + AARM + 110 + + + + + $PROJ_DIR$\..\..\Source\queue.c + + + ICCARM + 167 + + + BICOMP + 113 + + + + + ICCARM + 45 157 89 99 102 154 39 243 268 30 131 62 298 12 170 43 186 103 193 130 + + + BICOMP + 45 157 89 102 154 39 243 268 30 131 62 298 12 170 43 186 103 193 130 + + + + + $PROJ_DIR$\..\..\Source\list.c + + + ICCARM + 25 + + + BICOMP + 176 + + + + + ICCARM + 45 157 89 99 102 154 39 243 30 131 62 298 12 170 43 186 193 + + + BICOMP + 45 157 89 102 154 39 243 30 131 62 298 12 170 43 186 193 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + + + ICCARM + 192 + + + BICOMP + 15 + + + + + ICCARM + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 45 157 89 99 102 154 39 243 239 30 131 62 298 12 170 43 186 103 193 + + + BICOMP + 76 214 179 216 168 6 22 254 162 47 256 244 203 261 45 157 89 102 154 39 243 239 30 131 62 298 12 170 43 186 103 193 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\stats.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\sys.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_scu.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_gpio.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_msg.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\fs.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_vic.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_tim.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib2.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_dec.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\dynamic.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\BasicWEB.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\raw.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\mem.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_enc.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_in.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_uart.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_lib.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\flash.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_out.c + ICCARM + + + $PROJ_DIR$\ParTest\ParTest.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\tcpip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\udp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib_structs.c + ICCARM + + + $PROJ_DIR$\main.c + ICCARM + + + $PROJ_DIR$\webserver\uIP_Task.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_fmi.c + ICCARM + + + $PROJ_DIR$\serial\serial.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\netif\etharp.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\comtest.c + ICCARM + + + $PROJ_DIR$\lwip\api\sys_arch.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\sockets.c + ICCARM + + + $PROJ_DIR$\STCode\lcd.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\pbuf.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\integer.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_lib.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_in.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_enet.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_it.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\dhcp.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\httpd.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + ICCARM + + + $PROJ_DIR$\lwip\netif\ethernetif.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_out.c + ICCARM + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_wdg.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\flop.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\inet.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\netif.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\memp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\err.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\icmp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + ICCARM + + + $PROJ_DIR$\webserver\httpd.c + ICCARM + + + $PROJ_DIR$\webserver\httpd-fs.c + ICCARM + + + $PROJ_DIR$\webserver\httpd-cgi.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + ICCARM + + + $PROJ_DIR$\..\..\Source\tasks.c + ICCARM + + + $PROJ_DIR$\..\..\Source\queue.c + ICCARM + + + $PROJ_DIR$\..\..\Source\list.c + ICCARM + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + ICCARM + + + + ARM - lwIP - R + + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\snmp.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\def.h + $PROJ_DIR$\ARM - lwIP - R\Obj\tcp_in.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\mib2.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\ParTest.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\asn1_enc.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\tcp_out.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\icmp.r79 + $PROJ_DIR$\Library\include\91x_fmi.h + $PROJ_DIR$\ARM - lwIP - R\Obj\tasks.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\stats.c + $PROJ_DIR$\..\Common\include\comtest2.h + $PROJ_DIR$\ARM - lwIP - R\Obj\ip_addr.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\stats.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\stats.pbi + $PROJ_DIR$\..\..\Source\include\portable.h + $PROJ_DIR$\ARM - lwIP - R\Obj\sockets.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\sys.c + $PROJ_DIR$\lwip\include\lwip\opt.h + $PROJ_DIR$\lwip\include\lwIPWebServer\fs.h + $PROJ_DIR$\ARM - lwIP - R\Obj\tcp_in.pbi + $PROJ_DIR$\Library\include\91x_vic.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\api_msg.h + $PROJ_DIR$\Library\source\91x_scu.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\netif.h + $PROJ_DIR$\lwip\include\arch\lwip_errno.h + $PROJ_DIR$\Library\source\91x_gpio.c + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_scu.r79 + $PROJ_DIR$\..\..\Source\include\FreeRTOS.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_tim.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\tcpip.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_gpio.pbi + $TOOLKIT_DIR$\inc\stdio.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_lib.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\api_msg.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\udp.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\list.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\asn1_dec.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\raw.r79 + $TOOLKIT_DIR$\inc\DLib_Threads.h + $PROJ_DIR$\..\..\Source\include\queue.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_wdg.r79 + $TOOLKIT_DIR$\inc\intrinsic.h + $TOOLKIT_DIR$\inc\stdlib.h + $PROJ_DIR$\Library\include\91x_scu.h + $PROJ_DIR$\ARM - lwIP - R\Obj\tcp.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_msg.c + $PROJ_DIR$\ARM - lwIP - R\Obj\tasks.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\sys_arch.r79 + $PROJ_DIR$\ARM - lwIP - R\List\RTOSDemo.html + $PROJ_DIR$\..\Common\include\partest.h + $PROJ_DIR$\ARM - lwIP - R\Obj\BasicWEB.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\semtest.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\tcpip.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\dhcp.r79 + $PROJ_DIR$\..\..\Source\include\projdefs.h + $PROJ_DIR$\ARM - lwIP - R\Obj\udp.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\sys.pbi + $PROJ_DIR$\lwip\lwipWebServer\fs.c + $PROJ_DIR$\ARM - lwIP - R\Obj\tcpip.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\asn1_enc.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\pbuf.pbi + $PROJ_DIR$\Library\source\91x_vic.c + $PROJ_DIR$\Library\source\91x_tim.c + $PROJ_DIR$\Library\include\91x_lib.h + $PROJ_DIR$\ARM - lwIP - R\Obj\integer.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\memp.h + $PROJ_DIR$\ARM - lwIP - R\Obj\ip.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\PollQ.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\msg_out.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\GenQTest.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\etharp.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\portasm.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\RTOSDemo.pbd + $PROJ_DIR$\ARM - lwIP - R\Obj\flop.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_enet.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\msg_in.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\dynamic.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + $PROJ_DIR$\ARM - lwIP - R\Obj\inet.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\debug.h + $PROJ_DIR$\..\Common\include\flop.h + $TOOLKIT_DIR$\inc\DLib_Defaults.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib2.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\pbuf.h + $PROJ_DIR$\..\..\Source\include\semphr.h + $PROJ_DIR$\ARM - lwIP - R\Obj\BlockQ.r79 + $TOOLKIT_DIR$\lib\dl5tpainl8n.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_dec.c + $PROJ_DIR$\ARM - lwIP - R\Obj\sockets.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\etharp.pbi + $TOOLKIT_DIR$\inc\DLib_Product.h + $PROJ_DIR$\ARM - lwIP - R\Obj\pbuf.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\QPeek.pbi + $PROJ_DIR$\..\..\Source\include\task.h + $PROJ_DIR$\..\Common\Minimal\dynamic.c + $PROJ_DIR$\ARM - lwIP - R\Obj\api_lib.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\err.h + $PROJ_DIR$\ARM - lwIP - R\Obj\dhcp.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\fs.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\ip_frag.h + $PROJ_DIR$\ARM - lwIP - R\Obj\memp.pbi + $PROJ_DIR$\lwip\lwipWebServer\BasicWEB.c + $PROJ_DIR$\ARM - lwIP - R\Obj\list.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\ethernetif.pbi + $PROJ_DIR$\..\Common\include\PollQ.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_vect_IAR.r79 + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\ISR_Support.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\arch.h + $PROJ_DIR$\ARM - lwIP - R\Obj\semtest.r79 + $PROJ_DIR$\ARM - lwIP - R\Exe\RTOSDemo.sim + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\ip.h + $PROJ_DIR$\ARM - lwIP - R\Obj\mib_structs.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip.c + $PROJ_DIR$\ARM - lwIP - R\Obj\inet.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\main.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\sys_arch.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\dhcp.h + $PROJ_DIR$\ARM - lwIP - R\Obj\err.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\raw.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\mem.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp.c + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_fmi.r79 + $PROJ_DIR$\..\..\Source\include\croutine.h + $TOOLKIT_DIR$\inc\stddef.h + $PROJ_DIR$\ARM - lwIP - R\Obj\PollQ.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_enc.c + $PROJ_DIR$\ARM - lwIP - R\Obj\ip_addr.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_in.c + $PROJ_DIR$\..\Common\include\semtest.h + $PROJ_DIR$\ARM - lwIP - R\Obj\ip_frag.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\BasicWEB.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + $TOOLKIT_DIR$\inc\errno.h + $PROJ_DIR$\ARM - lwIP - R\Obj\api_lib.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\sys.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\raw.pbi + $PROJ_DIR$\lwip\include\arch\cc.h + $PROJ_DIR$\ARM - lwIP - R\Exe\RTOSDemo.d79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\icmp.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_uart.pbi + $PROJ_DIR$\Library\source\91x_uart.c + $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_vic.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\port.r79 + $PROJ_DIR$\lwip\include\lwIPWebServer\fsdata.h + $PROJ_DIR$\..\Common\Minimal\flash.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_out.c + $TOOLKIT_DIR$\inc\xencoding_limits.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_enet.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\flash.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\include\netif\etharp.h + $PROJ_DIR$\ARM - lwIP - R\Obj\fs.pbi + $TOOLKIT_DIR$\inc\yvals.h + $PROJ_DIR$\ARM - lwIP - R\Obj\mib2.pbi + $PROJ_DIR$\STCode\lcd.h + $PROJ_DIR$\ParTest\ParTest.c + $PROJ_DIR$\Library\include\91x_tim.h + $PROJ_DIR$\..\Common\include\flash.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_wdg.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\api\tcpip.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\api.h + $PROJ_DIR$\ARM - lwIP - R\Obj\memp.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\ip.pbi + $PROJ_DIR$\Library\include\91x_ahbapb.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\udp.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib_structs.c + $TOOLKIT_DIR$\inc\ymath.h + $PROJ_DIR$\main.c + $PROJ_DIR$\Library\include\91x_conf.h + $PROJ_DIR$\ARM - lwIP - R\Obj\mem.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_init_IAR.r79 + $PROJ_DIR$\lwip\include\lwIPWebServer\BasicWEB.h + $TOOLKIT_DIR$\inc\intrinsics.h + $PROJ_DIR$\ARM - lwIP - R\Obj\comtest.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\sys.h + $PROJ_DIR$\..\Common\include\BlockQ.h + $PROJ_DIR$\ARM - lwIP - R\Obj\flop.pbi + $PROJ_DIR$\..\..\Source\include\list.h + $PROJ_DIR$\ARM - lwIP - R\Obj\httpd.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\ethernetif.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\tcp.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\mem.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\inet.h + $PROJ_DIR$\Library\source\91x_fmi.c + $PROJ_DIR$\ARM - lwIP - R\Obj\QPeek.r79 + $PROJ_DIR$\serial\serial.c + $PROJ_DIR$\Library\include\91x_wdg.h + $PROJ_DIR$\ARM - lwIP - R\Obj\integer.pbi + $PROJ_DIR$\lwip\include\lwip\lwipopts.h + $PROJ_DIR$\..\Common\ethernet\lwIP\netif\etharp.c + $TOOLKIT_DIR$\inc\math.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_gpio.r79 + $PROJ_DIR$\..\Common\Minimal\comtest.c + $PROJ_DIR$\lwip\api\sys_arch.c + $PROJ_DIR$\..\Common\ethernet\lwIP\api\sockets.c + $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\pbuf.c + $PROJ_DIR$\Library\include\91x_map.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_lib.pbi + $PROJ_DIR$\Library\include\91x_type.h + $PROJ_DIR$\lwip\include\arch\perf.h + $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_lib.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_in.c + $PROJ_DIR$\ARM - lwIP - R\Obj\GenQTest.r79 + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\stats.h + $PROJ_DIR$\..\Common\include\GenQTest.h + $PROJ_DIR$\ARM - lwIP - R\Obj\heap_2.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\serial.pbi + $PROJ_DIR$\Library\source\91x_enet.c + $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\Library\source\91x_it.c + $PROJ_DIR$\ARM - lwIP - R\Obj\msg_out.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\dhcp.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\sockets.h + $PROJ_DIR$\ARM - lwIP - R\Obj\lcd.r79 + $PROJ_DIR$\..\Common\include\integer.h + $PROJ_DIR$\..\Common\include\comtest.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\raw.h + $PROJ_DIR$\ARM - lwIP - R\Obj\BlockQ.pbi + $PROJ_DIR$\lwip\lwipWebServer\httpd.c + $TOOLKIT_DIR$\inc\assert.h + $PROJ_DIR$\ARM - lwIP - R\Obj\main.pbi + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $PROJ_DIR$\ARM - lwIP - R\Obj\serial.r79 + $PROJ_DIR$\lwip\netif\ethernetif.c + $TOOLKIT_DIR$\inc\ysizet.h + $PROJ_DIR$\Library\include\91x_uart.h + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_out.c + $PROJ_DIR$\ARM - lwIP - R\Obj\port.pbi + $PROJ_DIR$\lwip\include\lwIPWebServer\httpd.h + $PROJ_DIR$\lwip\include\arch\sys_arch.h + $PROJ_DIR$\..\Common\include\serial.h + $TOOLKIT_DIR$\lib\dl5tpainl8n.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\mib_structs.pbi + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\Library\include\91x_it.h + $PROJ_DIR$\ARM - lwIP - R\Obj\queue.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\api_msg.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\queue.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\err.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\netif.pbi + $PROJ_DIR$\Library\include\91x_gpio.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\ipv4\lwip\ip_addr.h + $PROJ_DIR$\Library\source\91x_wdg.c + $PROJ_DIR$\Library\include\91x_enet.h + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + $PROJ_DIR$\..\Common\Minimal\flop.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\inet.c + $PROJ_DIR$\ARM - lwIP - R\Obj\msg_in.pbi + $PROJ_DIR$\lwip\lwipWebServer\fsdata.c + $PROJ_DIR$\ARM - lwIP - R\Obj\icmp.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\flash.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\netif.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\dynamic.r79 + $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\netif.c + $PROJ_DIR$\..\Common\ethernet\lwIP\core\memp.c + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_scu.pbi + $PROJ_DIR$\..\Common\include\QPeek.h + $PROJ_DIR$\ARM - lwIP - R\Obj\heap_2.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\api\err.c + $PROJ_DIR$\..\Common\ethernet\lwIP\include\lwip\udp.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_tim.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\tcp_out.r79 + $PROJ_DIR$\..\Common\include\dynamic.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_it.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_it.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\comtest.pbi + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\icmp.c + $PROJ_DIR$\ARM - lwIP - R\Obj\ip_frag.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\httpd.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\ParTest.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_vic.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_uart.r79 + $PROJ_DIR$\ARM - lwIP - R\Obj\lcd.pbi + $PROJ_DIR$\91x_vect_IAR.s + $PROJ_DIR$\ARM - lwIP - R\Obj\mem.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\asn1_dec.pbi + $PROJ_DIR$\ARM - lwIP - R\Obj\tcp.pbi + $PROJ_DIR$\..\Common\Minimal\QPeek.c + $PROJ_DIR$\lnkarm_flash.xcl + $PROJ_DIR$\91x_init_IAR.s + $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + $PROJ_DIR$\..\..\Source\queue.c + $PROJ_DIR$\..\..\Source\list.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + $PROJ_DIR$\FreeRTOSConfig.h + $PROJ_DIR$\lwip\include\arch\cpu.h + $PROJ_DIR$\..\Common\ethernet\lwIP\include\netif\loopif.h + $PROJ_DIR$\ARM - lwIP - R\Obj\91x_fmi.pbi + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\stats.c + + + ICCARM + 13 + + + BICOMP + 14 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 1 207 183 108 66 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 1 207 183 108 66 + + + + + [ROOT_NODE] + + + XLINK + 49 110 138 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\sys.c + + + ICCARM + 135 + + + BICOMP + 57 + + + + + ICCARM + 176 137 292 25 18 190 80 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 1 66 + + + BICOMP + 176 137 292 25 18 190 80 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 1 66 + + + + + $PROJ_DIR$\Library\source\91x_scu.c + + + ICCARM + 27 + + + BICOMP + 261 + + + + + ICCARM + 44 199 170 201 + + + BICOMP + 44 199 170 201 + + + + + $PROJ_DIR$\Library\source\91x_gpio.c + + + ICCARM + 193 + + + BICOMP + 31 + + + + + ICCARM + 244 199 170 201 44 + + + BICOMP + 244 199 170 201 44 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_msg.c + + + ICCARM + 240 + + + BICOMP + 34 + + + + + ICCARM + 18 190 80 137 292 25 108 22 84 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 111 1 245 97 265 184 182 183 139 24 161 220 66 30 + + + BICOMP + 18 190 80 137 292 25 108 22 84 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 111 1 245 97 265 184 182 183 139 24 161 220 66 30 + + + + + $PROJ_DIR$\lwip\lwipWebServer\fs.c + + + ICCARM + 99 + + + BICOMP + 152 + + + + + ICCARM + 1 137 292 25 19 145 252 257 153 82 87 91 148 39 228 + + + BICOMP + 1 137 292 25 19 145 252 257 153 82 91 148 39 228 + + + + + $PROJ_DIR$\Library\source\91x_vic.c + + + ICCARM + 276 + + + BICOMP + 143 + + + + + ICCARM + 21 199 170 201 238 64 164 8 157 44 244 229 188 247 + + + BICOMP + 21 199 170 201 238 64 164 8 157 44 244 229 188 247 + + + + + $PROJ_DIR$\Library\source\91x_tim.c + + + ICCARM + 29 + + + BICOMP + 266 + + + + + ICCARM + 157 199 170 201 44 + + + BICOMP + 157 199 170 201 44 + + + + + $PROJ_DIR$\ARM - lwIP - R\Obj\RTOSDemo.pbd + + + BILINK + 149 294 31 270 200 261 266 140 143 159 51 221 70 275 125 93 96 34 281 5 271 98 77 242 90 104 150 178 152 263 274 253 79 189 163 12 273 278 36 224 280 101 154 236 251 214 243 61 231 241 136 52 210 16 14 57 116 9 282 20 6 53 35 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + + + ICCARM + 130 + + + BICOMP + 273 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 111 108 1 84 245 97 100 24 184 0 265 207 183 66 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 111 108 1 84 245 97 100 24 184 0 265 207 183 66 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib2.c + + + ICCARM + 3 + + + BICOMP + 154 + + + + + ICCARM + 137 292 25 18 190 80 + + + BICOMP + 137 292 25 18 190 80 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_dec.c + + + ICCARM + 37 + + + BICOMP + 281 + + + + + ICCARM + 18 190 80 137 292 25 + + + BICOMP + 18 190 80 137 292 25 + + + + + $PROJ_DIR$\..\Common\Minimal\dynamic.c + + + ICCARM + 256 + + + BICOMP + 77 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 85 40 268 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 85 40 268 + + + + + $PROJ_DIR$\lwip\lwipWebServer\BasicWEB.c + + + ICCARM + 131 + + + BICOMP + 51 + + + + + ICCARM + 32 153 82 87 91 148 39 228 257 28 124 55 291 15 166 42 174 94 179 85 40 173 201 161 18 190 80 137 292 25 84 176 233 111 108 1 245 97 220 184 265 182 183 139 24 30 22 66 207 293 155 64 199 170 164 8 21 238 157 44 244 229 188 247 232 + + + BICOMP + 32 153 82 91 148 39 228 257 28 124 55 291 15 166 42 174 94 179 85 40 173 201 161 18 190 80 137 292 25 84 176 233 111 108 1 245 97 220 184 265 182 183 139 24 30 22 66 207 293 155 64 199 170 164 8 21 238 157 44 244 229 188 247 232 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip.c + + + ICCARM + 67 + + + BICOMP + 163 + + + + + ICCARM + 18 190 80 137 292 25 1 183 108 111 84 245 97 100 24 184 139 220 265 182 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 207 66 202 0 + + + BICOMP + 18 190 80 137 292 25 1 183 108 111 84 245 97 100 24 184 139 220 265 182 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 207 66 202 0 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\raw.c + + + ICCARM + 38 + + + BICOMP + 136 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 1 66 184 108 84 245 24 97 220 111 207 183 202 0 265 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 1 66 184 108 84 245 24 97 220 111 207 183 202 0 265 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\mem.c + + + ICCARM + 171 + + + BICOMP + 280 + + + + + ICCARM + 257 153 82 87 91 148 39 228 108 137 292 25 18 190 80 1 183 176 233 28 124 55 291 15 166 42 174 94 179 40 85 207 66 + + + BICOMP + 257 153 82 91 148 39 228 108 137 292 25 18 190 80 1 183 176 233 28 124 55 291 15 166 42 174 94 179 40 85 207 66 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp.c + + + ICCARM + 45 + + + BICOMP + 282 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 1 183 108 66 0 24 97 245 184 84 265 111 182 176 233 28 124 55 291 15 166 42 174 94 179 40 85 139 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 1 183 108 66 0 24 97 245 184 84 265 111 182 176 233 28 124 55 291 15 166 42 174 94 179 40 85 139 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_enc.c + + + ICCARM + 60 + + + BICOMP + 5 + + + + + ICCARM + 18 190 80 137 292 25 + + + BICOMP + 18 190 80 137 292 25 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_in.c + + + ICCARM + 2 + + + BICOMP + 20 + + + + + ICCARM + 1 137 292 25 18 190 80 245 108 24 97 184 84 183 66 182 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 111 139 207 202 0 265 + + + BICOMP + 1 137 292 25 18 190 80 245 108 24 97 184 84 183 66 182 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 111 139 207 202 0 265 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + + + ICCARM + 127 + + + BICOMP + 12 + + + + + ICCARM + 245 108 137 292 25 184 18 190 80 84 24 97 + + + BICOMP + 245 108 137 292 25 184 18 190 80 84 24 97 + + + + + $PROJ_DIR$\ARM - lwIP - R\Exe\RTOSDemo.d79 + + + XLINK + 49 110 + + + + + XLINK + 284 75 122 193 172 269 33 27 29 277 106 276 41 131 86 206 4 68 186 134 240 37 60 175 54 256 118 71 181 254 74 99 209 180 7 114 65 67 127 130 217 103 115 171 162 3 112 76 69 255 92 144 72 239 38 109 226 89 13 135 48 47 45 2 267 59 56 235 + + + + + $PROJ_DIR$\Library\source\91x_uart.c + + + ICCARM + 277 + + + BICOMP + 140 + + + + + ICCARM + 229 199 170 201 44 + + + BICOMP + 229 199 170 201 44 + + + + + $PROJ_DIR$\Library\source\91x_lib.c + + + ICCARM + 33 + + + BICOMP + 200 + + + + + ICCARM + 199 170 201 + + + BICOMP + 199 170 201 + + + + + $PROJ_DIR$\..\Common\Minimal\flash.c + + + ICCARM + 254 + + + BICOMP + 150 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 50 158 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 50 158 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_out.c + + + ICCARM + 267 + + + BICOMP + 6 + + + + + ICCARM + 257 153 82 87 91 148 39 228 1 137 292 25 18 190 80 183 108 66 176 233 28 124 55 291 15 166 42 174 94 179 40 85 245 24 97 184 84 182 111 139 207 0 265 + + + BICOMP + 257 153 82 91 148 39 228 1 137 292 25 18 190 80 183 108 66 176 233 28 124 55 291 15 166 42 174 94 179 40 85 245 24 97 184 84 182 111 139 207 0 265 + + + + + $PROJ_DIR$\ParTest\ParTest.c + + + ICCARM + 4 + + + BICOMP + 275 + + + + + ICCARM + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 50 + + + BICOMP + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 28 124 153 82 91 148 39 228 55 291 15 166 42 174 50 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\tcpip.c + + + ICCARM + 59 + + + BICOMP + 53 + + + + + ICCARM + 18 190 80 137 292 25 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 66 84 111 108 1 245 97 100 24 184 265 182 183 139 30 22 161 220 + + + BICOMP + 18 190 80 137 292 25 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 66 84 111 108 1 245 97 100 24 184 265 182 183 139 30 22 161 220 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\udp.c + + + ICCARM + 56 + + + BICOMP + 35 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 1 66 184 108 84 245 24 97 265 111 139 207 183 202 0 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 1 66 184 108 84 245 24 97 265 111 139 207 183 202 0 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib_structs.c + + + ICCARM + 112 + + + BICOMP + 236 + + + + + ICCARM + 18 190 80 137 292 25 + + + BICOMP + 18 190 80 137 292 25 + + + + + $PROJ_DIR$\main.c + + + ICCARM + 115 + + + BICOMP + 224 + + + + + ICCARM + 32 153 82 87 91 148 39 228 64 199 170 201 164 8 21 238 157 44 244 229 188 247 28 124 55 291 15 166 42 174 94 179 40 155 158 218 105 177 129 268 50 81 11 234 208 262 173 176 137 292 25 18 190 80 233 85 + + + BICOMP + 32 153 82 91 148 39 228 64 199 170 201 164 8 21 238 157 44 244 229 188 247 28 124 55 291 15 166 42 174 94 179 40 155 158 218 105 177 129 268 50 81 11 234 208 262 173 176 137 292 25 18 190 80 233 85 + + + + + $PROJ_DIR$\Library\source\91x_fmi.c + + + ICCARM + 122 + + + BICOMP + 294 + + + + + ICCARM + 8 199 170 201 + + + BICOMP + 8 199 170 201 + + + + + $PROJ_DIR$\serial\serial.c + + + ICCARM + 226 + + + BICOMP + 210 + + + + + ICCARM + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 40 85 234 + + + BICOMP + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 28 124 153 82 91 148 39 228 55 291 15 166 42 174 40 85 234 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\netif\etharp.c + + + ICCARM + 71 + + + BICOMP + 90 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 184 108 84 245 151 24 97 111 1 207 183 66 0 265 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 184 108 84 245 151 24 97 111 1 207 183 66 0 265 + + + + + $PROJ_DIR$\..\Common\Minimal\comtest.c + + + ICCARM + 175 + + + BICOMP + 271 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 234 219 50 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 234 219 50 + + + + + $PROJ_DIR$\lwip\api\sys_arch.c + + + ICCARM + 48 + + + BICOMP + 116 + + + + + ICCARM + 80 137 292 25 1 176 18 190 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 183 108 32 + + + BICOMP + 80 137 292 25 1 176 18 190 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 183 108 32 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\sockets.c + + + ICCARM + 89 + + + BICOMP + 16 + + + + + ICCARM + 257 153 82 87 91 148 39 228 133 18 190 80 137 292 25 161 84 176 233 28 124 55 291 15 166 42 174 94 179 40 85 111 108 1 245 97 220 184 265 182 183 139 24 216 + + + BICOMP + 257 153 82 91 148 39 228 133 18 190 80 137 292 25 161 84 176 233 28 124 55 291 15 166 42 174 94 179 40 85 111 108 1 245 97 220 184 265 182 183 139 24 216 + + + + + $PROJ_DIR$\STCode\lcd.c + + + ICCARM + 217 + + + BICOMP + 278 + + + + + ICCARM + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 155 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 + + + BICOMP + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 155 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\pbuf.c + + + ICCARM + 92 + + + BICOMP + 61 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 207 183 108 66 1 84 176 233 28 124 55 291 15 166 42 174 94 179 40 85 202 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 207 183 108 66 1 84 176 233 28 124 55 291 15 166 42 174 94 179 40 85 202 + + + + + $PROJ_DIR$\..\Common\Minimal\integer.c + + + ICCARM + 65 + + + BICOMP + 189 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 218 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 218 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_lib.c + + + ICCARM + 134 + + + BICOMP + 96 + + + + + ICCARM + 18 190 80 137 292 25 161 84 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 111 108 1 245 97 220 184 265 182 183 139 24 22 66 + + + BICOMP + 18 190 80 137 292 25 161 84 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 111 108 1 245 97 220 184 265 182 183 139 24 22 66 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_in.c + + + ICCARM + 76 + + + BICOMP + 251 + + + + + ICCARM + 18 190 80 137 292 25 + + + BICOMP + 18 190 80 137 292 25 + + + + + $PROJ_DIR$\Library\source\91x_enet.c + + + ICCARM + 75 + + + BICOMP + 149 + + + + + ICCARM + 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 64 199 170 201 164 8 21 238 157 44 244 229 188 247 257 + + + BICOMP + 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 64 199 170 201 164 8 21 238 157 44 244 229 188 247 257 + + + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + + + ICCARM + 109 + + + BICOMP + 52 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 85 40 129 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 85 40 129 + + + + + $PROJ_DIR$\Library\source\91x_it.c + + + ICCARM + 269 + + + BICOMP + 270 + + + + + ICCARM + 291 238 64 199 170 201 164 8 21 157 44 244 229 188 247 + + + BICOMP + 291 238 64 199 170 201 164 8 21 157 44 244 229 188 247 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\dhcp.c + + + ICCARM + 54 + + + BICOMP + 98 + + + + + ICCARM + 257 153 82 87 91 148 39 228 207 18 190 80 137 292 25 183 108 66 265 84 184 245 111 1 97 24 151 176 233 28 124 55 291 15 166 42 174 94 179 40 85 117 + + + BICOMP + 257 153 82 91 148 39 228 207 18 190 80 137 292 25 183 108 66 265 84 184 245 111 1 97 24 151 176 233 28 124 55 291 15 166 42 174 94 179 40 85 117 + + + + + $PROJ_DIR$\lwip\lwipWebServer\httpd.c + + + ICCARM + 180 + + + BICOMP + 274 + + + + + ICCARM + 80 137 292 25 207 18 190 183 108 66 232 182 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 84 111 1 245 97 139 24 184 19 257 + + + BICOMP + 80 137 292 25 207 18 190 183 108 66 232 182 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 84 111 1 245 97 139 24 184 19 257 + + + + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + + + ICCARM + 86 + + + BICOMP + 221 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 177 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 177 + + + + + $PROJ_DIR$\lwip\netif\ethernetif.c + + + ICCARM + 181 + + + BICOMP + 104 + + + + + ICCARM + 18 190 80 137 292 25 1 183 108 84 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 207 66 151 245 24 97 184 111 247 64 199 170 201 164 8 21 238 157 44 244 229 188 257 + + + BICOMP + 18 190 80 137 292 25 1 183 108 84 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 207 66 151 245 24 97 184 111 247 64 199 170 201 164 8 21 238 157 44 244 229 188 257 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_out.c + + + ICCARM + 69 + + + BICOMP + 214 + + + + + ICCARM + 18 190 80 137 292 25 + + + BICOMP + 18 190 80 137 292 25 + + + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + + + ICCARM + 209 + + + BICOMP + 263 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 + + + + + $PROJ_DIR$\Library\source\91x_wdg.c + + + ICCARM + 41 + + + BICOMP + 159 + + + + + ICCARM + 188 199 170 201 44 + + + BICOMP + 188 199 170 201 44 + + + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + + + ICCARM + 206 + + + BICOMP + 70 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 85 208 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 85 208 + + + + + $PROJ_DIR$\..\Common\Minimal\flop.c + + + ICCARM + 74 + + + BICOMP + 178 + + + + + ICCARM + 43 153 82 87 91 148 39 228 192 168 28 124 55 291 15 166 42 174 94 179 81 + + + BICOMP + 43 153 82 91 148 39 228 192 168 28 124 55 291 15 166 42 174 94 179 81 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\inet.c + + + ICCARM + 114 + + + BICOMP + 79 + + + + + ICCARM + 18 190 80 137 292 25 108 1 184 84 245 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 + + + BICOMP + 18 190 80 137 292 25 108 1 184 84 245 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 + + + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + + + ICCARM + 68 + + + BICOMP + 125 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 105 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 105 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\netif.c + + + ICCARM + 255 + + + BICOMP + 243 + + + + + ICCARM + 18 190 80 137 292 25 1 245 108 24 97 184 84 182 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 183 111 139 0 265 + + + BICOMP + 18 190 80 137 292 25 1 245 108 24 97 184 84 182 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 183 111 139 0 265 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\memp.c + + + ICCARM + 162 + + + BICOMP + 101 + + + + + ICCARM + 18 190 80 137 292 25 66 84 265 108 184 245 111 1 97 220 182 176 233 28 124 153 82 87 91 148 39 228 55 291 15 166 42 174 94 179 40 85 183 139 24 161 22 30 207 + + + BICOMP + 18 190 80 137 292 25 66 84 265 108 184 245 111 1 97 220 182 176 233 28 124 153 82 91 148 39 228 55 291 15 166 42 174 94 179 40 85 183 139 24 161 22 30 207 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\err.c + + + ICCARM + 118 + + + BICOMP + 242 + + + + + ICCARM + 97 18 190 80 137 292 25 + + + BICOMP + 97 18 190 80 137 292 25 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\icmp.c + + + ICCARM + 7 + + + BICOMP + 253 + + + + + ICCARM + 257 153 82 87 91 148 39 228 18 190 80 137 292 25 139 108 84 245 24 97 184 111 1 207 183 66 0 265 + + + BICOMP + 257 153 82 91 148 39 228 18 190 80 137 292 25 139 108 84 245 24 97 184 111 1 207 183 66 0 265 + + + + + $PROJ_DIR$\91x_vect_IAR.s + + + AARM + 106 + + + + + AARM + 291 107 + + + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + + + ICCARM + 186 + + + BICOMP + 93 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 85 262 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 94 179 40 85 262 + + + + + $PROJ_DIR$\91x_init_IAR.s + + + AARM + 172 + + + + + $PROJ_DIR$\..\..\Source\tasks.c + + + ICCARM + 47 + + + BICOMP + 9 + + + + + ICCARM + 32 153 82 87 91 148 39 228 43 257 28 124 55 291 15 166 42 174 94 179 + + + BICOMP + 32 153 82 91 148 39 228 43 257 28 124 55 291 15 166 42 174 94 179 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + + + AARM + 72 + + + + + AARM + 107 + + + + + $PROJ_DIR$\..\..\Source\queue.c + + + ICCARM + 239 + + + BICOMP + 241 + + + + + ICCARM + 43 153 82 87 91 148 39 228 257 28 124 55 291 15 166 42 174 94 179 123 + + + BICOMP + 43 153 82 91 148 39 228 257 28 124 55 291 15 166 42 174 94 179 123 + + + + + $PROJ_DIR$\..\..\Source\list.c + + + ICCARM + 103 + + + BICOMP + 36 + + + + + ICCARM + 43 153 82 87 91 148 39 228 28 124 55 291 15 166 42 174 179 + + + BICOMP + 43 153 82 91 148 39 228 28 124 55 291 15 166 42 174 179 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + + + ICCARM + 144 + + + BICOMP + 231 + + + + + ICCARM + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 43 153 82 87 91 148 39 228 223 28 124 55 291 15 166 42 174 94 179 + + + BICOMP + 64 199 170 201 164 8 21 238 157 44 244 229 188 247 43 153 82 91 148 39 228 223 28 124 55 291 15 166 42 174 94 179 + + + + + + ARM - uIP - D + + $PROJ_DIR$\ARM - uIP - D\Obj\httpd-fs.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\httpd-cgi.r79 + $PROJ_DIR$\Library\include\91x_fmi.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_vect_IAR.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\list.r79 + $PROJ_DIR$\..\Common\include\comtest2.h + $PROJ_DIR$\ARM - uIP - D\Obj\portasm.r79 + $PROJ_DIR$\..\..\Source\include\portable.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_wdg.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\91x_fmi.pbi + $PROJ_DIR$\ARM - uIP - D\List\RTOSDemo.html + $PROJ_DIR$\ARM - uIP - D\Obj\91x_uart.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h + $PROJ_DIR$\Library\include\91x_vic.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_lib.pbi + $PROJ_DIR$\Library\source\91x_scu.c + $PROJ_DIR$\Library\source\91x_gpio.c + $PROJ_DIR$\ARM - uIP - D\Obj\lcd.pbi + $PROJ_DIR$\..\..\Source\include\FreeRTOS.h + $TOOLKIT_DIR$\inc\stdio.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_uart.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\PollQ.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\psock.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\port.r79 + $TOOLKIT_DIR$\inc\DLib_Threads.h + $PROJ_DIR$\..\..\Source\include\queue.h + $PROJ_DIR$\ARM - uIP - D\Obj\queue.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\91x_vic.r79 + $TOOLKIT_DIR$\inc\intrinsic.h + $TOOLKIT_DIR$\inc\stdlib.h + $PROJ_DIR$\Library\include\91x_scu.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_enet.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\httpd-cgi.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\httpd-fs.r79 + $PROJ_DIR$\..\Common\include\partest.h + $PROJ_DIR$\..\..\Source\include\projdefs.h + $PROJ_DIR$\ARM - uIP - D\Obj\uip.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\flash.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\ParTest.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\uip_arp.r79 + $PROJ_DIR$\Library\source\91x_vic.c + $PROJ_DIR$\Library\source\91x_tim.c + $PROJ_DIR$\Library\include\91x_lib.h + $PROJ_DIR$\ARM - uIP - D\Obj\integer.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\tasks.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\ParTest.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\91x_lib.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h + $PROJ_DIR$\ARM - uIP - D\Obj\semtest.r79 + $PROJ_DIR$\ARM - uIP - D\Exe\RTOSDemo.sim + $TOOLKIT_DIR$\inc\stdint.h + $PROJ_DIR$\ARM - uIP - D\Obj\uIP_Task.r79 + $PROJ_DIR$\..\Common\include\flop.h + $TOOLKIT_DIR$\inc\DLib_Defaults.h + $PROJ_DIR$\ARM - uIP - D\Obj\serial.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\httpd.r79 + $PROJ_DIR$\webserver\clock-arch.h + $PROJ_DIR$\webserver\httpd-fsdata.h + $PROJ_DIR$\..\..\Source\include\semphr.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h + $TOOLKIT_DIR$\lib\dl5tpainl8n.h + $PROJ_DIR$\ARM - uIP - D\Obj\GenQTest.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\91x_scu.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\91x_vic.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\91x_tim.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\uip_arp.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\main.r79 + $TOOLKIT_DIR$\inc\DLib_Product.h + $PROJ_DIR$\..\..\Source\include\task.h + $PROJ_DIR$\..\Common\Minimal\dynamic.c + $PROJ_DIR$\ARM - uIP - D\Obj\flop.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\list.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\91x_enet.pbi + $PROJ_DIR$\..\Common\include\PollQ.h + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\ISR_Support.h + $PROJ_DIR$\webserver\httpd-cgi.h + $PROJ_DIR$\ARM - uIP - D\Obj\BlockQ.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\flash.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\dynamic.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\heap_2.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\RTOSDemo.pbd + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h + $PROJ_DIR$\ARM - uIP - D\Obj\psock.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\comtest.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\GenQTest.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\91x_tim.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\port.pbi + $PROJ_DIR$\..\..\Source\include\croutine.h + $PROJ_DIR$\ARM - uIP - D\Obj\dynamic.pbi + $TOOLKIT_DIR$\inc\stddef.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_it.pbi + $PROJ_DIR$\..\Common\include\semtest.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_wdg.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\http-strings.pbi + $PROJ_DIR$\Library\source\91x_uart.c + $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\..\Common\Minimal\flash.c + $TOOLKIT_DIR$\inc\xencoding_limits.h + $PROJ_DIR$\webserver\http-strings.h + $TOOLKIT_DIR$\inc\yvals.h + $PROJ_DIR$\ARM - uIP - D\Obj\lcd.r79 + $PROJ_DIR$\STCode\lcd.h + $PROJ_DIR$\webserver\webserver.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_it.r79 + $PROJ_DIR$\ParTest\ParTest.c + $PROJ_DIR$\ARM - uIP - D\Obj\integer.r79 + $PROJ_DIR$\Library\include\91x_tim.h + $PROJ_DIR$\..\Common\include\flash.h + $PROJ_DIR$\ARM - uIP - D\Obj\http-strings.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\httpd.pbi + $PROJ_DIR$\webserver\httpd.h + $PROJ_DIR$\ARM - uIP - D\Obj\heap_2.pbi + $PROJ_DIR$\Library\include\91x_ahbapb.h + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h + $TOOLKIT_DIR$\inc\ymath.h + $PROJ_DIR$\ARM - uIP - D\Obj\QPeek.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\semtest.pbi + $PROJ_DIR$\main.c + $PROJ_DIR$\Library\include\91x_conf.h + $PROJ_DIR$\webserver\uIP_Task.c + $TOOLKIT_DIR$\inc\inttypes.h + $PROJ_DIR$\ARM - uIP - D\Obj\PollQ.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\91x_scu.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\comtest.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\91x_gpio.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\main.pbi + $TOOLKIT_DIR$\inc\intrinsics.h + $PROJ_DIR$\..\Common\include\BlockQ.h + $PROJ_DIR$\ARM - uIP - D\Obj\flop.pbi + $PROJ_DIR$\..\..\Source\include\list.h + $PROJ_DIR$\webserver\httpd-fsdata.c + $PROJ_DIR$\ARM - uIP - D\Obj\BlockQ.r79 + $PROJ_DIR$\Library\source\91x_fmi.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h + $PROJ_DIR$\serial\serial.c + $PROJ_DIR$\ARM - uIP - D\Obj\91x_init_IAR.r79 + $PROJ_DIR$\Library\include\91x_wdg.h + $PROJ_DIR$\ARM - uIP - D\Obj\91x_gpio.r79 + $PROJ_DIR$\webserver\uip-conf.h + $TOOLKIT_DIR$\inc\math.h + $PROJ_DIR$\..\Common\Minimal\comtest.c + $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\ARM - uIP - D\Obj\91x_fmi.r79 + $PROJ_DIR$\Library\include\91x_map.h + $PROJ_DIR$\Library\include\91x_type.h + $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\..\Common\include\GenQTest.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h + $PROJ_DIR$\Library\source\91x_enet.c + $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\Library\source\91x_it.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h + $PROJ_DIR$\..\Common\include\integer.h + $PROJ_DIR$\..\Common\include\comtest.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h + $PROJ_DIR$\ARM - uIP - D\Obj\uIP_Task.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\tasks.r79 + $TOOLKIT_DIR$\inc\assert.h + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $TOOLKIT_DIR$\inc\ysizet.h + $PROJ_DIR$\ARM - uIP - D\Obj\queue.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h + $PROJ_DIR$\Library\include\91x_uart.h + $PROJ_DIR$\ARM - uIP - D\Obj\uip.pbi + $PROJ_DIR$\..\Common\include\serial.h + $TOOLKIT_DIR$\lib\dl5tpainl8n.r79 + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\Library\include\91x_it.h + $PROJ_DIR$\webserver\httpd-fs.h + $PROJ_DIR$\ARM - uIP - D\Obj\serial.r79 + $PROJ_DIR$\Library\include\91x_gpio.h + $PROJ_DIR$\Library\source\91x_wdg.c + $PROJ_DIR$\Library\include\91x_enet.h + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + $PROJ_DIR$\..\Common\Minimal\flop.c + $PROJ_DIR$\ARM - uIP - D\Obj\QPeek.r79 + $PROJ_DIR$\ARM - uIP - D\Obj\timer.pbi + $PROJ_DIR$\ARM - uIP - D\Obj\timer.r79 + $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\..\Common\include\QPeek.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h + $PROJ_DIR$\..\Common\include\dynamic.h + $PROJ_DIR$\ARM - uIP - D\Exe\RTOSDemo.d79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + $PROJ_DIR$\webserver\httpd.c + $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\91x_vect_IAR.s + $PROJ_DIR$\webserver\httpd-cgi.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + $PROJ_DIR$\..\Common\Minimal\QPeek.c + $PROJ_DIR$\lnkarm_flash.xcl + $PROJ_DIR$\91x_init_IAR.s + $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + $PROJ_DIR$\..\..\Source\queue.c + $PROJ_DIR$\..\..\Source\list.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + $PROJ_DIR$\FreeRTOSConfig.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + + + [ROOT_NODE] + + + XLINK + 10 49 183 + + + + + $PROJ_DIR$\Library\source\91x_scu.c + + + ICCARM + 122 + + + BICOMP + 62 + + + + + ICCARM + 30 143 118 144 + + + BICOMP + 30 143 118 144 + + + + + $PROJ_DIR$\Library\source\91x_gpio.c + + + ICCARM + 137 + + + BICOMP + 124 + + + + + ICCARM + 170 143 118 144 30 + + + BICOMP + 170 143 118 144 30 + + + + + $PROJ_DIR$\Library\source\91x_vic.c + + + ICCARM + 27 + + + BICOMP + 63 + + + + + ICCARM + 13 143 118 144 167 42 112 2 106 30 170 162 136 172 + + + BICOMP + 13 143 118 144 167 42 112 2 106 30 170 162 136 172 + + + + + $PROJ_DIR$\Library\source\91x_tim.c + + + ICCARM + 85 + + + BICOMP + 64 + + + + + ICCARM + 106 143 118 144 30 + + + BICOMP + 106 143 118 144 30 + + + + + $PROJ_DIR$\..\Common\Minimal\dynamic.c + + + ICCARM + 78 + + + BICOMP + 88 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 58 25 182 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 58 25 182 + + + + + $PROJ_DIR$\ARM - uIP - D\Obj\RTOSDemo.pbd + + + BILINK + 72 9 124 90 14 62 64 11 63 8 76 84 38 21 115 123 88 37 128 111 93 32 0 109 43 17 71 125 86 22 160 116 54 44 176 155 163 65 + + + + + $PROJ_DIR$\Library\source\91x_uart.c + + + ICCARM + 20 + + + BICOMP + 11 + + + + + ICCARM + 162 143 118 144 30 + + + BICOMP + 162 143 118 144 30 + + + + + $PROJ_DIR$\Library\source\91x_lib.c + + + ICCARM + 46 + + + BICOMP + 14 + + + + + ICCARM + 143 118 144 + + + BICOMP + 143 118 144 + + + + + $PROJ_DIR$\..\Common\Minimal\flash.c + + + ICCARM + 77 + + + BICOMP + 37 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 34 107 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 34 107 + + + + + $PROJ_DIR$\ParTest\ParTest.c + + + ICCARM + 45 + + + BICOMP + 38 + + + + + ICCARM + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 99 53 60 67 97 24 159 35 199 7 113 28 126 34 + + + BICOMP + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 99 53 67 97 24 159 35 199 7 113 28 126 34 + + + + + $PROJ_DIR$\main.c + + + ICCARM + 66 + + + BICOMP + 125 + + + + + ICCARM + 19 99 53 60 67 97 24 159 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 35 199 7 113 28 126 68 129 25 101 107 152 73 127 91 182 34 52 5 164 146 180 + + + BICOMP + 19 99 53 67 97 24 159 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 35 199 7 113 28 126 68 129 25 101 107 152 73 127 91 182 34 52 5 164 146 180 + + + + + $PROJ_DIR$\webserver\uIP_Task.c + + + ICCARM + 51 + + + BICOMP + 155 + + + + + ICCARM + 178 99 53 60 67 97 24 159 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 35 199 7 113 28 126 68 129 58 25 161 154 138 120 50 102 110 151 47 12 181 168 133 59 81 56 + + + BICOMP + 178 99 53 67 97 24 159 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 35 199 7 113 28 126 68 129 58 25 161 154 138 120 50 102 110 151 47 12 181 168 133 59 81 56 + + + + + $PROJ_DIR$\Library\source\91x_fmi.c + + + ICCARM + 142 + + + BICOMP + 9 + + + + + ICCARM + 2 143 118 144 + + + BICOMP + 2 143 118 144 + + + + + $PROJ_DIR$\serial\serial.c + + + ICCARM + 169 + + + BICOMP + 54 + + + + + ICCARM + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 99 53 60 67 97 24 159 35 199 7 113 28 126 25 58 164 + + + BICOMP + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 18 89 99 53 67 97 24 159 35 199 7 113 28 126 25 58 164 + + + + + $PROJ_DIR$\..\Common\Minimal\comtest.c + + + ICCARM + 83 + + + BICOMP + 123 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 164 153 34 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 164 153 34 + + + + + $PROJ_DIR$\STCode\lcd.c + + + ICCARM + 100 + + + BICOMP + 17 + + + + + ICCARM + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 101 18 89 99 53 60 67 97 24 159 35 199 7 113 28 126 68 129 + + + BICOMP + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 101 18 89 99 53 67 97 24 159 35 199 7 113 28 126 68 129 + + + + + $PROJ_DIR$\..\Common\Minimal\integer.c + + + ICCARM + 105 + + + BICOMP + 43 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 152 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 152 + + + + + $PROJ_DIR$\Library\source\91x_enet.c + + + ICCARM + 31 + + + BICOMP + 72 + + + + + ICCARM + 18 89 99 53 60 67 97 24 159 35 199 7 113 28 126 68 129 42 143 118 144 112 2 13 167 106 30 170 162 136 172 178 + + + BICOMP + 18 89 99 53 67 97 24 159 35 199 7 113 28 126 68 129 42 143 118 144 112 2 13 167 106 30 170 162 136 172 178 + + + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + + + ICCARM + 48 + + + BICOMP + 116 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 58 25 91 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 58 25 91 + + + + + $PROJ_DIR$\Library\source\91x_it.c + + + ICCARM + 103 + + + BICOMP + 90 + + + + + ICCARM + 199 167 42 143 118 144 112 2 13 106 30 170 162 136 172 + + + BICOMP + 199 167 42 143 118 144 112 2 13 106 30 170 162 136 172 + + + + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + + + ICCARM + 131 + + + BICOMP + 76 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 127 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 127 + + + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + + + ICCARM + 79 + + + BICOMP + 111 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 + + + + + $PROJ_DIR$\Library\source\91x_wdg.c + + + ICCARM + 92 + + + BICOMP + 8 + + + + + ICCARM + 136 143 118 144 30 + + + BICOMP + 136 143 118 144 30 + + + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + + + ICCARM + 61 + + + BICOMP + 84 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 58 146 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 58 146 + + + + + $PROJ_DIR$\..\Common\Minimal\flop.c + + + ICCARM + 70 + + + BICOMP + 128 + + + + + ICCARM + 29 99 53 60 67 97 24 159 139 114 18 89 35 199 7 113 28 126 68 129 52 + + + BICOMP + 29 99 53 67 97 24 159 139 114 18 89 35 199 7 113 28 126 68 129 52 + + + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + + + ICCARM + 121 + + + BICOMP + 21 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 73 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 73 + + + + + $PROJ_DIR$\ARM - uIP - D\Exe\RTOSDemo.d79 + + + XLINK + 10 49 + + + + + XLINK + 192 31 142 137 135 103 46 122 85 20 3 27 92 131 61 45 121 175 83 78 77 70 79 108 1 33 55 105 100 4 66 23 6 82 26 48 169 156 177 51 36 39 165 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + + + ICCARM + 82 + + + BICOMP + 22 + + + + + ICCARM + 19 99 53 60 67 97 24 159 178 154 138 120 50 102 110 151 47 12 181 168 161 + + + BICOMP + 19 99 53 67 97 24 159 178 154 138 120 50 102 110 151 47 12 181 168 161 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + + + ICCARM + 39 + + + BICOMP + 65 + + + + + ICCARM + 133 161 154 138 120 50 99 53 60 67 97 24 102 110 151 47 12 181 168 178 159 + + + BICOMP + 133 161 154 138 120 50 99 53 67 97 24 102 110 151 47 12 181 168 178 159 + + + + + $PROJ_DIR$\webserver\httpd.c + + + ICCARM + 55 + + + BICOMP + 109 + + + + + ICCARM + 161 154 138 120 50 99 53 60 67 97 24 102 110 151 47 12 181 168 75 98 178 159 + + + BICOMP + 161 154 138 120 50 99 53 67 97 24 102 110 151 47 12 181 168 75 98 178 159 + + + + + $PROJ_DIR$\webserver\httpd-fs.c + + + ICCARM + 33 + + + BICOMP + 0 + + + + + ICCARM + 110 151 154 138 120 50 99 53 60 67 97 24 102 47 12 181 168 57 161 130 + + + BICOMP + 110 151 154 138 120 50 99 53 67 97 24 102 47 12 181 168 57 161 130 + + + + + $PROJ_DIR$\91x_vect_IAR.s + + + AARM + 3 + + + + + AARM + 199 74 + + + + + $PROJ_DIR$\webserver\httpd-cgi.c + + + ICCARM + 1 + + + BICOMP + 32 + + + + + ICCARM + 161 154 138 120 50 99 53 60 67 97 24 102 110 151 47 12 181 168 75 19 159 178 + + + BICOMP + 161 154 138 120 50 99 53 67 97 24 102 110 151 47 12 181 168 75 19 159 178 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + + + ICCARM + 108 + + + BICOMP + 93 + + + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + + + ICCARM + 175 + + + BICOMP + 115 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 58 180 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 68 129 25 58 180 + + + + + $PROJ_DIR$\91x_init_IAR.s + + + AARM + 135 + + + + + $PROJ_DIR$\..\..\Source\tasks.c + + + ICCARM + 156 + + + BICOMP + 44 + + + + + ICCARM + 19 99 53 60 67 97 24 159 29 178 18 89 35 199 7 113 28 126 68 129 + + + BICOMP + 19 99 53 67 97 24 159 29 178 18 89 35 199 7 113 28 126 68 129 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + + + AARM + 6 + + + + + AARM + 74 + + + + + $PROJ_DIR$\..\..\Source\queue.c + + + ICCARM + 26 + + + BICOMP + 160 + + + + + ICCARM + 29 99 53 60 67 97 24 159 178 18 89 35 199 7 113 28 126 68 129 87 + + + BICOMP + 29 99 53 67 97 24 159 178 18 89 35 199 7 113 28 126 68 129 87 + + + + + $PROJ_DIR$\..\..\Source\list.c + + + ICCARM + 4 + + + BICOMP + 71 + + + + + ICCARM + 29 99 53 60 67 97 24 159 18 89 35 199 7 113 28 126 129 + + + BICOMP + 29 99 53 67 97 24 159 18 89 35 199 7 113 28 126 129 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + + + ICCARM + 23 + + + BICOMP + 86 + + + + + ICCARM + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 29 99 53 60 67 97 24 159 157 18 89 35 199 7 113 28 126 68 129 + + + BICOMP + 42 143 118 144 112 2 13 167 106 30 170 162 136 172 29 99 53 67 97 24 159 157 18 89 35 199 7 113 28 126 68 129 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + + + ICCARM + 36 + + + BICOMP + 163 + + + + + ICCARM + 161 154 138 120 50 99 53 60 67 97 24 102 110 151 47 12 181 168 147 178 159 + + + BICOMP + 161 154 138 120 50 99 53 67 97 24 102 110 151 47 12 181 168 147 178 159 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + + + ICCARM + 177 + + + BICOMP + 176 + + + + + ICCARM + 81 56 18 89 99 53 60 67 97 24 159 35 199 7 113 28 126 59 + + + BICOMP + 81 56 18 89 99 53 67 97 24 159 35 199 7 113 28 126 59 + + + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\stats.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\sys.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_msg.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\fs.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib2.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_dec.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\BasicWEB.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\raw.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\mem.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_enc.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_in.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_out.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\tcpip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\udp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib_structs.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\netif\etharp.c + ICCARM + + + $PROJ_DIR$\lwip\api\sys_arch.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\sockets.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\pbuf.c + ICCARM + - $PROJ_DIR$\..\Common\Minimal\dynamic.c - ICCARM - - - $PROJ_DIR$\..\Common\Minimal\comtest.c - ICCARM - - - $PROJ_DIR$\..\Common\Minimal\BlockQ.c - ICCARM - - - $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c - ICCARM - - - $PROJ_DIR$\..\Common\Minimal\integer.c - ICCARM - - - $PROJ_DIR$\STCode\lcd.c - ICCARM - - - $PROJ_DIR$\main.c - ICCARM - - - $PROJ_DIR$\..\Common\Minimal\semtest.c - ICCARM - - + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_lib.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_in.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\dhcp.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\httpd.c + ICCARM + + + $PROJ_DIR$\lwip\netif\ethernetif.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_out.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\inet.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\netif.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\memp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\err.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\icmp.c + ICCARM + + + + ARM - uIP - R + + $PROJ_DIR$\ARM - uIP - R\Obj\http-strings.r79 + $PROJ_DIR$\Library\include\91x_fmi.h + $PROJ_DIR$\ARM - uIP - R\Obj\BlockQ.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\BlockQ.pbi + $PROJ_DIR$\..\Common\include\comtest2.h + $PROJ_DIR$\ARM - uIP - R\Obj\http-strings.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_tim.pbi + $PROJ_DIR$\..\..\Source\include\portable.h + $PROJ_DIR$\ARM - uIP - R\Obj\port.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h + $PROJ_DIR$\Library\include\91x_vic.h + $PROJ_DIR$\Library\source\91x_scu.c + $PROJ_DIR$\Library\source\91x_gpio.c + $PROJ_DIR$\ARM - uIP - R\Obj\httpd-fs.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\uip.pbi + $PROJ_DIR$\..\..\Source\include\FreeRTOS.h + $TOOLKIT_DIR$\inc\stdio.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_enet.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\integer.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\uip_arp.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\port.r79 + $TOOLKIT_DIR$\inc\DLib_Threads.h + $PROJ_DIR$\..\..\Source\include\queue.h + $PROJ_DIR$\ARM - uIP - R\Obj\serial.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\httpd.r79 + $TOOLKIT_DIR$\inc\intrinsic.h + $PROJ_DIR$\ARM - uIP - R\Exe\RTOSDemo.sim + $TOOLKIT_DIR$\inc\stdlib.h + $PROJ_DIR$\Library\include\91x_scu.h + $PROJ_DIR$\ARM - uIP - R\Obj\PollQ.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\flash.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\91x_it.r79 + $PROJ_DIR$\..\Common\include\partest.h + $PROJ_DIR$\..\..\Source\include\projdefs.h + $PROJ_DIR$\ARM - uIP - R\Obj\PollQ.pbi + $PROJ_DIR$\Library\source\91x_vic.c + $PROJ_DIR$\Library\source\91x_tim.c + $PROJ_DIR$\Library\include\91x_lib.h + $PROJ_DIR$\ARM - uIP - R\Obj\uIP_Task.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\main.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\heap_2.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\lcd.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_scu.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h + $TOOLKIT_DIR$\inc\stdint.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_vect_IAR.r79 + $PROJ_DIR$\..\Common\include\flop.h + $PROJ_DIR$\ARM - uIP - R\Obj\GenQTest.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\flash.pbi + $TOOLKIT_DIR$\inc\DLib_Defaults.h + $PROJ_DIR$\ARM - uIP - R\Obj\flop.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\integer.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\queue.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\tasks.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\httpd-cgi.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_gpio.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\psock.r79 + $PROJ_DIR$\webserver\clock-arch.h + $PROJ_DIR$\webserver\httpd-fsdata.h + $PROJ_DIR$\..\..\Source\include\semphr.h + $PROJ_DIR$\ARM - uIP - R\Obj\comtest.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h + $TOOLKIT_DIR$\lib\dl5tpainl8n.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_fmi.pbi + $TOOLKIT_DIR$\inc\DLib_Product.h + $PROJ_DIR$\..\..\Source\include\task.h + $PROJ_DIR$\..\Common\Minimal\dynamic.c + $PROJ_DIR$\ARM - uIP - R\Obj\httpd-cgi.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\91x_init_IAR.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\dynamic.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\91x_lib.pbi + $PROJ_DIR$\..\Common\include\PollQ.h + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\ISR_Support.h + $PROJ_DIR$\webserver\httpd-cgi.h + $PROJ_DIR$\ARM - uIP - R\Obj\tasks.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\91x_lib.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\ParTest.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h + $PROJ_DIR$\ARM - uIP - R\Obj\timer.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_it.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\heap_2.pbi + $PROJ_DIR$\..\..\Source\include\croutine.h + $TOOLKIT_DIR$\inc\stddef.h + $PROJ_DIR$\ARM - uIP - R\Obj\serial.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\httpd.pbi + $PROJ_DIR$\..\Common\include\semtest.h + $PROJ_DIR$\ARM - uIP - R\Obj\timer.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\flop.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\dynamic.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_scu.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\httpd-fs.pbi + $PROJ_DIR$\Library\source\91x_uart.c + $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\ARM - uIP - R\List\RTOSDemo.html + $PROJ_DIR$\..\Common\Minimal\flash.c + $TOOLKIT_DIR$\inc\xencoding_limits.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_vic.pbi + $PROJ_DIR$\webserver\http-strings.h + $TOOLKIT_DIR$\inc\yvals.h + $PROJ_DIR$\STCode\lcd.h + $PROJ_DIR$\webserver\webserver.h + $PROJ_DIR$\ParTest\ParTest.c + $PROJ_DIR$\Library\include\91x_tim.h + $PROJ_DIR$\..\Common\include\flash.h + $PROJ_DIR$\ARM - uIP - R\Obj\QPeek.r79 + $PROJ_DIR$\webserver\httpd.h + $PROJ_DIR$\Library\include\91x_ahbapb.h + $PROJ_DIR$\ARM - uIP - R\Obj\comtest.r79 + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h + $PROJ_DIR$\ARM - uIP - R\Obj\uip.r79 + $TOOLKIT_DIR$\inc\ymath.h + $PROJ_DIR$\ARM - uIP - R\Obj\uip_arp.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\ParTest.pbi + $PROJ_DIR$\main.c + $PROJ_DIR$\Library\include\91x_conf.h + $PROJ_DIR$\webserver\uIP_Task.c + $TOOLKIT_DIR$\inc\inttypes.h + $PROJ_DIR$\ARM - uIP - R\Obj\uIP_Task.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_wdg.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\QPeek.pbi + $TOOLKIT_DIR$\inc\intrinsics.h + $PROJ_DIR$\..\Common\include\BlockQ.h + $PROJ_DIR$\ARM - uIP - R\Obj\list.r79 + $PROJ_DIR$\..\..\Source\include\list.h + $PROJ_DIR$\webserver\httpd-fsdata.c + $PROJ_DIR$\Library\source\91x_fmi.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h + $PROJ_DIR$\serial\serial.c + $PROJ_DIR$\ARM - uIP - R\Obj\GenQTest.pbi + $PROJ_DIR$\Library\include\91x_wdg.h + $PROJ_DIR$\webserver\uip-conf.h + $TOOLKIT_DIR$\inc\math.h + $PROJ_DIR$\..\Common\Minimal\comtest.c + $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\Library\include\91x_map.h + $PROJ_DIR$\ARM - uIP - R\Obj\queue.pbi + $PROJ_DIR$\Library\include\91x_type.h + $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\..\Common\include\GenQTest.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h + $PROJ_DIR$\Library\source\91x_enet.c + $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\Library\source\91x_it.c + $PROJ_DIR$\ARM - uIP - R\Obj\psock.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\portasm.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h + $PROJ_DIR$\..\Common\include\integer.h + $PROJ_DIR$\..\Common\include\comtest.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_fmi.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h + $TOOLKIT_DIR$\inc\assert.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_enet.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_gpio.r79 + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $TOOLKIT_DIR$\inc\ysizet.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h + $PROJ_DIR$\Library\include\91x_uart.h + $PROJ_DIR$\..\Common\include\serial.h + $PROJ_DIR$\ARM - uIP - R\Obj\semtest.r79 + $TOOLKIT_DIR$\lib\dl5tpainl8n.r79 + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\Library\include\91x_it.h + $PROJ_DIR$\webserver\httpd-fs.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_uart.r79 + $PROJ_DIR$\Library\include\91x_gpio.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_tim.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\RTOSDemo.pbd + $PROJ_DIR$\ARM - uIP - R\Exe\RTOSDemo.d79 + $PROJ_DIR$\Library\source\91x_wdg.c + $PROJ_DIR$\Library\include\91x_enet.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_uart.pbi + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + $PROJ_DIR$\..\Common\Minimal\flop.c + $PROJ_DIR$\ARM - uIP - R\Obj\list.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\semtest.pbi + $PROJ_DIR$\ARM - uIP - R\Obj\91x_vic.r79 + $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\..\Common\include\QPeek.h + $PROJ_DIR$\ARM - uIP - R\Obj\91x_wdg.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h + $PROJ_DIR$\..\Common\include\dynamic.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + $PROJ_DIR$\webserver\httpd.c + $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\91x_vect_IAR.s + $PROJ_DIR$\webserver\httpd-cgi.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + $PROJ_DIR$\ARM - uIP - R\Obj\main.r79 + $PROJ_DIR$\ARM - uIP - R\Obj\lcd.r79 + $PROJ_DIR$\..\Common\Minimal\QPeek.c + $PROJ_DIR$\lnkarm_flash.xcl + $PROJ_DIR$\91x_init_IAR.s + $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + $PROJ_DIR$\..\..\Source\queue.c + $PROJ_DIR$\..\..\Source\list.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + $PROJ_DIR$\FreeRTOSConfig.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + + + [ROOT_NODE] + + + XLINK + 93 26 167 + + + + + $PROJ_DIR$\Library\source\91x_scu.c + + + ICCARM + 89 + + + BICOMP + 42 + + + + + ICCARM + 28 134 114 136 + + + BICOMP + 28 134 114 136 + + + + + $PROJ_DIR$\Library\source\91x_gpio.c + + + ICCARM + 152 + + + BICOMP + 55 + + + + + ICCARM + 164 134 114 136 28 + + + BICOMP + 164 134 114 136 28 + + + + + $PROJ_DIR$\Library\source\91x_vic.c + + + ICCARM + 175 + + + BICOMP + 96 + + + + + ICCARM + 10 134 114 136 161 37 106 1 102 28 164 156 129 169 + + + BICOMP + 10 134 114 136 161 37 106 1 102 28 164 156 129 169 + + + + + $PROJ_DIR$\Library\source\91x_tim.c + + + ICCARM + 165 + + + BICOMP + 6 + + + + + ICCARM + 102 134 114 136 28 + + + BICOMP + 102 134 114 136 28 + + + + + $PROJ_DIR$\..\Common\Minimal\dynamic.c + + + ICCARM + 69 + + + BICOMP + 88 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 59 22 181 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 59 22 181 + + + + + $PROJ_DIR$\Library\source\91x_uart.c + + + ICCARM + 163 + + + BICOMP + 170 + + + + + ICCARM + 156 134 114 136 28 + + + BICOMP + 156 134 114 136 28 + + + + + $PROJ_DIR$\Library\source\91x_lib.c + + + ICCARM + 75 + + + BICOMP + 70 + + + + + ICCARM + 134 114 136 + + + BICOMP + 134 114 136 + + + + + $PROJ_DIR$\..\Common\Minimal\flash.c + + + ICCARM + 30 + + + BICOMP + 48 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 32 103 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 32 103 + + + + + $PROJ_DIR$\ParTest\ParTest.c + + + ICCARM + 76 + + + BICOMP + 112 + + + + + ICCARM + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 98 49 62 64 95 21 154 33 199 7 108 25 120 32 + + + BICOMP + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 98 49 64 95 21 154 33 199 7 108 25 120 32 + + + + + $PROJ_DIR$\main.c + + + ICCARM + 189 + + + BICOMP + 39 + + + + + ICCARM + 16 98 49 62 64 95 21 154 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 33 199 7 108 25 120 65 123 22 99 103 146 71 121 85 181 32 46 4 157 138 178 + + + BICOMP + 16 98 49 64 95 21 154 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 33 199 7 108 25 120 65 123 22 99 103 146 71 121 85 181 32 46 4 157 138 178 + + + + + $PROJ_DIR$\webserver\uIP_Task.c + + + ICCARM + 38 + + + BICOMP + 117 + + + + + ICCARM + 176 98 49 62 64 95 21 154 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 33 199 7 108 25 120 65 123 59 22 155 149 130 116 44 100 105 145 43 9 180 162 126 61 77 57 + + + BICOMP + 176 98 49 64 95 21 154 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 33 199 7 108 25 120 65 123 59 22 155 149 130 116 44 100 105 145 43 9 180 162 126 61 77 57 + + + + + $PROJ_DIR$\Library\source\91x_fmi.c + + + ICCARM + 148 + + + BICOMP + 63 + + + + + ICCARM + 1 134 114 136 + + + BICOMP + 1 134 114 136 + + + + + $PROJ_DIR$\serial\serial.c + + + ICCARM + 83 + + + BICOMP + 23 + + + + + ICCARM + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 98 49 62 64 95 21 154 33 199 7 108 25 120 22 59 157 + + + BICOMP + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 15 82 98 49 64 95 21 154 33 199 7 108 25 120 22 59 157 + + + + + $PROJ_DIR$\..\Common\Minimal\comtest.c + + + ICCARM + 107 + + + BICOMP + 60 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 157 147 32 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 157 147 32 + + + + + $PROJ_DIR$\STCode\lcd.c + + + ICCARM + 190 + + + BICOMP + 41 + + + + + ICCARM + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 99 15 82 98 49 62 64 95 21 154 33 199 7 108 25 120 65 123 + + + BICOMP + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 99 15 82 98 49 64 95 21 154 33 199 7 108 25 120 65 123 + + + + + $PROJ_DIR$\..\Common\Minimal\integer.c + + + ICCARM + 51 + + + BICOMP + 18 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 146 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 146 + + + + + $PROJ_DIR$\Library\source\91x_enet.c + + + ICCARM + 17 + + + BICOMP + 151 + + + + + ICCARM + 15 82 98 49 62 64 95 21 154 33 199 7 108 25 120 65 123 37 134 114 136 106 1 10 161 102 28 164 156 129 169 176 + + + BICOMP + 15 82 98 49 64 95 21 154 33 199 7 108 25 120 65 123 37 134 114 136 106 1 10 161 102 28 164 156 129 169 176 + + + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + + + ICCARM + 158 + + + BICOMP + 174 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 59 22 85 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 59 22 85 + + + + + $PROJ_DIR$\Library\source\91x_it.c + + + ICCARM + 31 + + + BICOMP + 79 + + + + + ICCARM + 199 161 37 134 114 136 106 1 10 102 28 164 156 129 169 + + + BICOMP + 199 161 37 134 114 136 106 1 10 102 28 164 156 129 169 + + + + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + + + ICCARM + 2 + + + BICOMP + 3 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 121 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 121 + + + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + + + ICCARM + 40 + + + BICOMP + 80 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 + + + + + $PROJ_DIR$\ARM - uIP - R\Obj\RTOSDemo.pbd + + + BILINK + 151 63 55 79 70 42 6 170 96 118 3 128 112 34 119 60 88 48 87 80 5 54 90 84 18 41 173 39 8 143 135 174 23 53 78 117 14 19 + + + + + $PROJ_DIR$\ARM - uIP - R\Exe\RTOSDemo.d79 + + + XLINK + 93 26 + + + + + XLINK + 192 17 148 152 68 31 75 89 165 163 45 175 179 2 47 76 29 104 107 69 30 50 40 0 67 13 24 51 190 122 189 20 144 56 52 158 83 74 86 38 109 111 159 + + + + + $PROJ_DIR$\Library\source\91x_wdg.c + + + ICCARM + 179 + + + BICOMP + 118 + + + + + ICCARM + 129 134 114 136 28 + + + BICOMP + 129 134 114 136 28 + + + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + + + ICCARM + 47 + + + BICOMP + 128 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 59 138 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 59 138 + + + + + $PROJ_DIR$\..\Common\Minimal\flop.c + + + ICCARM + 50 + + + BICOMP + 87 + + + + + ICCARM + 27 98 49 62 64 95 21 154 131 110 15 82 33 199 7 108 25 120 65 123 46 + + + BICOMP + 27 98 49 64 95 21 154 131 110 15 82 33 199 7 108 25 120 65 123 46 + + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c - ICCARM - - - $PROJ_DIR$\ParTest\ParTest.c - ICCARM - - - $PROJ_DIR$\serial\serial.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_enet.c - ICCARM - - - $PROJ_DIR$\webserver\uIP_Task.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_wdg.c - ICCARM - - - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c - ICCARM - - - $PROJ_DIR$\..\..\Source\queue.c - ICCARM - - - $PROJ_DIR$\..\..\Source\tasks.c - ICCARM - - - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c - ICCARM - - + + + ICCARM + 29 + + + BICOMP + 34 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 71 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 71 + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c - ICCARM - - + + + ICCARM + 56 + + + BICOMP + 143 + + + + + ICCARM + 16 98 49 62 64 95 21 154 176 149 130 116 44 100 105 145 43 9 180 162 155 + + + BICOMP + 16 98 49 64 95 21 154 176 149 130 116 44 100 105 145 43 9 180 162 155 + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c - ICCARM - - - $PROJ_DIR$\webserver\httpd-cgi.c - ICCARM - - - $PROJ_DIR$\webserver\httpd-fs.c - ICCARM - - + + + ICCARM + 111 + + + BICOMP + 19 + + + + + ICCARM + 126 155 149 130 116 44 98 49 62 64 95 21 100 105 145 43 9 180 162 176 154 + + + BICOMP + 126 155 149 130 116 44 98 49 64 95 21 100 105 145 43 9 180 162 176 154 + + + + $PROJ_DIR$\webserver\httpd.c - ICCARM - - - $PROJ_DIR$\..\Common\Minimal\flash.c - ICCARM - - - $PROJ_DIR$\..\Common\Minimal\flop.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_gpio.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_fmi.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_uart.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_it.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_lib.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_scu.c - ICCARM - - + + + ICCARM + 24 + + + BICOMP + 84 + + + + + ICCARM + 155 149 130 116 44 98 49 62 64 95 21 100 105 145 43 9 180 162 73 97 176 154 + + + BICOMP + 155 149 130 116 44 98 49 64 95 21 100 105 145 43 9 180 162 73 97 176 154 + + + + + $PROJ_DIR$\webserver\httpd-fs.c + + + ICCARM + 13 + + + BICOMP + 90 + + + + + ICCARM + 105 145 149 130 116 44 98 49 62 64 95 21 100 43 9 180 162 58 155 124 + + + BICOMP + 105 145 149 130 116 44 98 49 64 95 21 100 43 9 180 162 58 155 124 + + + + + $PROJ_DIR$\91x_vect_IAR.s + + + AARM + 45 + + + + + AARM + 199 72 + + + + + $PROJ_DIR$\webserver\httpd-cgi.c + + + ICCARM + 67 + + + BICOMP + 54 + + + + + ICCARM + 155 149 130 116 44 98 49 62 64 95 21 100 105 145 43 9 180 162 73 16 154 176 + + + BICOMP + 155 149 130 116 44 98 49 64 95 21 100 105 145 43 9 180 162 73 16 154 176 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + + + ICCARM + 0 + + + BICOMP + 5 + + + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + + + ICCARM + 104 + + + BICOMP + 119 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 59 178 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 65 123 22 59 178 + + + + + $PROJ_DIR$\91x_init_IAR.s + + + AARM + 68 + + + + + $PROJ_DIR$\..\..\Source\tasks.c + + + ICCARM + 74 + + + BICOMP + 53 + + + + + ICCARM + 16 98 49 62 64 95 21 154 27 176 15 82 33 199 7 108 25 120 65 123 + + + BICOMP + 16 98 49 64 95 21 154 27 176 15 82 33 199 7 108 25 120 65 123 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + + + AARM + 144 + + + + + AARM + 72 + + + + + $PROJ_DIR$\..\..\Source\queue.c + + + ICCARM + 52 + + + BICOMP + 135 + + + + + ICCARM + 27 98 49 62 64 95 21 154 176 15 82 33 199 7 108 25 120 65 123 81 + + + BICOMP + 27 98 49 64 95 21 154 176 15 82 33 199 7 108 25 120 65 123 81 + + + + $PROJ_DIR$\..\..\Source\list.c - ICCARM - - - $PROJ_DIR$\Library\source\91x_vic.c - ICCARM - - - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c - ICCARM - - + + + ICCARM + 122 + + + BICOMP + 173 + + + + + ICCARM + 27 98 49 62 64 95 21 154 15 82 33 199 7 108 25 120 123 + + + BICOMP + 27 98 49 64 95 21 154 15 82 33 199 7 108 25 120 123 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + + + ICCARM + 20 + + + BICOMP + 8 + + + + + ICCARM + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 27 98 49 62 64 95 21 154 150 15 82 33 199 7 108 25 120 65 123 + + + BICOMP + 37 134 114 136 106 1 10 161 102 28 164 156 129 169 27 98 49 64 95 21 154 150 15 82 33 199 7 108 25 120 65 123 + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c - ICCARM - - - [REBUILD_ALL] - + + + ICCARM + 109 + + + BICOMP + 14 + + + + + ICCARM + 155 149 130 116 44 98 49 62 64 95 21 100 105 145 43 9 180 162 139 176 154 + + + BICOMP + 155 149 130 116 44 98 49 64 95 21 100 105 145 43 9 180 162 139 176 154 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + + + ICCARM + 86 + + + BICOMP + 78 + + + + + ICCARM + 77 57 15 82 98 49 62 64 95 21 154 33 199 7 108 25 120 61 + + + BICOMP + 77 57 15 82 98 49 64 95 21 154 33 199 7 108 25 120 61 + + + THUMB - $PROJ_DIR$\..\Common\include\BlockQ.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h - $PROJ_DIR$\Library\include\91x_uart.h - $TOOLKIT_DIR$\inc\stdio.h - $TOOLKIT_DIR$\inc\math.h + $PROJ_DIR$\THUMB\Obj\QPeek.r79 + $PROJ_DIR$\THUMB\Obj\PollQ.r79 $PROJ_DIR$\THUMB\Obj\http-strings.r79 - $PROJ_DIR$\THUMB\Obj\91x_vect_IAR.r79 - $PROJ_DIR$\Library\include\91x_map.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h - $PROJ_DIR$\..\..\Source\include\FreeRTOS.h - $PROJ_DIR$\Library\include\91x_lib.h - $PROJ_DIR$\Library\include\91x_ahbapb.h - $PROJ_DIR$\Library\include\91x_scu.h - $PROJ_DIR$\..\..\Source\include\projdefs.h - $PROJ_DIR$\..\..\Source\include\croutine.h - $PROJ_DIR$\..\Common\include\flop.h - $TOOLKIT_DIR$\inc\ymath.h - $PROJ_DIR$\Library\include\91x_gpio.h - $PROJ_DIR$\..\Common\include\flash.h - $PROJ_DIR$\..\..\Source\include\list.h - $PROJ_DIR$\webserver\httpd-fs.h - $PROJ_DIR$\..\Common\Minimal\dynamic.c - $PROJ_DIR$\..\Common\include\integer.h - $PROJ_DIR$\webserver\uip-conf.h - $PROJ_DIR$\webserver\httpd-fsdata.c - $PROJ_DIR$\Library\include\91x_type.h - $PROJ_DIR$\Library\include\91x_vic.h - $TOOLKIT_DIR$\inc\intrinsics.h - $PROJ_DIR$\Library\include\91x_fmi.h - $TOOLKIT_DIR$\inc\DLib_Product.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\ISR_Support.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h - $PROJ_DIR$\THUMB\Obj\comtest.r79 - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h - $TOOLKIT_DIR$\inc\xencoding_limits.h - $PROJ_DIR$\..\Common\include\comtest.h - $PROJ_DIR$\..\Common\include\dynamic.h - $TOOLKIT_DIR$\inc\yvals.h - $PROJ_DIR$\webserver\webserver.h - $PROJ_DIR$\Library\include\91x_enet.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h - $TOOLKIT_DIR$\inc\stdint.h - $PROJ_DIR$\Library\include\91x_wdg.h - $PROJ_DIR$\STCode\lcd.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h - $PROJ_DIR$\..\Common\include\PollQ.h - $TOOLKIT_DIR$\inc\ysizet.h - $TOOLKIT_DIR$\inc\DLib_Threads.h - $PROJ_DIR$\..\..\Source\include\queue.h - $PROJ_DIR$\THUMB\Obj\BlockQ.r79 - $PROJ_DIR$\..\Common\include\comtest2.h - $TOOLKIT_DIR$\inc\inttypes.h - $PROJ_DIR$\..\..\Source\include\portable.h - $TOOLKIT_DIR$\inc\intrinsic.h - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h - $PROJ_DIR$\webserver\httpd.h - $PROJ_DIR$\..\Common\include\serial.h - $PROJ_DIR$\..\Common\include\partest.h - $PROJ_DIR$\webserver\httpd-cgi.h - $TOOLKIT_DIR$\lib\dl5tptinl8n.h - $PROJ_DIR$\..\Common\include\semtest.h - $TOOLKIT_DIR$\inc\DLib_Defaults.h - $TOOLKIT_DIR$\lib\dl5tptinl8n.r79 - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h - $PROJ_DIR$\webserver\clock-arch.h - $TOOLKIT_DIR$\inc\string.h - $PROJ_DIR$\..\..\Source\include\semphr.h - $PROJ_DIR$\..\..\Source\include\task.h - $TOOLKIT_DIR$\inc\stdlib.h - $PROJ_DIR$\webserver\http-strings.h - $TOOLKIT_DIR$\inc\stddef.h - $PROJ_DIR$\webserver\httpd-fsdata.h - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h - $PROJ_DIR$\Library\include\91x_it.h - $PROJ_DIR$\..\Common\Minimal\comtest.c - $PROJ_DIR$\..\Common\Minimal\BlockQ.c - $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c - $PROJ_DIR$\..\Common\Minimal\integer.c - $PROJ_DIR$\STCode\lcd.c - $PROJ_DIR$\main.c - $PROJ_DIR$\..\Common\Minimal\semtest.c - $PROJ_DIR$\..\Common\Minimal\PollQ.c - $PROJ_DIR$\ParTest\ParTest.c - $PROJ_DIR$\serial\serial.c - $PROJ_DIR$\Library\source\91x_enet.c - $PROJ_DIR$\Library\include\91x_conf.h - $PROJ_DIR$\webserver\uIP_Task.c - $PROJ_DIR$\Library\source\91x_wdg.c - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c - $PROJ_DIR$\..\..\Source\queue.c - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 - $PROJ_DIR$\..\..\Source\tasks.c - $PROJ_DIR$\91x_init_IAR.s - $PROJ_DIR$\91x_vect_IAR.s - $PROJ_DIR$\lnkarm_flash.xcl - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c - $PROJ_DIR$\webserver\httpd-cgi.c - $PROJ_DIR$\webserver\httpd-fs.c - $PROJ_DIR$\webserver\httpd.c - $PROJ_DIR$\..\Common\Minimal\flash.c - $PROJ_DIR$\..\Common\Minimal\flop.c - $PROJ_DIR$\FreeRTOSConfig.h - $PROJ_DIR$\Library\source\91x_gpio.c - $PROJ_DIR$\Library\source\91x_fmi.c - $PROJ_DIR$\Library\source\91x_uart.c - $PROJ_DIR$\Library\source\91x_it.c - $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\THUMB\Obj\uip_arp.pbi + $PROJ_DIR$\THUMB\Obj\91x_gpio.r79 + $PROJ_DIR$\Library\include\91x_fmi.h + $PROJ_DIR$\..\Common\include\comtest2.h + $PROJ_DIR$\THUMB\Obj\timer.pbi + $PROJ_DIR$\..\..\Source\include\portable.h + $PROJ_DIR$\THUMB\Obj\port.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h + $PROJ_DIR$\Library\include\91x_vic.h $PROJ_DIR$\Library\source\91x_scu.c - $PROJ_DIR$\..\..\Source\list.c - $PROJ_DIR$\Library\source\91x_vic.c - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + $PROJ_DIR$\Library\source\91x_gpio.c + $PROJ_DIR$\THUMB\Obj\91x_vic.pbi + $PROJ_DIR$\THUMB\Obj\RTOSDemo.pbd + $PROJ_DIR$\..\..\Source\include\FreeRTOS.h + $PROJ_DIR$\THUMB\Obj\91x_vic.r79 + $TOOLKIT_DIR$\inc\stdio.h + $TOOLKIT_DIR$\inc\DLib_Threads.h + $PROJ_DIR$\THUMB\Exe\RTOSDemo.d79 + $PROJ_DIR$\..\..\Source\include\queue.h $PROJ_DIR$\THUMB\Obj\lcd.r79 - $PROJ_DIR$\THUMB\Obj\main.r79 - $PROJ_DIR$\THUMB\Obj\ParTest.r79 + $TOOLKIT_DIR$\inc\intrinsic.h + $TOOLKIT_DIR$\inc\stdlib.h + $PROJ_DIR$\Library\include\91x_scu.h + $PROJ_DIR$\THUMB\Obj\http-strings.pbi + $PROJ_DIR$\THUMB\Exe\RTOSDemo.sim + $PROJ_DIR$\..\Common\include\partest.h + $PROJ_DIR$\THUMB\Obj\semtest.pbi + $PROJ_DIR$\..\..\Source\include\projdefs.h + $PROJ_DIR$\THUMB\Obj\91x_tim.pbi $PROJ_DIR$\THUMB\Obj\91x_lib.r79 - $PROJ_DIR$\THUMB\Obj\91x_scu.r79 + $PROJ_DIR$\THUMB\Obj\ParTest.pbi + $PROJ_DIR$\THUMB\Obj\tasks.r79 $PROJ_DIR$\THUMB\Obj\91x_uart.r79 - $PROJ_DIR$\THUMB\Obj\91x_vic.r79 - $PROJ_DIR$\THUMB\Obj\PollQ.r79 - $PROJ_DIR$\THUMB\Obj\semtest.r79 - $PROJ_DIR$\THUMB\Obj\serial.r79 - $PROJ_DIR$\THUMB\Obj\dynamic.r79 - $PROJ_DIR$\THUMB\Obj\uip.r79 - $PROJ_DIR$\THUMB\Obj\uip_arp.r79 + $PROJ_DIR$\THUMB\Obj\queue.pbi + $PROJ_DIR$\Library\source\91x_vic.c + $PROJ_DIR$\Library\source\91x_tim.c + $PROJ_DIR$\Library\include\91x_lib.h $PROJ_DIR$\THUMB\Obj\portasm.r79 - $PROJ_DIR$\THUMB\Obj\http-strings.pbi + $PROJ_DIR$\THUMB\Obj\httpd.r79 + $PROJ_DIR$\THUMB\Obj\91x_tim.r79 $PROJ_DIR$\THUMB\Obj\BlockQ.pbi - $PROJ_DIR$\THUMB\Obj\comtest.pbi - $PROJ_DIR$\THUMB\Obj\heap_2.r79 - $PROJ_DIR$\THUMB\Obj\integer.r79 + $PROJ_DIR$\THUMB\Obj\httpd-fs.r79 + $PROJ_DIR$\THUMB\Obj\list.pbi + $PROJ_DIR$\THUMB\Obj\flop.pbi + $PROJ_DIR$\THUMB\Obj\psock.r79 + $PROJ_DIR$\THUMB\Obj\dynamic.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h + $PROJ_DIR$\THUMB\Obj\uip.r79 + $TOOLKIT_DIR$\inc\stdint.h + $PROJ_DIR$\THUMB\Obj\tasks.pbi + $PROJ_DIR$\THUMB\Obj\port.pbi + $PROJ_DIR$\THUMB\Obj\flop.r79 + $PROJ_DIR$\..\Common\include\flop.h + $TOOLKIT_DIR$\inc\DLib_Defaults.h + $PROJ_DIR$\THUMB\Obj\GenQTest.r79 + $PROJ_DIR$\THUMB\Obj\httpd.pbi + $PROJ_DIR$\webserver\clock-arch.h + $PROJ_DIR$\webserver\httpd-fsdata.h + $PROJ_DIR$\..\..\Source\include\semphr.h + $PROJ_DIR$\THUMB\Obj\comtest.r79 + $PROJ_DIR$\THUMB\Obj\serial.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h + $PROJ_DIR$\THUMB\Obj\91x_uart.pbi + $PROJ_DIR$\THUMB\Obj\httpd-fs.pbi $PROJ_DIR$\THUMB\Obj\uIP_Task.r79 + $TOOLKIT_DIR$\inc\DLib_Product.h + $PROJ_DIR$\THUMB\Obj\main.r79 + $PROJ_DIR$\..\..\Source\include\task.h + $PROJ_DIR$\..\Common\Minimal\dynamic.c + $PROJ_DIR$\THUMB\Obj\queue.r79 + $PROJ_DIR$\..\Common\include\PollQ.h + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\ISR_Support.h + $PROJ_DIR$\webserver\httpd-cgi.h $PROJ_DIR$\THUMB\Obj\91x_enet.r79 $PROJ_DIR$\THUMB\Obj\dynamic.pbi + $PROJ_DIR$\THUMB\Obj\91x_it.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h + $PROJ_DIR$\THUMB\Obj\91x_fmi.r79 + $PROJ_DIR$\THUMB\Obj\91x_scu.r79 + $PROJ_DIR$\THUMB\Obj\91x_enet.pbi + $PROJ_DIR$\..\..\Source\include\croutine.h + $TOOLKIT_DIR$\inc\stddef.h + $PROJ_DIR$\THUMB\Obj\timer.r79 + $PROJ_DIR$\THUMB\Obj\uIP_Task.pbi + $PROJ_DIR$\..\Common\include\semtest.h + $PROJ_DIR$\THUMB\Obj\91x_lib.pbi + $PROJ_DIR$\THUMB\Obj\integer.pbi + $PROJ_DIR$\THUMB\Obj\91x_it.r79 + $PROJ_DIR$\THUMB\Obj\91x_init_IAR.r79 + $PROJ_DIR$\THUMB\Obj\91x_wdg.r79 + $PROJ_DIR$\THUMB\Obj\semtest.r79 $PROJ_DIR$\THUMB\Obj\flash.pbi - $PROJ_DIR$\THUMB\Obj\flop.pbi + $PROJ_DIR$\Library\source\91x_uart.c + $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\THUMB\Obj\ParTest.r79 $PROJ_DIR$\THUMB\Obj\heap_2.pbi - $PROJ_DIR$\THUMB\Obj\integer.pbi - $PROJ_DIR$\THUMB\Obj\lcd.pbi - $PROJ_DIR$\THUMB\Obj\main.pbi - $PROJ_DIR$\THUMB\Obj\ParTest.pbi - $PROJ_DIR$\THUMB\Obj\PollQ.pbi - $PROJ_DIR$\THUMB\Obj\semtest.pbi - $PROJ_DIR$\THUMB\Obj\serial.pbi - $PROJ_DIR$\THUMB\Obj\uIP_Task.pbi - $PROJ_DIR$\THUMB\Obj\91x_enet.pbi - $PROJ_DIR$\THUMB\Obj\91x_fmi.pbi + $PROJ_DIR$\THUMB\Obj\91x_vect_IAR.r79 + $PROJ_DIR$\..\Common\Minimal\flash.c + $TOOLKIT_DIR$\inc\xencoding_limits.h + $PROJ_DIR$\webserver\http-strings.h + $TOOLKIT_DIR$\inc\yvals.h + $PROJ_DIR$\STCode\lcd.h + $PROJ_DIR$\webserver\webserver.h + $PROJ_DIR$\ParTest\ParTest.c $PROJ_DIR$\THUMB\Obj\91x_gpio.pbi - $PROJ_DIR$\THUMB\Obj\91x_it.pbi - $PROJ_DIR$\THUMB\Obj\91x_lib.pbi - $PROJ_DIR$\THUMB\Obj\91x_scu.pbi - $PROJ_DIR$\THUMB\Obj\91x_uart.pbi - $PROJ_DIR$\THUMB\Obj\91x_vic.pbi - $PROJ_DIR$\THUMB\Obj\91x_wdg.pbi - $PROJ_DIR$\THUMB\Obj\list.pbi - $PROJ_DIR$\THUMB\Obj\port.pbi - $PROJ_DIR$\THUMB\Obj\queue.pbi - $PROJ_DIR$\THUMB\Obj\tasks.pbi - $PROJ_DIR$\THUMB\Obj\RTOSDemo.pbd - $PROJ_DIR$\THUMB\Obj\httpd-cgi.pbi - $PROJ_DIR$\THUMB\Obj\httpd-fs.pbi - $PROJ_DIR$\THUMB\Obj\httpd.pbi + $PROJ_DIR$\Library\include\91x_tim.h + $PROJ_DIR$\THUMB\Obj\PollQ.pbi + $PROJ_DIR$\..\Common\include\flash.h + $PROJ_DIR$\webserver\httpd.h + $PROJ_DIR$\Library\include\91x_ahbapb.h + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h $PROJ_DIR$\THUMB\Obj\psock.pbi - $PROJ_DIR$\THUMB\Obj\timer.pbi + $TOOLKIT_DIR$\inc\ymath.h + $PROJ_DIR$\THUMB\Obj\heap_2.r79 + $PROJ_DIR$\main.c + $PROJ_DIR$\Library\include\91x_conf.h + $PROJ_DIR$\webserver\uIP_Task.c + $TOOLKIT_DIR$\inc\inttypes.h + $TOOLKIT_DIR$\lib\dl5tptinl8n.h + $TOOLKIT_DIR$\inc\intrinsics.h + $PROJ_DIR$\THUMB\Obj\httpd-cgi.pbi + $PROJ_DIR$\..\Common\include\BlockQ.h $PROJ_DIR$\THUMB\Obj\uip.pbi - $PROJ_DIR$\THUMB\Obj\uip_arp.pbi - $PROJ_DIR$\THUMB\Exe\RTOSDemo.d79 - $PROJ_DIR$\THUMB\Obj\flash.r79 - $PROJ_DIR$\THUMB\Obj\flop.r79 - $PROJ_DIR$\THUMB\Obj\91x_init_IAR.r79 + $PROJ_DIR$\..\..\Source\include\list.h + $PROJ_DIR$\THUMB\Obj\91x_fmi.pbi + $PROJ_DIR$\webserver\httpd-fsdata.c + $PROJ_DIR$\Library\source\91x_fmi.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h + $TOOLKIT_DIR$\lib\dl5tptinl8n.r79 + $PROJ_DIR$\serial\serial.c + $PROJ_DIR$\THUMB\Obj\GenQTest.pbi + $PROJ_DIR$\THUMB\Obj\QPeek.pbi + $PROJ_DIR$\Library\include\91x_wdg.h + $PROJ_DIR$\THUMB\Obj\lcd.pbi + $PROJ_DIR$\THUMB\Obj\91x_wdg.pbi + $PROJ_DIR$\webserver\uip-conf.h + $TOOLKIT_DIR$\inc\math.h + $PROJ_DIR$\..\Common\Minimal\comtest.c + $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\Library\include\91x_map.h + $PROJ_DIR$\Library\include\91x_type.h + $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\..\Common\include\GenQTest.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h + $PROJ_DIR$\Library\source\91x_enet.c + $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\Library\source\91x_it.c + $PROJ_DIR$\THUMB\List\RTOSDemo.html + $PROJ_DIR$\THUMB\Obj\integer.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h + $PROJ_DIR$\..\Common\include\integer.h + $PROJ_DIR$\..\Common\include\comtest.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h + $TOOLKIT_DIR$\inc\assert.h + $PROJ_DIR$\THUMB\Obj\serial.pbi $PROJ_DIR$\THUMB\Obj\httpd-cgi.r79 - $PROJ_DIR$\THUMB\Obj\httpd-fs.r79 - $PROJ_DIR$\THUMB\Obj\httpd.r79 - $PROJ_DIR$\THUMB\Obj\psock.r79 - $PROJ_DIR$\THUMB\Obj\timer.r79 - $PROJ_DIR$\THUMB\Obj\91x_wdg.r79 + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $TOOLKIT_DIR$\inc\ysizet.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h + $PROJ_DIR$\Library\include\91x_uart.h + $PROJ_DIR$\..\Common\include\serial.h + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\Library\include\91x_it.h + $PROJ_DIR$\webserver\httpd-fs.h + $PROJ_DIR$\THUMB\Obj\91x_scu.pbi + $PROJ_DIR$\Library\include\91x_gpio.h + $PROJ_DIR$\THUMB\Obj\main.pbi $PROJ_DIR$\THUMB\Obj\list.r79 - $PROJ_DIR$\THUMB\Obj\port.r79 - $PROJ_DIR$\THUMB\Obj\queue.r79 - $PROJ_DIR$\THUMB\Obj\tasks.r79 - $PROJ_DIR$\THUMB\Exe\RTOSDemo.sim - $PROJ_DIR$\THUMB\Obj\91x_fmi.r79 - $PROJ_DIR$\THUMB\Obj\91x_gpio.r79 - $PROJ_DIR$\THUMB\Obj\91x_it.r79 - $PROJ_DIR$\THUMB\List\RTOSDemo.html + $PROJ_DIR$\THUMB\Obj\flash.r79 + $PROJ_DIR$\Library\source\91x_wdg.c + $PROJ_DIR$\Library\include\91x_enet.h + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + $PROJ_DIR$\..\Common\Minimal\flop.c + $PROJ_DIR$\THUMB\Obj\uip_arp.r79 + $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\..\Common\include\QPeek.h + $PROJ_DIR$\THUMB\Obj\BlockQ.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h + $PROJ_DIR$\..\Common\include\dynamic.h + $PROJ_DIR$\THUMB\Obj\comtest.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + $PROJ_DIR$\webserver\httpd.c + $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\91x_vect_IAR.s + $PROJ_DIR$\webserver\httpd-cgi.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + $PROJ_DIR$\..\Common\Minimal\QPeek.c + $PROJ_DIR$\lnkarm_flash.xcl + $PROJ_DIR$\91x_init_IAR.s + $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + $PROJ_DIR$\..\..\Source\queue.c + $PROJ_DIR$\..\..\Source\list.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + $PROJ_DIR$\FreeRTOSConfig.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c - $PROJ_DIR$\..\Common\Minimal\dynamic.c + [ROOT_NODE] + + + XLINK + 150 27 20 + + + + + $PROJ_DIR$\Library\source\91x_scu.c + + + ICCARM + 81 + + + BICOMP + 167 + + + + + ICCARM + 25 142 118 143 + + + BICOMP + 25 142 118 143 + + + + + $PROJ_DIR$\Library\source\91x_gpio.c ICCARM - 126 + 4 BICOMP - 137 + 107 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 38 + 168 142 118 143 25 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 38 + 168 142 118 143 25 - [ROOT_NODE] + $PROJ_DIR$\THUMB\Obj\RTOSDemo.pbd + + + BILINK + 82 127 107 78 88 167 31 65 14 137 43 133 33 109 134 183 77 94 46 98 26 123 66 58 89 136 45 169 53 114 36 29 157 52 7 86 125 3 + + + + + $PROJ_DIR$\THUMB\Exe\RTOSDemo.d79 XLINK - 170 188 184 + 150 27 + + + XLINK + 192 76 80 4 91 90 32 81 42 35 99 17 92 180 57 97 1 0 62 48 171 54 116 2 158 44 41 151 22 170 69 9 40 47 72 93 63 34 85 67 50 176 131 + + - $PROJ_DIR$\..\Common\Minimal\comtest.c + $PROJ_DIR$\Library\source\91x_vic.c ICCARM - 34 + 17 BICOMP - 132 + 14 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 58 37 59 + 11 142 118 143 165 39 112 5 108 25 168 162 135 173 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 58 37 59 + 11 142 118 143 165 39 112 5 108 25 168 162 135 173 - $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $PROJ_DIR$\Library\source\91x_tim.c ICCARM - 51 + 42 BICOMP - 131 + 31 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 0 + 108 142 118 143 25 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 0 + 108 142 118 143 25 - $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\..\Common\Minimal\dynamic.c ICCARM - 133 + 48 BICOMP - 140 + 77 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 61 21 182 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 61 21 182 - $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\Library\source\91x_uart.c ICCARM - 134 + 35 BICOMP - 141 + 65 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 23 + 162 142 118 143 25 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 23 + 162 142 118 143 25 - $PROJ_DIR$\STCode\lcd.c + $PROJ_DIR$\Library\source\91x_lib.c ICCARM - 116 + 32 BICOMP - 142 + 88 ICCARM - 11 7 87 26 12 29 27 75 18 13 2 44 41 45 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 69 20 + 142 118 143 BICOMP - 11 7 87 26 12 29 27 75 18 13 2 44 41 45 10 72 39 63 30 36 49 48 14 105 54 74 55 28 69 20 + 142 118 143 - $PROJ_DIR$\main.c + $PROJ_DIR$\..\Common\Minimal\flash.c ICCARM - 117 + 171 BICOMP - 143 + 94 ICCARM - 3 39 63 61 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 50 45 19 23 47 0 62 38 59 16 52 58 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 28 110 BICOMP - 3 39 63 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 50 45 19 23 47 0 62 38 59 16 52 58 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 28 110 - $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\ParTest\ParTest.c ICCARM - 124 + 97 BICOMP - 146 + 33 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 62 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 103 56 121 68 101 19 160 30 199 8 113 23 122 28 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 62 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 103 56 68 101 19 160 30 199 8 113 23 122 28 - $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\main.c ICCARM - 123 + 69 BICOMP - 145 + 169 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 47 + 18 103 56 121 68 101 19 160 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 30 199 8 113 23 122 70 126 21 104 110 153 73 124 87 182 28 55 6 163 145 179 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 47 + 18 103 56 68 101 19 160 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 30 199 8 113 23 122 70 126 21 104 110 153 73 124 87 182 28 55 6 163 145 179 - $PROJ_DIR$\ParTest\ParTest.c + $PROJ_DIR$\webserver\uIP_Task.c ICCARM - 118 + 67 BICOMP - 144 + 86 ICCARM - 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 59 + 177 103 56 121 68 101 19 160 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 30 199 8 113 23 122 70 126 61 21 161 155 138 120 51 105 111 152 49 10 181 166 130 64 79 59 BICOMP - 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 30 36 49 48 14 105 54 74 55 28 59 + 177 103 56 68 101 19 160 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 30 199 8 113 23 122 70 126 61 21 161 155 138 120 51 105 111 152 49 10 181 166 130 64 79 59 - $PROJ_DIR$\serial\serial.c + $PROJ_DIR$\Library\source\91x_fmi.c ICCARM - 125 + 80 BICOMP - 147 + 127 ICCARM - 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 50 68 58 + 5 142 118 143 BICOMP - 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 30 36 49 48 14 105 54 74 55 28 50 68 58 + 5 142 118 143 - $PROJ_DIR$\Library\source\91x_enet.c + $PROJ_DIR$\serial\serial.c ICCARM - 136 + 63 BICOMP - 149 + 157 ICCARM - 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 69 20 11 7 87 26 12 29 27 75 18 13 2 44 41 67 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 103 56 121 68 101 19 160 30 199 8 113 23 122 21 61 163 BICOMP - 10 72 39 63 30 36 49 48 14 105 54 74 55 28 69 20 11 7 87 26 12 29 27 75 18 13 2 44 41 67 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 16 84 103 56 68 101 19 160 30 199 8 113 23 122 21 61 163 - $PROJ_DIR$\webserver\uIP_Task.c + $PROJ_DIR$\..\Common\Minimal\comtest.c ICCARM - 135 + 62 BICOMP - 148 + 183 ICCARM - 67 39 63 61 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 68 50 9 56 24 53 43 40 57 65 31 8 42 21 35 46 1 66 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 163 154 28 BICOMP - 67 39 63 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 68 50 9 56 24 53 43 40 57 65 31 8 42 21 35 46 1 66 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 163 154 28 - $PROJ_DIR$\Library\source\91x_wdg.c + $PROJ_DIR$\STCode\lcd.c ICCARM - 179 + 22 BICOMP - 157 + 136 ICCARM - 44 7 87 26 13 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 104 16 84 103 56 121 68 101 19 160 30 199 8 113 23 122 70 126 BICOMP - 44 7 87 26 13 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 104 16 84 103 56 68 101 19 160 30 199 8 113 23 122 70 126 - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + $PROJ_DIR$\..\Common\Minimal\integer.c ICCARM - 181 + 151 BICOMP - 159 + 89 ICCARM - 11 7 87 26 12 29 27 75 18 13 2 44 41 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 153 BICOMP - 11 7 87 26 12 29 27 75 18 13 2 44 41 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 153 - $PROJ_DIR$\..\..\Source\queue.c + $PROJ_DIR$\Library\source\91x_enet.c ICCARM - 182 + 76 BICOMP - 160 + 82 ICCARM - 70 39 63 61 30 36 49 48 67 10 72 14 105 54 74 55 28 69 20 15 + 16 84 103 56 121 68 101 19 160 30 199 8 113 23 122 70 126 39 142 118 143 112 5 11 165 108 25 168 162 135 173 177 BICOMP - 70 39 63 30 36 49 48 67 10 72 14 105 54 74 55 28 69 20 15 + 16 84 103 56 68 101 19 160 30 199 8 113 23 122 70 126 39 142 118 143 112 5 11 165 108 25 168 162 135 173 177 - $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + $PROJ_DIR$\..\Common\Minimal\semtest.c - AARM - 129 + ICCARM + 93 + + + BICOMP + 29 - AARM - 32 + ICCARM + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 61 21 87 + + + BICOMP + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 61 21 87 - $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\Library\source\91x_it.c ICCARM - 183 + 90 BICOMP - 161 + 78 ICCARM - 3 39 63 61 30 36 49 48 70 67 10 72 14 105 54 74 55 28 69 20 + 199 165 39 142 118 143 112 5 11 108 25 168 162 135 173 BICOMP - 3 39 63 30 36 49 48 70 67 10 72 14 105 54 74 55 28 69 20 + 199 165 39 142 118 143 112 5 11 108 25 168 162 135 173 - $PROJ_DIR$\91x_init_IAR.s + $PROJ_DIR$\..\Common\Minimal\BlockQ.c - AARM - 173 + ICCARM + 180 - - - - $PROJ_DIR$\91x_vect_IAR.s - - AARM - 6 + BICOMP + 43 - - AARM - 105 32 - - - - - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c - ICCARM - 5 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 124 BICOMP - 130 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 124 - + - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c ICCARM - 177 + 116 BICOMP - 166 + 98 ICCARM - 3 39 63 61 30 36 49 48 67 56 24 53 43 40 57 65 31 8 42 21 9 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 BICOMP - 3 39 63 30 36 49 48 67 56 24 53 43 40 57 65 31 8 42 21 9 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + $PROJ_DIR$\Library\source\91x_wdg.c ICCARM - 128 + 92 BICOMP - 169 + 137 ICCARM - 35 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 67 48 + 135 142 118 143 25 BICOMP - 35 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 67 48 + 135 142 118 143 25 - $PROJ_DIR$\webserver\httpd-cgi.c + $PROJ_DIR$\..\Common\Minimal\GenQTest.c ICCARM - 174 + 57 BICOMP - 163 + 133 ICCARM - 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 60 3 48 67 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 61 145 BICOMP - 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 60 3 48 67 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 61 145 - $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\..\Common\Minimal\flop.c ICCARM - 175 + 54 BICOMP - 164 + 46 ICCARM - 57 65 56 24 53 43 39 63 61 30 36 49 40 31 8 42 21 73 9 25 + 24 103 56 121 68 101 19 160 139 115 16 84 30 199 8 113 23 122 70 126 55 BICOMP - 57 65 56 24 53 43 39 63 30 36 49 40 31 8 42 21 73 9 25 + 24 103 56 68 101 19 160 139 115 16 84 30 199 8 113 23 122 70 126 55 - $PROJ_DIR$\webserver\httpd.c + $PROJ_DIR$\..\Common\Minimal\PollQ.c ICCARM - 176 + 1 BICOMP - 165 + 109 ICCARM - 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 60 71 67 48 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 73 BICOMP - 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 60 71 67 48 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 73 - $PROJ_DIR$\..\Common\Minimal\flash.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c ICCARM - 171 + 47 BICOMP - 138 + 114 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 59 19 + 18 103 56 121 68 101 19 160 177 155 138 120 51 105 111 152 49 10 181 166 161 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 59 19 + 18 103 56 68 101 19 160 177 155 138 120 51 105 111 152 49 10 181 166 161 - $PROJ_DIR$\..\Common\Minimal\flop.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c ICCARM - 172 + 176 BICOMP - 139 + 3 ICCARM - 70 39 63 61 30 36 49 48 4 17 10 72 14 105 54 74 55 28 69 20 16 + 130 161 155 138 120 51 103 56 121 68 101 19 105 111 152 49 10 181 166 177 160 BICOMP - 70 39 63 30 36 49 48 4 17 10 72 14 105 54 74 55 28 69 20 16 + 130 161 155 138 120 51 103 56 68 101 19 105 111 152 49 10 181 166 177 160 - $PROJ_DIR$\Library\source\91x_gpio.c + $PROJ_DIR$\webserver\httpd.c ICCARM - 186 + 41 BICOMP - 151 + 58 ICCARM - 18 7 87 26 13 + 161 155 138 120 51 103 56 121 68 101 19 105 111 152 49 10 181 166 75 102 177 160 BICOMP - 18 7 87 26 13 + 161 155 138 120 51 103 56 68 101 19 105 111 152 49 10 181 166 75 102 177 160 - $PROJ_DIR$\Library\source\91x_fmi.c + $PROJ_DIR$\webserver\httpd-fs.c ICCARM - 185 + 44 BICOMP - 150 + 66 ICCARM - 29 7 87 26 + 111 152 155 138 120 51 103 56 121 68 101 19 105 49 10 181 166 60 161 128 BICOMP - 29 7 87 26 + 111 152 155 138 120 51 103 56 68 101 19 105 49 10 181 166 60 161 128 - $PROJ_DIR$\Library\source\91x_uart.c + $PROJ_DIR$\91x_vect_IAR.s - ICCARM - 121 - - - BICOMP - 155 + AARM + 99 - ICCARM - 2 7 87 26 13 - - - BICOMP - 2 7 87 26 13 + AARM + 199 74 - $PROJ_DIR$\Library\source\91x_it.c + $PROJ_DIR$\webserver\httpd-cgi.c ICCARM - 187 + 158 BICOMP - 152 + 123 ICCARM - 75 11 7 87 26 12 29 27 18 13 2 44 41 + 161 155 138 120 51 103 56 121 68 101 19 105 111 152 49 10 181 166 75 18 160 177 BICOMP - 75 11 7 87 26 12 29 27 18 13 2 44 41 + 161 155 138 120 51 103 56 68 101 19 105 111 152 49 10 181 166 75 18 160 177 - $PROJ_DIR$\Library\source\91x_lib.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c ICCARM - 119 + 2 + + + BICOMP + 26 + + + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + + + ICCARM + 0 BICOMP - 153 + 134 ICCARM - 7 87 26 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 61 179 BICOMP - 7 87 26 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 70 126 21 61 179 - $PROJ_DIR$\Library\source\91x_scu.c + $PROJ_DIR$\91x_init_IAR.s + + + AARM + 91 + + + + + $PROJ_DIR$\..\..\Source\tasks.c ICCARM - 120 + 34 BICOMP - 154 + 52 ICCARM - 13 7 87 26 + 18 103 56 121 68 101 19 160 24 177 16 84 30 199 8 113 23 122 70 126 BICOMP - 13 7 87 26 + 18 103 56 68 101 19 160 24 177 16 84 30 199 8 113 23 122 70 126 - $PROJ_DIR$\..\..\Source\list.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79 + + + AARM + 40 + + + + + AARM + 74 + + + + + $PROJ_DIR$\..\..\Source\queue.c ICCARM - 180 + 72 BICOMP - 158 + 36 ICCARM - 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 20 + 24 103 56 121 68 101 19 160 177 16 84 30 199 8 113 23 122 70 126 83 BICOMP - 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 20 + 24 103 56 68 101 19 160 177 16 84 30 199 8 113 23 122 70 126 83 - $PROJ_DIR$\Library\source\91x_vic.c + $PROJ_DIR$\..\..\Source\list.c ICCARM - 122 + 170 BICOMP - 156 + 45 ICCARM - 27 7 87 26 75 11 12 29 18 13 2 44 41 + 24 103 56 121 68 101 19 160 16 84 30 199 8 113 23 122 126 BICOMP - 27 7 87 26 75 11 12 29 18 13 2 44 41 + 24 103 56 68 101 19 160 16 84 30 199 8 113 23 122 126 - $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c ICCARM - 178 + 9 BICOMP - 167 + 53 ICCARM - 1 66 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 46 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 24 103 56 121 68 101 19 160 156 16 84 30 199 8 113 23 122 70 126 BICOMP - 1 66 10 72 39 63 30 36 49 48 14 105 54 74 55 28 46 + 39 142 118 143 112 5 11 165 108 25 168 162 135 173 24 103 56 68 101 19 160 156 16 84 30 199 8 113 23 122 70 126 @@ -2057,48 +7466,335 @@ ICCARM - 127 + 50 BICOMP - 168 + 125 ICCARM - 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 33 67 48 + 161 155 138 120 51 103 56 121 68 101 19 105 111 152 49 10 181 166 146 177 160 BICOMP - 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 33 67 48 + 161 155 138 120 51 103 56 68 101 19 105 111 152 49 10 181 166 146 177 160 - $PROJ_DIR$\THUMB\Obj\RTOSDemo.pbd - + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + - BILINK - 149 150 151 152 153 154 155 156 157 131 144 145 132 137 138 139 140 130 163 164 165 141 142 158 143 159 166 160 146 147 161 167 148 168 169 + ICCARM + 85 - - - - $PROJ_DIR$\THUMB\Exe\RTOSDemo.d79 - - XLINK - 188 184 + BICOMP + 7 - XLINK - 96 136 185 186 173 187 119 120 121 6 122 179 51 118 123 34 126 171 172 133 5 174 175 176 134 116 180 117 181 129 177 182 124 125 183 178 135 127 128 64 + ICCARM + 79 59 16 84 103 56 121 68 101 19 160 30 199 8 113 23 122 64 + + + BICOMP + 79 59 16 84 103 56 68 101 19 160 30 199 8 113 23 122 64 + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\stats.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\sys.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_scu.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_gpio.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_msg.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\fs.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_vic.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_tim.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib2.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_dec.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\dynamic.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\BasicWEB.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\raw.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\mem.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\asn1_enc.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_in.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_uart.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_lib.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\flash.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\tcp_out.c + ICCARM + + + $PROJ_DIR$\ParTest\ParTest.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\tcpip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\udp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\mib_structs.c + ICCARM + + + $PROJ_DIR$\main.c + ICCARM + + + $PROJ_DIR$\webserver\uIP_Task.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_fmi.c + ICCARM + + + $PROJ_DIR$\serial\serial.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\netif\etharp.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\comtest.c + ICCARM + + + $PROJ_DIR$\lwip\api\sys_arch.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\sockets.c + ICCARM + + + $PROJ_DIR$\STCode\lcd.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\pbuf.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\integer.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\api_lib.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_in.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_enet.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_it.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\dhcp.c + ICCARM + + + $PROJ_DIR$\lwip\lwipWebServer\httpd.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + ICCARM + + + $PROJ_DIR$\lwip\netif\ethernetif.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\snmp\msg_out.c + ICCARM + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + ICCARM + + + $PROJ_DIR$\Library\source\91x_wdg.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\flop.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\inet.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\netif.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\memp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\api\err.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\lwIP\core\ipv4\icmp.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + ICCARM + + + $PROJ_DIR$\webserver\httpd.c + ICCARM + + + $PROJ_DIR$\webserver\httpd-fs.c + ICCARM + + + $PROJ_DIR$\webserver\httpd-cgi.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c + ICCARM + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + ICCARM + + + $PROJ_DIR$\..\..\Source\tasks.c + ICCARM + + + $PROJ_DIR$\..\..\Source\queue.c + ICCARM + + + $PROJ_DIR$\..\..\Source\list.c + ICCARM + + + $PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + ICCARM + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + ICCARM + diff --git a/Demo/ARM9_STR91X_IAR/RTOSDemo.ewd b/Demo/ARM9_STR91X_IAR/RTOSDemo.ewd index 5ece24bd5..4fd4b8474 100644 --- a/Demo/ARM9_STR91X_IAR/RTOSDemo.ewd +++ b/Demo/ARM9_STR91X_IAR/RTOSDemo.ewd @@ -37,7 +37,7 @@ \r\n", + htons(conn->lport), + htons(conn->ripaddr[0]) >> 8, + htons(conn->ripaddr[0]) & 0xff, + htons(conn->ripaddr[1]) >> 8, + htons(conn->ripaddr[1]) & 0xff, + htons(conn->rport), + states[conn->tcpstateflags & UIP_TS_MASK], + conn->nrtx, + conn->timer, + (uip_outstanding(conn))? '*':' ', + (uip_stopped(conn))? '!':' '); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr)) +{ + + PSOCK_BEGIN(&s->sout); + + for(s->count = 0; s->count < UIP_CONNS; ++s->count) { + if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) { + PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s); + } + } + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_net_stats(void *arg) +{ + struct httpd_state *s = (struct httpd_state *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]); +} + +static +PT_THREAD(net_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + +#if UIP_STATISTICS + + for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t); + ++s->count) { + PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s); + } + +#endif /* UIP_STATISTICS */ + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ + +extern void vTaskList( signed char *pcWriteBuffer ); +static char cCountBuf[ 32 ]; +long lRefreshCount = 0; +static unsigned short +generate_rtos_stats(void *arg) +{ + lRefreshCount++; + sprintf( cCountBuf, "


Refresh count = %d", lRefreshCount ); + vTaskList( uip_appdata ); + strcat( uip_appdata, cCountBuf ); + + return strlen( uip_appdata ); +} +/*---------------------------------------------------------------------------*/ + + +static +PT_THREAD(rtos_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_GENERATOR_SEND(&s->sout, generate_rtos_stats, NULL); + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ + +char *pcStatus; +extern unsigned long uxParTestGetLED( unsigned long uxLED ); + +static unsigned short generate_io_state( void *arg ) +{ + if( uxParTestGetLED( 0 ) ) + { + pcStatus = "checked"; + } + else + { + pcStatus = ""; + } + + sprintf( uip_appdata, + "LED"\ + "

"\ + "", + pcStatus ); + + return strlen( uip_appdata ); +} +/*---------------------------------------------------------------------------*/ + +static PT_THREAD(led_io(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_GENERATOR_SEND(&s->sout, generate_io_state, NULL); + PSOCK_END(&s->sout); +} + +/** @} */ + + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-cgi.h b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-cgi.h new file mode 100644 index 000000000..7ae928321 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-cgi.h @@ -0,0 +1,84 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface header file + * \author + * Adam Dunkels + * + */ + + + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_CGI_H__ +#define __HTTPD_CGI_H__ + +#include "psock.h" +#include "httpd.h" + +typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *)); + +httpd_cgifunction httpd_cgi(char *name); + +struct httpd_cgi_call { + const char *name; + const httpd_cgifunction function; +}; + +/** + * \brief HTTPD CGI function declaration + * \param name The C variable name of the function + * \param str The string name of the function, used in the script file + * \param function A pointer to the function that implements it + * + * This macro is used for declaring a HTTPD CGI + * function. This function is then added to the list of + * HTTPD CGI functions with the httpd_cgi_add() function. + * + * \hideinitializer + */ +#define HTTPD_CGI_CALL(name, str, function) \ +static PT_THREAD(function(struct httpd_state *, char *)); \ +static const struct httpd_cgi_call name = {str, function} + +void httpd_cgi_init(void); +#endif /* __HTTPD_CGI_H__ */ + +/** @} */ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.c b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.c new file mode 100644 index 000000000..dc4aef011 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ + +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-fsdata.h" + +#ifndef NULL +#define NULL 0 +#endif /* NULL */ + +#include "httpd-fsdata.c" + +#if HTTPD_FS_STATISTICS +static u16_t count[HTTPD_FS_NUMFILES]; +#endif /* HTTPD_FS_STATISTICS */ + +/*-----------------------------------------------------------------------------------*/ +static u8_t +httpd_fs_strcmp(const char *str1, const char *str2) +{ + u8_t i; + i = 0; + loop: + + if(str2[i] == 0 || + str1[i] == '\r' || + str1[i] == '\n') { + return 0; + } + + if(str1[i] != str2[i]) { + return 1; + } + + + ++i; + goto loop; +} +/*-----------------------------------------------------------------------------------*/ +int +httpd_fs_open(const char *name, struct httpd_fs_file *file) +{ +#if HTTPD_FS_STATISTICS + u16_t i = 0; +#endif /* HTTPD_FS_STATISTICS */ + struct httpd_fsdata_file_noconst *f; + + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + file->data = f->data; + file->len = f->len; +#if HTTPD_FS_STATISTICS + ++count[i]; +#endif /* HTTPD_FS_STATISTICS */ + return 1; + } +#if HTTPD_FS_STATISTICS + ++i; +#endif /* HTTPD_FS_STATISTICS */ + + } + return 0; +} +/*-----------------------------------------------------------------------------------*/ +void +httpd_fs_init(void) +{ +#if HTTPD_FS_STATISTICS + u16_t i; + for(i = 0; i < HTTPD_FS_NUMFILES; i++) { + count[i] = 0; + } +#endif /* HTTPD_FS_STATISTICS */ +} +/*-----------------------------------------------------------------------------------*/ +#if HTTPD_FS_STATISTICS +u16_t httpd_fs_count +(char *name) +{ + struct httpd_fsdata_file_noconst *f; + u16_t i; + + i = 0; + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + return count[i]; + } + ++i; + } + return 0; +} +#endif /* HTTPD_FS_STATISTICS */ +/*-----------------------------------------------------------------------------------*/ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.h b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.h new file mode 100644 index 000000000..b594eea56 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FS_H__ +#define __HTTPD_FS_H__ + +#define HTTPD_FS_STATISTICS 1 + +struct httpd_fs_file { + char *data; + int len; +}; + +/* file must be allocated by caller and will be filled in + by the function. */ +int httpd_fs_open(const char *name, struct httpd_fs_file *file); + +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 +u16_t httpd_fs_count(char *name); +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ + +void httpd_fs_init(void); + +#endif /* __HTTPD_FS_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/404.html b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/404.html new file mode 100644 index 000000000..43e7f4cad --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/404.html @@ -0,0 +1,8 @@ + + +

+

404 - file not found

+

Go here instead.

+
+ + \ No newline at end of file diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.html b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.html new file mode 100644 index 000000000..1d3bbeee1 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.html @@ -0,0 +1,13 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Loading index.shtml. Click here if not automatically redirected. + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml new file mode 100644 index 000000000..1923ea762 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml @@ -0,0 +1,20 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Task statistics

+Page will refresh every 2 seconds.

+

Task          State  Priority  Stack	#
************************************************
+%! rtos-stats +
+
+ + + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml new file mode 100644 index 000000000..07554bb71 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml @@ -0,0 +1,28 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+LED and LCD IO
+ +

+ +Use the check box to turn on or off the LED, enter text to display on the OLED display, then click "Update IO". + + +

+
+%! led-io +

+ + +

+ + + + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml new file mode 100644 index 000000000..d762f40d8 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml @@ -0,0 +1,41 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Network statistics

+
LocalRemoteStateRetransmissionsTimerFlags
%d%u.%u.%u.%u:%u%s%u%u%c %c
+
+IP           Packets dropped
+             Packets received
+             Packets sent
+IP errors    IP version/header length
+             IP length, high byte
+             IP length, low byte
+             IP fragments
+             Header checksum
+             Wrong protocol
+ICMP	     Packets dropped
+             Packets received
+             Packets sent
+             Type errors
+TCP          Packets dropped
+             Packets received
+             Packets sent
+             Checksum errors
+             Data packets without ACKs
+             Resets
+             Retransmissions
+	     No connection avaliable
+	     Connection attempts to closed ports
+
%! net-stats
+
+ + + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml new file mode 100644 index 000000000..654d61f21 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml @@ -0,0 +1,21 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+
+

Network connections

+

+ + +%! tcp-connections + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.c b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.c new file mode 100644 index 000000000..a7fcfab5a --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.c @@ -0,0 +1,470 @@ +static const unsigned char data_404_html[] = { + /* /404.html */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0x20, 0x20, + 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, + 0x22, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, + 0x34, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, + 0x68, 0x31, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, + 0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, + 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, + 0x33, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, + 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0}; + +static const unsigned char data_index_html[] = { + /* /index.html */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, + 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, + 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, + 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, + 0x31, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, + 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, + 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x4c, 0x6f, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x2e, 0x20, 0x20, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, + 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x3c, + 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, + 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0}; + +static const unsigned char data_index_shtml[] = { + /* /index.shtml */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, + 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, + 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, + 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, + 0x32, 0x30, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, + 0x66, 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, + 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, + 0x54, 0x4f, 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, + 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, + 0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, + 0x68, 0x72, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x54, 0x61, + 0x73, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, + 0x50, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, + 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x20, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, + 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, + 0x22, 0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x22, 0x3e, + 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x20, 0x20, 0x53, 0x74, 0x61, 0x63, + 0x6b, 0x9, 0x23, 0x3c, 0x62, 0x72, 0x3e, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72, 0x3e, 0xd, + 0xa, 0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d, 0x73, + 0x74, 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, 0x70, 0x72, + 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, + 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, + 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, +0}; + +static const unsigned char data_io_shtml[] = { + /* /io.shtml */ + 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x3e, 0x4c, 0x45, 0x44, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x4c, 0x43, 0x44, 0x20, 0x49, 0x4f, + 0x3c, 0x2f, 0x62, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, + 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x55, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x20, 0x74, 0x6f, 0x20, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f, 0x72, + 0x20, 0x6f, 0x66, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, + 0x45, 0x44, 0x2c, 0x20, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x4f, 0x4c, 0x45, 0x44, 0x20, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, + 0x6e, 0x20, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x22, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x49, 0x4f, 0x22, 0x2e, + 0xd, 0xa, 0xd, 0xa, 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, + 0xa, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x22, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x69, + 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, + 0x22, 0x3e, 0xd, 0xa, 0x25, 0x21, 0x20, 0x6c, 0x65, 0x64, + 0x2d, 0x69, 0x6f, 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, + 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x20, 0x49, 0x4f, 0x22, 0x3e, 0xd, + 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0xd, 0xa, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, + 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, + 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, + 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0}; + +static const unsigned char data_stats_shtml[] = { + /* /stats.shtml */ + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, + 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, + 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, + 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, + 0x66, 0x74, 0x22, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, + 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, + 0xd, 0xa, 0x49, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, + 0x49, 0x50, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, + 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xd, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x2c, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, + 0x74, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6c, 0x6f, + 0x77, 0x20, 0x62, 0x79, 0x74, 0x65, 0xd, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x49, 0x50, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x57, 0x72, + 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0xd, 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xd, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0xd, 0xa, 0x54, 0x43, 0x50, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, + 0x70, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, + 0x74, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, + 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x43, 0x4b, + 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x73, 0x65, + 0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, + 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, + 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, + 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, + 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25, 0x21, 0x20, 0x6e, 0x65, + 0x74, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, + 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0}; + +static const unsigned char data_tcp_shtml[] = { + /* /tcp.shtml */ + 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, 0x3c, + 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, 0x3c, + 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, + 0x3e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, + 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, + 0x6d, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, + 0x68, 0x3e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xd, 0xa, 0x25, + 0x21, 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xd, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, + 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, + 0xa, 0xd, 0xa, 0}; + +const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}}; + +const struct httpd_fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}}; + +const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13}}; + +const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10}}; + +const struct httpd_fsdata_file file_stats_shtml[] = {{file_io_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}}; + +const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}}; + +#define HTTPD_FS_ROOT file_tcp_shtml + +#define HTTPD_FS_NUMFILES 6 diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.h b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.h new file mode 100644 index 000000000..52d35c265 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd-fsdata.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FSDATA_H__ +#define __HTTPD_FSDATA_H__ + +#include "uip.h" + +struct httpd_fsdata_file { + const struct httpd_fsdata_file *next; + const char *name; + const char *data; + const int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +struct httpd_fsdata_file_noconst { + struct httpd_fsdata_file *next; + char *name; + char *data; + int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +#endif /* __HTTPD_FSDATA_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.c b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.c new file mode 100644 index 000000000..644cf16b7 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.c @@ -0,0 +1,346 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup httpd Web server + * @{ + * The uIP web server is a very simplistic implementation of an HTTP + * server. It can serve web pages and files from a read-only ROM + * filesystem, and provides a very small scripting language. + + */ + +/** + * \file + * Web server + * \author + * Adam Dunkels + */ + + +/* + * Copyright (c) 2004, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $ + */ + +#include "uip.h" +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-cgi.h" +#include "http-strings.h" + +#include + +#define STATE_WAITING 0 +#define STATE_OUTPUT 1 + +#define ISO_nl 0x0a +#define ISO_space 0x20 +#define ISO_bang 0x21 +#define ISO_percent 0x25 +#define ISO_period 0x2e +#define ISO_slash 0x2f +#define ISO_colon 0x3a + + +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_part_of_file(void *state) +{ + struct httpd_state *s = (struct httpd_state *)state; + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + memcpy(uip_appdata, s->file.data, s->len); + + return s->len; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + do { + PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s); + s->file.len -= s->len; + s->file.data += s->len; + } while(s->file.len > 0); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_part_of_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND(&s->sout, s->file.data, s->len); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static void +next_scriptstate(struct httpd_state *s) +{ + char *p; + p = strchr(s->scriptptr, ISO_nl) + 1; + s->scriptlen -= (unsigned short)(p - s->scriptptr); + s->scriptptr = p; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_script(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->scriptpt); + + + while(s->file.len > 0) { + + /* Check if we should start executing a script. */ + if(*s->file.data == ISO_percent && + *(s->file.data + 1) == ISO_bang) { + s->scriptptr = s->file.data + 3; + s->scriptlen = s->file.len - 3; + if(*(s->scriptptr - 1) == ISO_colon) { + httpd_fs_open(s->scriptptr + 1, &s->file); + PT_WAIT_THREAD(&s->scriptpt, send_file(s)); + } else { + PT_WAIT_THREAD(&s->scriptpt, + httpd_cgi(s->scriptptr)(s, s->scriptptr)); + } + next_scriptstate(s); + + /* The script is over, so we reset the pointers and continue + sending the rest of the file. */ + s->file.data = s->scriptptr; + s->file.len = s->scriptlen; + } else { + /* See if we find the start of script marker in the block of HTML + to be sent. */ + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + + if(*s->file.data == ISO_percent) { + ptr = strchr(s->file.data + 1, ISO_percent); + } else { + ptr = strchr(s->file.data, ISO_percent); + } + if(ptr != NULL && + ptr != s->file.data) { + s->len = (int)(ptr - s->file.data); + if(s->len >= uip_mss()) { + s->len = uip_mss(); + } + } + PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s)); + s->file.data += s->len; + s->file.len -= s->len; + + } + } + + PT_END(&s->scriptpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr)) +{ + char *ptr; + + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND_STR(&s->sout, statushdr); + + ptr = strrchr(s->filename, ISO_period); + if(ptr == NULL) { + PSOCK_SEND_STR(&s->sout, http_content_type_binary); + } else if(strncmp(http_html, ptr, 5) == 0 || + strncmp(http_shtml, ptr, 6) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_html); + } else if(strncmp(http_css, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_css); + } else if(strncmp(http_png, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_png); + } else if(strncmp(http_gif, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_gif); + } else if(strncmp(http_jpg, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_jpg); + } else { + PSOCK_SEND_STR(&s->sout, http_content_type_plain); + } + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_output(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->outputpt); + + if(!httpd_fs_open(s->filename, &s->file)) { + httpd_fs_open(http_404_html, &s->file); + strcpy(s->filename, http_404_html); + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_404)); + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_200)); + ptr = strchr(s->filename, ISO_period); + if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) { + PT_INIT(&s->scriptpt); + PT_WAIT_THREAD(&s->outputpt, handle_script(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } + } + PSOCK_CLOSE(&s->sout); + PT_END(&s->outputpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_input(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sin); + + PSOCK_READTO(&s->sin, ISO_space); + + + if(strncmp(s->inputbuf, http_get, 4) != 0) { + PSOCK_CLOSE_EXIT(&s->sin); + } + PSOCK_READTO(&s->sin, ISO_space); + + if(s->inputbuf[0] != ISO_slash) { + PSOCK_CLOSE_EXIT(&s->sin); + } + + if(s->inputbuf[1] == ISO_space) { + strncpy(s->filename, http_index_html, sizeof(s->filename)); + } else { + + s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0; + + /* Process any form input being sent to the server. */ + { + extern void vApplicationProcessFormInput( char *pcInputString, long xInputLength ); + vApplicationProcessFormInput( s->inputbuf, PSOCK_DATALEN(&s->sin) ); + } + + strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename)); + } + + /* httpd_log_file(uip_conn->ripaddr, s->filename);*/ + + s->state = STATE_OUTPUT; + + while(1) { + PSOCK_READTO(&s->sin, ISO_nl); + + if(strncmp(s->inputbuf, http_referer, 8) == 0) { + s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0; + /* httpd_log(&s->inputbuf[9]);*/ + } + } + + PSOCK_END(&s->sin); +} +/*---------------------------------------------------------------------------*/ +static void +handle_connection(struct httpd_state *s) +{ + handle_input(s); + if(s->state == STATE_OUTPUT) { + handle_output(s); + } +} +/*---------------------------------------------------------------------------*/ +void +httpd_appcall(void) +{ + struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate); + + if(uip_closed() || uip_aborted() || uip_timedout()) { + } else if(uip_connected()) { + PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1); + PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1); + PT_INIT(&s->outputpt); + s->state = STATE_WAITING; + /* timer_set(&s->timer, CLOCK_SECOND * 100);*/ + s->timer = 0; + handle_connection(s); + } else if(s != NULL) { + if(uip_poll()) { + ++s->timer; + if(s->timer >= 20) { + uip_abort(); + } + } else { + s->timer = 0; + } + handle_connection(s); + } else { + uip_abort(); + } +} +/*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the web server + * + * This function initializes the web server and should be + * called at system boot-up. + */ +void +httpd_init(void) +{ + uip_listen(HTONS(80)); +} +/*---------------------------------------------------------------------------*/ +/** @} */ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.h b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.h new file mode 100644 index 000000000..7f7a6666e --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/httpd.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2001-2005, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_H__ +#define __HTTPD_H__ + +#include "psock.h" +#include "httpd-fs.h" + +struct httpd_state { + unsigned char timer; + struct psock sin, sout; + struct pt outputpt, scriptpt; + char inputbuf[50]; + char filename[20]; + char state; + struct httpd_fs_file file; + int len; + char *scriptptr; + int scriptlen; + + unsigned short count; +}; + +void httpd_init(void); +void httpd_appcall(void); + +void httpd_log(char *msg); +void httpd_log_file(u16_t *requester, char *file); + +#endif /* __HTTPD_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makefsdata b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makefsdata new file mode 100644 index 000000000..8d2715a8a --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makefsdata @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +open(OUTPUT, "> httpd-fsdata.c"); + +chdir("httpd-fs"); + +opendir(DIR, "."); +@files = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); +closedir(DIR); + +foreach $file (@files) { + + if(-d $file && $file !~ /^\./) { + print "Processing directory $file\n"; + opendir(DIR, $file); + @newfiles = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); + closedir(DIR); + printf "Adding files @newfiles\n"; + @files = (@files, map { $_ = "$file/$_" } @newfiles); + next; + } +} + +foreach $file (@files) { + if(-f $file) { + + print "Adding file $file\n"; + + open(FILE, $file) || die "Could not open file $file\n"; + + $file =~ s-^-/-; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + # for AVR, add PROGMEM here + print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); + print(OUTPUT "\t/* $file */\n\t"); + for($j = 0; $j < length($file); $j++) { + printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1))); + } + printf(OUTPUT "0,\n"); + + + $i = 0; + while(read(FILE, $data, 1)) { + if($i == 0) { + print(OUTPUT "\t"); + } + printf(OUTPUT "%#02x, ", unpack("C", $data)); + $i++; + if($i == 10) { + print(OUTPUT "\n"); + $i = 0; + } + } + print(OUTPUT "0};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@pfiles, $file); + } +} + +for($i = 0; $i < @fvars; $i++) { + $file = $pfiles[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, "); + print(OUTPUT "data$fvar + ". (length($file) + 1) .", "); + print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n"); +} + +print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n"); diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makestrings b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makestrings new file mode 100644 index 000000000..8a13c6d29 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "};\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("http-strings"); + +exit 0; + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uIP_Task.c b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uIP_Task.c new file mode 100644 index 000000000..d63753f25 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uIP_Task.c @@ -0,0 +1,305 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ +/* Standard includes. */ +#include + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" +#include "semphr.h" + +#include "lcd_message.h" + +/* uip includes. */ +#include "hw_types.h" + +#include "uip.h" +#include "uip_arp.h" +#include "httpd.h" +#include "timer.h" +#include "clock-arch.h" +#include "hw_ethernet.h" +#include "ethernet.h" +#include "hw_memmap.h" +#include "lmi_flash.h" +#include "sysctl.h" + +/* Demo includes. */ +#include "emac.h" +#include "partest.h" + +/*-----------------------------------------------------------*/ + +/* IP address configuration. */ +#define uipIP_ADDR0 172 +#define uipIP_ADDR1 25 +#define uipIP_ADDR2 218 +#define uipIP_ADDR3 19 + +/* How long to wait before attempting to connect the MAC again. */ +#define uipINIT_WAIT 100 + +/* Shortcut to the header within the Rx buffer. */ +#define xHeader ((struct uip_eth_hdr *) &uip_buf[ 0 ]) + +/* Standard constant. */ +#define uipTOTAL_FRAME_HEADER_SIZE 54 + +/*-----------------------------------------------------------*/ + +/* + * Send the uIP buffer to the MAC. + */ +static void prvENET_Send(void); + +/* + * Setup the MAC address in the MAC itself, and in the uIP stack. + */ +static void prvSetMACAddress( void ); + +/* + * Port functions required by the uIP stack. + */ +void clock_init( void ); +clock_time_t clock_time( void ); + +/*-----------------------------------------------------------*/ + +/* The semaphore used by the ISR to wake the uIP task. */ +extern xSemaphoreHandle xEMACSemaphore; + +/*-----------------------------------------------------------*/ + +void clock_init(void) +{ + /* This is done when the scheduler starts. */ +} +/*-----------------------------------------------------------*/ + +clock_time_t clock_time( void ) +{ + return xTaskGetTickCount(); +} + + +void vuIP_Task( void *pvParameters ) +{ +portBASE_TYPE i; +uip_ipaddr_t xIPAddr; +struct timer periodic_timer, arp_timer; +extern void ( vEMAC_ISR )( void ); + + /* Enable/Reset the Ethernet Controller */ + SysCtlPeripheralEnable( SYSCTL_PERIPH_ETH ); + SysCtlPeripheralReset( SYSCTL_PERIPH_ETH ); + + /* Create the semaphore used by the ISR to wake this task. */ + vSemaphoreCreateBinary( xEMACSemaphore ); + + /* Initialise the uIP stack. */ + timer_set( &periodic_timer, configTICK_RATE_HZ / 2 ); + timer_set( &arp_timer, configTICK_RATE_HZ * 10 ); + uip_init(); + uip_ipaddr( xIPAddr, uipIP_ADDR0, uipIP_ADDR1, uipIP_ADDR2, uipIP_ADDR3 ); + uip_sethostaddr( xIPAddr ); + httpd_init(); + + while( vInitEMAC() != pdPASS ) + { + vTaskDelay( uipINIT_WAIT ); + } + prvSetMACAddress(); + + + for( ;; ) + { + /* Is there received data ready to be processed? */ + uip_len = uiGetEMACRxData( uip_buf ); + + if( uip_len > 0 ) + { + /* Standard uIP loop taken from the uIP manual. */ + + if( xHeader->type == htons( UIP_ETHTYPE_IP ) ) + { + uip_arp_ipin(); + uip_input(); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + uip_arp_out(); + prvENET_Send(); + } + } + else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) ) + { + uip_arp_arpin(); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + prvENET_Send(); + } + } + } + else + { + if( timer_expired( &periodic_timer ) ) + { + timer_reset( &periodic_timer ); + for( i = 0; i < UIP_CONNS; i++ ) + { + uip_periodic( i ); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + uip_arp_out(); + prvENET_Send(); + } + } + + /* Call the ARP timer function every 10 seconds. */ + if( timer_expired( &arp_timer ) ) + { + timer_reset( &arp_timer ); + uip_arp_timer(); + } + } + else + { + /* We did not receive a packet, and there was no periodic + processing to perform. Block for a fixed period. If a packet + is received during this period we will be woken by the ISR + giving us the Semaphore. */ + xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 2 ); + } + } + } +} +/*-----------------------------------------------------------*/ + +static void prvENET_Send(void) +{ + vInitialiseSend(); + vIncrementTxLength( uip_len ); + vSendBufferToMAC(); +} +/*-----------------------------------------------------------*/ + +static void prvSetMACAddress( void ) +{ +unsigned portLONG ulUser0, ulUser1; +unsigned char pucMACArray[8]; +struct uip_eth_addr xAddr; + + /* Get the device MAC address from flash */ + FlashUserGet(&ulUser0, &ulUser1); + + /* Convert the MAC address from flash into sequence of bytes. */ + pucMACArray[0] = ((ulUser0 >> 0) & 0xff); + pucMACArray[1] = ((ulUser0 >> 8) & 0xff); + pucMACArray[2] = ((ulUser0 >> 16) & 0xff); + pucMACArray[3] = ((ulUser1 >> 0) & 0xff); + pucMACArray[4] = ((ulUser1 >> 8) & 0xff); + pucMACArray[5] = ((ulUser1 >> 16) & 0xff); + + /* Program the MAC address. */ + EthernetMACAddrSet(ETH_BASE, pucMACArray); + + xAddr.addr[ 0 ] = pucMACArray[0]; + xAddr.addr[ 1 ] = pucMACArray[1]; + xAddr.addr[ 2 ] = pucMACArray[2]; + xAddr.addr[ 3 ] = pucMACArray[3]; + xAddr.addr[ 4 ] = pucMACArray[4]; + xAddr.addr[ 5 ] = pucMACArray[5]; + uip_setethaddr( xAddr ); +} +/*-----------------------------------------------------------*/ + +void vApplicationProcessFormInput( portCHAR *pcInputString, portBASE_TYPE xInputLength ) +{ +char *c, *pcText; +static portCHAR cMessageForDisplay[ 32 ]; +extern xQueueHandle xOLEDQueue; +xOLEDMessage xOLEDMessage; + + /* Process the form input sent by the IO page of the served HTML. */ + + c = strstr( pcInputString, "?" ); + + if( c ) + { + /* Turn LED's on or off in accordance with the check box status. */ + if( strstr( c, "LED0=1" ) != NULL ) + { + vParTestSetLED( 0, 1 ); + } + else + { + vParTestSetLED( 0, 0 ); + } + + /* Find the start of the text to be displayed on the LCD. */ + pcText = strstr( c, "LCD=" ); + pcText += strlen( "LCD=" ); + + /* Terminate the file name for further processing within uIP. */ + *c = 0x00; + + /* Terminate the LCD string. */ + c = strstr( pcText, " " ); + if( c != NULL ) + { + *c = 0x00; + } + + /* Add required spaces. */ + while( ( c = strstr( pcText, "+" ) ) != NULL ) + { + *c = ' '; + } + + /* Write the message to the LCD. */ + strcpy( cMessageForDisplay, pcText ); + xOLEDMessage.pcMessage = cMessageForDisplay; + xQueueSend( xOLEDQueue, &xOLEDMessage, portMAX_DELAY ); + } +} + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uip-conf.h b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uip-conf.h new file mode 100644 index 000000000..664077d89 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/uip-conf.h @@ -0,0 +1,159 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 40 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 1500 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 0 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/*#include "smtp.h"*/ +/*#include "hello-world.h"*/ +/*#include "telnetd.h"*/ +#include "webserver.h" +/*#include "dhcpc.h"*/ +/*#include "resolv.h"*/ +/*#include "webclient.h"*/ + +#define UIP_CONF_EXTERNAL_BUFFER + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/webserver.h b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/webserver.h new file mode 100644 index 000000000..1acb290b8 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/webserver.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ +#ifndef __WEBSERVER_H__ +#define __WEBSERVER_H__ + +#include "httpd.h" + +typedef struct httpd_state uip_tcp_appstate_t; +/* UIP_APPCALL: the name of the application function. This function + must return void and take no arguments (i.e., C type "void + appfunc(void)"). */ +#ifndef UIP_APPCALL +#define UIP_APPCALL httpd_appcall +#endif + + +#endif /* __WEBSERVER_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232.cfg b/Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232.cfg new file mode 100644 index 000000000..8f2b3ed1e --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232.cfg @@ -0,0 +1,28 @@ +#daemon configuration +telnet_port 4444 +gdb_port 3333 + +#interface +interface ft2232 +ft2232_device_desc "Stellaris Evaluation Board A" +ft2232_layout evb_lm3s811 +ft2232_vid_pid 0x0403 0xbcd9 +jtag_speed 40 +#LM3S811 Evaluation Board has only srst +reset_config srst_only separate + +#jtag scan chain +#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) +jtag_device 4 0x1 0xf 0xe + +#target configuration +daemon_startup attach +#target +#target arm7tdmi +target cortex_m3 little run_and_halt 0 +# 4k working area at base of ram +working_area 0 0x20000800 0x1200 nobackup +#target_script 0 reset ../doc/scripts/evb_lm3s811_test.script + +#flash configuration +flash bank stellaris 0 0 0 0 0 diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232_flash.cfg b/Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232_flash.cfg new file mode 100644 index 000000000..28ffaea9e --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/fury_ft2232_flash.cfg @@ -0,0 +1,34 @@ +#daemon configuration +telnet_port 4444 +gdb_port 3333 + +#interface +interface ft2232 +ft2232_device_desc "Stellaris Evaluation Board A" +ft2232_layout evb_lm3s811 +ft2232_vid_pid 0x0403 0xbcd9 +jtag_speed 40 +#LM3S811 Evaluation Board has only srst +reset_config srst_only separate + +#jtag scan chain +#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) +jtag_device 4 0x1 0xf 0xe + +#target configuration +daemon_startup reset +#target +#target arm7tdmi +target cortex_m3 little run_and_init 0 +# 4k working area at base of ram +working_area 0 0x20000800 0x1200 nobackup +#target_script 0 reset ../doc/scripts/evb_lm3s811_test.script + +target_script 0 reset program.script + + +#flash configuration +flash bank stellaris 0 0 0 0 0 + + + diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/program.script b/Demo/CORTEX_LM3Sxxxx_Eclipse/program.script new file mode 100644 index 000000000..314624b33 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_Eclipse/program.script @@ -0,0 +1,17 @@ +halt +sleep 200 +wait_halt +flash probe 0 +#sleep 500 +flash info 0 +#sleep 500 +#flash protect 0 0 31 off +#sleep 500 +flash erase 0 0 255 +sleep 200 +flash write 0 ./RTOSDemo/RTOSDemo.bin 0 +sleep 200 +reset run +shutdown + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/Debug/Obj/RTOSDemo.pbd b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/Debug/Obj/RTOSDemo.pbd new file mode 100644 index 000000000..f8e33063b --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/Debug/Obj/RTOSDemo.pbd @@ -0,0 +1,32 @@ +This is an internal working file generated by the Source Browser. +20:38 47s +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\BlockQ.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\GenQTest.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\ParTest.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\PollQ.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\QPeek.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\blocktim.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\death.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\emac.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\flash.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\heap_2.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\http-strings.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\httpd-cgi.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\httpd-fs.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\httpd.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\integer.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\list.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\main.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\osram128x64x4.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\port.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\psock.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\queue.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\rit128x96x4.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\semtest.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\startup_ewarm.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\tasks.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\timer.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\timertest.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\uIP_Task.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\uip.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\CORTEX_LM3Sxxxx_IAR_Keil\Debug\Obj\uip_arp.pbi diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h new file mode 100644 index 000000000..5bb21603a --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h @@ -0,0 +1,81 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + + Also see http://www.SafeRTOS.com for an IEC 61508 compliant version along + with commercial development and support options. + *************************************************************************** +*/ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 1 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 1 +#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 50000000 ) +#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 70 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24000 ) ) +#define configMAX_TASK_NAME_LEN ( 12 ) +#define configUSE_TRACE_FACILITY 1 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 0 +#define configUSE_CO_ROUTINES 0 +#define configUSE_MUTEXES 1 + +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 ) +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ + +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 + + +#define configKERNEL_INTERRUPT_PRIORITY 255 + + +#endif /* FREERTOS_CONFIG_H */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/ParTest/ParTest.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/ParTest/ParTest.c new file mode 100644 index 000000000..3ef97995b --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/ParTest/ParTest.c @@ -0,0 +1,83 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + + Also see http://www.SafeRTOS.com for an IEC 61508 compliant version along + with commercial development and support options. + *************************************************************************** +*/ + +/*----------------------------------------------------------- + * Simple parallel port IO routines. + *-----------------------------------------------------------*/ + +/* +*/ + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Demo includes. */ +#include "partest.h" + +/* Library includes. */ +#include "hw_types.h" +#include "gpio.h" +#include "hw_memmap.h" + + +/*-----------------------------------------------------------*/ + +void vParTestInitialise( void ) +{ + GPIODirModeSet( GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_DIR_MODE_OUT ); + GPIOPadConfigSet( GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD ); + GPIOPinWrite( GPIO_PORTF_BASE, GPIO_PIN_0, 0 ); +} +/*-----------------------------------------------------------*/ + +void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue ) +{ + /* There is only one LED. */ + ( void ) uxLED; + + GPIOPinWrite( GPIO_PORTF_BASE, GPIO_PIN_0, xValue ); +} +/*-----------------------------------------------------------*/ + +unsigned portBASE_TYPE uxParTestGetLED( unsigned portBASE_TYPE uxLED ) +{ + /* There is only one LED. */ + ( void ) uxLED; + + return GPIOPinRead( GPIO_PORTF_BASE, GPIO_PIN_0 ); +} + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Opt b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Opt new file mode 100644 index 000000000..0302df76b --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Opt @@ -0,0 +1,73 @@ +### uVision2 Project, (C) Keil Software +### Do not modify ! + + cExt (*.c) + aExt (*.s*; *.src; *.a*) + oExt (*.obj) + lExt (*.lib) + tExt (*.txt; *.h; *.inc) + pExt (*.plm) + CppX (*.cpp) + DaveTm { 0,0,0,0,0,0,0,0 } + +Target (FreeRTOS_Demo), 0x0004 // Tools: 'ARM-ADS' +GRPOPT 1,(Demo_Source),0,0,0 +GRPOPT 2,(Libraries),0,0,0 +GRPOPT 3,(RTOS_Source),0,0,0 +GRPOPT 4,(uIP_Source),0,0,0 + +OPTFFF 1,1,1,0,0,0,0,0,<..\Common\Minimal\BlockQ.c> +OPTFFF 1,2,1,0,0,0,0,0,<..\Common\Minimal\blocktim.c> +OPTFFF 1,3,1,0,0,0,0,0,<..\Common\Minimal\death.c> +OPTFFF 1,4,1,0,0,0,0,0,<..\Common\Minimal\integer.c> +OPTFFF 1,5,1,2,0,1,1,0,<.\main.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,110,0,0,0,115,0,0,0,248,3,0,0,22,2,0,0 } +OPTFFF 1,6,1,0,0,0,0,0,<.\ParTest\ParTest.c> +OPTFFF 1,7,1,0,0,0,0,0,<..\Common\Minimal\PollQ.c> +OPTFFF 1,8,1,0,0,0,0,0,<..\Common\Minimal\semtest.c> +OPTFFF 1,9,2,0,0,0,0,0,<.\startup_rvmdk.S> +OPTFFF 1,10,1,0,0,0,0,0,<.\timertest.c> +OPTFFF 1,11,5,0,0,0,0,0,<.\FreeRTOSConfig.h> +OPTFFF 1,12,1,0,0,0,0,0,<..\Common\Minimal\GenQTest.c> +OPTFFF 1,13,1,0,0,0,0,0,<..\Common\Minimal\QPeek.c> +OPTFFF 2,14,1,0,0,0,0,0,<.\rit128x96x4.c> +OPTFFF 2,15,1,0,0,0,0,0,<.\osram128x64x4.c> +OPTFFF 2,16,4,0,0,0,0,0,<..\Common\drivers\LuminaryMicro\Keil\driverlib.lib> +OPTFFF 3,17,1,0,0,0,0,0,<..\..\Source\tasks.c> +OPTFFF 3,18,1,0,0,0,0,0,<..\..\Source\list.c> +OPTFFF 3,19,1,0,0,0,0,0,<..\..\Source\queue.c> +OPTFFF 3,20,1,0,0,0,0,0,<..\..\Source\portable\RVDS\ARM_CM3\port.c> +OPTFFF 3,21,1,0,0,0,0,0,<..\..\Source\portable\MemMang\heap_2.c> +OPTFFF 4,22,1,822083584,0,0,0,0,<.\webserver\uIP_Task.c> +OPTFFF 4,23,1,218103808,0,0,0,0,<.\webserver\emac.c> +OPTFFF 4,24,1,0,0,0,0,0,<.\webserver\httpd.c> +OPTFFF 4,25,1,0,0,0,0,0,<.\webserver\httpd-cgi.c> +OPTFFF 4,26,1,0,0,0,0,0,<.\webserver\httpd-fs.c> +OPTFFF 4,27,1,0,0,0,0,0,<.\webserver\http-strings.c> +OPTFFF 4,28,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c> +OPTFFF 4,29,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\psock.c> +OPTFFF 4,30,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\timer.c> +OPTFFF 4,31,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\uip.c> + + +TARGOPT 1, (FreeRTOS_Demo) + ADSCLK=8000000 + OPTTT 1,1,1,0 + OPTHX 1,65535,0,0,0 + OPTLX 79,66,8,<.\rvmdk\> + OPTOX 16 + OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 + OPTXL 1,1,1,1,1,1,1,0,0 + OPTFL 1,0,1 + OPTAX 255 + OPTBL 0,(Data Sheet) + OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S6965)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S6965) + OPTDBG 48126,3,()()()()()()()()()() (BIN\lmidk-agdi.dll)()()() + OPTKEY 0,(DLGTARM)((1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1014=-1,-1,-1,-1,0)(1016=-1,-1,-1,-1,0)) + OPTKEY 0,(ARMDBGFLAGS)() + OPTKEY 0,(lmidk-agdi)(-B0 -O1792) + OPTMM 1,2,(0) + OPTDF 0x84 + OPTLE <> + OPTLC <> +EndOpt + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Uv2 b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Uv2 new file mode 100644 index 000000000..6ea95c4a5 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.Uv2 @@ -0,0 +1,132 @@ +### uVision2 Project, (C) Keil Software +### Do not modify ! + +Target (FreeRTOS_Demo), 0x0004 // Tools: 'ARM-ADS' + +Group (Demo_Source) +Group (Libraries) +Group (RTOS_Source) +Group (uIP_Source) + +File 1,1,<..\Common\Minimal\BlockQ.c> 0x46AC3C5D +File 1,1,<..\Common\Minimal\blocktim.c> 0x46AC3C5D +File 1,1,<..\Common\Minimal\death.c> 0x46ADD531 +File 1,1,<..\Common\Minimal\integer.c> 0x46AC3C5A +File 1,1,<.\main.c> 0x46D709ED +File 1,1,<.\ParTest\ParTest.c> 0x46AC3C69 +File 1,1,<..\Common\Minimal\PollQ.c> 0x46AC3C59 +File 1,1,<..\Common\Minimal\semtest.c> 0x46AC3C59 +File 1,2,<.\startup_rvmdk.S> 0x466462F2 +File 1,1,<.\timertest.c> 0x46D705A3 +File 1,5,<.\FreeRTOSConfig.h> 0x46D70622 +File 1,1,<..\Common\Minimal\GenQTest.c> 0x46CB0603 +File 1,1,<..\Common\Minimal\QPeek.c> 0x46CDED45 +File 2,1,<.\rit128x96x4.c> 0x46D28D06 +File 2,1,<.\osram128x64x4.c> 0x46644906 +File 2,4,<..\Common\drivers\LuminaryMicro\Keil\driverlib.lib> 0x46BC6EE4 +File 3,1,<..\..\Source\tasks.c> 0x46CEC127 +File 3,1,<..\..\Source\list.c> 0x46AC3BCE +File 3,1,<..\..\Source\queue.c> 0x46D2EA0D +File 3,1,<..\..\Source\portable\RVDS\ARM_CM3\port.c> 0x46AC3CA9 +File 3,1,<..\..\Source\portable\MemMang\heap_2.c> 0x46AC3C8D +File 4,1,<.\webserver\uIP_Task.c> 0x46D71230 +File 4,1,<.\webserver\emac.c> 0x46D712B5 +File 4,1,<.\webserver\httpd.c> 0x461135EB +File 4,1,<.\webserver\httpd-cgi.c> 0x46515375 +File 4,1,<.\webserver\httpd-fs.c> 0x4560E5F3 +File 4,1,<.\webserver\http-strings.c> 0x4560E5F3 +File 4,1,<..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c> 0x46516ADA +File 4,1,<..\Common\ethernet\uIP\uip-1.0\uip\psock.c> 0x4560E5E6 +File 4,1,<..\Common\ethernet\uIP\uip-1.0\uip\timer.c> 0x4560E5E6 +File 4,1,<..\Common\ethernet\uIP\uip-1.0\uip\uip.c> 0x46CEF877 + + +Options 1,0,0 // Target 'FreeRTOS_Demo' + Device (LM3S6965) + Vendor (Luminary Micro) + Cpu (IRAM(0x20000000-0x2000FFFF) IROM(0-0x3FFFF) CLOCK(6000000) CPUTYPE("Cortex-M3")) + FlashUt () + StupF ("STARTUP\Luminary\Startup.s" ("Luminary Startup Code")) + FlashDR (UL2CM3(-UU0101L5E -O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0LM3S_256 -FS00 -FL040000)) + DevID (4337) + Rgf (LM3Sxxxx.H) + Mem () + C () + A () + RL () + OH () + DBC_IFX () + DBC_CMS () + DBC_AMS () + DBC_LMS () + UseEnv=0 + EnvBin () + EnvInc () + EnvLib () + EnvReg (ÿLuminary\) + OrgReg (ÿLuminary\) + TgStat=16 + OutDir (.\rvmdk\) + OutName (RTOSDemo) + GenApp=1 + GenLib=0 + GenHex=0 + Debug=1 + Browse=1 + LstDir (.\rvmdk\) + HexSel=1 + MG32K=0 + TGMORE=0 + RunUsr 0 1 + RunUsr 1 0 <> + BrunUsr 0 0 <> + BrunUsr 1 0 <> + CrunUsr 0 0 <> + CrunUsr 1 0 <> + SVCSID <> + GLFLAGS=1790 + ADSFLGA { 16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ACPUTYP ("Cortex-M3") + ADSTFLGA { 0,12,0,2,99,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0 } + OCMADSOCM { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + OCMADSIRAM { 0,0,0,0,32,0,0,1,0 } + OCMADSIROM { 1,0,0,0,0,0,0,4,0 } + OCMADSXRAM { 0,0,0,0,0,0,0,0,0 } + OCR_RVCT { 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,1,0,0,0,0,0,0,0,0,0,0 } + RV_STAVEC () + ADSCCFLG { 9,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSCMISC (--diag_suppress 191,550,513,167,177,144) + ADSCDEFN (RVDS_ARMCM3_LM3S102, "PACK_STRUCT_END=","ALIGN_STRUCT_END=") + ADSCUDEF () + ADSCINCD (.;.\..\Common\drivers\LuminaryMicro;..\..\Source\portable\RVDS\ARM_CM3;..\..\Source\include;..\Common\include;..\Common\ethernet\uIP\uip-1.0\uip;.\webserver) + ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSAMISC () + ADSADEFN () + ADSAUDEF () + ADSAINCD () + PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + IncBld=1 + AlwaysBuild=0 + GenAsm=0 + AsmAsm=0 + PublicsOnly=0 + StopCode=3 + CustArgs () + LibMods () + ADSLDFG { 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSLDTA (0x00000000) + ADSLDDA (0x20000000) + ADSLDSC () + ADSLDIB () + ADSLDIC () + ADSLDMC (--entry Reset_Handler) + ADSLDIF () + ADSLDDW () + OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S6965)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S6965) + OPTDBG 48126,3,()()()()()()()()()() (BIN\lmidk-agdi.dll)()()() + FLASH1 { 1,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0 } + FLASH2 (BIN\lmidk-agdi.dll) + FLASH3 ("" ()) + FLASH4 () +EndOpt + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.dep b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.dep new file mode 100644 index 000000000..30f1301f2 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.dep @@ -0,0 +1,960 @@ + + + + 2 + 612718357 + + Debug + + $PROJ_DIR$\Debug\Obj\uip_arp.pbi + $PROJ_DIR$\LuminaryDrivers\hw_types.h + $TOOLKIT_DIR$\inc\xencoding_limits.h + $PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\portasm.s + $PROJ_DIR$\FreeRTOSConfig.h + $PROJ_DIR$\LuminaryDrivers\pdc.h + $PROJ_DIR$\webserver\httpd-fs.h + $PROJ_DIR$\startup_ewarm.c + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\hw_sysctl.h + $PROJ_DIR$\Debug\Obj\tasks.pbi + $PROJ_DIR$\Debug\Obj\QPeek.pbi + $PROJ_DIR$\Debug\Obj\psock.pbi + $PROJ_DIR$\Debug\Obj\http-strings.r79 + $PROJ_DIR$\LuminaryDrivers\hw_sysctl.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\debug.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h + $PROJ_DIR$\LuminaryDrivers\sysctl.h + $PROJ_DIR$\webserver\httpd.h + $PROJ_DIR$\Debug\Obj\flash.r79 + $PROJ_DIR$\Debug\Obj\uIP_Task.pbi + $PROJ_DIR$\..\..\Source\list.c + $PROJ_DIR$\LuminaryDrivers\ssi.h + $PROJ_DIR$\webserver\httpd-fs.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + $PROJ_DIR$\webserver\httpd-fsdata.c + $PROJ_DIR$\..\Common\Minimal\semtest.c + $PROJ_DIR$\webserver\httpd-cgi.c + $PROJ_DIR$\Debug\Obj\timer.r79 + $PROJ_DIR$\Debug\Obj\httpd.pbi + $PROJ_DIR$\webserver\uip-conf.h + $PROJ_DIR$\Debug\Obj\BlockQ.r79 + $PROJ_DIR$\Debug\Obj\BlockQ.pbi + $PROJ_DIR$\Debug\Obj\startup_ewarm.r79 + $PROJ_DIR$\webserver\http-strings.h + $PROJ_DIR$\..\..\Source\include\task.h + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + $PROJ_DIR$\Debug\Obj\death.r79 + $PROJ_DIR$\Debug\Obj\heap_2.r79 + $PROJ_DIR$\..\Common\include\semtest.h + $PROJ_DIR$\Debug\Obj\httpd-cgi.r79 + $PROJ_DIR$\Debug\Obj\integer.pbi + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\hw_memmap.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\rit128x96x4.h + $PROJ_DIR$\Debug\Obj\QPeek.r79 + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\ethernet.h + $PROJ_DIR$\Debug\Obj\death.pbi + $TOOLKIT_DIR$\lib\dl7mptnnl8n.r79 + $PROJ_DIR$\timertest.c + $PROJ_DIR$\..\..\Source\include\projdefs.h + $PROJ_DIR$\..\Common\Minimal\PollQ.c + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\sysctl.h + $PROJ_DIR$\Debug\Obj\semtest.pbi + $PROJ_DIR$\..\Common\Minimal\QPeek.c + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\hw_types.h + $PROJ_DIR$\Debug\Obj\emac.r79 + $PROJ_DIR$\webserver\uIP_Task.c + $PROJ_DIR$\..\Common\include\partest.h + $PROJ_DIR$\Debug\Obj\port.pbi + $PROJ_DIR$\lcd_message.h + $PROJ_DIR$\Debug\Obj\heap_2.pbi + $PROJ_DIR$\webserver\httpd.c + $PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\portmacro.h + $PROJ_DIR$\..\Common\include\GenQTest.h + $PROJ_DIR$\webserver\clock-arch.h + $PROJ_DIR$\Debug\Obj\ParTest.pbi + $PROJ_DIR$\LuminaryDrivers\hw_memmap.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h + $PROJ_DIR$\RTOSDemo.xcl + $PROJ_DIR$\bitmap.h + $PROJ_DIR$\LuminaryDrivers\gpio.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\lmi_flash.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\hw_ssi.h + $PROJ_DIR$\rit128x96x4.c + $PROJ_DIR$\..\Common\include\death.h + $PROJ_DIR$\Debug\Obj\rit128x96x4.pbi + $PROJ_DIR$\LuminaryDrivers\pdc.c + $PROJ_DIR$\Debug\Obj\httpd-cgi.pbi + $PROJ_DIR$\..\Common\include\integer.h + $TOOLKIT_DIR$\inc\DLib_Defaults.h + $PROJ_DIR$\..\..\Source\include\portable.h + $TOOLKIT_DIR$\lib\dl7mptnnl8n.h + $PROJ_DIR$\webserver\httpd-fsdata.h + $PROJ_DIR$\Debug\Obj\main.r79 + $PROJ_DIR$\..\Common\include\blocktim.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\lmi_timer.h + $PROJ_DIR$\..\..\Source\include\croutine.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h + $PROJ_DIR$\Debug\Obj\osram128x64x4.pbi + $PROJ_DIR$\Debug\Obj\pdc.pbi + $PROJ_DIR$\main.c + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\timer.h + $PROJ_DIR$\Debug\Obj\uip_arp.r79 + $PROJ_DIR$\Debug\Obj\PollQ.pbi + $PROJ_DIR$\Debug\Obj\uip.r79 + $PROJ_DIR$\Debug\Obj\psock.r79 + $PROJ_DIR$\Debug\Obj\uIP_Task.r79 + $PROJ_DIR$\Debug\Obj\list.r79 + $TOOLKIT_DIR$\inc\stdlib.h + $PROJ_DIR$\Debug\Obj\timer.pbi + $PROJ_DIR$\Debug\Obj\startup_ewarm.pbi + $PROJ_DIR$\..\Common\include\flash.h + $PROJ_DIR$\..\Common\Minimal\integer.c + $PROJ_DIR$\Debug\Obj\uip.pbi + $TOOLKIT_DIR$\inc\yvals.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h + $PROJ_DIR$\Debug\Obj\ParTest.r79 + $PROJ_DIR$\Debug\Obj\portasm.r79 + $PROJ_DIR$\..\..\Source\tasks.c + $PROJ_DIR$\webserver\webserver.h + $TOOLKIT_DIR$\inc\stdio.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\IAR\driverlib.r79 + $PROJ_DIR$\LuminaryDrivers\osram128x64x4.c + $TOOLKIT_DIR$\inc\DLib_Product.h + $PROJ_DIR$\ParTest\ParTest.c + $PROJ_DIR$\Debug\Obj\timertest.r79 + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\interrupt.h + $PROJ_DIR$\..\Common\Minimal\blocktim.c + $PROJ_DIR$\LuminaryDrivers\debug.h + $PROJ_DIR$\Debug\Obj\blocktim.r79 + $PROJ_DIR$\Debug\Obj\PollQ.r79 + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\gpio.h + $PROJ_DIR$\Debug\Obj\queue.pbi + $TOOLKIT_DIR$\inc\DLib_Threads.h + $PROJ_DIR$\webserver\emac.h + $PROJ_DIR$\osram128x64x4.c + $PROJ_DIR$\LuminaryDrivers\osram128x64x4.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\hw_ints.h + $PROJ_DIR$\Debug\Obj\timertest.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h + $PROJ_DIR$\Debug\Obj\GenQTest.r79 + $TOOLKIT_DIR$\inc\ysizet.h + $PROJ_DIR$\Debug\Obj\list.pbi + $PROJ_DIR$\Debug\Obj\http-strings.pbi + $PROJ_DIR$\Debug\Obj\httpd-fs.r79 + $PROJ_DIR$\..\..\Source\include\queue.h + $PROJ_DIR$\webserver\httpd-cgi.h + $PROJ_DIR$\..\..\Source\queue.c + $PROJ_DIR$\..\Common\Minimal\death.c + $PROJ_DIR$\webserver\emac.c + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + $PROJ_DIR$\Debug\Exe\RTOSDemo.sim + $PROJ_DIR$\..\..\Source\include\list.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h + $PROJ_DIR$\Debug\Obj\tasks.r79 + $PROJ_DIR$\Debug\Obj\blocktim.pbi + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + $PROJ_DIR$\Debug\Obj\GenQTest.pbi + $TOOLKIT_DIR$\inc\stdint.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h + $PROJ_DIR$\LuminaryDrivers\hw_ssi.h + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\hw_ethernet.h + $PROJ_DIR$\Debug\Exe\RTOSDemo.d79 + $PROJ_DIR$\Debug\Obj\queue.r79 + $PROJ_DIR$\osram128x64x4.h + $PROJ_DIR$\..\Common\include\PollQ.h + $PROJ_DIR$\..\..\Source\include\FreeRTOS.h + $PROJ_DIR$\..\Common\include\BlockQ.h + $PROJ_DIR$\Debug\Obj\flash.pbi + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\ssi.h + $PROJ_DIR$\webserver\http-strings.c + $PROJ_DIR$\Debug\Obj\main.pbi + $PROJ_DIR$\..\..\Source\include\semphr.h + $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\Debug\Obj\port.r79 + $TOOLKIT_DIR$\inc\stddef.h + $PROJ_DIR$\Debug\Obj\emac.pbi + $PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c + $PROJ_DIR$\Debug\Obj\httpd-fs.pbi + $PROJ_DIR$\Debug\Obj\semtest.r79 + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + $PROJ_DIR$\Debug\Obj\osram128x64x4.r79 + $PROJ_DIR$\..\Common\include\QPeek.h + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + $PROJ_DIR$\..\Common\Minimal\flash.c + $PROJ_DIR$\Debug\Obj\RTOSDemo.pbd + $PROJ_DIR$\Debug\Obj\rit128x96x4.r79 + $PROJ_DIR$\Debug\Obj\httpd.r79 + $PROJ_DIR$\Debug\Obj\pdc.r79 + $PROJ_DIR$\Debug\Obj\integer.r79 + + + $PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\portasm.s + + + AARM + 108 + + + + + AARM + 4 + + + + + $PROJ_DIR$\startup_ewarm.c + + + ICCARM + 33 + + + BICOMP + 101 + + + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + + + ICCARM + 38 + + + BICOMP + 60 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 + + + + + $PROJ_DIR$\..\..\Source\list.c + + + ICCARM + 98 + + + BICOMP + 133 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 144 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 144 + + + + + $PROJ_DIR$\webserver\httpd-fs.c + + + ICCARM + 135 + + + BICOMP + 171 + + + + + ICCARM + 18 106 88 30 150 105 80 82 114 2 124 110 68 151 130 6 83 152 25 + + + BICOMP + 18 106 88 30 150 105 80 114 2 124 110 68 151 130 6 83 152 25 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + + + ICCARM + 96 + + + BICOMP + 12 + + + + + ICCARM + 111 105 80 82 114 2 124 132 166 88 30 150 110 18 106 68 151 130 6 152 + + + BICOMP + 111 105 80 114 2 124 132 166 88 30 150 110 18 106 68 151 130 6 152 + + + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + + + ICCARM + 172 + + + BICOMP + 52 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 165 136 39 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 165 136 39 + + + + + $PROJ_DIR$\webserver\httpd-cgi.c + + + ICCARM + 40 + + + BICOMP + 78 + + + + + ICCARM + 152 88 30 150 105 80 82 114 2 124 110 18 106 68 151 130 6 137 111 132 166 + + + BICOMP + 152 88 30 150 105 80 114 2 124 110 18 106 68 151 130 6 137 111 132 166 + + + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + + + ICCARM + 131 + + + BICOMP + 149 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 136 165 63 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 136 165 63 + + + + + $PROJ_DIR$\timertest.c + + + ICCARM + 116 + + + BICOMP + 129 + + + + + ICCARM + 159 168 105 80 82 114 2 124 132 49 4 81 62 128 42 54 117 51 92 + + + BICOMP + 159 168 105 80 114 2 124 132 49 4 81 62 128 42 54 117 51 86 + + + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + + + ICCARM + 121 + + + BICOMP + 94 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 136 158 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 136 158 + + + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + + + ICCARM + 44 + + + BICOMP + 11 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 136 165 175 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 136 165 175 + + + + + $PROJ_DIR$\webserver\uIP_Task.c + + + ICCARM + 97 + + + BICOMP + 20 + + + + + ICCARM + 166 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 165 136 54 152 88 30 150 110 18 106 68 151 130 6 67 92 64 154 45 42 72 51 125 57 59 + + + BICOMP + 166 105 80 114 2 124 132 159 168 49 4 81 62 35 144 165 136 54 152 88 30 150 110 18 106 68 151 130 6 67 92 64 154 45 51 42 72 125 57 59 + + + + + $PROJ_DIR$\webserver\httpd.c + + + ICCARM + 180 + + + BICOMP + 29 + + + + + ICCARM + 152 88 30 150 105 80 82 114 2 124 110 18 106 68 151 130 6 137 34 166 132 + + + BICOMP + 152 88 30 150 105 80 114 2 124 110 18 106 68 151 130 6 137 34 166 132 + + + + + $PROJ_DIR$\rit128x96x4.c + + + ICCARM + 179 + + + BICOMP + 76 + + + + + ICCARM + 73 42 9 54 15 122 162 51 43 + + + BICOMP + 73 42 9 54 15 122 162 51 43 + + + + + $PROJ_DIR$\LuminaryDrivers\pdc.c + + + ICCARM + 181 + + + BICOMP + 90 + + + + + ICCARM + 66 1 119 71 22 17 5 + + + BICOMP + 66 1 119 71 22 17 5 + + + + + $PROJ_DIR$\main.c + + + ICCARM + 84 + + + BICOMP + 164 + + + + + ICCARM + 111 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 136 165 160 75 79 85 102 57 39 158 59 70 63 175 42 54 9 51 122 43 157 + + + BICOMP + 111 105 80 114 2 124 132 159 168 49 4 81 62 35 144 136 165 160 75 79 85 102 57 39 158 59 70 63 175 42 54 9 51 122 43 157 + + + + + [ROOT_NODE] + + + XLINK + 155 143 + + + + + $PROJ_DIR$\..\Common\Minimal\integer.c + + + ICCARM + 182 + + + BICOMP + 41 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 79 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 79 + + + + + $PROJ_DIR$\..\..\Source\tasks.c + + + ICCARM + 146 + + + BICOMP + 10 + + + + + ICCARM + 111 105 80 82 114 2 124 132 99 166 159 168 49 4 81 62 35 144 + + + BICOMP + 111 105 80 114 2 124 132 99 166 159 168 49 4 81 62 35 144 + + + + + $PROJ_DIR$\LuminaryDrivers\osram128x64x4.c + + + ICCARM + 174 + + + BICOMP + 89 + + + + + ICCARM + 153 66 14 1 119 71 22 17 127 + + + + + $PROJ_DIR$\ParTest\ParTest.c + + + ICCARM + 107 + + + BICOMP + 65 + + + + + ICCARM + 159 168 105 80 82 114 2 124 132 49 4 81 62 35 144 57 54 122 42 + + + BICOMP + 159 168 105 80 114 2 124 132 49 4 81 62 35 144 57 54 122 42 + + + + + $PROJ_DIR$\..\Common\Minimal\blocktim.c + + + ICCARM + 120 + + + BICOMP + 147 + + + + + ICCARM + 159 168 105 80 82 114 2 124 132 49 4 81 62 35 144 136 85 + + + BICOMP + 159 168 105 80 114 2 124 132 49 4 81 62 35 144 136 85 + + + + + $PROJ_DIR$\osram128x64x4.c + + + ICCARM + 174 + + + BICOMP + 89 + + + + + ICCARM + 73 42 9 54 15 122 162 51 157 + + + BICOMP + 73 42 9 54 15 122 162 51 157 + + + + + $PROJ_DIR$\..\..\Source\queue.c + + + ICCARM + 156 + + + BICOMP + 123 + + + + + ICCARM + 99 105 80 82 114 2 124 132 166 159 168 49 4 81 62 35 144 87 + + + BICOMP + 99 105 80 114 2 124 132 166 159 168 49 4 81 62 35 144 87 + + + + + $PROJ_DIR$\..\Common\Minimal\death.c + + + ICCARM + 37 + + + BICOMP + 46 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 75 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 75 + + + + + $PROJ_DIR$\webserver\emac.c + + + ICCARM + 55 + + + BICOMP + 169 + + + + + ICCARM + 159 168 105 80 82 114 2 124 132 49 4 81 62 165 136 35 144 125 152 88 30 150 110 18 106 68 151 130 6 54 42 128 154 45 117 + + + BICOMP + 159 168 105 80 114 2 124 132 49 4 81 62 165 136 35 144 125 152 88 30 150 110 18 106 68 151 130 6 54 42 128 154 45 51 117 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + + + ICCARM + 93 + + + BICOMP + 0 + + + + + ICCARM + 67 152 88 30 150 105 80 82 114 2 124 110 18 106 68 151 130 6 166 132 + + + BICOMP + 67 152 88 30 150 105 80 114 2 124 110 18 106 68 151 130 6 166 132 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + + + ICCARM + 28 + + + BICOMP + 100 + + + + + ICCARM + 16 64 159 168 105 80 82 114 2 124 132 49 4 81 62 145 + + + BICOMP + 16 64 159 168 105 80 114 2 124 132 49 4 81 62 145 + + + + + $PROJ_DIR$\Debug\Exe\RTOSDemo.d79 + + + XLINK + 143 + + + + + XLINK + 69 31 131 107 121 44 120 37 55 19 38 13 40 135 180 182 98 84 174 167 108 96 156 179 172 33 146 28 116 97 95 93 112 47 + + + + + $PROJ_DIR$\webserver\http-strings.c + + + ICCARM + 13 + + + BICOMP + 134 + + + + + $PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c + + + ICCARM + 167 + + + BICOMP + 58 + + + + + ICCARM + 159 168 105 80 82 114 2 124 132 49 4 81 62 35 144 + + + BICOMP + 159 168 105 80 114 2 124 132 49 4 81 62 35 144 + + + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + + + ICCARM + 95 + + + BICOMP + 104 + + + + + ICCARM + 152 88 30 150 105 80 82 114 2 124 110 18 106 68 151 130 6 141 166 132 + + + BICOMP + 152 88 30 150 105 80 114 2 124 110 18 106 68 151 130 6 141 166 132 + + + + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + + + ICCARM + 31 + + + BICOMP + 32 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 136 160 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 136 160 + + + + + $PROJ_DIR$\..\Common\Minimal\flash.c + + + ICCARM + 19 + + + BICOMP + 161 + + + + + ICCARM + 99 105 80 82 114 2 124 132 159 168 49 4 81 62 35 144 57 102 + + + BICOMP + 99 105 80 114 2 124 132 159 168 49 4 81 62 35 144 57 102 + + + + + $PROJ_DIR$\Debug\Obj\RTOSDemo.pbd + + + BILINK + 32 149 65 94 11 147 46 169 161 60 134 78 171 29 41 133 164 89 58 12 123 76 52 101 10 100 129 20 104 0 + + + + + $PROJ_DIR$\LuminaryDrivers\osram128x64x4.c + ICCARM + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewd b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewd new file mode 100644 index 000000000..1d3a44298 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewd @@ -0,0 +1,586 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 13 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CMXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CMXTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewp b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewp new file mode 100644 index 000000000..a0a8e3800 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.ewp @@ -0,0 +1,947 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + XLINK + 2 + + 18 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XAR + 2 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Demo files + + $PROJ_DIR$\..\Common\Minimal\BlockQ.c + + + $PROJ_DIR$\..\Common\Minimal\blocktim.c + + + $PROJ_DIR$\..\Common\Minimal\death.c + + + $PROJ_DIR$\..\Common\Minimal\flash.c + + + $PROJ_DIR$\..\Common\Minimal\GenQTest.c + + + $PROJ_DIR$\..\Common\Minimal\integer.c + + + $PROJ_DIR$\main.c + + + $PROJ_DIR$\ParTest\ParTest.c + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + + + $PROJ_DIR$\..\Common\Minimal\QPeek.c + + + $PROJ_DIR$\..\Common\Minimal\semtest.c + + + $PROJ_DIR$\timertest.c + + + + Library files + + $PROJ_DIR$\..\Common\drivers\LuminaryMicro\IAR\driverlib.r79 + + + $PROJ_DIR$\osram128x64x4.c + + + $PROJ_DIR$\rit128x96x4.c + + + + Scheduler files + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c + + + $PROJ_DIR$\..\..\Source\list.c + + + $PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c + + + $PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\portasm.s + + + $PROJ_DIR$\..\..\Source\queue.c + + + $PROJ_DIR$\..\..\Source\tasks.c + + + + System files + + $PROJ_DIR$\startup_ewarm.c + + + + uIP files + + $PROJ_DIR$\webserver\emac.c + + + $PROJ_DIR$\webserver\http-strings.c + + + $PROJ_DIR$\webserver\httpd-cgi.c + + + $PROJ_DIR$\webserver\httpd-fs.c + + + $PROJ_DIR$\webserver\httpd.c + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c + + + $PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c + + + $PROJ_DIR$\webserver\uIP_Task.c + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.eww b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.eww new file mode 100644 index 000000000..239a9381e --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\RTOSDemo.ewp + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.xcl b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.xcl new file mode 100644 index 000000000..a7044e640 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.xcl @@ -0,0 +1,56 @@ +//***************************************************************************** +// +// webserver-lwip.xcl - Linker script for EW-ARM. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED AS IS. NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +//***************************************************************************** + +// +// Set the CPU type to ARM. +// +-carm + +// +// Define the size of flash and SRAM. +// +-DROMSTART=00000000 +-DROMEND=00040000 +-DRAMSTART=20000000 +-DRAMEND=20010000 + + + +// +// Define the sections to place into flash, and the order to place them. +// +-Z(CODE)INTVEC=ROMSTART-ROMEND +-Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND +-Z(CODE)CODE=ROMSTART-ROMEND +-Z(CONST)CODE_ID=ROMSTART-ROMEND +-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND +-Z(CONST)CHECKSUM=ROMSTART-ROMEND + +// +// Define the sections to place into SRAM, and the order to place them. +// +-Z(DATA)VTABLE=RAMSTART-RAMEND +-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND +-Z(DATA)CODE_I=RAMSTART-RAMEND diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/bitmap.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/bitmap.h new file mode 100644 index 000000000..02ce0b365 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/bitmap.h @@ -0,0 +1,171 @@ +#ifndef BITMAP_H +#define BITMAP_H + +const unsigned char pucImage[] = +{ +0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa0, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, +0x00, 0x8f, 0xff, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x88, 0x88, 0x88, +0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x77, 0x77, 0x78, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x88, 0x77, 0x77, 0x88, 0x8f, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0xf0, 0x00, 0x00, 0x8f, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, +0xf7, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, +0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x8f, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, +0x77, 0x77, 0xff, 0xff, 0xf7, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xf8, 0x77, 0x77, +0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0x00, 0x8f, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, +0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xf7, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, +0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, 0x77, +0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0x00, 0x8f, 0x00, 0xff, +0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xf7, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, +0x77, 0x77, 0x78, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xf8, 0x77, +0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x07, +0x00, 0x70, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, +0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0x88, 0x8f, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, +0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, +0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xf8, +0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, +0xff, 0xff, 0xff, 0xff, 0xf7, 0x77, 0x77, 0x77, 0x8f, 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, +0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xf7, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, +0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x78, 0xff, 0x87, 0x77, +0x77, 0x77, 0x78, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0x88, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xf8, 0x87, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, +0x78, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0xff, 0x80, 0x00, 0x8f, 0x8f, 0xff, 0x87, 0x77, 0x77, 0x77, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, +0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x87, 0x77, 0x77, 0x78, 0xff, 0xf7, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x00, 0x00, 0x8f, 0x07, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, +0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, +0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x78, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x07, 0x00, 0x8f, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, +0x77, 0x77, 0x77, 0x77, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xf8, +0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x78, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, +0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0f, 0x00, 0x8f, 0x00, 0xff, +0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, +0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, +0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, +0x00, 0x8f, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, +0x78, 0xff, 0xff, 0xff, 0xff, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0x70, 0x08, 0x00, 0x88, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, 0x88, 0x88, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x87, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x70, 0x07, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0x77, 0x77, +0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x7f, +0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x87, 0x77, 0x77, 0x77, +0xff, 0xff, 0xf7, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0xff, 0xff, +0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, +0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x87, 0x88, +0x88, 0x8f, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x7f, 0xff, +0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xf7, 0x88, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xf7, +0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, +0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x00, 0x88, 0x88, 0x88, 0xff, 0x87, 0x77, 0x77, 0x77, +0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, +0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0xff, +0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, +0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0xff, 0xff, 0xff, 0x87, 0x77, +0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, +0x00, 0x00, 0x00, 0xff, 0x87, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, +0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, +0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x07, 0xff, 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, +0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x87, 0x77, 0x77, 0x77, +0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x77, 0x77, 0x77, 0x77, 0x88, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0x00, 0x0f, 0x70, 0x08, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0x00, 0x07, 0x70, 0x07, +0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, +0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, +0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaf, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaa, +0xaa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xfa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa0, 0x00, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, +0x00 }; + +#define bmpBITMAP_HEIGHT 50 +#define bmpBITMAP_WIDTH 128 + +#endif diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/lcd_message.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/lcd_message.h new file mode 100644 index 000000000..adfc18b8a --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/lcd_message.h @@ -0,0 +1,9 @@ +#ifndef LCD_MESSAGE_H +#define LCD_MESSAGE_H + +typedef struct +{ + signed char *pcMessage; +} xOLEDMessage; + +#endif /* LCD_MESSAGE_H */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/main.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/main.c new file mode 100644 index 000000000..8572cd6cb --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/main.c @@ -0,0 +1,361 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ + + +/* + * Creates all the demo application tasks, then starts the scheduler. The WEB + * documentation provides more details of the standard demo application tasks. + * In addition to the standard demo tasks, the following tasks and tests are + * defined and/or created within this file: + * + * "Fast Interrupt Test" - A high frequency periodic interrupt is generated + * using a free running timer to demonstrate the use of the + * configKERNEL_INTERRUPT_PRIORITY configuration constant. The interrupt + * service routine measures the number of processor clocks that occur between + * each interrupt - and in so doing measures the jitter in the interrupt timing. + * The maximum measured jitter time is latched in the ulMaxJitter variable, and + * displayed on the OLED display by the 'OLED' task as described below. The + * fast interrupt is configured and handled in the timertest.c source file. + * + * "OLED" task - the OLED task is a 'gatekeeper' task. It is the only task that + * is permitted to access the display directly. Other tasks wishing to write a + * message to the OLED send the message on a queue to the OLED task instead of + * accessing the OLED themselves. The OLED task just blocks on the queue waiting + * for messages - waking and displaying the messages as they arrive. + * + * "Check" hook - This only executes every five seconds from the tick hook. + * Its main function is to check that all the standard demo tasks are still + * operational. Should any unexpected behaviour within a demo task be discovered + * the tick hook will write an error to the OLED (via the OLED task). If all the + * demo tasks are executing with their expected behaviour then the check task + * writes PASS to the OLED (again via the OLED task), as described above. + * + * "uIP" task - This is the task that handles the uIP stack. All TCP/IP + * processing is performed in this task. + */ + + + +/* Standard includes. */ +#include + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "Task.h" +#include "queue.h" +#include "semphr.h" + +/* Demo app includes. */ +#include "BlockQ.h" +#include "death.h" +#include "integer.h" +#include "blocktim.h" +#include "flash.h" +#include "partest.h" +#include "semtest.h" +#include "pollq.h" +#include "lcd_message.h" +#include "bitmap.h" +#include "GenQTest.h" +#include "QPeek.h" + +/* Hardware library includes. */ +#include "hw_memmap.h" +#include "hw_types.h" +#include "hw_sysctl.h" +#include "sysctl.h" +#include "gpio.h" +#include "rit128x96x4.h" +#include "osram128x64x4.h" + +/*-----------------------------------------------------------*/ + +/* The time between cycles of the 'check' functionality (defined within the +tick hook. */ +#define mainCHECK_DELAY ( ( portTickType ) 5000 / portTICK_RATE_MS ) + +/* Size of the stack allocated to the uIP task. */ +#define mainBASIC_WEB_STACK_SIZE ( configMINIMAL_STACK_SIZE * 3 ) + +/* The OLED task uses the sprintf function so requires a little more stack too. */ +#define mainOLED_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE + 50 ) + +/* Task priorities. */ +#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) +#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 ) +#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) +#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY ) +#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY ) + +/* The maximum number of message that can be waiting for display at any one +time. */ +#define mainOLED_QUEUE_SIZE ( 3 ) + +/* Dimensions the buffer into which the jitter time is written. */ +#define mainMAX_MSG_LEN 25 + +/* The period of the system clock in nano seconds. This is used to calculate +the jitter time in nano seconds. */ +#define mainNS_PER_CLOCK ( ( unsigned portLONG ) ( ( 1.0 / ( double ) configCPU_CLOCK_HZ ) * 1000000000.0 ) ) + +/* Constants used when writing strings to the display. */ +#define mainCHARACTER_HEIGHT ( 9 ) +#define mainMAX_ROWS_96 ( mainCHARACTER_HEIGHT * 10 ) +#define mainMAX_ROWS_64 ( mainCHARACTER_HEIGHT * 7 ) +#define mainFULL_SCALE ( 15 ) +#define ulSSI_FREQUENCY ( 3500000UL ) + +/*-----------------------------------------------------------*/ + +/* + * The task that handles the uIP stack. All TCP/IP processing is performed in + * this task. + */ +extern void vuIP_Task( void *pvParameters ); + +/* + * The display is written two by more than one task so is controlled by a + * 'gatekeeper' task. This is the only task that is actually permitted to + * access the display directly. Other tasks wanting to display a message send + * the message to the gatekeeper. + */ +static void vOLEDTask( void *pvParameters ); + +/* + * Configure the hardware for the demo. + */ +static void prvSetupHardware( void ); + +/* + * Configures the high frequency timers - those used to measure the timing + * jitter while the real time kernel is executing. + */ +extern void vSetupTimer( void ); + +/*-----------------------------------------------------------*/ + +/* The queue used to send messages to the OLED task. */ +xQueueHandle xOLEDQueue; + +/* The welcome text. */ +const portCHAR * const pcWelcomeMessage = " www.FreeRTOS.org"; + +/*-----------------------------------------------------------*/ + +int main( void ) +{ + prvSetupHardware(); + + /* Create the queue used by the OLED task. Messages for display on the OLED + are received via this queue. */ + xOLEDQueue = xQueueCreate( mainOLED_QUEUE_SIZE, sizeof( xOLEDMessage ) ); + + /* Create the uIP task if running on a processor that includes a MAC and + PHY. */ + if( SysCtlPeripheralPresent( SYSCTL_PERIPH_ETH ) ) + { + xTaskCreate( vuIP_Task, ( signed portCHAR * ) "uIP", mainBASIC_WEB_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL ); + } + + /* Start the standard demo tasks. */ + vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY ); + vCreateBlockTimeTasks(); + vStartSemaphoreTasks( mainSEM_TEST_PRIORITY ); + vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY ); + vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY ); + vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY ); + vStartQueuePeekTasks(); + + /* Start the tasks defined within this file/specific to this demo. */ + xTaskCreate( vOLEDTask, ( signed portCHAR * ) "OLED", mainOLED_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL ); + + /* The suicide tasks must be created last as they need to know how many + tasks were running prior to their creation in order to ascertain whether + or not the correct/expected number of tasks are running at any given time. */ + vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY ); + + /* Configure the high frequency interrupt used to measure the interrupt + jitter time. The Keil port does not yet include the + configKERNEL_INTERRUPT_PRIORITY functionality so cannot perform this test. */ + #ifndef RVDS_ARMCM3_LM3S102 + { + vSetupTimer(); + } + #endif + + /* Start the scheduler. */ + vTaskStartScheduler(); + + /* Will only get here if there was insufficient memory to create the idle + task. */ + return 0; +} +/*-----------------------------------------------------------*/ + +void prvSetupHardware( void ) +{ + /* If running on Rev A2 silicon, turn the LDO voltage up to 2.75V. This is + a workaround to allow the PLL to operate reliably. */ + if( DEVICE_IS_REVA2 ) + { + SysCtlLDOSet( SYSCTL_LDO_2_75V ); + } + + /* Set the clocking to run from the PLL at 50 MHz */ + SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ ); + + /* Enable Port F for Ethernet LEDs + LED0 Bit 3 Output + LED1 Bit 2 Output */ + SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOF ); + GPIODirModeSet( GPIO_PORTF_BASE, (GPIO_PIN_2 | GPIO_PIN_3), GPIO_DIR_MODE_HW ); + GPIOPadConfigSet( GPIO_PORTF_BASE, (GPIO_PIN_2 | GPIO_PIN_3 ), GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD ); + + vParTestInitialise(); +} +/*-----------------------------------------------------------*/ + +void vApplicationTickHook( void ) +{ +static xOLEDMessage xMessage = { "PASS" }; +static unsigned portLONG ulTicksSinceLastDisplay = 0; + + /* Called from every tick interrupt. Have enough ticks passed to make it + time to perform our health status check again? */ + ulTicksSinceLastDisplay++; + if( ulTicksSinceLastDisplay >= mainCHECK_DELAY ) + { + ulTicksSinceLastDisplay = 0; + + /* Has an error been found in any task? */ + if( xAreGenericQueueTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN GEN Q"; + } + else if( xAreQueuePeekTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN PEEK Q"; + } + else if( xAreBlockingQueuesStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN BLOCK Q"; + } + else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN BLOCK TIME"; + } + else if( xAreSemaphoreTasksStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN SEMAPHORE"; + } + else if( xArePollingQueuesStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN POLL Q"; + } + else if( xIsCreateTaskStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN CREATE"; + } + else if( xAreIntegerMathsTaskStillRunning() != pdTRUE ) + { + xMessage.pcMessage = "ERROR IN MATH"; + } + + /* Send the message to the OLED gatekeeper for display. */ + xQueueSendFromISR( xOLEDQueue, &xMessage, pdFALSE ); + } +} +/*-----------------------------------------------------------*/ + +void vOLEDTask( void *pvParameters ) +{ +xOLEDMessage xMessage; +unsigned portLONG ulY, ulMaxY; +static portCHAR cMessage[ mainMAX_MSG_LEN ]; +extern unsigned portLONG ulMaxJitter; + +/* Functions to access the OLED. The one used depends on the dev kit +being used. */ +void ( *vOLEDInit )( unsigned portLONG ); +void ( *vOLEDStringDraw )( const portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portCHAR ); +void ( *vOLEDImageDraw )( const unsigned portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portLONG, unsigned portLONG ); +void ( *vOLEDClear )( void ); + + /* Map the OLED access functions to the driver functions that are appropriate + for the evaluation kit being used. */ + switch( HWREG( SYSCTL_DID1 ) & SYSCTL_DID1_PRTNO_MASK ) + { + case SYSCTL_DID1_PRTNO_6965 : + case SYSCTL_DID1_PRTNO_2965 : vOLEDInit = OSRAM128x64x4Init; + vOLEDStringDraw = OSRAM128x64x4StringDraw; + vOLEDImageDraw = OSRAM128x64x4ImageDraw; + vOLEDClear = OSRAM128x64x4Clear; + ulMaxY = mainMAX_ROWS_64; + break; + + default : vOLEDInit = RIT128x96x4Init; + vOLEDStringDraw = RIT128x96x4StringDraw; + vOLEDImageDraw = RIT128x96x4ImageDraw; + vOLEDClear = RIT128x96x4Clear; + ulMaxY = mainMAX_ROWS_96; + break; + } + + ulY = ulMaxY; + + /* Initialise the OLED and display a startup message. */ + vOLEDInit( ulSSI_FREQUENCY ); + vOLEDStringDraw( " POWERED BY FreeRTOS", 0, 0, mainFULL_SCALE ); + vOLEDImageDraw( pucImage, 0, mainCHARACTER_HEIGHT + 1, bmpBITMAP_WIDTH, bmpBITMAP_HEIGHT ); + + for( ;; ) + { + /* Wait for a message to arrive that requires displaying. */ + xQueueReceive( xOLEDQueue, &xMessage, portMAX_DELAY ); + + /* Write the message on the next available row. */ + ulY += mainCHARACTER_HEIGHT; + if( ulY >= ulMaxY ) + { + ulY = mainCHARACTER_HEIGHT; + vOLEDClear(); + vOLEDStringDraw( pcWelcomeMessage, 0, 0, mainFULL_SCALE ); + } + + /* Display the message along with the maximum jitter time from the + high priority time test. */ + sprintf( cMessage, "%s [%uns]", xMessage.pcMessage, ulMaxJitter * mainNS_PER_CLOCK ); + vOLEDStringDraw( cMessage, 0, ulY, mainFULL_SCALE ); + } +} diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.c new file mode 100644 index 000000000..3353a82e6 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.c @@ -0,0 +1,933 @@ +//***************************************************************************** +// +// osram128x64x4.c - Driver for the OSRAM 128x64x4 graphical OLED display. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1408 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +//***************************************************************************** +// +//! \addtogroup ek_lm3sx965_api +//! @{ +// +//***************************************************************************** + +#include "hw_ssi.h" +#include "hw_memmap.h" +#include "hw_sysctl.h" +#include "hw_types.h" +#include "debug.h" +#include "gpio.h" +#include "ssi.h" +#include "sysctl.h" +#include "osram128x64x4.h" + +//***************************************************************************** +// +// Flag to indicate if SSI port is enabled for OSRAM usage. +// +//***************************************************************************** +static volatile tBoolean g_bSSIEnabled = false; + +//***************************************************************************** +// +// Define the OSRAM 128x64x4 Remap Setting(s). This will be used in +// several places in the code to switch between vertical and horizontal +// address incrementing. +// +// The Remap Command (0xA0) takes one 8-bit parameter. The parameter is +// defined as follows. +// +// Bit 7: Reserved +// Bit 6: Disable(0)/Enable(1) COM Split Odd Even +// When enabled, the COM signals are split Odd on one side, even on +// the other. Otherwise, they are split 0-39 on one side, 40-79 on +// the other. +// Bit 5: Reserved +// Bit 4: Disable(0)/Enable(1) COM Remap +// When Enabled, ROW 0-79 map to COM 79-0 (i.e. reverse row order) +// Bit 3: Reserved +// Bit 2: Horizontal(0)/Vertical(1) Address Increment +// When set, data RAM address will increment along the column rather +// than along the row. +// Bit 1: Disable(0)/Enable(1) Nibble Remap +// When enabled, the upper and lower nibbles in the DATA bus for access +// to the data RAM are swapped. +// Bit 0: Disable(0)/Enable(1) Column Address Remap +// When enabled, DATA RAM columns 0-63 are remapped to Segment Columns +// 127-0. +// +//***************************************************************************** +#define OSRAM_INIT_REMAP 0x52 +#define OSRAM_INIT_OFFSET 0x4C +static const unsigned char g_pucOSRAM128x64x4VerticalInc[] = { 0xA0, 0x56 }; +static const unsigned char g_pucOSRAM128x64x4HorizontalInc[] = { 0xA0, 0x52 }; + +//***************************************************************************** +// +// A 5x7 font (in a 6x8 cell, where the sixth column is omitted from this +// table) for displaying text on the OLED display. The data is organized as +// bytes from the left column to the right column, with each byte containing +// the top row in the LSB and the bottom row in the MSB. +// +// Note: This is the same font data that is used in the EK-LM3S811 +// osram96x16x1 driver. The single bit-per-pixel is expaned in the StringDraw +// function to the appropriate four bit-per-pixel gray scale format. +// +//***************************************************************************** +static const unsigned char g_pucFont[96][5] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // " " + { 0x00, 0x00, 0x4f, 0x00, 0x00 }, // ! + { 0x00, 0x07, 0x00, 0x07, 0x00 }, // " + { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # + { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ + { 0x23, 0x13, 0x08, 0x64, 0x62 }, // % + { 0x36, 0x49, 0x55, 0x22, 0x50 }, // & + { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' + { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( + { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) + { 0x14, 0x08, 0x3e, 0x08, 0x14 }, // * + { 0x08, 0x08, 0x3e, 0x08, 0x08 }, // + + { 0x00, 0x50, 0x30, 0x00, 0x00 }, // , + { 0x08, 0x08, 0x08, 0x08, 0x08 }, // - + { 0x00, 0x60, 0x60, 0x00, 0x00 }, // . + { 0x20, 0x10, 0x08, 0x04, 0x02 }, // / + { 0x3e, 0x51, 0x49, 0x45, 0x3e }, // 0 + { 0x00, 0x42, 0x7f, 0x40, 0x00 }, // 1 + { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 + { 0x21, 0x41, 0x45, 0x4b, 0x31 }, // 3 + { 0x18, 0x14, 0x12, 0x7f, 0x10 }, // 4 + { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 + { 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // 6 + { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 + { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 + { 0x06, 0x49, 0x49, 0x29, 0x1e }, // 9 + { 0x00, 0x36, 0x36, 0x00, 0x00 }, // : + { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; + { 0x08, 0x14, 0x22, 0x41, 0x00 }, // < + { 0x14, 0x14, 0x14, 0x14, 0x14 }, // = + { 0x00, 0x41, 0x22, 0x14, 0x08 }, // > + { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? + { 0x32, 0x49, 0x79, 0x41, 0x3e }, // @ + { 0x7e, 0x11, 0x11, 0x11, 0x7e }, // A + { 0x7f, 0x49, 0x49, 0x49, 0x36 }, // B + { 0x3e, 0x41, 0x41, 0x41, 0x22 }, // C + { 0x7f, 0x41, 0x41, 0x22, 0x1c }, // D + { 0x7f, 0x49, 0x49, 0x49, 0x41 }, // E + { 0x7f, 0x09, 0x09, 0x09, 0x01 }, // F + { 0x3e, 0x41, 0x49, 0x49, 0x7a }, // G + { 0x7f, 0x08, 0x08, 0x08, 0x7f }, // H + { 0x00, 0x41, 0x7f, 0x41, 0x00 }, // I + { 0x20, 0x40, 0x41, 0x3f, 0x01 }, // J + { 0x7f, 0x08, 0x14, 0x22, 0x41 }, // K + { 0x7f, 0x40, 0x40, 0x40, 0x40 }, // L + { 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // M + { 0x7f, 0x04, 0x08, 0x10, 0x7f }, // N + { 0x3e, 0x41, 0x41, 0x41, 0x3e }, // O + { 0x7f, 0x09, 0x09, 0x09, 0x06 }, // P + { 0x3e, 0x41, 0x51, 0x21, 0x5e }, // Q + { 0x7f, 0x09, 0x19, 0x29, 0x46 }, // R + { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S + { 0x01, 0x01, 0x7f, 0x01, 0x01 }, // T + { 0x3f, 0x40, 0x40, 0x40, 0x3f }, // U + { 0x1f, 0x20, 0x40, 0x20, 0x1f }, // V + { 0x3f, 0x40, 0x38, 0x40, 0x3f }, // W + { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X + { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y + { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z + { 0x00, 0x7f, 0x41, 0x41, 0x00 }, // [ + { 0x02, 0x04, 0x08, 0x10, 0x20 }, // "\" + { 0x00, 0x41, 0x41, 0x7f, 0x00 }, // ] + { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ + { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ + { 0x00, 0x01, 0x02, 0x04, 0x00 }, // ` + { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a + { 0x7f, 0x48, 0x44, 0x44, 0x38 }, // b + { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c + { 0x38, 0x44, 0x44, 0x48, 0x7f }, // d + { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e + { 0x08, 0x7e, 0x09, 0x01, 0x02 }, // f + { 0x0c, 0x52, 0x52, 0x52, 0x3e }, // g + { 0x7f, 0x08, 0x04, 0x04, 0x78 }, // h + { 0x00, 0x44, 0x7d, 0x40, 0x00 }, // i + { 0x20, 0x40, 0x44, 0x3d, 0x00 }, // j + { 0x7f, 0x10, 0x28, 0x44, 0x00 }, // k + { 0x00, 0x41, 0x7f, 0x40, 0x00 }, // l + { 0x7c, 0x04, 0x18, 0x04, 0x78 }, // m + { 0x7c, 0x08, 0x04, 0x04, 0x78 }, // n + { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o + { 0x7c, 0x14, 0x14, 0x14, 0x08 }, // p + { 0x08, 0x14, 0x14, 0x18, 0x7c }, // q + { 0x7c, 0x08, 0x04, 0x04, 0x08 }, // r + { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s + { 0x04, 0x3f, 0x44, 0x40, 0x20 }, // t + { 0x3c, 0x40, 0x40, 0x20, 0x7c }, // u + { 0x1c, 0x20, 0x40, 0x20, 0x1c }, // v + { 0x3c, 0x40, 0x30, 0x40, 0x3c }, // w + { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x + { 0x0c, 0x50, 0x50, 0x50, 0x3c }, // y + { 0x44, 0x64, 0x54, 0x4c, 0x44 }, // z + { 0x00, 0x08, 0x36, 0x41, 0x00 }, // { + { 0x00, 0x00, 0x7f, 0x00, 0x00 }, // | + { 0x00, 0x41, 0x36, 0x08, 0x00 }, // } + { 0x02, 0x01, 0x02, 0x04, 0x02 }, // ~ + { 0x02, 0x01, 0x02, 0x04, 0x02 }, // ~ +}; + +//***************************************************************************** +// +// The sequence of commands used to initialize the SSD0303 controller. Each +// command is described as follows: there is a byte specifying the number of +// bytes in the command sequence, followed by that many bytes of command data. +// Note: This initialization sequence is derived from OSRAM App Note AN018. +// +//***************************************************************************** +static const unsigned char g_pucOSRAM128x64x4Init[] = +{ + // + // Column Address + // + 4, 0x15, 0, 63, 0xe3, + + // + // Row Address + // + 4, 0x75, 0, 63, 0xe3, + + // + // Contrast Control + // + 3, 0x81, 50, 0xe3, + + // + // Half Current Range + // + 2, 0x85, 0xe3, + + // + // Display Re-map + // + 3, 0xA0, OSRAM_INIT_REMAP, 0xe3, + + // + // Display Start Line + // + 3, 0xA1, 0, 0xe3, + + // + // Display Offset + // + 3, 0xA2, OSRAM_INIT_OFFSET, 0xe3, + + // + // Display Mode Normal + // + 2, 0xA4, 0xe3, + + // + // Multiplex Ratio + // + 3, 0xA8, 63, 0xe3, + + // + // Phase Length + // + 3, 0xB1, 0x22, 0xe3, + + // + // Row Period + // + 3, 0xB2, 70, 0xe3, + + // + // Display Clock Divide + // + 3, 0xB3, 0xF1, 0xe3, + + // + // VSL + // + 3, 0xBF, 0x0D, 0xe3, + + // + // VCOMH + // + 3, 0xBE, 0x02, 0xe3, + + // + // VP + // + 3, 0xBC, 0x10, 0xe3, + + // + // Gamma + // + 10, 0xB8, 0x01, 0x11, 0x22, 0x32, 0x43, 0x54, 0x65, 0x76, 0xe3, + + // + // Set DC-DC + 3, 0xAD, 0x03, 0xe3, + + // + // Display ON/OFF + // + 2, 0xAF, 0xe3, +}; + +//***************************************************************************** +// +//! \internal +//! +//! Write a sequence of command bytes to the SSD0323 controller. +//! +//! The data is written in a polled fashion; this function will not return +//! until the entire byte sequence has been written to the controller. +//! +//! \return None. +// +//***************************************************************************** +static void +OSRAMWriteCommand(const unsigned char *pucBuffer, unsigned long ulCount) +{ + unsigned long ulTemp; + + // + // Return iff SSI port is not enabled for OSRAM. + // + if(!g_bSSIEnabled) + { + return; + } + + // + // Clear the command/control bit to enable command mode. + // + GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, 0); + + // + // Loop while there are more bytes left to be transferred. + // + while(ulCount != 0) + { + // + // Write the next byte to the controller. + // + SSIDataPut(SSI0_BASE, *pucBuffer++); + + // + // Dummy read to drain the fifo and time the GPIO signal. + // + SSIDataGet(SSI0_BASE, &ulTemp); + + // + // Decrement the BYTE counter. + // + ulCount--; + } +} + +//***************************************************************************** +// +//! \internal +//! +//! Write a sequence of data bytes to the SSD0323 controller. +//! +//! The data is written in a polled fashion; this function will not return +//! until the entire byte sequence has been written to the controller. +//! +//! \return None. +// +//***************************************************************************** +static void +OSRAMWriteData(const unsigned char *pucBuffer, unsigned long ulCount) +{ + unsigned long ulTemp; + + // + // Return iff SSI port is not enabled for OSRAM. + // + if(!g_bSSIEnabled) + { + return; + } + + // + // Set the command/control bit to enable data mode. + // + GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_PIN_7); + + // + // Loop while there are more bytes left to be transferred. + // + while(ulCount != 0) + { + // + // Write the next byte to the controller. + // + SSIDataPut(SSI0_BASE, *pucBuffer++); + + // + // Dummy read to drain the fifo and time the GPIO signal. + // + SSIDataGet(SSI0_BASE, &ulTemp); + + // + // Decrement the BYTE counter. + // + ulCount--; + } +} + +//***************************************************************************** +// +//! Clears the OLED display. +//! +//! This function will clear the display RAM. All pixels in the display will +//! be turned off. +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4Clear(void) +{ + static const unsigned char pucCommand1[] = { 0x15, 0, 63 }; + static const unsigned char pucCommand2[] = { 0x75, 0, 79 }; + unsigned long ulRow, ulColumn; + static unsigned char pucZeroBuffer[8] = { 0, 0, 0, 0, 0, 0, 0, 0}; + + // + // Set the window to fill the entire display. + // + OSRAMWriteCommand(pucCommand1, sizeof(pucCommand1)); + OSRAMWriteCommand(pucCommand2, sizeof(pucCommand2)); + OSRAMWriteCommand(g_pucOSRAM128x64x4VerticalInc, + sizeof(g_pucOSRAM128x64x4VerticalInc)); + + // + // In vertical address increment mode, loop through each column, filling + // each row with 0. + // + for(ulColumn = 0; ulColumn < (128/2); ulColumn++) + { + // + // 8 rows (bytes) per row of text. + // + for(ulRow = 0; ulRow < 80; ulRow += 8) + { + OSRAMWriteData(pucZeroBuffer, sizeof(pucZeroBuffer)); + } + } +} + +//***************************************************************************** +// +//! Displays a string on the OLED display. +//! +//! \param pcStr is a pointer to the string to display. +//! \param ulX is the horizontal position to display the string, specified in +//! columns from the left edge of the display. +//! \param ulY is the vertical position to display the string, specified in +//! rows from the top edge of the display. +//! \param ucLevel is the 4-bit grey scale value to be used for displayed text. +//! +//! This function will draw a string on the display. Only the ASCII characters +//! between 32 (space) and 126 (tilde) are supported; other characters will +//! result in random data being draw on the display (based on whatever appears +//! before/after the font in memory). The font is mono-spaced, so characters +//! such as "i" and "l" have more white space around them than characters such +//! as "m" or "w". +//! +//! If the drawing of the string reaches the right edge of the display, no more +//! characters will be drawn. Therefore, special care is not required to avoid +//! supplying a string that is "too long" to display. +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by +//! applications. +//! +//! \note Because the OLED display packs 2 pixels of data in a single byte, the +//! parameter \e ulX must be an even column number (e.g. 0, 2, 4, etc). +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4StringDraw(const char *pcStr, unsigned long ulX, + unsigned long ulY, unsigned char ucLevel) +{ + static unsigned char pucBuffer[8]; + unsigned long ulIdx1, ulIdx2; + unsigned char ucTemp; + + // + // Check the arguments. + // + ASSERT(ulX < 128); + ASSERT((ulX & 1) == 0); + ASSERT(ulY < 64); + ASSERT(ucLevel < 16); + + // + // Setup a window starting at the specified column and row, ending + // at the right edge of the display and 8 rows down (single character row). + // + pucBuffer[0] = 0x15; + pucBuffer[1] = ulX / 2; + pucBuffer[2] = 63; + OSRAMWriteCommand(pucBuffer, 3); + pucBuffer[0] = 0x75; + pucBuffer[1] = ulY; + pucBuffer[2] = ulY + 7; + OSRAMWriteCommand(pucBuffer, 3); + OSRAMWriteCommand(g_pucOSRAM128x64x4VerticalInc, + sizeof(g_pucOSRAM128x64x4VerticalInc)); + + // + // Loop while there are more characters in the string. + // + while(*pcStr != 0) + { + // + // Get a working copy of the current character and convert to an + // index into the character bit-map array. + // + ucTemp = *pcStr; + ucTemp &= 0x7F; + if(ucTemp < ' ') + { + ucTemp = ' '; + } + else + { + ucTemp -= ' '; + } + + // + // Build and display the character buffer. + // + for(ulIdx1 = 0; ulIdx1 < 3; ulIdx1++) + { + // + // Convert two columns of 1-bit font data into a single data + // byte column of 4-bit font data. + // + for(ulIdx2 = 0; ulIdx2 < 8; ulIdx2++) + { + pucBuffer[ulIdx2] = 0; + if(g_pucFont[ucTemp][ulIdx1*2] & (1 << ulIdx2)) + { + pucBuffer[ulIdx2] = ((ucLevel << 4) & 0xf0); + } + if((ulIdx1 < 2) && + (g_pucFont[ucTemp][ulIdx1*2+1] & (1 << ulIdx2))) + { + pucBuffer[ulIdx2] |= ((ucLevel << 0) & 0x0f); + } + } + + // + // If there is room, dump the single data byte column to the + // display. Otherwise, bail out. + // + if(ulX < 126) + { + OSRAMWriteData(pucBuffer, 8); + ulX += 2; + } + else + { + return; + } + } + + // + // Advance to the next character. + // + pcStr++; + } +} + +//***************************************************************************** +// +//! Displays an image on the OLED display. +//! +//! \param pucImage is a pointer to the image data. +//! \param ulX is the horizontal position to display this image, specified in +//! columns from the left edge of the display. +//! \param ulY is the vertical position to display this image, specified in +//! rows from the top of the display. +//! \param ulWidth is the width of the image, specified in columns. +//! \param ulHeight is the height of the image, specified in rows. +//! +//! This function will display a bitmap graphic on the display. Because of the +//! format of the display RAM, the starting column (/e ulX) and the number of +//! columns (/e ulWidth) must be an integer multiple of two. +//! +//! The image data is organized with the first row of image data appearing left +//! to right, followed immediately by the second row of image data. Each byte +//! contains the data for two columns in the current row, with the leftmost +//! column being contained in bits 7:4 and the rightmost column being contained +//! in bits 3:0. +//! +//! For example, an image six columns wide and seven scan lines tall would +//! be arranged as follows (showing how the twenty one bytes of the image would +//! appear on the display): +//! +//! \verbatim +//! +-------------------+-------------------+-------------------+ +//! | Byte 0 | Byte 1 | Byte 2 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 3 | Byte 4 | Byte 5 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 6 | Byte 7 | Byte 8 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 9 | Byte 10 | Byte 11 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 12 | Byte 13 | Byte 14 | +//! +---------+---------+---------+--3------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 15 | Byte 16 | Byte 17 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 18 | Byte 19 | Byte 20 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! \endverbatim +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by` +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4ImageDraw(const unsigned char *pucImage, unsigned long ulX, + unsigned long ulY, unsigned long ulWidth, + unsigned long ulHeight) +{ + static unsigned char pucBuffer[8]; + + // + // Check the arguments. + // + ASSERT(ulX < 128); + ASSERT((ulX & 1) == 0); + ASSERT(ulY < 64); + ASSERT((ulX + ulWidth) <= 128); + ASSERT((ulY + ulHeight) <= 64); + ASSERT((ulWidth & 1) == 0); + + // + // Setup a window starting at the specified column and row, and ending + // at the column + width and row+height. + // + pucBuffer[0] = 0x15; + pucBuffer[1] = ulX / 2; + pucBuffer[2] = (ulX + ulWidth - 2) / 2; + OSRAMWriteCommand(pucBuffer, 3); + pucBuffer[0] = 0x75; + pucBuffer[1] = ulY; + pucBuffer[2] = ulY + ulHeight - 1; + OSRAMWriteCommand(pucBuffer, 3); + OSRAMWriteCommand(g_pucOSRAM128x64x4HorizontalInc, + sizeof(g_pucOSRAM128x64x4HorizontalInc)); + + // + // Loop while there are more rows to display. + // + while(ulHeight--) + { + // + // Write this row of image data. + // + OSRAMWriteData(pucImage, (ulWidth / 2)); + + // + // Advance to the next row of the image. + // + pucImage += (ulWidth / 2); + } +} + +//***************************************************************************** +// +//! Enable the SSI component of the OLED display driver. +//! +//! \param ulFrequency specifies the SSI Clock Frequency to be used. +//! +//! This function initializes the SSI interface to the OLED display. +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4Enable(unsigned long ulFrequency) +{ + unsigned long ulTemp; + + // + // Disable the SSI port. + // + SSIDisable(SSI0_BASE); + + // + // Configure the SSI0 port for master mode. + // + SSIConfig(SSI0_BASE, SSI_FRF_MOTO_MODE_2, SSI_MODE_MASTER, ulFrequency, 8); + + // + // (Re)Enable SSI control of the FSS pin. + // + GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_3); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD_WPU); + + // + // Enable the SSI port. + // + SSIEnable(SSI0_BASE); + + // + // Drain the receive fifo. + // + while(SSIDataNonBlockingGet(SSI0_BASE, &ulTemp) != 0) + { + } + + // + // Indicate that the OSRAM driver can use the SSI Port. + // + g_bSSIEnabled = true; +} + +//***************************************************************************** +// +//! Enable the SSI component of the OLED display driver. +//! +//! \param ulFrequency specifies the SSI Clock Frequency to be used. +//! +//! This function initializes the SSI interface to the OLED display. +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4Disable(void) +{ + unsigned long ulTemp; + + // + // Indicate that the OSRAM driver can no longer use the SSI Port. + // + g_bSSIEnabled = false; + + // + // Drain the receive fifo. + // + while(SSIDataNonBlockingGet(SSI0_BASE, &ulTemp) != 0) + { + } + + // + // Disable the SSI port. + // + SSIDisable(SSI0_BASE); + + // + // Disable SSI control of the FSS pin. + // + GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_DIR_MODE_OUT); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD_WPU); + GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3); + +} + +//***************************************************************************** +// +//! Initialize the OLED display. +//! +//! \param ulFrequency specifies the SSI Clock Frequency to be used. +//! +//! This function initializes the SSI interface to the OLED display and +//! configures the SSD0323 controller on the panel. +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4Init(unsigned long ulFrequency) +{ + unsigned long ulIdx; + + // + // Enable the SSI0 and GPIO port blocks as they are needed by this driver. + // + SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); + SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); + + // + // Configure the SSI0CLK and SSIOTX pins for SSI operation. + // + GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD_WPU); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD_WPU); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_5, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD_WPU); + + // + // Configure the PC7 pin as a D/Cn signal for OLED device. + // + GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_DIR_MODE_OUT); + GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD); + GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_PIN_7); + + // + // Configure and enable the SSI0 port for master mode. + // + OSRAM128x64x4Enable(ulFrequency); + + // + // Clear the frame buffer. + // + OSRAM128x64x4Clear(); + + // + // Initialize the SSD0323 controller. Loop through the initialization + // sequence array, sending each command "string" to the controller. + // + for(ulIdx = 0; ulIdx < sizeof(g_pucOSRAM128x64x4Init); + ulIdx += g_pucOSRAM128x64x4Init[ulIdx] + 1) + { + // + // Send this command. + // + OSRAMWriteCommand(g_pucOSRAM128x64x4Init + ulIdx + 1, + g_pucOSRAM128x64x4Init[ulIdx] - 1); + } +} + +//***************************************************************************** +// +//! Turns on the OLED display. +//! +//! This function will turn on the OLED display, causing it to display the +//! contents of its internal frame buffer. +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4DisplayOn(void) +{ + unsigned long ulIdx; + + // + // Initialize the SSD0323 controller. Loop through the initialization + // sequence array, sending each command "string" to the controller. + // + for(ulIdx = 0; ulIdx < sizeof(g_pucOSRAM128x64x4Init); + ulIdx += g_pucOSRAM128x64x4Init[ulIdx] + 1) + { + // + // Send this command. + // + OSRAMWriteCommand(g_pucOSRAM128x64x4Init + ulIdx + 1, + g_pucOSRAM128x64x4Init[ulIdx] - 1); + } +} + +//***************************************************************************** +// +//! Turns off the OLED display. +//! +//! This function will turn off the OLED display. This will stop the scanning +//! of the panel and turn off the on-chip DC-DC converter, preventing damage to +//! the panel due to burn-in (it has similar characters to a CRT in this +//! respect). +//! +//! This function is contained in osram128x64x4.c, with +//! osram128x64x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +OSRAM128x64x4DisplayOff(void) +{ + static const unsigned char pucCommand1[] = + { + 0xAE, 0xAD, 0x02 + }; + + // + // Turn off the DC-DC converter and the display. + // + OSRAMWriteCommand(pucCommand1, sizeof(pucCommand1)); +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.h new file mode 100644 index 000000000..2ba7cb956 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/osram128x64x4.h @@ -0,0 +1,63 @@ +//***************************************************************************** +// +// osram128x64x4.h - Prototypes for the driver for the OSRAM 128x64x4 graphical +// OLED display. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1408 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __OSRAM128X64X4_H__ +#define __OSRAM128X64X4_H__ + +//***************************************************************************** +// +// Prototypes for the driver APIs. +// +//***************************************************************************** +extern void OSRAM128x64x4Clear(void); +extern void OSRAM128x64x4StringDraw(const char *pcStr, + unsigned long ulX, + unsigned long ulY, + unsigned char ucLevel); +extern void OSRAM128x64x4ImageDraw(const unsigned char *pucImage, + unsigned long ulX, + unsigned long ulY, + unsigned long ulWidth, + unsigned long ulHeight); +extern void OSRAM128x64x4Init(unsigned long ulFrequency); +extern void OSRAM128x64x4Enable(unsigned long ulFrequency); +extern void OSRAM128x64x4Disable(void); +extern void OSRAM128x64x4DisplayOn(void); +extern void OSRAM128x64x4DisplayOff(void); + +//***************************************************************************** +// +// The following macro(s) map old names for the OSRAM functions to the new +// names. In new code, the new names should be used in favor of the old names. +// +//***************************************************************************** +#ifndef DEPRECATED +#define OSRAM128x64x1InitSSI OSRAM128x64x4Enable +#endif + +#endif // __OSRAM128X64X4_H__ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/rit128x96x4.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/rit128x96x4.c new file mode 100644 index 000000000..cff38d557 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/rit128x96x4.c @@ -0,0 +1,981 @@ +//***************************************************************************** +// +// rit128x96x4.c - Driver for the RIT 128x96x4 graphical OLED display. +// +// Copyright (c) 2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1504-conf of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +//***************************************************************************** +// +//! \addtogroup ek_lm3sLM3S8962_api +//! @{ +// +//***************************************************************************** + +#include "hw_ssi.h" +#include "hw_memmap.h" +#include "hw_sysctl.h" +#include "hw_types.h" +#include "debug.h" +#include "gpio.h" +#include "ssi.h" +#include "sysctl.h" +#include "rit128x96x4.h" + +//***************************************************************************** +// +// Macros that define the peripheral, port, and pin used for the OLEDDC +// panel control signal. +// +//***************************************************************************** + +unsigned long ulGPIOId = 0, ulGPIOBase = 0, ulOLEDDC_PIN = 0, ulOLEDEN_PIN = 0; + +#define LM3S8962_SYSCTL_PERIPH_GPIO_OLEDDC SYSCTL_PERIPH_GPIOA +#define LM3S8962_GPIO_OLEDDC_BASE GPIO_PORTA_BASE +#define LM3S8962_GPIO_OLEDDC_PIN GPIO_PIN_6 +#define LM3S8962_GPIO_OLEDEN_PIN GPIO_PIN_7 + +#define LM3S1968_SYSCTL_PERIPH_GPIO_OLEDDC SYSCTL_PERIPH_GPIOH +#define LM3S1968_GPIO_OLEDDC_BASE GPIO_PORTH_BASE +#define LM3S1968_GPIO_OLEDDC_PIN GPIO_PIN_2 +#define LM3S1968_GPIO_OLEDEN_PIN GPIO_PIN_3 + + +//***************************************************************************** +// +// Flag to indicate if SSI port is enabled for display usage. +// +//***************************************************************************** +static volatile tBoolean g_bSSIEnabled = false; + +//***************************************************************************** +// +// Buffer for storing sequences of command and data for the display. +// +//***************************************************************************** +static unsigned char g_pucBuffer[8]; + +//***************************************************************************** +// +// Define the SSD1329 128x96x4 Remap Setting(s). This will be used in +// several places in the code to switch between vertical and horizontal +// address incrementing. Note that the controller support 128 rows while +// the RIT display only uses 96. +// +// The Remap Command (0xA0) takes one 8-bit parameter. The parameter is +// defined as follows. +// +// Bit 7: Reserved +// Bit 6: Disable(0)/Enable(1) COM Split Odd Even +// When enabled, the COM signals are split Odd on one side, even on +// the other. Otherwise, they are split 0-63 on one side, 64-127 on +// the other. +// Bit 5: Reserved +// Bit 4: Disable(0)/Enable(1) COM Remap +// When Enabled, ROW 0-127 map to COM 127-0 (i.e. reverse row order) +// Bit 3: Reserved +// Bit 2: Horizontal(0)/Vertical(1) Address Increment +// When set, data RAM address will increment along the column rather +// than along the row. +// Bit 1: Disable(0)/Enable(1) Nibble Remap +// When enabled, the upper and lower nibbles in the DATA bus for access +// to the data RAM are swapped. +// Bit 0: Disable(0)/Enable(1) Column Address Remap +// When enabled, DATA RAM columns 0-63 are remapped to Segment Columns +// 127-0. +// +//***************************************************************************** +#define RIT_INIT_REMAP 0x52 // app note says 0x51 +#define RIT_INIT_OFFSET 0x00 +static const unsigned char g_pucRIT128x96x4VerticalInc[] = { 0xA0, 0x56 }; +static const unsigned char g_pucRIT128x96x4HorizontalInc[] = { 0xA0, 0x52 }; + +//***************************************************************************** +// +// A 5x7 font (in a 6x8 cell, where the sixth column is omitted from this +// table) for displaying text on the OLED display. The data is organized as +// bytes from the left column to the right column, with each byte containing +// the top row in the LSB and the bottom row in the MSB. +// +// Note: This is the same font data that is used in the EK-LM3S811 +// osram96x16x1 driver. The single bit-per-pixel is expaned in the StringDraw +// function to the appropriate four bit-per-pixel gray scale format. +// +//***************************************************************************** +static const unsigned char g_pucFont[96][5] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // " " + { 0x00, 0x00, 0x4f, 0x00, 0x00 }, // ! + { 0x00, 0x07, 0x00, 0x07, 0x00 }, // " + { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # + { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ + { 0x23, 0x13, 0x08, 0x64, 0x62 }, // % + { 0x36, 0x49, 0x55, 0x22, 0x50 }, // & + { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' + { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( + { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) + { 0x14, 0x08, 0x3e, 0x08, 0x14 }, // * + { 0x08, 0x08, 0x3e, 0x08, 0x08 }, // + + { 0x00, 0x50, 0x30, 0x00, 0x00 }, // , + { 0x08, 0x08, 0x08, 0x08, 0x08 }, // - + { 0x00, 0x60, 0x60, 0x00, 0x00 }, // . + { 0x20, 0x10, 0x08, 0x04, 0x02 }, // / + { 0x3e, 0x51, 0x49, 0x45, 0x3e }, // 0 + { 0x00, 0x42, 0x7f, 0x40, 0x00 }, // 1 + { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 + { 0x21, 0x41, 0x45, 0x4b, 0x31 }, // 3 + { 0x18, 0x14, 0x12, 0x7f, 0x10 }, // 4 + { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 + { 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // 6 + { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 + { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 + { 0x06, 0x49, 0x49, 0x29, 0x1e }, // 9 + { 0x00, 0x36, 0x36, 0x00, 0x00 }, // : + { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; + { 0x08, 0x14, 0x22, 0x41, 0x00 }, // < + { 0x14, 0x14, 0x14, 0x14, 0x14 }, // = + { 0x00, 0x41, 0x22, 0x14, 0x08 }, // > + { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? + { 0x32, 0x49, 0x79, 0x41, 0x3e }, // @ + { 0x7e, 0x11, 0x11, 0x11, 0x7e }, // A + { 0x7f, 0x49, 0x49, 0x49, 0x36 }, // B + { 0x3e, 0x41, 0x41, 0x41, 0x22 }, // C + { 0x7f, 0x41, 0x41, 0x22, 0x1c }, // D + { 0x7f, 0x49, 0x49, 0x49, 0x41 }, // E + { 0x7f, 0x09, 0x09, 0x09, 0x01 }, // F + { 0x3e, 0x41, 0x49, 0x49, 0x7a }, // G + { 0x7f, 0x08, 0x08, 0x08, 0x7f }, // H + { 0x00, 0x41, 0x7f, 0x41, 0x00 }, // I + { 0x20, 0x40, 0x41, 0x3f, 0x01 }, // J + { 0x7f, 0x08, 0x14, 0x22, 0x41 }, // K + { 0x7f, 0x40, 0x40, 0x40, 0x40 }, // L + { 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // M + { 0x7f, 0x04, 0x08, 0x10, 0x7f }, // N + { 0x3e, 0x41, 0x41, 0x41, 0x3e }, // O + { 0x7f, 0x09, 0x09, 0x09, 0x06 }, // P + { 0x3e, 0x41, 0x51, 0x21, 0x5e }, // Q + { 0x7f, 0x09, 0x19, 0x29, 0x46 }, // R + { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S + { 0x01, 0x01, 0x7f, 0x01, 0x01 }, // T + { 0x3f, 0x40, 0x40, 0x40, 0x3f }, // U + { 0x1f, 0x20, 0x40, 0x20, 0x1f }, // V + { 0x3f, 0x40, 0x38, 0x40, 0x3f }, // W + { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X + { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y + { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z + { 0x00, 0x7f, 0x41, 0x41, 0x00 }, // [ + { 0x02, 0x04, 0x08, 0x10, 0x20 }, // "\" + { 0x00, 0x41, 0x41, 0x7f, 0x00 }, // ] + { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ + { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ + { 0x00, 0x01, 0x02, 0x04, 0x00 }, // ` + { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a + { 0x7f, 0x48, 0x44, 0x44, 0x38 }, // b + { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c + { 0x38, 0x44, 0x44, 0x48, 0x7f }, // d + { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e + { 0x08, 0x7e, 0x09, 0x01, 0x02 }, // f + { 0x0c, 0x52, 0x52, 0x52, 0x3e }, // g + { 0x7f, 0x08, 0x04, 0x04, 0x78 }, // h + { 0x00, 0x44, 0x7d, 0x40, 0x00 }, // i + { 0x20, 0x40, 0x44, 0x3d, 0x00 }, // j + { 0x7f, 0x10, 0x28, 0x44, 0x00 }, // k + { 0x00, 0x41, 0x7f, 0x40, 0x00 }, // l + { 0x7c, 0x04, 0x18, 0x04, 0x78 }, // m + { 0x7c, 0x08, 0x04, 0x04, 0x78 }, // n + { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o + { 0x7c, 0x14, 0x14, 0x14, 0x08 }, // p + { 0x08, 0x14, 0x14, 0x18, 0x7c }, // q + { 0x7c, 0x08, 0x04, 0x04, 0x08 }, // r + { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s + { 0x04, 0x3f, 0x44, 0x40, 0x20 }, // t + { 0x3c, 0x40, 0x40, 0x20, 0x7c }, // u + { 0x1c, 0x20, 0x40, 0x20, 0x1c }, // v + { 0x3c, 0x40, 0x30, 0x40, 0x3c }, // w + { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x + { 0x0c, 0x50, 0x50, 0x50, 0x3c }, // y + { 0x44, 0x64, 0x54, 0x4c, 0x44 }, // z + { 0x00, 0x08, 0x36, 0x41, 0x00 }, // { + { 0x00, 0x00, 0x7f, 0x00, 0x00 }, // | + { 0x00, 0x41, 0x36, 0x08, 0x00 }, // } + { 0x02, 0x01, 0x02, 0x04, 0x02 }, // ~ + { 0x02, 0x01, 0x02, 0x04, 0x02 }, // ~ +}; + +//***************************************************************************** +// +// The sequence of commands used to initialize the SSD1329 controller. Each +// command is described as follows: there is a byte specifying the number of +// bytes in the command sequence, followed by that many bytes of command data. +// Note: This initialization sequence is derived from RIT App Note for +// the P14201. Values used are from the RIT app note, except where noted. +// +//***************************************************************************** +static const unsigned char g_pucRIT128x96x4Init[] = +{ + // + // Unlock commands + // + 3, 0xFD, 0x12, 0xe3, + + // + // Display off + // + 2, 0xAE, 0xe3, + + // + // Icon off + // + 3, 0x94, 0, 0xe3, + + // + // Multiplex ratio + // + 3, 0xA8, 95, 0xe3, + + // + // Contrast + // + 3, 0x81, 0xb7, 0xe3, + + // + // Pre-charge current + // + 3, 0x82, 0x3f, 0xe3, + + // + // Display Re-map + // + 3, 0xA0, RIT_INIT_REMAP, 0xe3, + + // + // Display Start Line + // + 3, 0xA1, 0, 0xe3, + + // + // Display Offset + // + 3, 0xA2, RIT_INIT_OFFSET, 0xe3, + + // + // Display Mode Normal + // + 2, 0xA4, 0xe3, + + // + // Phase Length + // + 3, 0xB1, 0x11, 0xe3, + + // + // Frame frequency + // + 3, 0xB2, 0x23, 0xe3, + + // + // Front Clock Divider + // + 3, 0xB3, 0xe2, 0xe3, + + // + // Set gray scale table. App note uses default command: + // 2, 0xB7, 0xe3 + // This gray scale attempts some gamma correction to reduce the + // the brightness of the low levels. + // + 17, 0xB8, 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 19, 22, 26, 30, 0xe3, + + // + // Second pre-charge period. App note uses value 0x04. + // + 3, 0xBB, 0x01, 0xe3, + + // + // Pre-charge voltage + // + 3, 0xBC, 0x3f, 0xe3, + + // + // Display ON + // + 2, 0xAF, 0xe3, +}; + +//***************************************************************************** +// +//! \internal +//! +//! Write a sequence of command bytes to the SSD1329 controller. +//! +//! The data is written in a polled fashion; this function will not return +//! until the entire byte sequence has been written to the controller. +//! +//! \return None. +// +//***************************************************************************** +static void +RITWriteCommand(const unsigned char *pucBuffer, unsigned long ulCount) +{ + unsigned long ulTemp; + + // + // Return if SSI port is not enabled for RIT display. + // + if(!g_bSSIEnabled) + { + return; + } + + // + // Clear the command/control bit to enable command mode. + // + GPIOPinWrite(ulGPIOBase, ulOLEDDC_PIN, 0); + + // + // Loop while there are more bytes left to be transferred. + // + while(ulCount != 0) + { + // + // Write the next byte to the controller. + // + SSIDataPut(SSI0_BASE, *pucBuffer++); + + // + // Dummy read to drain the fifo and time the GPIO signal. + // + SSIDataGet(SSI0_BASE, &ulTemp); + + // + // Decrement the BYTE counter. + // + ulCount--; + } +} + +//***************************************************************************** +// +//! \internal +//! +//! Write a sequence of data bytes to the SSD1329 controller. +//! +//! The data is written in a polled fashion; this function will not return +//! until the entire byte sequence has been written to the controller. +//! +//! \return None. +// +//***************************************************************************** +static void +RITWriteData(const unsigned char *pucBuffer, unsigned long ulCount) +{ + unsigned long ulTemp; + + // + // Return if SSI port is not enabled for RIT display. + // + if(!g_bSSIEnabled) + { + return; + } + + // + // Set the command/control bit to enable data mode. + // + GPIOPinWrite(ulGPIOBase, ulOLEDDC_PIN, ulOLEDDC_PIN); + + // + // Loop while there are more bytes left to be transferred. + // + while(ulCount != 0) + { + // + // Write the next byte to the controller. + // + SSIDataPut(SSI0_BASE, *pucBuffer++); + + // + // Dummy read to drain the fifo and time the GPIO signal. + // + SSIDataGet(SSI0_BASE, &ulTemp); + + // + // Decrement the BYTE counter. + // + ulCount--; + } +} + +//***************************************************************************** +// +//! Clears the OLED display. +//! +//! This function will clear the display RAM. All pixels in the display will +//! be turned off. +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4Clear(void) +{ + static const unsigned char pucCommand1[] = { 0x15, 0, 63 }; + static const unsigned char pucCommand2[] = { 0x75, 0, 127 }; + unsigned long ulRow, ulColumn; + + // + // Clear out the buffer used for sending bytes to the display. + *(unsigned long *)&g_pucBuffer[0] = 0; + *(unsigned long *)&g_pucBuffer[4] = 0; + + // + // Set the window to fill the entire display. + // + RITWriteCommand(pucCommand1, sizeof(pucCommand1)); + RITWriteCommand(pucCommand2, sizeof(pucCommand2)); + RITWriteCommand(g_pucRIT128x96x4HorizontalInc, + sizeof(g_pucRIT128x96x4HorizontalInc)); + + // + // Loop through the rows + // + for(ulRow = 0; ulRow < 96; ulRow++) + { + // + // Loop through the columns. Each byte is two pixels, + // and the buffer hold 8 bytes, so 16 pixels are cleared + // at a time. + // + for(ulColumn = 0; ulColumn < 128; ulColumn += 8 * 2) + { + // + // Write 8 clearing bytes to the display, which will + // clear 16 pixels across. + // + RITWriteData(g_pucBuffer, sizeof(g_pucBuffer)); + } + } +} + +//***************************************************************************** +// +//! Displays a string on the OLED display. +//! +//! \param pcStr is a pointer to the string to display. +//! \param ulX is the horizontal position to display the string, specified in +//! columns from the left edge of the display. +//! \param ulY is the vertical position to display the string, specified in +//! rows from the top edge of the display. +//! \param ucLevel is the 4-bit grey scale value to be used for displayed text. +//! +//! This function will draw a string on the display. Only the ASCII characters +//! between 32 (space) and 126 (tilde) are supported; other characters will +//! result in random data being draw on the display (based on whatever appears +//! before/after the font in memory). The font is mono-spaced, so characters +//! such as "i" and "l" have more white space around them than characters such +//! as "m" or "w". +//! +//! If the drawing of the string reaches the right edge of the display, no more +//! characters will be drawn. Therefore, special care is not required to avoid +//! supplying a string that is "too long" to display. +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \note Because the OLED display packs 2 pixels of data in a single byte, the +//! parameter \e ulX must be an even column number (e.g. 0, 2, 4, etc). +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4StringDraw(const char *pcStr, unsigned long ulX, + unsigned long ulY, unsigned char ucLevel) +{ + unsigned long ulIdx1, ulIdx2; + unsigned char ucTemp; + + // + // Check the arguments. + // + ASSERT(ulX < 128); + ASSERT((ulX & 1) == 0); + ASSERT(ulY < 96); + ASSERT(ucLevel < 16); + + // + // Setup a window starting at the specified column and row, ending + // at the right edge of the display and 8 rows down (single character row). + // + g_pucBuffer[0] = 0x15; + g_pucBuffer[1] = ulX / 2; + g_pucBuffer[2] = 63; + RITWriteCommand(g_pucBuffer, 3); + g_pucBuffer[0] = 0x75; + g_pucBuffer[1] = ulY; + g_pucBuffer[2] = ulY + 7; + RITWriteCommand(g_pucBuffer, 3); + RITWriteCommand(g_pucRIT128x96x4VerticalInc, + sizeof(g_pucRIT128x96x4VerticalInc)); + + // + // Loop while there are more characters in the string. + // + while(*pcStr != 0) + { + // + // Get a working copy of the current character and convert to an + // index into the character bit-map array. + // + ucTemp = *pcStr; + ucTemp &= 0x7F; + if(ucTemp < ' ') + { + ucTemp = ' '; + } + else + { + ucTemp -= ' '; + } + + // + // Build and display the character buffer. + // + for(ulIdx1 = 0; ulIdx1 < 3; ulIdx1++) + { + // + // Convert two columns of 1-bit font data into a single data + // byte column of 4-bit font data. + // + for(ulIdx2 = 0; ulIdx2 < 8; ulIdx2++) + { + g_pucBuffer[ulIdx2] = 0; + if(g_pucFont[ucTemp][ulIdx1*2] & (1 << ulIdx2)) + { + g_pucBuffer[ulIdx2] = ((ucLevel << 4) & 0xf0); + } + if((ulIdx1 < 2) && + (g_pucFont[ucTemp][ulIdx1*2+1] & (1 << ulIdx2))) + { + g_pucBuffer[ulIdx2] |= ((ucLevel << 0) & 0x0f); + } + } + + // + // If there is room, dump the single data byte column to the + // display. Otherwise, bail out. + // + if(ulX < 126) + { + RITWriteData(g_pucBuffer, 8); + ulX += 2; + } + else + { + return; + } + } + + // + // Advance to the next character. + // + pcStr++; + } +} + +//***************************************************************************** +// +//! Displays an image on the OLED display. +//! +//! \param pucImage is a pointer to the image data. +//! \param ulX is the horizontal position to display this image, specified in +//! columns from the left edge of the display. +//! \param ulY is the vertical position to display this image, specified in +//! rows from the top of the display. +//! \param ulWidth is the width of the image, specified in columns. +//! \param ulHeight is the height of the image, specified in rows. +//! +//! This function will display a bitmap graphic on the display. Because of the +//! format of the display RAM, the starting column (\e ulX) and the number of +//! columns (\e ulWidth) must be an integer multiple of two. +//! +//! The image data is organized with the first row of image data appearing left +//! to right, followed immediately by the second row of image data. Each byte +//! contains the data for two columns in the current row, with the leftmost +//! column being contained in bits 7:4 and the rightmost column being contained +//! in bits 3:0. +//! +//! For example, an image six columns wide and seven scan lines tall would +//! be arranged as follows (showing how the twenty one bytes of the image would +//! appear on the display): +//! +//! \verbatim +//! +-------------------+-------------------+-------------------+ +//! | Byte 0 | Byte 1 | Byte 2 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 3 | Byte 4 | Byte 5 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 6 | Byte 7 | Byte 8 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 9 | Byte 10 | Byte 11 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 12 | Byte 13 | Byte 14 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 15 | Byte 16 | Byte 17 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! | Byte 18 | Byte 19 | Byte 20 | +//! +---------+---------+---------+---------+---------+---------+ +//! | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | +//! +---------+---------+---------+---------+---------+---------+ +//! \endverbatim +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4ImageDraw(const unsigned char *pucImage, unsigned long ulX, + unsigned long ulY, unsigned long ulWidth, + unsigned long ulHeight) +{ + // + // Check the arguments. + // + ASSERT(ulX < 128); + ASSERT((ulX & 1) == 0); + ASSERT(ulY < 96); + ASSERT((ulX + ulWidth) <= 128); + ASSERT((ulY + ulHeight) <= 96); + ASSERT((ulWidth & 1) == 0); + + // + // Setup a window starting at the specified column and row, and ending + // at the column + width and row+height. + // + g_pucBuffer[0] = 0x15; + g_pucBuffer[1] = ulX / 2; + g_pucBuffer[2] = (ulX + ulWidth - 2) / 2; + RITWriteCommand(g_pucBuffer, 3); + g_pucBuffer[0] = 0x75; + g_pucBuffer[1] = ulY; + g_pucBuffer[2] = ulY + ulHeight - 1; + RITWriteCommand(g_pucBuffer, 3); + RITWriteCommand(g_pucRIT128x96x4HorizontalInc, + sizeof(g_pucRIT128x96x4HorizontalInc)); + + // + // Loop while there are more rows to display. + // + while(ulHeight--) + { + // + // Write this row of image data. + // + RITWriteData(pucImage, (ulWidth / 2)); + + // + // Advance to the next row of the image. + // + pucImage += (ulWidth / 2); + } +} + +//***************************************************************************** +// +//! Enable the SSI component of the OLED display driver. +//! +//! \param ulFrequency specifies the SSI Clock Frequency to be used. +//! +//! This function initializes the SSI interface to the OLED display. +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4Enable(unsigned long ulFrequency) +{ + unsigned long ulTemp; + + // + // Disable the SSI port. + // + SSIDisable(SSI0_BASE); + + // + // Configure the SSI0 port for master mode. + // + SSIConfig(SSI0_BASE, SSI_FRF_MOTO_MODE_2, SSI_MODE_MASTER, ulFrequency, 8); + + // + // (Re)Enable SSI control of the FSS pin. + // + GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_3); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD_WPU); + + // + // Enable the SSI port. + // + SSIEnable(SSI0_BASE); + + // + // Drain the receive fifo. + // + while(SSIDataNonBlockingGet(SSI0_BASE, &ulTemp) != 0) + { + } + + // + // Indicate that the RIT driver can use the SSI Port. + // + g_bSSIEnabled = true; +} + +//***************************************************************************** +// +//! Enable the SSI component of the OLED display driver. +//! +//! This function initializes the SSI interface to the OLED display. +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4Disable(void) +{ + unsigned long ulTemp; + + // + // Indicate that the RIT driver can no longer use the SSI Port. + // + g_bSSIEnabled = false; + + // + // Drain the receive fifo. + // + while(SSIDataNonBlockingGet(SSI0_BASE, &ulTemp) != 0) + { + } + + // + // Disable the SSI port. + // + SSIDisable(SSI0_BASE); + + // + // Disable SSI control of the FSS pin. + // + GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_3); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, + GPIO_PIN_TYPE_STD_WPU); + GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3); +} + +//***************************************************************************** +// +//! Initialize the OLED display. +//! +//! \param ulFrequency specifies the SSI Clock Frequency to be used. +//! +//! This function initializes the SSI interface to the OLED display and +//! configures the SSD1329 controller on the panel. +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4Init(unsigned long ulFrequency) +{ + unsigned long ulIdx; + + + /* Determine which board is being used. */ + if( SysCtlPeripheralPresent( SYSCTL_PERIPH_ETH ) ) + { + /* Ethernet is present, we must be using the LM3S8962 EK. */ + ulGPIOId = LM3S8962_SYSCTL_PERIPH_GPIO_OLEDDC; + ulGPIOBase = LM3S8962_GPIO_OLEDDC_BASE; + ulOLEDDC_PIN = GPIO_PIN_6; + ulOLEDEN_PIN = GPIO_PIN_7; + } + else + { + /* Ethernet is not present, we must be using the LM3S1968 EK. */ + ulGPIOId = LM3S1968_SYSCTL_PERIPH_GPIO_OLEDDC; + ulGPIOBase = LM3S1968_GPIO_OLEDDC_BASE; + ulOLEDDC_PIN = GPIO_PIN_2; + ulOLEDEN_PIN = GPIO_PIN_3; + } + + // + // Enable the SSI0 and GPIO port blocks as they are needed by this driver. + // + SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); + SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + SysCtlPeripheralEnable(ulGPIOId); + + // + // Configure the SSI0CLK and SSIOTX pins for SSI operation. + // + GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5); + GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5, + GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); + + // + // Configure the GPIO port pin used as a D/Cn signal for OLED device, + // and the port pin used to enable power to the OLED panel. + // + GPIOPinTypeGPIOOutput(ulGPIOBase, ulOLEDDC_PIN | ulOLEDEN_PIN); + GPIOPadConfigSet(ulGPIOBase, ulOLEDDC_PIN | ulOLEDEN_PIN, + GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD); + GPIOPinWrite(ulGPIOBase, ulOLEDDC_PIN | ulOLEDEN_PIN, + ulOLEDDC_PIN | ulOLEDEN_PIN); + + // + // Configure and enable the SSI0 port for master mode. + // + RIT128x96x4Enable(ulFrequency); + + // + // Clear the frame buffer. + // + RIT128x96x4Clear(); + + // + // Initialize the SSD1329 controller. Loop through the initialization + // sequence array, sending each command "string" to the controller. + // + for(ulIdx = 0; ulIdx < sizeof(g_pucRIT128x96x4Init); + ulIdx += g_pucRIT128x96x4Init[ulIdx] + 1) + { + // + // Send this command. + // + RITWriteCommand(g_pucRIT128x96x4Init + ulIdx + 1, + g_pucRIT128x96x4Init[ulIdx] - 1); + } +} + +//***************************************************************************** +// +//! Turns on the OLED display. +//! +//! This function will turn on the OLED display, causing it to display the +//! contents of its internal frame buffer. +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4DisplayOn(void) +{ + unsigned long ulIdx; + + // + // Initialize the SSD1329 controller. Loop through the initialization + // sequence array, sending each command "string" to the controller. + // + for(ulIdx = 0; ulIdx < sizeof(g_pucRIT128x96x4Init); + ulIdx += g_pucRIT128x96x4Init[ulIdx] + 1) + { + // + // Send this command. + // + RITWriteCommand(g_pucRIT128x96x4Init + ulIdx + 1, + g_pucRIT128x96x4Init[ulIdx] - 1); + } +} + +//***************************************************************************** +// +//! Turns off the OLED display. +//! +//! This function will turn off the OLED display. This will stop the scanning +//! of the panel and turn off the on-chip DC-DC converter, preventing damage to +//! the panel due to burn-in (it has similar characters to a CRT in this +//! respect). +//! +//! This function is contained in rit128x96x4.c, with +//! rit128x96x4.h containing the API definition for use by +//! applications. +//! +//! \return None. +// +//***************************************************************************** +void +RIT128x96x4DisplayOff(void) +{ + static const unsigned char pucCommand1[] = + { + 0xAE, 0xe3 + }; + + // + // Put the display to sleep. + // + RITWriteCommand(pucCommand1, sizeof(pucCommand1)); +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.cspy.bat b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.cspy.bat new file mode 100644 index 000000000..ba9287cf8 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.cspy.bat @@ -0,0 +1,32 @@ +@REM This bat file has been generated by the IAR Embeddded Workbench +@REM C-SPY interactive debugger,as an aid to preparing a command +@REM line for running the cspybat command line utility with the +@REM appropriate settings. +@REM +@REM After making some adjustments to this file, you can launch cspybat +@REM by typing the name of this file followed by the name of the debug +@REM file (usually an ubrof file). Note that this file is generated +@REM every time a new debug session is initialized, so you may want to +@REM move or rename the file before making changes. +@REM +@REM Note: some command line arguments cannot be properly generated +@REM by this process. Specifically, the plugin which is responsible +@REM for the Terminal I/O window (and other C runtime functionality) +@REM comes in a special version for cspybat, and the name of that +@REM plugin dll is not known when generating this file. It resides in +@REM the $TOOLKIT_DIR$\bin folder and is usually called XXXbat.dll or +@REM XXXlibsupportbat.dll, where XXX is the name of the corresponding +@REM tool chain. Replace the '' parameter +@REM below with the appropriate file name. Other plugins loaded by +@REM C-SPY are usually not needed by, or will not work in, cspybat +@REM but they are listed at the end of this file for reference. + + +"C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\bin\cspybat" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\ARM\bin\armproc.dll" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\ARM\bin\armlmiftdi.dll" %1 --plugin "C:\Devtools\IAR Systems\Embedded Workbench 4.0\ARM\bin\" --backend -B "--endian" "little" "--cpu" "cortex-M3" "--fpu" "None" "--proc_device_desc_file" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\ARM\CONFIG\iolm3sxxxx.ddf" "--drv_verify_download" "all" "--proc_driver" "lmiftdi" "--lmiftdi_speed" "500" + + +@REM Loaded plugins: +@REM armlibsupport.dll +@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\CodeCoverage\CodeCoverage.dll +@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\Profiling\Profiling.dll +@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\stack\stack.dll diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dbgdt b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dbgdt new file mode 100644 index 000000000..33f4649c2 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dbgdt @@ -0,0 +1,5 @@ + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dni b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dni new file mode 100644 index 000000000..61d49c1b0 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.dni @@ -0,0 +1,4 @@ +[Disassemble mode] +mode=1 +[Breakpoints] +Count=0 diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.wsdt b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.wsdt new file mode 100644 index 000000000..c93053f8a --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/settings/RTOSDemo.wsdt @@ -0,0 +1,97 @@ + + + + + + RTOSDemo/Debug + + + + + + + 124 + 27 + 27 + 27 + + + + + + + + TabID-18883-22024 + Workspace + Workspace + + + RTOSDemo + + + + + 0 + + + + + 0 + + + 1000000 + 1000000 + + + 1 + + + + + + + iaridepm.enu1 + + + + + + + + + + -2 + -2 + 938 + 198 + -2 + -2 + 200 + 200 + 142857 + 203666 + 142857 + 957230 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_ewarm.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_ewarm.c new file mode 100644 index 000000000..af1c8ac18 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_ewarm.c @@ -0,0 +1,265 @@ +//***************************************************************************** +// +// startup_ewarm.c - Boot code for Stellaris. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 100 of the Stellaris Ethernet +// Applications Library. +// +//***************************************************************************** + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** + + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); +extern void xPortPendSVHandler(void); +extern void xPortSysTickHandler(void); +extern void vEMAC_ISR( void ); +extern Timer0IntHandler( void ); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +#ifndef STACK_SIZE +#define STACK_SIZE 64 +#endif +static unsigned long pulStack[STACK_SIZE]; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + unsigned long ulPtr; +} +uVectorEntry; + +//***************************************************************************** +// +// The minimal vector table for a Cortex M3. Note that the proper constructs +// must be placed on this to ensure that it ends up at physical address +// 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry g_pfnVectors[] @ "INTVEC" = +{ + { .ulPtr = (unsigned long)pulStack + sizeof(pulStack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + xPortPendSVHandler, // The PendSV handler + xPortSysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI Rx and Tx + IntDefaultHandler, // I2C Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + Timer0IntHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // Quadrature Encoder 1 + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // CAN2 + vEMAC_ISR, // Ethernet + IntDefaultHandler // Power Island +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +#pragma segment="DATA_ID" +#pragma segment="DATA_I" +#pragma segment="DATA_Z" + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + unsigned long *pulSrc, *pulDest, *pulEnd; + + // + // Copy the data segment initializers from flash to SRAM. + // + pulSrc = __segment_begin("DATA_ID"); + pulDest = __segment_begin("DATA_I"); + pulEnd = __segment_end("DATA_I"); + while(pulDest < pulEnd) + { + *pulDest++ = *pulSrc++; + } + + // + // Zero fill the bss segment. + // + pulDest = __segment_begin("DATA_Z"); + pulEnd = __segment_end("DATA_Z"); + while(pulDest < pulEnd) + { + *pulDest++ = 0; + } + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_rvmdk.S b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_rvmdk.S new file mode 100644 index 000000000..ddedd9af5 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/startup_rvmdk.S @@ -0,0 +1,248 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2007 Luminary Micro, Inc. All rights reserved. +; +; Software License Agreement +; +; Luminary Micro, Inc. (LMI) is supplying this software for use solely and +; exclusively on LMI's microcontroller products. +; +; The software is owned by LMI and/or its suppliers, and is protected under +; applicable copyright laws. All rights are reserved. Any use in violation +; of the foregoing restrictions may subject the user to criminal sanctions +; under applicable laws, as well as to civil liability for the breach of the +; terms and conditions of this license. +; +; THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +; OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +; LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 1408 of the Stellaris Peripheral Driver Library. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; MPU Fault Handler + DCD IntDefaultHandler ; Bus Fault Handler + DCD IntDefaultHandler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall Handler + DCD IntDefaultHandler ; Debug Monitor Handler + DCD 0 ; Reserved + EXTERN xPortPendSVHandler + DCD xPortPendSVHandler ; PendSV Handler + EXTERN xPortSysTickHandler + DCD xPortSysTickHandler ; SysTick Handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 + DCD IntDefaultHandler ; UART1 + DCD IntDefaultHandler ; SSI + DCD IntDefaultHandler ; I2C + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog + EXTERN Timer0IntHandler + DCD Timer0IntHandler ; Timer 0A + DCD IntDefaultHandler ; Timer 0B + DCD IntDefaultHandler ; Timer 1A + DCD IntDefaultHandler ; Timer 1B + DCD IntDefaultHandler ; Timer 2A + DCD IntDefaultHandler ; Timer 2B + DCD IntDefaultHandler ; Comp 0 + DCD IntDefaultHandler ; Comp 1 + DCD IntDefaultHandler ; Comp 2 + DCD IntDefaultHandler ; System Control + DCD IntDefaultHandler ; Flash Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; Quadrature Encoder 1 + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD 0 ; Reserved + EXTERN vEMAC_ISR + DCD vEMAC_ISR ; Ethernet + DCD IntDefaultHandler ; Hibernate + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. It will then call __rt_entry, which will be either the + ; C library version or the one supplied here depending on the + ; configured startup type. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/timertest.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/timertest.c new file mode 100644 index 000000000..adcc71698 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/timertest.c @@ -0,0 +1,133 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + + Also see http://www.SafeRTOS.com for an IEC 61508 compliant version along + with commercial development and support options. + *************************************************************************** +*/ + +/* High speed timer test as described in main.c. */ + +/* Scheduler includes. */ +#include "FreeRTOS.h" + +/* Library includes. */ +#include "hw_ints.h" +#include "hw_memmap.h" +#include "hw_types.h" +#include "interrupt.h" +#include "sysctl.h" +#include "lmi_timer.h" + +/* The set frequency of the interrupt. Deviations from this are measured as +the jitter. */ +#define timerINTERRUPT_FREQUENCY ( 20000UL ) + +/* The expected time between each of the timer interrupts - if the jitter was +zero. */ +#define timerEXPECTED_DIFFERENCE_VALUE ( configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY ) + +/* The highest available interrupt priority. */ +#define timerHIGHEST_PRIORITY ( 0 ) + +/* Misc defines. */ +#define timerMAX_32BIT_VALUE ( 0xffffffffUL ) +#define timerTIMER_1_COUNT_VALUE ( * ( ( unsigned long * ) ( TIMER1_BASE + 0x48 ) ) ) + +/*-----------------------------------------------------------*/ + +/* Interrupt handler in which the jitter is measured. */ +void Timer0IntHandler( void ); + +/* Stores the value of the maximum recorded jitter between interrupts. */ +unsigned portLONG ulMaxJitter = 0; + +/*-----------------------------------------------------------*/ + +void vSetupTimer( void ) +{ +unsigned long ulFrequency; + + /* Timer zero is used to generate the interrupts, and timer 1 is used + to measure the jitter. */ + SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); + SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER1 ); + TimerConfigure( TIMER0_BASE, TIMER_CFG_32_BIT_PER ); + TimerConfigure( TIMER1_BASE, TIMER_CFG_32_BIT_PER ); + + /* Set the timer interrupt to be above the kernel - highest. */ + IntPrioritySet( INT_TIMER0A, timerHIGHEST_PRIORITY ); + + /* Just used to measure time. */ + TimerLoadSet(TIMER1_BASE, TIMER_A, timerMAX_32BIT_VALUE ); + + /* The rate at which the timer will interrupt. */ + ulFrequency = configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY; + TimerLoadSet( TIMER0_BASE, TIMER_A, ulFrequency ); + IntEnable( INT_TIMER0A ); + TimerIntEnable( TIMER0_BASE, TIMER_TIMA_TIMEOUT ); + + /* Enable both timers. */ + TimerEnable( TIMER0_BASE, TIMER_A ); + TimerEnable( TIMER1_BASE, TIMER_A ); +} +/*-----------------------------------------------------------*/ + +void Timer0IntHandler( void ) +{ +unsigned portLONG ulDifference, ulCurrentCount; +static portLONG ulMaxDifference = 0, ulLastCount = 0; + + /* We use the timer 1 counter value to measure the clock cycles between + the timer 0 interrupts. */ + ulCurrentCount = timerTIMER_1_COUNT_VALUE; + + if( ulCurrentCount < ulLastCount ) + { + /* How many times has timer 1 counted since the last interrupt? */ + ulDifference = ulLastCount - ulCurrentCount; + + /* Is this the largest difference we have measured yet? */ + if( ulDifference > ulMaxDifference ) + { + ulMaxDifference = ulDifference; + ulMaxJitter = ulMaxDifference - timerEXPECTED_DIFFERENCE_VALUE; + } + } + + ulLastCount = ulCurrentCount; + + TimerIntClear( TIMER0_BASE, TIMER_TIMA_TIMEOUT ); +} + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/Makefile.webserver b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/Makefile.webserver new file mode 100644 index 000000000..f38c47a72 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/Makefile.webserver @@ -0,0 +1 @@ +APP_SOURCES += httpd.c http-strings.c httpd-fs.c httpd-cgi.c diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/clock-arch.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/clock-arch.h new file mode 100644 index 000000000..cde657b62 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/clock-arch.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +#ifndef __CLOCK_ARCH_H__ +#define __CLOCK_ARCH_H__ + +#include "FreeRTOS.h" + +typedef unsigned long clock_time_t; +#define CLOCK_CONF_SECOND configTICK_RATE_HZ + +#endif /* __CLOCK_ARCH_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.c new file mode 100644 index 000000000..5fcb0aa3c --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.c @@ -0,0 +1,281 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "Semphr.h" +#include "task.h" + +/* Demo includes. */ +#include "EMAC.h" + +/* uIP includes. */ +#include "uip.h" + +/* Hardware library includes. */ +#include "hw_types.h" +#include "hw_memmap.h" +#include "hw_ints.h" +#include "hw_ethernet.h" +#include "ethernet.h" +#include "interrupt.h" + +#define emacNUM_RX_BUFFERS 5 +#define emacFRAM_SIZE_BYTES 2 +#define macNEGOTIATE_DELAY 2000 +#define macWAIT_SEND_TIME ( 10 ) + +/* The task that handles the MAC peripheral. This is created at a high +priority and is effectively a deferred interrupt handler. The peripheral +handling is deferred to a task to prevent the entire FIFO having to be read +from within an ISR. */ +void vMACHandleTask( void *pvParameters ); + +/*-----------------------------------------------------------*/ + +/* The semaphore used to wake the uIP task when data arrives. */ +xSemaphoreHandle xEMACSemaphore = NULL; + +/* The semaphore used to wake the interrupt handler task. The peripheral +is processed at the task level to prevent the need to read the entire FIFO from +within the ISR itself. */ +xSemaphoreHandle xMACInterruptSemaphore = NULL; + +/* The buffer used by the uIP stack. In this case the pointer is used to +point to one of the Rx buffers. */ +unsigned portCHAR *uip_buf; + +/* Buffers into which Rx data is placed. */ +static unsigned portCHAR ucRxBuffers[ emacNUM_RX_BUFFERS ][ UIP_BUFSIZE + ( 4 * emacFRAM_SIZE_BYTES ) ]; + +/* The length of the data within each of the Rx buffers. */ +static unsigned portLONG ulRxLength[ emacNUM_RX_BUFFERS ]; + +/* Used to keep a track of the number of bytes to transmit. */ +static unsigned portLONG ulNextTxSpace; + +/*-----------------------------------------------------------*/ + +portBASE_TYPE vInitEMAC( void ) +{ +unsigned long ulTemp; +portBASE_TYPE xReturn; + + /* Ensure all interrupts are disabled. */ + EthernetIntDisable( ETH_BASE, ( ETH_INT_PHY | ETH_INT_MDIO | ETH_INT_RXER | ETH_INT_RXOF | ETH_INT_TX | ETH_INT_TXER | ETH_INT_RX)); + + /* Clear any interrupts that were already pending. */ + ulTemp = EthernetIntStatus( ETH_BASE, pdFALSE ); + EthernetIntClear( ETH_BASE, ulTemp ); + + /* Initialise the MAC and connect. */ + EthernetInit( ETH_BASE ); + EthernetConfigSet( ETH_BASE, ( ETH_CFG_TX_DPLXEN | ETH_CFG_TX_CRCEN | ETH_CFG_TX_PADEN ) ); + EthernetEnable( ETH_BASE ); + + /* Mark each Rx buffer as empty. */ + for( ulTemp = 0; ulTemp < emacNUM_RX_BUFFERS; ulTemp++ ) + { + ulRxLength[ ulTemp ] = 0; + } + + /* Create the queue and task used to defer the MAC processing to the + task level. */ + vSemaphoreCreateBinary( xMACInterruptSemaphore ); + xSemaphoreTake( xMACInterruptSemaphore, 0 ); + xReturn = xTaskCreate( vMACHandleTask, ( signed portCHAR * ) "MAC", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL ); + vTaskDelay( macNEGOTIATE_DELAY ); + + /* We are only interested in Rx interrupts. */ + IntPrioritySet( INT_ETH, configKERNEL_INTERRUPT_PRIORITY ); + IntEnable( INT_ETH ); + EthernetIntEnable(ETH_BASE, ETH_INT_RX); + + return xReturn; +} +/*-----------------------------------------------------------*/ + +unsigned int uiGetEMACRxData( unsigned char *ucBuffer ) +{ +static unsigned long ulNextRxBuffer = 0; +unsigned int iLen; + + iLen = ulRxLength[ ulNextRxBuffer ]; + + if( iLen != 0 ) + { + /* Leave room for the size at the start of the buffer. */ + uip_buf = &( ucRxBuffers[ ulNextRxBuffer ][ 2 ] ); + + ulRxLength[ ulNextRxBuffer ] = 0; + + ulNextRxBuffer++; + if( ulNextRxBuffer >= emacNUM_RX_BUFFERS ) + { + ulNextRxBuffer = 0; + } + } + + return iLen; +} +/*-----------------------------------------------------------*/ + +void vInitialiseSend( void ) +{ + /* Set the index to the first byte to send - skipping over the size + bytes. */ + ulNextTxSpace = 2; +} +/*-----------------------------------------------------------*/ + +void vIncrementTxLength( unsigned portLONG ulLength ) +{ + ulNextTxSpace += ulLength; +} +/*-----------------------------------------------------------*/ + +void vSendBufferToMAC( void ) +{ +unsigned long *pulSource; +unsigned portSHORT * pus; +unsigned portLONG ulNextWord; + + /* Locate the data to be send. */ + pus = ( unsigned portSHORT * ) uip_buf; + + /* Add in the size of the data. */ + pus--; + *pus = ulNextTxSpace; + + /* Wait for data to be sent if there is no space immediately. */ + while( !EthernetSpaceAvail( ETH_BASE ) ) + { + vTaskDelay( macWAIT_SEND_TIME ); + } + + pulSource = ( unsigned portLONG * ) pus; + + for( ulNextWord = 0; ulNextWord < ulNextTxSpace; ulNextWord += sizeof( unsigned portLONG ) ) + { + HWREG(ETH_BASE + MAC_O_DATA) = *pulSource; + pulSource++; + } + + /* Go. */ + HWREG( ETH_BASE + MAC_O_TR ) = MAC_TR_NEWTX; +} +/*-----------------------------------------------------------*/ + +void vEMAC_ISR( void ) +{ +portBASE_TYPE xSwitchRequired = pdFALSE; +unsigned portLONG ulTemp; + + /* Clear the interrupt. */ + ulTemp = EthernetIntStatus( ETH_BASE, pdFALSE ); + EthernetIntClear( ETH_BASE, ulTemp ); + + /* Was it an Rx interrupt? */ + if( ulTemp & ETH_INT_RX ) + { + xSwitchRequired = pdTRUE; + xSemaphoreGiveFromISR( xMACInterruptSemaphore, pdFALSE ); + EthernetIntDisable( ETH_BASE, ETH_INT_RX ); + } + + /* Switch to the uIP task. */ + portEND_SWITCHING_ISR( xSwitchRequired ); +} +/*-----------------------------------------------------------*/ + +void vMACHandleTask( void *pvParameters ) +{ +unsigned long ulLen = 0, i; +unsigned portLONG ulLength, ulInt; +unsigned long *pulBuffer; +static unsigned portLONG ulNextRxBuffer = 0; +portBASE_TYPE xSwitchRequired = pdFALSE; + + for( ;; ) + { + /* Wait for something to do. */ + xSemaphoreTake( xMACInterruptSemaphore, portMAX_DELAY ); + + while( ( ulInt = ( EthernetIntStatus( ETH_BASE, pdFALSE ) & ETH_INT_RX ) ) != 0 ) + { + ulLength = HWREG( ETH_BASE + MAC_O_DATA ); + + /* Leave room at the start of the buffer for the size. */ + pulBuffer = ( unsigned long * ) &( ucRxBuffers[ ulNextRxBuffer ][ 2 ] ); + *pulBuffer = ( ulLength >> 16 ); + + /* Get the size of the data. */ + pulBuffer = ( unsigned long * ) &( ucRxBuffers[ ulNextRxBuffer ][ 4 ] ); + ulLength &= 0xFFFF; + + if( ulLength > 4 ) + { + ulLength -= 4; + + if( ulLength >= UIP_BUFSIZE ) + { + /* The data won't fit in our buffer. Ensure we don't + try to write into the buffer. */ + ulLength = 0; + } + + /* Read out the data into our buffer. */ + for( i = 0; i < ulLength; i += sizeof( unsigned portLONG ) ) + { + *pulBuffer = HWREG( ETH_BASE + MAC_O_DATA ); + pulBuffer++; + } + + /* Store the length of the data into the separate array. */ + ulRxLength[ ulNextRxBuffer ] = ulLength; + + /* Use the next buffer the next time through. */ + ulNextRxBuffer++; + if( ulNextRxBuffer >= emacNUM_RX_BUFFERS ) + { + ulNextRxBuffer = 0; + } + + /* Ensure the uIP task is not blocked as data has arrived. */ + xSemaphoreGive( xEMACSemaphore ); + } + } + + EthernetIntEnable( ETH_BASE, ETH_INT_RX ); + } +} + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.h new file mode 100644 index 000000000..a49b59828 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.h @@ -0,0 +1,322 @@ +/*---------------------------------------------------------------------------- + * LPC2378 Ethernet Definitions + *---------------------------------------------------------------------------- + * Name: EMAC.H + * Purpose: Philips LPC2378 EMAC hardware definitions + *---------------------------------------------------------------------------- + * Copyright (c) 2006 KEIL - An ARM Company. All rights reserved. + *---------------------------------------------------------------------------*/ +#ifndef __EMAC_H +#define __EMAC_H + +/* MAC address definition. The MAC address must be unique on the network. */ +#define emacETHADDR0 0 +#define emacETHADDR1 0xbd +#define emacETHADDR2 0x33 +#define emacETHADDR3 0x02 +#define emacETHADDR4 0x64 +#define emacETHADDR5 0x24 + + +/* EMAC Memory Buffer configuration for 16K Ethernet RAM. */ +#define NUM_RX_FRAG 4 /* Num.of RX Fragments 4*1536= 6.0kB */ +#define NUM_TX_FRAG 2 /* Num.of TX Fragments 2*1536= 3.0kB */ +#define ETH_FRAG_SIZE 1536 /* Packet Fragment size 1536 Bytes */ + +#define ETH_MAX_FLEN 1536 /* Max. Ethernet Frame Size */ + +/* EMAC variables located in 16K Ethernet SRAM */ +#define RX_DESC_BASE 0x7FE00000 +#define RX_STAT_BASE (RX_DESC_BASE + NUM_RX_FRAG*8) +#define TX_DESC_BASE (RX_STAT_BASE + NUM_RX_FRAG*8) +#define TX_STAT_BASE (TX_DESC_BASE + NUM_TX_FRAG*8) +#define RX_BUF_BASE (TX_STAT_BASE + NUM_TX_FRAG*4) +#define TX_BUF_BASE (RX_BUF_BASE + NUM_RX_FRAG*ETH_FRAG_SIZE) + +/* RX and TX descriptor and status definitions. */ +#define RX_DESC_PACKET(i) (*(unsigned int *)(RX_DESC_BASE + 8*i)) +#define RX_DESC_CTRL(i) (*(unsigned int *)(RX_DESC_BASE+4 + 8*i)) +#define RX_STAT_INFO(i) (*(unsigned int *)(RX_STAT_BASE + 8*i)) +#define RX_STAT_HASHCRC(i) (*(unsigned int *)(RX_STAT_BASE+4 + 8*i)) +#define TX_DESC_PACKET(i) (*(unsigned int *)(TX_DESC_BASE + 8*i)) +#define TX_DESC_CTRL(i) (*(unsigned int *)(TX_DESC_BASE+4 + 8*i)) +#define TX_STAT_INFO(i) (*(unsigned int *)(TX_STAT_BASE + 4*i)) +#define RX_BUF(i) (RX_BUF_BASE + ETH_FRAG_SIZE*i) +#define TX_BUF(i) (TX_BUF_BASE + ETH_FRAG_SIZE*i) + +/* MAC Configuration Register 1 */ +#define MAC1_REC_EN 0x00000001 /* Receive Enable */ +#define MAC1_PASS_ALL 0x00000002 /* Pass All Receive Frames */ +#define MAC1_RX_FLOWC 0x00000004 /* RX Flow Control */ +#define MAC1_TX_FLOWC 0x00000008 /* TX Flow Control */ +#define MAC1_LOOPB 0x00000010 /* Loop Back Mode */ +#define MAC1_RES_TX 0x00000100 /* Reset TX Logic */ +#define MAC1_RES_MCS_TX 0x00000200 /* Reset MAC TX Control Sublayer */ +#define MAC1_RES_RX 0x00000400 /* Reset RX Logic */ +#define MAC1_RES_MCS_RX 0x00000800 /* Reset MAC RX Control Sublayer */ +#define MAC1_SIM_RES 0x00004000 /* Simulation Reset */ +#define MAC1_SOFT_RES 0x00008000 /* Soft Reset MAC */ + +/* MAC Configuration Register 2 */ +#define MAC2_FULL_DUP 0x00000001 /* Full Duplex Mode */ +#define MAC2_FRM_LEN_CHK 0x00000002 /* Frame Length Checking */ +#define MAC2_HUGE_FRM_EN 0x00000004 /* Huge Frame Enable */ +#define MAC2_DLY_CRC 0x00000008 /* Delayed CRC Mode */ +#define MAC2_CRC_EN 0x00000010 /* Append CRC to every Frame */ +#define MAC2_PAD_EN 0x00000020 /* Pad all Short Frames */ +#define MAC2_VLAN_PAD_EN 0x00000040 /* VLAN Pad Enable */ +#define MAC2_ADET_PAD_EN 0x00000080 /* Auto Detect Pad Enable */ +#define MAC2_PPREAM_ENF 0x00000100 /* Pure Preamble Enforcement */ +#define MAC2_LPREAM_ENF 0x00000200 /* Long Preamble Enforcement */ +#undef MAC2_NO_BACKOFF /* Remove compiler warning. */ +#define MAC2_NO_BACKOFF 0x00001000 /* No Backoff Algorithm */ +#define MAC2_BACK_PRESSURE 0x00002000 /* Backoff Presurre / No Backoff */ +#define MAC2_EXCESS_DEF 0x00004000 /* Excess Defer */ + +/* Back-to-Back Inter-Packet-Gap Register */ +#define IPGT_FULL_DUP 0x00000015 /* Recommended value for Full Duplex */ +#define IPGT_HALF_DUP 0x00000012 /* Recommended value for Half Duplex */ + +/* Non Back-to-Back Inter-Packet-Gap Register */ +#define IPGR_DEF 0x00000012 /* Recommended value */ + +/* Collision Window/Retry Register */ +#define CLRT_DEF 0x0000370F /* Default value */ + +/* PHY Support Register */ +#undef SUPP_SPEED /* Remove compiler warning. */ +#define SUPP_SPEED 0x00000100 /* Reduced MII Logic Current Speed */ +#define SUPP_RES_RMII 0x00000800 /* Reset Reduced MII Logic */ + +/* Test Register */ +#define TEST_SHCUT_PQUANTA 0x00000001 /* Shortcut Pause Quanta */ +#define TEST_TST_PAUSE 0x00000002 /* Test Pause */ +#define TEST_TST_BACKP 0x00000004 /* Test Back Pressure */ + +/* MII Management Configuration Register */ +#define MCFG_SCAN_INC 0x00000001 /* Scan Increment PHY Address */ +#define MCFG_SUPP_PREAM 0x00000002 /* Suppress Preamble */ +#define MCFG_CLK_SEL 0x0000001C /* Clock Select Mask */ +#define MCFG_RES_MII 0x00008000 /* Reset MII Management Hardware */ + +/* MII Management Command Register */ +#undef MCMD_READ /* Remove compiler warning. */ +#define MCMD_READ 0x00000001 /* MII Read */ +#undef MCMD_SCAN /* Remove compiler warning. */ +#define MCMD_SCAN 0x00000002 /* MII Scan continuously */ + +#define MII_WR_TOUT 0x00050000 /* MII Write timeout count */ +#define MII_RD_TOUT 0x00050000 /* MII Read timeout count */ + +/* MII Management Address Register */ +#define MADR_REG_ADR 0x0000001F /* MII Register Address Mask */ +#define MADR_PHY_ADR 0x00001F00 /* PHY Address Mask */ + +/* MII Management Indicators Register */ +#undef MIND_BUSY /* Remove compiler warning. */ +#define MIND_BUSY 0x00000001 /* MII is Busy */ +#define MIND_SCAN 0x00000002 /* MII Scanning in Progress */ +#define MIND_NOT_VAL 0x00000004 /* MII Read Data not valid */ +#define MIND_MII_LINK_FAIL 0x00000008 /* MII Link Failed */ + +/* Command Register */ +#define CR_RX_EN 0x00000001 /* Enable Receive */ +#define CR_TX_EN 0x00000002 /* Enable Transmit */ +#define CR_REG_RES 0x00000008 /* Reset Host Registers */ +#define CR_TX_RES 0x00000010 /* Reset Transmit Datapath */ +#define CR_RX_RES 0x00000020 /* Reset Receive Datapath */ +#define CR_PASS_RUNT_FRM 0x00000040 /* Pass Runt Frames */ +#define CR_PASS_RX_FILT 0x00000080 /* Pass RX Filter */ +#define CR_TX_FLOW_CTRL 0x00000100 /* TX Flow Control */ +#define CR_RMII 0x00000200 /* Reduced MII Interface */ +#define CR_FULL_DUP 0x00000400 /* Full Duplex */ + +/* Status Register */ +#define SR_RX_EN 0x00000001 /* Enable Receive */ +#define SR_TX_EN 0x00000002 /* Enable Transmit */ + +/* Transmit Status Vector 0 Register */ +#define TSV0_CRC_ERR 0x00000001 /* CRC error */ +#define TSV0_LEN_CHKERR 0x00000002 /* Length Check Error */ +#define TSV0_LEN_OUTRNG 0x00000004 /* Length Out of Range */ +#define TSV0_DONE 0x00000008 /* Tramsmission Completed */ +#define TSV0_MCAST 0x00000010 /* Multicast Destination */ +#define TSV0_BCAST 0x00000020 /* Broadcast Destination */ +#define TSV0_PKT_DEFER 0x00000040 /* Packet Deferred */ +#define TSV0_EXC_DEFER 0x00000080 /* Excessive Packet Deferral */ +#define TSV0_EXC_COLL 0x00000100 /* Excessive Collision */ +#define TSV0_LATE_COLL 0x00000200 /* Late Collision Occured */ +#define TSV0_GIANT 0x00000400 /* Giant Frame */ +#define TSV0_UNDERRUN 0x00000800 /* Buffer Underrun */ +#define TSV0_BYTES 0x0FFFF000 /* Total Bytes Transferred */ +#define TSV0_CTRL_FRAME 0x10000000 /* Control Frame */ +#define TSV0_PAUSE 0x20000000 /* Pause Frame */ +#define TSV0_BACK_PRESS 0x40000000 /* Backpressure Method Applied */ +#define TSV0_VLAN 0x80000000 /* VLAN Frame */ + +/* Transmit Status Vector 1 Register */ +#define TSV1_BYTE_CNT 0x0000FFFF /* Transmit Byte Count */ +#define TSV1_COLL_CNT 0x000F0000 /* Transmit Collision Count */ + +/* Receive Status Vector Register */ +#define RSV_BYTE_CNT 0x0000FFFF /* Receive Byte Count */ +#define RSV_PKT_IGNORED 0x00010000 /* Packet Previously Ignored */ +#define RSV_RXDV_SEEN 0x00020000 /* RXDV Event Previously Seen */ +#define RSV_CARR_SEEN 0x00040000 /* Carrier Event Previously Seen */ +#define RSV_REC_CODEV 0x00080000 /* Receive Code Violation */ +#define RSV_CRC_ERR 0x00100000 /* CRC Error */ +#define RSV_LEN_CHKERR 0x00200000 /* Length Check Error */ +#define RSV_LEN_OUTRNG 0x00400000 /* Length Out of Range */ +#define RSV_REC_OK 0x00800000 /* Frame Received OK */ +#define RSV_MCAST 0x01000000 /* Multicast Frame */ +#define RSV_BCAST 0x02000000 /* Broadcast Frame */ +#define RSV_DRIB_NIBB 0x04000000 /* Dribble Nibble */ +#define RSV_CTRL_FRAME 0x08000000 /* Control Frame */ +#define RSV_PAUSE 0x10000000 /* Pause Frame */ +#define RSV_UNSUPP_OPC 0x20000000 /* Unsupported Opcode */ +#define RSV_VLAN 0x40000000 /* VLAN Frame */ + +/* Flow Control Counter Register */ +#define FCC_MIRR_CNT 0x0000FFFF /* Mirror Counter */ +#define FCC_PAUSE_TIM 0xFFFF0000 /* Pause Timer */ + +/* Flow Control Status Register */ +#define FCS_MIRR_CNT 0x0000FFFF /* Mirror Counter Current */ + +/* Receive Filter Control Register */ +#define RFC_UCAST_EN 0x00000001 /* Accept Unicast Frames Enable */ +#define RFC_BCAST_EN 0x00000002 /* Accept Broadcast Frames Enable */ +#define RFC_MCAST_EN 0x00000004 /* Accept Multicast Frames Enable */ +#define RFC_UCAST_HASH_EN 0x00000008 /* Accept Unicast Hash Filter Frames */ +#define RFC_MCAST_HASH_EN 0x00000010 /* Accept Multicast Hash Filter Fram.*/ +#define RFC_PERFECT_EN 0x00000020 /* Accept Perfect Match Enable */ +#define RFC_MAGP_WOL_EN 0x00001000 /* Magic Packet Filter WoL Enable */ +#define RFC_PFILT_WOL_EN 0x00002000 /* Perfect Filter WoL Enable */ + +/* Receive Filter WoL Status/Clear Registers */ +#define WOL_UCAST 0x00000001 /* Unicast Frame caused WoL */ +#define WOL_BCAST 0x00000002 /* Broadcast Frame caused WoL */ +#define WOL_MCAST 0x00000004 /* Multicast Frame caused WoL */ +#define WOL_UCAST_HASH 0x00000008 /* Unicast Hash Filter Frame WoL */ +#define WOL_MCAST_HASH 0x00000010 /* Multicast Hash Filter Frame WoL */ +#define WOL_PERFECT 0x00000020 /* Perfect Filter WoL */ +#define WOL_RX_FILTER 0x00000080 /* RX Filter caused WoL */ +#define WOL_MAG_PACKET 0x00000100 /* Magic Packet Filter caused WoL */ + +/* Interrupt Status/Enable/Clear/Set Registers */ +#define INT_RX_OVERRUN 0x00000001 /* Overrun Error in RX Queue */ +#define INT_RX_ERR 0x00000002 /* Receive Error */ +#define INT_RX_FIN 0x00000004 /* RX Finished Process Descriptors */ +#define INT_RX_DONE 0x00000008 /* Receive Done */ +#define INT_TX_UNDERRUN 0x00000010 /* Transmit Underrun */ +#define INT_TX_ERR 0x00000020 /* Transmit Error */ +#define INT_TX_FIN 0x00000040 /* TX Finished Process Descriptors */ +#define INT_TX_DONE 0x00000080 /* Transmit Done */ +#define INT_SOFT_INT 0x00001000 /* Software Triggered Interrupt */ +#define INT_WAKEUP 0x00002000 /* Wakeup Event Interrupt */ + +/* Power Down Register */ +#define PD_POWER_DOWN 0x80000000 /* Power Down MAC */ + +/* RX Descriptor Control Word */ +#define RCTRL_SIZE 0x000007FF /* Buffer size mask */ +#define RCTRL_INT 0x80000000 /* Generate RxDone Interrupt */ + +/* RX Status Hash CRC Word */ +#define RHASH_SA 0x000001FF /* Hash CRC for Source Address */ +#define RHASH_DA 0x001FF000 /* Hash CRC for Destination Address */ + +/* RX Status Information Word */ +#define RINFO_SIZE 0x000007FF /* Data size in bytes */ +#define RINFO_CTRL_FRAME 0x00040000 /* Control Frame */ +#define RINFO_VLAN 0x00080000 /* VLAN Frame */ +#define RINFO_FAIL_FILT 0x00100000 /* RX Filter Failed */ +#define RINFO_MCAST 0x00200000 /* Multicast Frame */ +#define RINFO_BCAST 0x00400000 /* Broadcast Frame */ +#define RINFO_CRC_ERR 0x00800000 /* CRC Error in Frame */ +#define RINFO_SYM_ERR 0x01000000 /* Symbol Error from PHY */ +#define RINFO_LEN_ERR 0x02000000 /* Length Error */ +#define RINFO_RANGE_ERR 0x04000000 /* Range Error (exceeded max. size) */ +#define RINFO_ALIGN_ERR 0x08000000 /* Alignment Error */ +#define RINFO_OVERRUN 0x10000000 /* Receive overrun */ +#define RINFO_NO_DESCR 0x20000000 /* No new Descriptor available */ +#define RINFO_LAST_FLAG 0x40000000 /* Last Fragment in Frame */ +#define RINFO_ERR 0x80000000 /* Error Occured (OR of all errors) */ + +#define RINFO_ERR_MASK (RINFO_FAIL_FILT | RINFO_CRC_ERR | RINFO_SYM_ERR | \ + RINFO_LEN_ERR | RINFO_ALIGN_ERR | RINFO_OVERRUN) + +/* TX Descriptor Control Word */ +#define TCTRL_SIZE 0x000007FF /* Size of data buffer in bytes */ +#define TCTRL_OVERRIDE 0x04000000 /* Override Default MAC Registers */ +#define TCTRL_HUGE 0x08000000 /* Enable Huge Frame */ +#define TCTRL_PAD 0x10000000 /* Pad short Frames to 64 bytes */ +#define TCTRL_CRC 0x20000000 /* Append a hardware CRC to Frame */ +#define TCTRL_LAST 0x40000000 /* Last Descriptor for TX Frame */ +#define TCTRL_INT 0x80000000 /* Generate TxDone Interrupt */ + +/* TX Status Information Word */ +#define TINFO_COL_CNT 0x01E00000 /* Collision Count */ +#define TINFO_DEFER 0x02000000 /* Packet Deferred (not an error) */ +#define TINFO_EXCESS_DEF 0x04000000 /* Excessive Deferral */ +#define TINFO_EXCESS_COL 0x08000000 /* Excessive Collision */ +#define TINFO_LATE_COL 0x10000000 /* Late Collision Occured */ +#define TINFO_UNDERRUN 0x20000000 /* Transmit Underrun */ +#define TINFO_NO_DESCR 0x40000000 /* No new Descriptor available */ +#define TINFO_ERR 0x80000000 /* Error Occured (OR of all errors) */ + +/* DP83848C PHY Registers */ +#define PHY_REG_BMCR 0x00 /* Basic Mode Control Register */ +#define PHY_REG_BMSR 0x01 /* Basic Mode Status Register */ +#define PHY_REG_IDR1 0x02 /* PHY Identifier 1 */ +#define PHY_REG_IDR2 0x03 /* PHY Identifier 2 */ +#define PHY_REG_ANAR 0x04 /* Auto-Negotiation Advertisement */ +#define PHY_REG_ANLPAR 0x05 /* Auto-Neg. Link Partner Abitily */ +#define PHY_REG_ANER 0x06 /* Auto-Neg. Expansion Register */ +#define PHY_REG_ANNPTR 0x07 /* Auto-Neg. Next Page TX */ + +/* PHY Extended Registers */ +#define PHY_REG_STS 0x10 /* Status Register */ +#define PHY_REG_MICR 0x11 /* MII Interrupt Control Register */ +#define PHY_REG_MISR 0x12 /* MII Interrupt Status Register */ +#define PHY_REG_FCSCR 0x14 /* False Carrier Sense Counter */ +#define PHY_REG_RECR 0x15 /* Receive Error Counter */ +#define PHY_REG_PCSR 0x16 /* PCS Sublayer Config. and Status */ +#define PHY_REG_RBR 0x17 /* RMII and Bypass Register */ +#define PHY_REG_LEDCR 0x18 /* LED Direct Control Register */ +#define PHY_REG_PHYCR 0x19 /* PHY Control Register */ +#define PHY_REG_10BTSCR 0x1A /* 10Base-T Status/Control Register */ +#define PHY_REG_CDCTRL1 0x1B /* CD Test Control and BIST Extens. */ +#define PHY_REG_EDCR 0x1D /* Energy Detect Control Register */ + +#define PHY_FULLD_100M 0x2100 /* Full Duplex 100Mbit */ +#define PHY_HALFD_100M 0x2000 /* Half Duplex 100Mbit */ +#define PHY_FULLD_10M 0x0100 /* Full Duplex 10Mbit */ +#define PHY_HALFD_10M 0x0000 /* Half Duplex 10MBit */ +#define PHY_AUTO_NEG 0x3000 /* Select Auto Negotiation */ + +#define DP83848C_DEF_ADR 0x0100 /* Default PHY device address */ +#define DP83848C_ID 0x20005C90 /* PHY Identifier */ + +// prototypes +portBASE_TYPE vInitEMAC(void); +unsigned short ReadFrameBE_EMAC(void); +void vIncrementTxLength(unsigned long ulLength); +void CopyFromFrame_EMAC(void *Dest, unsigned short Size); +void DummyReadFrame_EMAC(unsigned short Size); +unsigned short StartReadFrame(void); +void EndReadFrame(void); +unsigned int CheckFrameReceived(void); +void vInitialiseSend(void); +unsigned int Rdy4Tx(void); +void vSendBufferToMAC(void); +void vEMACWaitForInput( void ); +unsigned int uiGetEMACRxData( unsigned char *ucBuffer ); + + +#endif + +/*---------------------------------------------------------------------------- + * end of file + *---------------------------------------------------------------------------*/ + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings new file mode 100644 index 000000000..0d3c30cdd --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings @@ -0,0 +1,35 @@ +http_http "http://" +http_200 "200 " +http_301 "301 " +http_302 "302 " +http_get "GET " +http_10 "HTTP/1.0" +http_11 "HTTP/1.1" +http_content_type "content-type: " +http_texthtml "text/html" +http_location "location: " +http_host "host: " +http_crnl "\r\n" +http_index_html "/index.html" +http_404_html "/404.html" +http_referer "Referer:" +http_header_200 "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_header_404 "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_content_type_plain "Content-type: text/plain\r\n\r\n" +http_content_type_html "Content-type: text/html\r\n\r\n" +http_content_type_css "Content-type: text/css\r\n\r\n" +http_content_type_text "Content-type: text/text\r\n\r\n" +http_content_type_png "Content-type: image/png\r\n\r\n" +http_content_type_gif "Content-type: image/gif\r\n\r\n" +http_content_type_jpg "Content-type: image/jpeg\r\n\r\n" +http_content_type_binary "Content-type: application/octet-stream\r\n\r\n" +http_html ".html" +http_shtml ".shtml" +http_htm ".htm" +http_css ".css" +http_png ".png" +http_gif ".gif" +http_jpg ".jpg" +http_text ".txt" +http_txt ".txt" + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.c new file mode 100644 index 000000000..ef7a41c7d --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.c @@ -0,0 +1,102 @@ +const char http_http[8] = +/* "http://" */ +{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, }; +const char http_200[5] = +/* "200 " */ +{0x32, 0x30, 0x30, 0x20, }; +const char http_301[5] = +/* "301 " */ +{0x33, 0x30, 0x31, 0x20, }; +const char http_302[5] = +/* "302 " */ +{0x33, 0x30, 0x32, 0x20, }; +const char http_get[5] = +/* "GET " */ +{0x47, 0x45, 0x54, 0x20, }; +const char http_10[9] = +/* "HTTP/1.0" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, }; +const char http_11[9] = +/* "HTTP/1.1" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, }; +const char http_content_type[15] = +/* "content-type: " */ +{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, }; +const char http_texthtml[10] = +/* "text/html" */ +{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_location[11] = +/* "location: " */ +{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, }; +const char http_host[7] = +/* "host: " */ +{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, }; +const char http_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, }; +const char http_index_html[12] = +/* "/index.html" */ +{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_404_html[10] = +/* "/404.html" */ +{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_referer[9] = +/* "Referer:" */ +{0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, }; +const char http_header_200[84] = +/* "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_header_404[91] = +/* "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_content_type_plain[29] = +/* "Content-type: text/plain\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_html[28] = +/* "Content-type: text/html\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_css [27] = +/* "Content-type: text/css\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_text[28] = +/* "Content-type: text/text\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_png [28] = +/* "Content-type: image/png\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_gif [28] = +/* "Content-type: image/gif\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_jpg [29] = +/* "Content-type: image/jpeg\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_binary[43] = +/* "Content-type: application/octet-stream\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, }; +const char http_html[6] = +/* ".html" */ +{0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_shtml[7] = +/* ".shtml" */ +{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_htm[5] = +/* ".htm" */ +{0x2e, 0x68, 0x74, 0x6d, }; +const char http_css[5] = +/* ".css" */ +{0x2e, 0x63, 0x73, 0x73, }; +const char http_png[5] = +/* ".png" */ +{0x2e, 0x70, 0x6e, 0x67, }; +const char http_gif[5] = +/* ".gif" */ +{0x2e, 0x67, 0x69, 0x66, }; +const char http_jpg[5] = +/* ".jpg" */ +{0x2e, 0x6a, 0x70, 0x67, }; +const char http_text[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; +const char http_txt[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.h new file mode 100644 index 000000000..acbe7e17f --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/http-strings.h @@ -0,0 +1,34 @@ +extern const char http_http[8]; +extern const char http_200[5]; +extern const char http_301[5]; +extern const char http_302[5]; +extern const char http_get[5]; +extern const char http_10[9]; +extern const char http_11[9]; +extern const char http_content_type[15]; +extern const char http_texthtml[10]; +extern const char http_location[11]; +extern const char http_host[7]; +extern const char http_crnl[3]; +extern const char http_index_html[12]; +extern const char http_404_html[10]; +extern const char http_referer[9]; +extern const char http_header_200[84]; +extern const char http_header_404[91]; +extern const char http_content_type_plain[29]; +extern const char http_content_type_html[28]; +extern const char http_content_type_css [27]; +extern const char http_content_type_text[28]; +extern const char http_content_type_png [28]; +extern const char http_content_type_gif [28]; +extern const char http_content_type_jpg [29]; +extern const char http_content_type_binary[43]; +extern const char http_html[6]; +extern const char http_shtml[7]; +extern const char http_htm[5]; +extern const char http_css[5]; +extern const char http_png[5]; +extern const char http_gif[5]; +extern const char http_jpg[5]; +extern const char http_text[5]; +extern const char http_txt[5]; diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.c new file mode 100644 index 000000000..803b771e6 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.c @@ -0,0 +1,269 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface + * \author + * Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2006, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "uip.h" +#include "psock.h" +#include "httpd.h" +#include "httpd-cgi.h" +#include "httpd-fs.h" + +#include +#include + +HTTPD_CGI_CALL(file, "file-stats", file_stats); +HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats); +HTTPD_CGI_CALL(net, "net-stats", net_stats); +HTTPD_CGI_CALL(rtos, "rtos-stats", rtos_stats ); +HTTPD_CGI_CALL(io, "led-io", led_io ); + + +static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, &rtos, &io, NULL }; + +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(nullfunction(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +httpd_cgifunction +httpd_cgi(char *name) +{ + const struct httpd_cgi_call **f; + + /* Find the matching name in the table, return the function. */ + for(f = calls; *f != NULL; ++f) { + if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) { + return (*f)->function; + } + } + return nullfunction; +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_file_stats(void *arg) +{ + char *f = (char *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f)); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(file_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static const char closed[] = /* "CLOSED",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0}; +static const char syn_rcvd[] = /* "SYN-RCVD",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56, + 0x44, 0}; +static const char syn_sent[] = /* "SYN-SENT",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e, + 0x54, 0}; +static const char established[] = /* "ESTABLISHED",*/ +{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, + 0x45, 0x44, 0}; +static const char fin_wait_1[] = /* "FIN-WAIT-1",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x31, 0}; +static const char fin_wait_2[] = /* "FIN-WAIT-2",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x32, 0}; +static const char closing[] = /* "CLOSING",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x49, + 0x4e, 0x47, 0}; +static const char time_wait[] = /* "TIME-WAIT,"*/ +{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41, + 0x49, 0x54, 0}; +static const char last_ack[] = /* "LAST-ACK"*/ +{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43, + 0x4b, 0}; + +static const char *states[] = { + closed, + syn_rcvd, + syn_sent, + established, + fin_wait_1, + fin_wait_2, + closing, + time_wait, + last_ack}; + + +static unsigned short +generate_tcp_stats(void *arg) +{ + struct uip_conn *conn; + struct httpd_state *s = (struct httpd_state *)arg; + + conn = &uip_conns[s->count]; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "\r\n", + htons(conn->lport), + htons(conn->ripaddr[0]) >> 8, + htons(conn->ripaddr[0]) & 0xff, + htons(conn->ripaddr[1]) >> 8, + htons(conn->ripaddr[1]) & 0xff, + htons(conn->rport), + states[conn->tcpstateflags & UIP_TS_MASK], + conn->nrtx, + conn->timer, + (uip_outstanding(conn))? '*':' ', + (uip_stopped(conn))? '!':' '); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr)) +{ + + PSOCK_BEGIN(&s->sout); + + for(s->count = 0; s->count < UIP_CONNS; ++s->count) { + if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) { + PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s); + } + } + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_net_stats(void *arg) +{ + struct httpd_state *s = (struct httpd_state *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]); +} + +static +PT_THREAD(net_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + +#if UIP_STATISTICS + + for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t); + ++s->count) { + PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s); + } + +#endif /* UIP_STATISTICS */ + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ + +extern void vTaskList( signed char *pcWriteBuffer ); +static char cCountBuf[ 32 ]; +long lRefreshCount = 0; +static unsigned short +generate_rtos_stats(void *arg) +{ + lRefreshCount++; + sprintf( cCountBuf, "


Refresh count = %d", lRefreshCount ); + vTaskList( uip_appdata ); + strcat( uip_appdata, cCountBuf ); + + return strlen( uip_appdata ); +} +/*---------------------------------------------------------------------------*/ + + +static +PT_THREAD(rtos_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_GENERATOR_SEND(&s->sout, generate_rtos_stats, NULL); + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ + +char *pcStatus; +extern unsigned long uxParTestGetLED( unsigned long uxLED ); + +static unsigned short generate_io_state( void *arg ) +{ + if( uxParTestGetLED( 0 ) ) + { + pcStatus = "checked"; + } + else + { + pcStatus = ""; + } + + sprintf( uip_appdata, + "LED"\ + "

"\ + "", + pcStatus ); + + return strlen( uip_appdata ); +} +/*---------------------------------------------------------------------------*/ + +static PT_THREAD(led_io(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_GENERATOR_SEND(&s->sout, generate_io_state, NULL); + PSOCK_END(&s->sout); +} + +/** @} */ + + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.h new file mode 100644 index 000000000..7ae928321 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-cgi.h @@ -0,0 +1,84 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface header file + * \author + * Adam Dunkels + * + */ + + + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_CGI_H__ +#define __HTTPD_CGI_H__ + +#include "psock.h" +#include "httpd.h" + +typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *)); + +httpd_cgifunction httpd_cgi(char *name); + +struct httpd_cgi_call { + const char *name; + const httpd_cgifunction function; +}; + +/** + * \brief HTTPD CGI function declaration + * \param name The C variable name of the function + * \param str The string name of the function, used in the script file + * \param function A pointer to the function that implements it + * + * This macro is used for declaring a HTTPD CGI + * function. This function is then added to the list of + * HTTPD CGI functions with the httpd_cgi_add() function. + * + * \hideinitializer + */ +#define HTTPD_CGI_CALL(name, str, function) \ +static PT_THREAD(function(struct httpd_state *, char *)); \ +static const struct httpd_cgi_call name = {str, function} + +void httpd_cgi_init(void); +#endif /* __HTTPD_CGI_H__ */ + +/** @} */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.c new file mode 100644 index 000000000..dc4aef011 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ + +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-fsdata.h" + +#ifndef NULL +#define NULL 0 +#endif /* NULL */ + +#include "httpd-fsdata.c" + +#if HTTPD_FS_STATISTICS +static u16_t count[HTTPD_FS_NUMFILES]; +#endif /* HTTPD_FS_STATISTICS */ + +/*-----------------------------------------------------------------------------------*/ +static u8_t +httpd_fs_strcmp(const char *str1, const char *str2) +{ + u8_t i; + i = 0; + loop: + + if(str2[i] == 0 || + str1[i] == '\r' || + str1[i] == '\n') { + return 0; + } + + if(str1[i] != str2[i]) { + return 1; + } + + + ++i; + goto loop; +} +/*-----------------------------------------------------------------------------------*/ +int +httpd_fs_open(const char *name, struct httpd_fs_file *file) +{ +#if HTTPD_FS_STATISTICS + u16_t i = 0; +#endif /* HTTPD_FS_STATISTICS */ + struct httpd_fsdata_file_noconst *f; + + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + file->data = f->data; + file->len = f->len; +#if HTTPD_FS_STATISTICS + ++count[i]; +#endif /* HTTPD_FS_STATISTICS */ + return 1; + } +#if HTTPD_FS_STATISTICS + ++i; +#endif /* HTTPD_FS_STATISTICS */ + + } + return 0; +} +/*-----------------------------------------------------------------------------------*/ +void +httpd_fs_init(void) +{ +#if HTTPD_FS_STATISTICS + u16_t i; + for(i = 0; i < HTTPD_FS_NUMFILES; i++) { + count[i] = 0; + } +#endif /* HTTPD_FS_STATISTICS */ +} +/*-----------------------------------------------------------------------------------*/ +#if HTTPD_FS_STATISTICS +u16_t httpd_fs_count +(char *name) +{ + struct httpd_fsdata_file_noconst *f; + u16_t i; + + i = 0; + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + return count[i]; + } + ++i; + } + return 0; +} +#endif /* HTTPD_FS_STATISTICS */ +/*-----------------------------------------------------------------------------------*/ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.h new file mode 100644 index 000000000..b594eea56 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FS_H__ +#define __HTTPD_FS_H__ + +#define HTTPD_FS_STATISTICS 1 + +struct httpd_fs_file { + char *data; + int len; +}; + +/* file must be allocated by caller and will be filled in + by the function. */ +int httpd_fs_open(const char *name, struct httpd_fs_file *file); + +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 +u16_t httpd_fs_count(char *name); +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ + +void httpd_fs_init(void); + +#endif /* __HTTPD_FS_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/404.html b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/404.html new file mode 100644 index 000000000..43e7f4cad --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/404.html @@ -0,0 +1,8 @@ + + +

+

404 - file not found

+

Go here instead.

+
+ + \ No newline at end of file diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.html b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.html new file mode 100644 index 000000000..1d3bbeee1 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.html @@ -0,0 +1,13 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Loading index.shtml. Click here if not automatically redirected. + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.shtml b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.shtml new file mode 100644 index 000000000..1923ea762 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/index.shtml @@ -0,0 +1,20 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Task statistics

+Page will refresh every 2 seconds.

+

Task          State  Priority  Stack	#
************************************************
+%! rtos-stats +
+
+ + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/io.shtml b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/io.shtml new file mode 100644 index 000000000..07554bb71 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/io.shtml @@ -0,0 +1,28 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+LED and LCD IO
+ +

+ +Use the check box to turn on or off the LED, enter text to display on the OLED display, then click "Update IO". + + +

+
+%! led-io +

+ + +

+ + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/stats.shtml b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/stats.shtml new file mode 100644 index 000000000..d762f40d8 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/stats.shtml @@ -0,0 +1,41 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Network statistics

+
LocalRemoteStateRetransmissionsTimerFlags
%d%u.%u.%u.%u:%u%s%u%u%c %c
+
+IP           Packets dropped
+             Packets received
+             Packets sent
+IP errors    IP version/header length
+             IP length, high byte
+             IP length, low byte
+             IP fragments
+             Header checksum
+             Wrong protocol
+ICMP	     Packets dropped
+             Packets received
+             Packets sent
+             Type errors
+TCP          Packets dropped
+             Packets received
+             Packets sent
+             Checksum errors
+             Data packets without ACKs
+             Resets
+             Retransmissions
+	     No connection avaliable
+	     Connection attempts to closed ports
+
%! net-stats
+
+ + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/tcp.shtml b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/tcp.shtml new file mode 100644 index 000000000..654d61f21 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fs/tcp.shtml @@ -0,0 +1,21 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +RTOS Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+
+

Network connections

+

+ + +%! tcp-connections + + + + + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.c new file mode 100644 index 000000000..a7fcfab5a --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.c @@ -0,0 +1,470 @@ +static const unsigned char data_404_html[] = { + /* /404.html */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0x20, 0x20, + 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, + 0x22, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, + 0x34, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, + 0x68, 0x31, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, + 0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, + 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, + 0x33, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, + 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0}; + +static const unsigned char data_index_html[] = { + /* /index.html */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, + 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, + 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, + 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, + 0x31, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, + 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, + 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x4c, 0x6f, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x2e, 0x20, 0x20, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, + 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x3c, + 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, + 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0}; + +static const unsigned char data_index_shtml[] = { + /* /index.shtml */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, + 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, + 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, + 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, + 0x32, 0x30, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, + 0x66, 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, + 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, + 0x54, 0x4f, 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, + 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, + 0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, + 0x68, 0x72, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x54, 0x61, + 0x73, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, + 0x50, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, + 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x20, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, + 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, + 0x22, 0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x22, 0x3e, + 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x20, 0x20, 0x53, 0x74, 0x61, 0x63, + 0x6b, 0x9, 0x23, 0x3c, 0x62, 0x72, 0x3e, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72, 0x3e, 0xd, + 0xa, 0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d, 0x73, + 0x74, 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, 0x70, 0x72, + 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, + 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, + 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, +0}; + +static const unsigned char data_io_shtml[] = { + /* /io.shtml */ + 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x3e, 0x4c, 0x45, 0x44, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x4c, 0x43, 0x44, 0x20, 0x49, 0x4f, + 0x3c, 0x2f, 0x62, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, + 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x55, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x20, 0x74, 0x6f, 0x20, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f, 0x72, + 0x20, 0x6f, 0x66, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, + 0x45, 0x44, 0x2c, 0x20, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x4f, 0x4c, 0x45, 0x44, 0x20, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, + 0x6e, 0x20, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x22, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x49, 0x4f, 0x22, 0x2e, + 0xd, 0xa, 0xd, 0xa, 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, + 0xa, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x22, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x69, + 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, + 0x22, 0x3e, 0xd, 0xa, 0x25, 0x21, 0x20, 0x6c, 0x65, 0x64, + 0x2d, 0x69, 0x6f, 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, + 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x20, 0x49, 0x4f, 0x22, 0x3e, 0xd, + 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0xd, 0xa, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, + 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, + 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, + 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0}; + +static const unsigned char data_stats_shtml[] = { + /* /stats.shtml */ + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, + 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, + 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, + 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, + 0x66, 0x74, 0x22, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, + 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, + 0xd, 0xa, 0x49, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, + 0x49, 0x50, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, + 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xd, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x2c, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, + 0x74, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6c, 0x6f, + 0x77, 0x20, 0x62, 0x79, 0x74, 0x65, 0xd, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x49, 0x50, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x57, 0x72, + 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0xd, 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xd, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0xd, 0xa, 0x54, 0x43, 0x50, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, + 0x70, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, + 0x74, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, + 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x43, 0x4b, + 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x73, 0x65, + 0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, + 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, + 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, + 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, + 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25, 0x21, 0x20, 0x6e, 0x65, + 0x74, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, + 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0}; + +static const unsigned char data_tcp_shtml[] = { + /* /tcp.shtml */ + 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, + 0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, + 0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, + 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, + 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, 0x3c, + 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, 0x3c, + 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, + 0x3e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, + 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, + 0x6d, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, + 0x68, 0x3e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xd, 0xa, 0x25, + 0x21, 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xd, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, + 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, + 0xa, 0xd, 0xa, 0}; + +const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}}; + +const struct httpd_fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}}; + +const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13}}; + +const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10}}; + +const struct httpd_fsdata_file file_stats_shtml[] = {{file_io_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}}; + +const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}}; + +#define HTTPD_FS_ROOT file_tcp_shtml + +#define HTTPD_FS_NUMFILES 6 diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.h new file mode 100644 index 000000000..52d35c265 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd-fsdata.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FSDATA_H__ +#define __HTTPD_FSDATA_H__ + +#include "uip.h" + +struct httpd_fsdata_file { + const struct httpd_fsdata_file *next; + const char *name; + const char *data; + const int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +struct httpd_fsdata_file_noconst { + struct httpd_fsdata_file *next; + char *name; + char *data; + int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +#endif /* __HTTPD_FSDATA_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.c new file mode 100644 index 000000000..644cf16b7 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.c @@ -0,0 +1,346 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup httpd Web server + * @{ + * The uIP web server is a very simplistic implementation of an HTTP + * server. It can serve web pages and files from a read-only ROM + * filesystem, and provides a very small scripting language. + + */ + +/** + * \file + * Web server + * \author + * Adam Dunkels + */ + + +/* + * Copyright (c) 2004, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $ + */ + +#include "uip.h" +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-cgi.h" +#include "http-strings.h" + +#include + +#define STATE_WAITING 0 +#define STATE_OUTPUT 1 + +#define ISO_nl 0x0a +#define ISO_space 0x20 +#define ISO_bang 0x21 +#define ISO_percent 0x25 +#define ISO_period 0x2e +#define ISO_slash 0x2f +#define ISO_colon 0x3a + + +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_part_of_file(void *state) +{ + struct httpd_state *s = (struct httpd_state *)state; + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + memcpy(uip_appdata, s->file.data, s->len); + + return s->len; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + do { + PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s); + s->file.len -= s->len; + s->file.data += s->len; + } while(s->file.len > 0); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_part_of_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND(&s->sout, s->file.data, s->len); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static void +next_scriptstate(struct httpd_state *s) +{ + char *p; + p = strchr(s->scriptptr, ISO_nl) + 1; + s->scriptlen -= (unsigned short)(p - s->scriptptr); + s->scriptptr = p; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_script(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->scriptpt); + + + while(s->file.len > 0) { + + /* Check if we should start executing a script. */ + if(*s->file.data == ISO_percent && + *(s->file.data + 1) == ISO_bang) { + s->scriptptr = s->file.data + 3; + s->scriptlen = s->file.len - 3; + if(*(s->scriptptr - 1) == ISO_colon) { + httpd_fs_open(s->scriptptr + 1, &s->file); + PT_WAIT_THREAD(&s->scriptpt, send_file(s)); + } else { + PT_WAIT_THREAD(&s->scriptpt, + httpd_cgi(s->scriptptr)(s, s->scriptptr)); + } + next_scriptstate(s); + + /* The script is over, so we reset the pointers and continue + sending the rest of the file. */ + s->file.data = s->scriptptr; + s->file.len = s->scriptlen; + } else { + /* See if we find the start of script marker in the block of HTML + to be sent. */ + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + + if(*s->file.data == ISO_percent) { + ptr = strchr(s->file.data + 1, ISO_percent); + } else { + ptr = strchr(s->file.data, ISO_percent); + } + if(ptr != NULL && + ptr != s->file.data) { + s->len = (int)(ptr - s->file.data); + if(s->len >= uip_mss()) { + s->len = uip_mss(); + } + } + PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s)); + s->file.data += s->len; + s->file.len -= s->len; + + } + } + + PT_END(&s->scriptpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr)) +{ + char *ptr; + + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND_STR(&s->sout, statushdr); + + ptr = strrchr(s->filename, ISO_period); + if(ptr == NULL) { + PSOCK_SEND_STR(&s->sout, http_content_type_binary); + } else if(strncmp(http_html, ptr, 5) == 0 || + strncmp(http_shtml, ptr, 6) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_html); + } else if(strncmp(http_css, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_css); + } else if(strncmp(http_png, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_png); + } else if(strncmp(http_gif, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_gif); + } else if(strncmp(http_jpg, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_jpg); + } else { + PSOCK_SEND_STR(&s->sout, http_content_type_plain); + } + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_output(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->outputpt); + + if(!httpd_fs_open(s->filename, &s->file)) { + httpd_fs_open(http_404_html, &s->file); + strcpy(s->filename, http_404_html); + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_404)); + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_200)); + ptr = strchr(s->filename, ISO_period); + if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) { + PT_INIT(&s->scriptpt); + PT_WAIT_THREAD(&s->outputpt, handle_script(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } + } + PSOCK_CLOSE(&s->sout); + PT_END(&s->outputpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_input(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sin); + + PSOCK_READTO(&s->sin, ISO_space); + + + if(strncmp(s->inputbuf, http_get, 4) != 0) { + PSOCK_CLOSE_EXIT(&s->sin); + } + PSOCK_READTO(&s->sin, ISO_space); + + if(s->inputbuf[0] != ISO_slash) { + PSOCK_CLOSE_EXIT(&s->sin); + } + + if(s->inputbuf[1] == ISO_space) { + strncpy(s->filename, http_index_html, sizeof(s->filename)); + } else { + + s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0; + + /* Process any form input being sent to the server. */ + { + extern void vApplicationProcessFormInput( char *pcInputString, long xInputLength ); + vApplicationProcessFormInput( s->inputbuf, PSOCK_DATALEN(&s->sin) ); + } + + strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename)); + } + + /* httpd_log_file(uip_conn->ripaddr, s->filename);*/ + + s->state = STATE_OUTPUT; + + while(1) { + PSOCK_READTO(&s->sin, ISO_nl); + + if(strncmp(s->inputbuf, http_referer, 8) == 0) { + s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0; + /* httpd_log(&s->inputbuf[9]);*/ + } + } + + PSOCK_END(&s->sin); +} +/*---------------------------------------------------------------------------*/ +static void +handle_connection(struct httpd_state *s) +{ + handle_input(s); + if(s->state == STATE_OUTPUT) { + handle_output(s); + } +} +/*---------------------------------------------------------------------------*/ +void +httpd_appcall(void) +{ + struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate); + + if(uip_closed() || uip_aborted() || uip_timedout()) { + } else if(uip_connected()) { + PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1); + PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1); + PT_INIT(&s->outputpt); + s->state = STATE_WAITING; + /* timer_set(&s->timer, CLOCK_SECOND * 100);*/ + s->timer = 0; + handle_connection(s); + } else if(s != NULL) { + if(uip_poll()) { + ++s->timer; + if(s->timer >= 20) { + uip_abort(); + } + } else { + s->timer = 0; + } + handle_connection(s); + } else { + uip_abort(); + } +} +/*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the web server + * + * This function initializes the web server and should be + * called at system boot-up. + */ +void +httpd_init(void) +{ + uip_listen(HTONS(80)); +} +/*---------------------------------------------------------------------------*/ +/** @} */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.h new file mode 100644 index 000000000..7f7a6666e --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/httpd.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2001-2005, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_H__ +#define __HTTPD_H__ + +#include "psock.h" +#include "httpd-fs.h" + +struct httpd_state { + unsigned char timer; + struct psock sin, sout; + struct pt outputpt, scriptpt; + char inputbuf[50]; + char filename[20]; + char state; + struct httpd_fs_file file; + int len; + char *scriptptr; + int scriptlen; + + unsigned short count; +}; + +void httpd_init(void); +void httpd_appcall(void); + +void httpd_log(char *msg); +void httpd_log_file(u16_t *requester, char *file); + +#endif /* __HTTPD_H__ */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makefsdata b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makefsdata new file mode 100644 index 000000000..8d2715a8a --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makefsdata @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +open(OUTPUT, "> httpd-fsdata.c"); + +chdir("httpd-fs"); + +opendir(DIR, "."); +@files = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); +closedir(DIR); + +foreach $file (@files) { + + if(-d $file && $file !~ /^\./) { + print "Processing directory $file\n"; + opendir(DIR, $file); + @newfiles = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); + closedir(DIR); + printf "Adding files @newfiles\n"; + @files = (@files, map { $_ = "$file/$_" } @newfiles); + next; + } +} + +foreach $file (@files) { + if(-f $file) { + + print "Adding file $file\n"; + + open(FILE, $file) || die "Could not open file $file\n"; + + $file =~ s-^-/-; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + # for AVR, add PROGMEM here + print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); + print(OUTPUT "\t/* $file */\n\t"); + for($j = 0; $j < length($file); $j++) { + printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1))); + } + printf(OUTPUT "0,\n"); + + + $i = 0; + while(read(FILE, $data, 1)) { + if($i == 0) { + print(OUTPUT "\t"); + } + printf(OUTPUT "%#02x, ", unpack("C", $data)); + $i++; + if($i == 10) { + print(OUTPUT "\n"); + $i = 0; + } + } + print(OUTPUT "0};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@pfiles, $file); + } +} + +for($i = 0; $i < @fvars; $i++) { + $file = $pfiles[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, "); + print(OUTPUT "data$fvar + ". (length($file) + 1) .", "); + print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n"); +} + +print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n"); diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makestrings b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makestrings new file mode 100644 index 000000000..8a13c6d29 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "};\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("http-strings"); + +exit 0; + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uIP_Task.c b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uIP_Task.c new file mode 100644 index 000000000..69325a691 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uIP_Task.c @@ -0,0 +1,316 @@ +/* + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org 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 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + See http://www.FreeRTOS.org for documentation, latest information, license + and contact details. Please ensure to read the configuration and relevant + port sections of the online documentation. + *************************************************************************** +*/ +/* Standard includes. */ +#include + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" +#include "semphr.h" + +/* uip includes. */ +#include "hw_types.h" +#include "uip.h" +#include "uip_arp.h" +#include "httpd.h" +#include "timer.h" +#include "clock-arch.h" +#include "hw_ethernet.h" +#include "ethernet.h" +#include "hw_memmap.h" +#include "lmi_flash.h" +#include "sysctl.h" + +/* Demo includes. */ +#include "emac.h" +#include "partest.h" +#include "lcd_message.h" + +struct timer { + clock_time_t start; + clock_time_t interval; +}; + + +/*-----------------------------------------------------------*/ + +/* IP address configuration. */ +#define uipIP_ADDR0 172 +#define uipIP_ADDR1 25 +#define uipIP_ADDR2 218 +#define uipIP_ADDR3 19 + +/* How long to wait before attempting to connect the MAC again. */ +#define uipINIT_WAIT 100 + +/* Shortcut to the header within the Rx buffer. */ +#define xHeader ((struct uip_eth_hdr *) &uip_buf[ 0 ]) + +/* Standard constant. */ +#define uipTOTAL_FRAME_HEADER_SIZE 54 + +/*-----------------------------------------------------------*/ + +/* + * Send the uIP buffer to the MAC. + */ +static void prvENET_Send(void); + +/* + * Setup the MAC address in the MAC itself, and in the uIP stack. + */ +static void prvSetMACAddress( void ); + +/* + * Port functions required by the uIP stack. + */ +void clock_init( void ); +clock_time_t clock_time( void ); + +/*-----------------------------------------------------------*/ + +/* The semaphore used by the ISR to wake the uIP task. */ +extern xSemaphoreHandle xEMACSemaphore; + +/*-----------------------------------------------------------*/ + +void clock_init(void) +{ + /* This is done when the scheduler starts. */ +} +/*-----------------------------------------------------------*/ + +/* Define clock functions here to avoid header file name clash between uIP +and the Luminary Micro driver library. */ +clock_time_t clock_time( void ) +{ + return xTaskGetTickCount(); +} +extern void timer_set(struct timer *t, clock_time_t interval); +extern int timer_expired(struct timer *t); +extern void timer_reset(struct timer *t); + + + + +void vuIP_Task( void *pvParameters ) +{ +portBASE_TYPE i; +uip_ipaddr_t xIPAddr; +struct timer periodic_timer, arp_timer; +extern void ( vEMAC_ISR )( void ); + + /* Enable/Reset the Ethernet Controller */ + SysCtlPeripheralEnable( SYSCTL_PERIPH_ETH ); + SysCtlPeripheralReset( SYSCTL_PERIPH_ETH ); + + /* Create the semaphore used by the ISR to wake this task. */ + vSemaphoreCreateBinary( xEMACSemaphore ); + + /* Initialise the uIP stack. */ + timer_set( &periodic_timer, configTICK_RATE_HZ / 2 ); + timer_set( &arp_timer, configTICK_RATE_HZ * 10 ); + uip_init(); + uip_ipaddr( xIPAddr, uipIP_ADDR0, uipIP_ADDR1, uipIP_ADDR2, uipIP_ADDR3 ); + uip_sethostaddr( xIPAddr ); + httpd_init(); + + while( vInitEMAC() != pdPASS ) + { + vTaskDelay( uipINIT_WAIT ); + } + prvSetMACAddress(); + + + for( ;; ) + { + /* Is there received data ready to be processed? */ + uip_len = uiGetEMACRxData( uip_buf ); + + if( uip_len > 0 ) + { + /* Standard uIP loop taken from the uIP manual. */ + + if( xHeader->type == htons( UIP_ETHTYPE_IP ) ) + { + uip_arp_ipin(); + uip_input(); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + uip_arp_out(); + prvENET_Send(); + } + } + else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) ) + { + uip_arp_arpin(); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + prvENET_Send(); + } + } + } + else + { + if( timer_expired( &periodic_timer ) ) + { + timer_reset( &periodic_timer ); + for( i = 0; i < UIP_CONNS; i++ ) + { + uip_periodic( i ); + + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if( uip_len > 0 ) + { + uip_arp_out(); + prvENET_Send(); + } + } + + /* Call the ARP timer function every 10 seconds. */ + if( timer_expired( &arp_timer ) ) + { + timer_reset( &arp_timer ); + uip_arp_timer(); + } + } + else + { + /* We did not receive a packet, and there was no periodic + processing to perform. Block for a fixed period. If a packet + is received during this period we will be woken by the ISR + giving us the Semaphore. */ + xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 2 ); + } + } + } +} +/*-----------------------------------------------------------*/ + +static void prvENET_Send(void) +{ + vInitialiseSend(); + vIncrementTxLength( uip_len ); + vSendBufferToMAC(); +} +/*-----------------------------------------------------------*/ + +static void prvSetMACAddress( void ) +{ +unsigned portLONG ulUser0, ulUser1; +unsigned char pucMACArray[8]; +struct uip_eth_addr xAddr; + + /* Get the device MAC address from flash */ + FlashUserGet(&ulUser0, &ulUser1); + + /* Convert the MAC address from flash into sequence of bytes. */ + pucMACArray[0] = ((ulUser0 >> 0) & 0xff); + pucMACArray[1] = ((ulUser0 >> 8) & 0xff); + pucMACArray[2] = ((ulUser0 >> 16) & 0xff); + pucMACArray[3] = ((ulUser1 >> 0) & 0xff); + pucMACArray[4] = ((ulUser1 >> 8) & 0xff); + pucMACArray[5] = ((ulUser1 >> 16) & 0xff); + + /* Program the MAC address. */ + EthernetMACAddrSet(ETH_BASE, pucMACArray); + + xAddr.addr[ 0 ] = pucMACArray[0]; + xAddr.addr[ 1 ] = pucMACArray[1]; + xAddr.addr[ 2 ] = pucMACArray[2]; + xAddr.addr[ 3 ] = pucMACArray[3]; + xAddr.addr[ 4 ] = pucMACArray[4]; + xAddr.addr[ 5 ] = pucMACArray[5]; + uip_setethaddr( xAddr ); +} +/*-----------------------------------------------------------*/ + +void vApplicationProcessFormInput( portCHAR *pcInputString, portBASE_TYPE xInputLength ) +{ +char *c, *pcText; +static portCHAR cMessageForDisplay[ 32 ]; +extern xQueueHandle xOLEDQueue; +xOLEDMessage xOLEDMessage; + + /* Process the form input sent by the IO page of the served HTML. */ + + c = strstr( pcInputString, "?" ); + + if( c ) + { + /* Turn LED's on or off in accordance with the check box status. */ + if( strstr( c, "LED0=1" ) != NULL ) + { + vParTestSetLED( 0, 1 ); + } + else + { + vParTestSetLED( 0, 0 ); + } + + /* Find the start of the text to be displayed on the LCD. */ + pcText = strstr( c, "LCD=" ); + pcText += strlen( "LCD=" ); + + /* Terminate the file name for further processing within uIP. */ + *c = 0x00; + + /* Terminate the LCD string. */ + c = strstr( pcText, " " ); + if( c != NULL ) + { + *c = 0x00; + } + + /* Add required spaces. */ + while( ( c = strstr( pcText, "+" ) ) != NULL ) + { + *c = ' '; + } + + /* Write the message to the LCD. */ + strcpy( cMessageForDisplay, pcText ); + xOLEDMessage.pcMessage = cMessageForDisplay; + xQueueSend( xOLEDQueue, &xOLEDMessage, portMAX_DELAY ); + } +} + diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uip-conf.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uip-conf.h new file mode 100644 index 000000000..455540da1 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uip-conf.h @@ -0,0 +1,159 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 40 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 1480 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 0 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/*#include "smtp.h"*/ +/*#include "hello-world.h"*/ +/*#include "telnetd.h"*/ +#include "webserver.h" +/*#include "dhcpc.h"*/ +/*#include "resolv.h"*/ +/*#include "webclient.h"*/ + +#define UIP_CONF_EXTERNAL_BUFFER + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */ diff --git a/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/webserver.h b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/webserver.h new file mode 100644 index 000000000..1acb290b8 --- /dev/null +++ b/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/webserver.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ +#ifndef __WEBSERVER_H__ +#define __WEBSERVER_H__ + +#include "httpd.h" + +typedef struct httpd_state uip_tcp_appstate_t; +/* UIP_APPCALL: the name of the application function. This function + must return void and take no arguments (i.e., C type "void + appfunc(void)"). */ +#ifndef UIP_APPCALL +#define UIP_APPCALL httpd_appcall +#endif + + +#endif /* __WEBSERVER_H__ */ diff --git a/Demo/CORTEX_STM32F103_IAR/FreeRTOSConfig.h b/Demo/CORTEX_STM32F103_IAR/FreeRTOSConfig.h index e51b352b6..e572b8d96 100644 --- a/Demo/CORTEX_STM32F103_IAR/FreeRTOSConfig.h +++ b/Demo/CORTEX_STM32F103_IAR/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/CORTEX_STM32F103_IAR/ParTest/ParTest.c b/Demo/CORTEX_STM32F103_IAR/ParTest/ParTest.c index 87cb631c1..e266ae6d9 100644 --- a/Demo/CORTEX_STM32F103_IAR/ParTest/ParTest.c +++ b/Demo/CORTEX_STM32F103_IAR/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/CORTEX_STM32F103_IAR/main.c b/Demo/CORTEX_STM32F103_IAR/main.c index c55a2b7b2..b8a803161 100644 --- a/Demo/CORTEX_STM32F103_IAR/main.c +++ b/Demo/CORTEX_STM32F103_IAR/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/CORTEX_STM32F103_IAR/serial/serial.c b/Demo/CORTEX_STM32F103_IAR/serial/serial.c index 8b19d668a..31a7c32bb 100644 --- a/Demo/CORTEX_STM32F103_IAR/serial/serial.c +++ b/Demo/CORTEX_STM32F103_IAR/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS distribution. diff --git a/Demo/CORTEX_STM32F103_IAR/timertest.c b/Demo/CORTEX_STM32F103_IAR/timertest.c index c176f48f3..e1b434e1d 100644 --- a/Demo/CORTEX_STM32F103_IAR/timertest.c +++ b/Demo/CORTEX_STM32F103_IAR/timertest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/BlockQ.c b/Demo/Common/Full/BlockQ.c index e7688ae33..2eedb5c2a 100644 --- a/Demo/Common/Full/BlockQ.c +++ b/Demo/Common/Full/BlockQ.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/PollQ.c b/Demo/Common/Full/PollQ.c index cfd1cba37..63437387f 100644 --- a/Demo/Common/Full/PollQ.c +++ b/Demo/Common/Full/PollQ.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/comtest.c b/Demo/Common/Full/comtest.c index 90dd8320a..ba14a0496 100644 --- a/Demo/Common/Full/comtest.c +++ b/Demo/Common/Full/comtest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/death.c b/Demo/Common/Full/death.c index 7b0f8701c..951b5b3e8 100644 --- a/Demo/Common/Full/death.c +++ b/Demo/Common/Full/death.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/dynamic.c b/Demo/Common/Full/dynamic.c index 454e7524a..b959b0ae6 100644 --- a/Demo/Common/Full/dynamic.c +++ b/Demo/Common/Full/dynamic.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/events.c b/Demo/Common/Full/events.c index ab39bacfd..351fa32df 100644 --- a/Demo/Common/Full/events.c +++ b/Demo/Common/Full/events.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/flash.c b/Demo/Common/Full/flash.c index 30c51bb73..5b43e9a4b 100644 --- a/Demo/Common/Full/flash.c +++ b/Demo/Common/Full/flash.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/flop.c b/Demo/Common/Full/flop.c index 9edb6468c..229d94663 100644 --- a/Demo/Common/Full/flop.c +++ b/Demo/Common/Full/flop.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/integer.c b/Demo/Common/Full/integer.c index 375b307fc..47bec2047 100644 --- a/Demo/Common/Full/integer.c +++ b/Demo/Common/Full/integer.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/print.c b/Demo/Common/Full/print.c index 444088c6c..3d5accd6a 100644 --- a/Demo/Common/Full/print.c +++ b/Demo/Common/Full/print.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Full/semtest.c b/Demo/Common/Full/semtest.c index f0ad9ce0b..5dcdbf849 100644 --- a/Demo/Common/Full/semtest.c +++ b/Demo/Common/Full/semtest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/BlockQ.c b/Demo/Common/Minimal/BlockQ.c index 2e0ebf563..f4c94bd0d 100644 --- a/Demo/Common/Minimal/BlockQ.c +++ b/Demo/Common/Minimal/BlockQ.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/GenQTest.c b/Demo/Common/Minimal/GenQTest.c index 275b814d3..1c64d0c47 100644 --- a/Demo/Common/Minimal/GenQTest.c +++ b/Demo/Common/Minimal/GenQTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/PollQ.c b/Demo/Common/Minimal/PollQ.c index fad5af1d9..247b9662a 100644 --- a/Demo/Common/Minimal/PollQ.c +++ b/Demo/Common/Minimal/PollQ.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/QPeek.c b/Demo/Common/Minimal/QPeek.c index c36e51510..3cd2526d8 100644 --- a/Demo/Common/Minimal/QPeek.c +++ b/Demo/Common/Minimal/QPeek.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -96,10 +96,10 @@ xQueueHandle xQueue; /* Create the demo tasks and pass it the queue just created. We are passing the queue handle by value so it does not matter that it is declared on the stack here. */ - xTaskCreate( prvLowPriorityPeekTask, "PeekLow", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekLOW_PRIORITY, NULL ); - xTaskCreate( prvMediumPriorityPeekTask, "PeekMed", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekMEDIUM_PRIORITY, &xMediumPriorityTask ); - xTaskCreate( prvHighPriorityPeekTask, "PeekHigh", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGH_PRIORITY, &xHighPriorityTask ); - xTaskCreate( prvHighestPriorityPeekTask, "PeekHighest", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGHEST_PRIORITY, &xHighestPriorityTask ); + xTaskCreate( prvLowPriorityPeekTask, "PeekL", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekLOW_PRIORITY, NULL ); + xTaskCreate( prvMediumPriorityPeekTask, "PeekM", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekMEDIUM_PRIORITY, &xMediumPriorityTask ); + xTaskCreate( prvHighPriorityPeekTask, "PeekH1", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGH_PRIORITY, &xHighPriorityTask ); + xTaskCreate( prvHighestPriorityPeekTask, "PeekH2", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGHEST_PRIORITY, &xHighestPriorityTask ); } /*-----------------------------------------------------------*/ diff --git a/Demo/Common/Minimal/blocktim.c b/Demo/Common/Minimal/blocktim.c index e1e74d5e1..34b5a45ea 100644 --- a/Demo/Common/Minimal/blocktim.c +++ b/Demo/Common/Minimal/blocktim.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/comtest.c b/Demo/Common/Minimal/comtest.c index 3d9c28a32..e291beef3 100644 --- a/Demo/Common/Minimal/comtest.c +++ b/Demo/Common/Minimal/comtest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/crflash.c b/Demo/Common/Minimal/crflash.c index f5bf9387c..7bf4c20bf 100644 --- a/Demo/Common/Minimal/crflash.c +++ b/Demo/Common/Minimal/crflash.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/crhook.c b/Demo/Common/Minimal/crhook.c index e58854ed2..982d32f8c 100644 --- a/Demo/Common/Minimal/crhook.c +++ b/Demo/Common/Minimal/crhook.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/death.c b/Demo/Common/Minimal/death.c index d59ffec11..084c4a58b 100644 --- a/Demo/Common/Minimal/death.c +++ b/Demo/Common/Minimal/death.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/dynamic.c b/Demo/Common/Minimal/dynamic.c index 629888908..5d6647328 100644 --- a/Demo/Common/Minimal/dynamic.c +++ b/Demo/Common/Minimal/dynamic.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -114,7 +114,7 @@ static portTASK_FUNCTION_PROTO( vQueueSendWhenSuspendedTask, pvParameters ); /* Demo task specific constants. */ #define priSTACK_SIZE ( configMINIMAL_STACK_SIZE ) -#define priSLEEP_TIME ( ( portTickType ) 128 ) +#define priSLEEP_TIME ( ( portTickType ) 128 / portTICK_RATE_MS ) #define priLOOPS ( 5 ) #define priMAX_COUNT ( ( unsigned portLONG ) 0xff ) #define priNO_BLOCK ( ( portTickType ) 0 ) diff --git a/Demo/Common/Minimal/flash.c b/Demo/Common/Minimal/flash.c index 95bde4040..370596ece 100644 --- a/Demo/Common/Minimal/flash.c +++ b/Demo/Common/Minimal/flash.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/flop.c b/Demo/Common/Minimal/flop.c index 879e3e081..28ba56723 100644 --- a/Demo/Common/Minimal/flop.c +++ b/Demo/Common/Minimal/flop.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/integer.c b/Demo/Common/Minimal/integer.c index 638e3c0d0..ef82278a3 100644 --- a/Demo/Common/Minimal/integer.c +++ b/Demo/Common/Minimal/integer.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/Minimal/semtest.c b/Demo/Common/Minimal/semtest.c index f0855e7cb..8e482c5c2 100644 --- a/Demo/Common/Minimal/semtest.c +++ b/Demo/Common/Minimal/semtest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/drivers/LuminaryMicro/EULA.txt b/Demo/Common/drivers/LuminaryMicro/EULA.txt new file mode 100644 index 000000000..e28207634 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/EULA.txt @@ -0,0 +1,131 @@ +IMPORTANT. Read the following LMI Software License Agreement ("Agreement") +completely. + +In summary, this license agreement allows you to use this software only on +Luminary Micro microcontrollers, on an as-is basis, with no warranties. + +LUMINARY MICRO SOFTWARE LICENSE AGREEMENT + +This is a legal agreement between you (either as an individual or as an +authorized representative of your employer) and Luminary Micro, Inc. ("LMI"). +It concerns your rights to use this file and any accompanying written materials +(the "Software"). In consideration for LMI allowing you to access the Software, +you are agreeing to be bound by the terms of this Agreement. If you do not +agree to all of the terms of this Agreement, do not download the Software. If +you change your mind later, stop using the Software and delete all copies of +the Software in your possession or control. Any copies of the Software that you +have already distributed, where permitted, and do not destroy will continue to +be governed by this Agreement. Your prior use will also continue to be governed +by this Agreement. + +1. LICENSE GRANT. LMI grants to you, free of charge, the non-exclusive, +non-transferable right (1) to use the Software solely and exclusively on LMI's +microcontroller products, (2) to reproduce the Software, (3) to prepare +derivative works of the Software, (4) to distribute the Software and derivative +works thereof in source (human-readable) form and object (machine-readable) +form, and (5) to sublicense to others the right to use the distributed +Software. If you violate any of the terms or restrictions of this Agreement, +LMI may immediately terminate this Agreement, and require that you stop using +and delete all copies of the Software in your possession or control. + +2. COPYRIGHT. The Software is licensed to you, not sold. LMI owns the Software, +and United States copyright laws and international treaty provisions protect +the Software. Therefore, you must treat the Software like any other copyrighted +material (e.g. a book or musical recording). You may not use or copy the +Software for any other purpose than what is described in this Agreement. Except +as expressly provided herein, LMI does not grant to you any express or implied +rights under any LMI or third-party patents, copyrights, trademarks, or trade +secrets. Additionally, you must reproduce and apply any copyright or other +proprietary rights notices included on or embedded in the Software to any +copies or derivative works made thereof, in whole or in part, if any. + +3. SUPPORT. LMI is NOT obligated to provide any support, upgrades or new +releases of the Software. If you wish, you may contact LMI and report problems +and provide suggestions regarding the Software. LMI has no obligation +whatsoever to respond in any way to such a problem report or suggestion. LMI +may make changes to the Software at any time, without any obligation to notify +or provide updated versions of the Software to you. + +4. INDEMNITY. You agree to fully defend and indemnify LMI from any and all +claims, liabilities, and costs (including reasonable attorney's fees) related +to (1) your use (including your sub-licensee's use, if permitted) of the +Software or (2) your violation of the terms and conditions of this Agreement. + +5. HIGH RISK ACTIVITIES. You acknowledge that the Software is not fault +tolerant and is not designed, manufactured or intended by LMI for incorporation +into products intended for use or resale in on-line control equipment in +hazardous, dangerous to life or potentially life-threatening environments +requiring fail-safe performance, such as in the operation of nuclear +facilities, aircraft navigation or communication systems, air traffic control, +direct life support machines or weapons systems, in which the failure of +products could lead directly to death, personal injury or severe physical or +environmental damage ("High Risk Activities"). You specifically represent and +warrant that you will not use the Software or any derivative work of the +Software for High Risk Activities. + +6. PRODUCT LABELING. You are not authorized to use any LMI trademarks, brand +names, or logos. + +7. COMPLIANCE WITH LAWS; EXPORT RESTRICTIONS. You must use the Software in +accordance with all applicable U.S. laws, regulations and statutes. You agree +that neither you nor your licensees (if any) intend to or will, directly or +indirectly, export or transmit the Software to any country in violation of U.S. +export restrictions. + +8. GOVERNMENT USE. Use of the Software and any corresponding documentation, if +any, is provided with RESTRICTED RIGHTS. Use, duplication or disclosure by the +Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) +of The Rights in Technical Data and Computer Software clause at DFARS +252.227-7013 or subparagraphs (c)(l) and (2) of the Commercial Computer +Software--Restricted Rights at 48 CFR 52.227-19, as applicable. Manufacturer is +Luminary Micro, Inc., 108 Wild Basin Road, Ste 350, Austin, Texas 78746. + +9. DISCLAIMER OF WARRANTY. TO THE MAXIMUM EXTENT PERMITTED BY LAW, LMI +EXPRESSLY DISCLAIMS ANY WARRANTY FOR THE SOFTWARE. THE SOFTWARE IS PROVIDED "AS +IS", WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, +WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE, OR NON-INFRINGEMENT. YOU ASSUME THE ENTIRE RISK ARISING OUT +OF THE USE OR PERFORMANCE OF THE SOFTWARE, OR ANY SYSTEMS YOU DESIGN USING THE +SOFTWARE (IF ANY). NOTHING IN THIS AGREEMENT MAY BE CONSTRUED AS A WARRANTY OR +REPRESENTATION BY LMI THAT THE SOFTWARE OR ANY DERIVATIVE WORK DEVELOPED WITH +OR INCORPORATING THE SOFTWARE WILL BE FREE FROM INFRINGEMENT OF THE +INTELLECTUAL PROPERTY RIGHTS OF THIRD PARTIES. + +10. LIMITATION OF LIABILITY. IN NO EVENT WILL LMI BE LIABLE, WHETHER IN +CONTRACT, TORT, OR OTHERWISE, FOR ANY INCIDENTAL, SPECIAL, INDIRECT, +CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +ANY LOSS OF USE, LOSS OF TIME, INCONVENIENCE, COMMERCIAL LOSS, OR LOST PROFITS, +SAVINGS, OR REVENUES TO THE FULL EXTENT SUCH MAY BE DISCLAIMED BY LAW. + +11. CHOICE OF LAW; VENUE; LIMITATIONS. You agree that the statutes and laws of +the United States and the State of Texas, USA, without regard to conflicts of +laws principles, will apply to all matters relating to this Agreement or the +Software, and you agree that any litigation will be subject to the exclusive +jurisdiction of the state or federal courts in Austin, Travis County, Texas, +USA. You agree that regardless of any statute or law to the contrary, any claim +or cause of action arising out of or related to this Agreement or the Software +must be filed within one (1) year after such claim or cause of action arose or +be forever barred. YOU EXPRESSLY AGREE THAT YOU WAIVE YOUR INDIVIDUAL RIGHT TO +A TRIAL BY JURY IN ANY COURT OF COMPETENT JURISDICTION FOR ANY ACTION, DISPUTE, +CLAIM, OR CONTROVERSY CONCERNING THIS AGREEMENT OR FOR ANY ACTION, DISPUTE, +CLAIM, OR CONTROVERSY ARISING OUT OF OR RELATING TO ANY INTERPRETATION, +CONSTRUCTION, PERFORMANCE OR BREACH OF THIS AGREEMENT. + +12. ENTIRE AGREEMENT. This Agreement constitutes the entire agreement between +you and LMI regarding the subject matter of this Agreement, and supersedes all +prior communications, negotiations, understandings, agreements or +representations, either written or oral, if any. This Agreement may only be +amended in written form, executed by you and LMI. + +13. SEVERABILITY. If any provision of this Agreement is held for any reason to +be invalid or unenforceable, then the remaining provisions of this Agreement +will be unimpaired and, unless a modification or replacement of the invalid or +unenforceable provision is further held to deprive you or LMI of a material +benefit, in which case the Agreement will immediately terminate, the invalid or +unenforceable provision will be replaced with a provision that is valid and +enforceable and that comes closest to the intention underlying the invalid or +unenforceable provision. + +14. NO WAIVER. The waiver by LMI of any breach of any provision of this +Agreement will not operate or be construed as a waiver of any other or a +subsequent breach of the same or a different provision. diff --git a/Demo/Common/drivers/LuminaryMicro/IAR/driverlib.r79 b/Demo/Common/drivers/LuminaryMicro/IAR/driverlib.r79 new file mode 100644 index 0000000000000000000000000000000000000000..c471c607fe9a5960ecacf90fd9ee4fc7702cea29 GIT binary patch literal 193656 zcmeFa2Vh;rl{Y@Oz9PM+-mGF-vW;b9Tax8>Wtt^D$spM(JjvKB1|i9^El@+n4Fjf| z9zsH>3CXe{*(AhdL)s=w2?=TJ8e;EDB_x~nWg$z-rY#Bo-RbCe+6h*Lf8oKwk?HxtiK(5Vh-D8BPLIqE4$keFpBN^T z3X!;TXl{t(j3XW#8lIgRpPw5ggknk<92}k8IW{zjusJ?9H#g2fMTmmo%-rDK(V5w? zDFQ38zgKsTC)hv#Kvfg*Gj@y|*u8ITa>t&jiP0UymygYi>=~WeF*`K5b9ie1j`o=` zP;MC;-Z4BsHojBF*Yve-S-quuUB4%3Zgh5T#|3|Wma{V>JAy2@XCJ9~%^u~niYPRn zR9Of~W0P~UNL#_vW>^-ICPpVFhNj)b^H~^)a|fnJCE~RTGlPq$esOhPjcL0-rGOWIv@cJ^*v$1 zrK5Z6c29bfL$Ec4pxFWR_xB|_B}Jplsjt7^o9;@~-|CTQUA-e{e+QKA6t=0pCo1GY z@?if!N1ucthlqe}AMEebm+bvMAF{bTwuU z4pP5Gg054X5=PL^zs`bafP;fWGZSBDIU4oRjT_?tG{iP;{5lIOO28fg2&}l^b&Uj$ zDr(jsHT=<;eN!`+f1PD(D#oFip^07dlOsf~fqZBV;|OJ>Bcs`UV-z$H9GkgHF+DySpPJk?wtIfYEu1I?a3ODe96EHEh*AhZib9Hrf3^Vmby7kQ>V6s2l1H%M zT-($XvYB+U@$$l~H8(%&Ktve@uXIgT5VrzA`(~y_MrUWIW(H=)cJG$8P)P`dK+7mJ9Vda9FyUl*=~4w!0T*Z9;vhyN0yFZIwn z2)=qq!|IJ6mx#OZD`hQ>2Co!Z^p7_W6t{db1 zRty~T<0&muWH~?HH#0UhGd6d?VdY3p8gbG@r1e7pOxwRR$jyi|7?HdL5#B-DvMxrMF(~Rh3>v>DARb(KIcTKQ&b+9+4^oI1_aIiNkxcO!5! zAm{`_P9W?AvYbG+6Nos0s1wL>0=Z5g&k5u^fdVH`=md(KK(P}jaRQ}Ipv(y@asuT} zK&dg~SX;$6Z&oXo1Uh><2L@W(j&CyXO;xS1NGSKsH7&WLW`Oi-LP8v@HBCPlcR*2rCK1b=F z$07(n`eFPM6x43$M-dc9K~eMs!&ljY6sjO#>MjJ5#s@)B@&tY2El5G_l72Li$KQgY z>boEQsG8QdrheX5cdm(w>Z%q$lDmLHr>s zvLi>Cih@3Ta$+hc5oZhHFM&AwD0;olK67$nsstjAOyF12NCp%ZJ&K^tI#Y<1uMi%J znO=5MD*A#Dga%=IbCZC_ji_N#kdzZwwZ>ApXwDiD`R_ zs;uG=C;kyW-71cpRF)N0**^!AMM_Z9HSMK9(Mm1L%xxdklqH{!s5OPb?0QpEa<7Rf zA{+|ui(dA!Zsk5{Wiu;}55M{`NE1mKoDUbYgb(USt=`84O$Mr1EkVkHP8pW$V+u(d zq!AuJG|n}#7D8IYk*F?e4ntDH3cFa}2$ZmD!dmOHs@=zEnq{Uy;#>ugg1Ii~w*m#M z#Hwnts@V`@$LQDV>|(CIOZWu!V&Wf^hYRreFg!X_JvBd9J+-TPW@vKv=jc-3E5*8QHp9OAGYyIc%q~$z3g_#z?3~S&_^65EjD)X zTVZE8*evHyTn1(AqK6)O=*9lnv|#yg*#K?&Ru7{9BYUdnrm9;L-PPkm!=vN0_9fYs zhuK5J_^a=HDe>a==y$SpRsXK?QosIP^`-uow)@pY1nd$%wF8v)<3iF({ zwn1g#JXN_qsFYEIQnfd!L50oS*t42aITK+{gDPGc(cA`QUKK5Jn$&aPsZo2%O&XjH zRdqDAJ>3wjX3GfTZ%-tV-3ZX0ZV1L$TY5_&B=j5l;rODZP%!GYl$(N?S_-GRgfDnf zwL=Y!UBZ_%ws!d9=eUmTxa<>HF`C(``nN$PBGmH!Ak-2xmy{m~g|9LP6U$%Lp92Gx z3Z9iTIHD{bwNP{gt@S$KOtC2`lKh&pEk=C(|vFl=cETz`Et;KpEj>x6f^tqkS z^NvUY=0{E}!}fPX)t(P3`9i?Y3jwRjk7&x-kA=dA%weC9*-3*V%lsW7iLLB%UkX;R zB@)RIG8L(jont9A)~zkEXJeOo#4U)&uD8YIBMOOIntNh77Tvk3{;xr$u$7NnKY_Sm zRSTEhO8TsdJq?Mse_tq-x2Bw=0qkOhM2Yemx8RH=kt64Ooa_*QRC6GRO9ZD(|GO(@y3I?p~4QwUiCDda8e*jl{@u9EM?z#d#GHD zqM`#i^^%Izz|NNS!dne3Y#49W#k^S;tL8^s$v!9~%h;@ok_JaimyB4-X8m|*30p3a z9LZ9VEEbQcZnH)^(d>3Y%Qhik5f`vX4Sd-Z@C!n~r9yQ(d`-GAX>dfDx1%~@DFysW zsD_;;ksJY2k(yb%M?myD)fO;|3z)01H3fXwyiwU2WzT)##9Eb=6sW;F!pdpX2Q}@M zFzUI`RO^;uAXUuD*yH%C-SuWDe5JYh$U`sdvHIA@sWtKWH$Q1`QYo1uK4rMl9op^; zFJ*NS$q_#l=?u0>B2l|P4Py%-mAahn0;kg@k`CYs8%bt&SNLqU$CA2dw-Y^mwZ#9&3vYK|PmQIZLhETdeoRtp@|vgE=%_@roTrK|jk|AFWT> z@rcHn%UYw#4a#3Zb0^lTtfEW}eJ`vm6N>vbDK26zuUiJSjkQ0*)mJUlclQTE;e%$^ zy&IsuT#x!nlLluX%j2kz@@#So{YrQRTP=|s^%0V6BCmwcVO@1_&I&w&xzEx zG6T{%ti!4%^;sp(4!xuYSk(WoOru#}Hem_5>|u^}!QeZ~moEaJ*pq-OtM8B2q=Z3jzOy*%Cg$+hj(UY9EAx< z_QN}~F$xnWIeo9fVSEa!yRvK9D#BXoE(}iJ$5dj)x1VqdgrKu(zyzCJz{;%ZYO9s^ z$&1h@Sv5`VG#2y8e|6G$G}{OpvHN3tVtE+%^DC{Eiq6rNRvTxvFHFpz7CL=G&rKvlvBsVQr7WvC?4;U{;56{3BA*; z<6$lteNA)83M)=DV_{#R=Kim2@ujG1KZ0Z-EV-g)PWcg|*34_43SVPfZ62sQ1ACmi z8*ZavcDSxr3>Xa^e+AMR5{bsuHE0=xB-ie* z0%<)Vi4R0l%36FN^3n)S6f{L$`}zNz*DR~H5l8*h; zGdR)2{Tcr!CXwI=pO|A8y;K|Piw*EvpdAHv9Lt4EtL){%BwsFUS6O|Pns;wRX{N!_ z(B2+FTZxKUud5>z4ruC*b(s3pJ#V9R!`&YUtLDhP-MV6y#hylgyf{&(?J)u?UI`yG z4pcl83eRc9<~4Qaq^v6{u>nPSNVPl7j3nFP*3G*jjm(lrP6hgr?gJ8EPm8wbOpJb{ z`~94piP4Yr0FXA&#JB~Wuqno3WmsfD?cH`IL4y;q9oC0itl_w&WPmJT)(2Z+<(^(! zpERC~7^McLP|U5%tatKtN@c)WokQVe@tA?Rv)v1%xz(^%hirHUy1G*5{S0VG8qY;S zT8NXGHcvz@?ZlYSX?0dvtj_xWi|zu4Hlf(@0xWPUTcg?y+KuW>e3A2oFP`YdGN)3_ z|6xQ~DV8~}pu$68!>;q}ZI^0S8jYqNdntVN;!Z7KoL_%ChTkc3D1mj*=I!(mS6mkj zh4*S9b6Wym+_7n~05Xpu(+X@S5o=k6PCb)Masl+C$my&>B02S(iqyt>2q|UY^<(`w zvRd?1(Hf|tG4Lv>NSoLeVkNpWecm>rI}?&UI#V#4cV~lw#cq@QX#`*KMB2fj2(Weg z7)MGYrE?T#dZFM-K|(=U_Mb);VQ}y^x>(55fSQuV8xbSVaOZ*bN#nX`$Oy%5!aVS3 ztgO?TK!vZi{y@V?N=tpUB~~bAiV9|p0PS?kIA*b>ma+`UJ+fKvMYDdgCHC{!PdZV7 zVqMI~rI(FMsLI%jnzG|1?Rl;SnppC~G<;*QF8D}P?8|7{2cu&6j$|IbSO1WP?}_q{ zc|M^-_<$pNS@%u@p`7F=|KriLk(>r;LXv~@M}g!Sq-h|aL7L0VfANcsVvy#klK&G? zntoZ0)hPz)L%VVp3&TUSRc7dhW}H*y)32XcH?PN-dcIO8YzM zP)Z~yZSkZ-Nq&NI9?$b*td|W`8)KL9DjDJ7K@r~hlID%3#x~~t3-etE9T}SZi@Oeb zxAqrw9W>0ZgF?;jb8mm*W=cX#w0E4dUi#NL5yvxIN0R z6~$zB4+i32y3vdwZDVzB{tR9 z|7OXovB?7hgcnWlYi#y|8a-6FI_ffPO|*HaaPQRz@=&ew<>k}YIv-5Ko_)b z@leIQQ~-IXVzzX2lQP5X0fNr=*NPUBVpyv!Gw)c7(D_TBp z;RG4*LC}M8NS_4R(h(o@wT602bQtux!GwF?x*4s!CzptLIuW(Xo?&eQG|vm|Kd*Ds z08^SJ%|HrGef_3Ql7^r*jjcCy?!kfnj&ohTStJ6l2nQs!P5E=p5vadwo77L-189@w zsjpwRsi%-6rt8=E*Vztrv<_@_#~)r|ksSt(LC|_Cs(w>XloM}4CmU?r+V9@!=4AO2 z*4?wU+pl0`%oW+WiMrw7wnR^&UCN7o%In64dbLa=vzslEqH9S)v}`9^g2j7#1`@rV zo9}22qP!y8_?84p-PhyE8qI>&p`CS42fB{8r8W8Fru${BGW+_*G^j^7v{GANkgdV1 zk4^Y-N(@-zVE6U`S0=7ZTO9(}-s$!Vnx;HlK`9$#199b**SU$trom2^C(qC>Cyh-Y zqn_)OglB2X%E2CSyg721M;bm0${ZU#IdWm_9J{Fp`!&mR^nxMKmVQ_9JX5>DaO$nz zHo@m)M?=JWV0))*r(o^smVgN_5R9EF<9rj{106k%8tPFVr!{aWjl5E*dK!A28YRvh zy`I`e8}`E5w|Fc)&~tb*6+^q2sou#OTmYQkAF9-Of%hPrBQl6Qgr82Rw@M13bC7tpI5YcPPFxwpUP&=(0tN z1$Cn1{H-1RZi{ur=d@ymcS!v(C=crm2PTR}Eq#GzF50-KY;F;@!Qf;xMN@9UInbjj zA%68PnEH)YPtW1T+pb-+Qv0G;&5whkb>~hxvTy_xmMmlKqvJ!ab&J#1p>~*=IG7@D zZf4^ji$wW}`6#!#L!WlpbE}foXjIAz_~pj9Wt=_6l2ATt7SaFEsk}W(#g`A4#`4K_E@IqjhQm(x!8#q7WBlVaTe7o6mvGd@Ina@m zL2fGCJIl zO?=!nhUDDnd`Xs=V!RfFT*IyNb5ndsaq7z96rZE!<)m^>Ykiz3ChK#J1GCF3ij~SC z=3sGtmmwy#Pcd0Cib?HLjBDSe%ktC(I>LUR@tBYS9b_O=IxNljGHA-LC%Od0_2kTX zn5*OrX|qh5!i2g;k?tM*?J;IHKCzQ#Q;!-%bDy70Nw&2<+d4Cx33+yRd~U`aeZ@b8QwZO+OdBQ&JNH|+)1A6ZWT%?YmH*E1}Mh+B*!ERF4Jv=6bt%d zVP7oU7mKHB2j0gjq#{dm>7m@Oh5Zt-(B{N>lgyACy6 zh47-TD`AhR1`eedNZts8MpB0@%?(Pq~a!d-S#EYE>mAKl8P>Gi~ z5zy(D;DOB4swMy4D!dCOJGSPMQDxG&>VQ6}b;ueqO zSVn~SS&o0i$txFg~Jm-K4D2Z>Drx$+rZ1+Jn45SXeLO%6X|z(((fi#YG9)4Z2;Wu0lZVnPvvdEKl*9J zKf+pveU$TWLdPP0AL5e$ z+uFU~#Wc1yLl3|VweGj4&GWrOj?;tU4@Ou$I z?1{e*@gtu2Un9=XY(>_8qtsE1B5K#8fc=fc{ZCukUZ*-{sQKfes7Z}+Z z2CQmL6Ti5nEw{N11iq=NL2hzO*A?6`k+GeK;&Nn^TifEM!9sSe25$jCwykad6%??x z#Q?V;1wY-VCbWy^@k3C++7?6Mf)u<70$CGM{RkAWw#5a6g(zIpTHbDX(Od&u-jzg> zV_Hi+)wao{I|)=IK0IWFPqkHj3)4HAB8f@fG=3$GKSGimvez_}FJ+Vj z6GXcGUY5-ye=le9D2(U8B*YALDkBp;6BAN9Nm3wmlEgYRa1^5p&gnBU!Mv3&3Eep* zCWZU)D{1@|`(v!Q zqsq`uG8TvCW|E{tbdJ}cSlBd&q1aEIIun}HiHU9B`51HpNurPh)5@tz60w<7h}yXi z#er>e79{zXj7)-=Y6s&0m!wiC_N7|hPKuckcsL`Ij5@*a!bh#BUG zGcrM@sqG|3Ew-7gx`{M{3uoB$1D8T(7~L7UtjNTL1`nb?{Z_%{F|=9KkA|N7%ZyyG zG)tF-MnIxpeY@atExzwCq|hR6%c*mrEf1n!bEn|)6S&$z)6c_jfQ3tjYR=FJbJTpB z%i6aIE>8+Bx!?jw1}+(^C~R}77lX|xU zDWH{n@dgteP-Xe4*7J2=(s&O*VPOk>yhvjMYg(iF4f>7RO|XG(jT$?n`de8-PpWL? z8kHR`QqCyirYCO{;x=`_T+u!l$v4ck-{f}C0pnop&%-*IG)(MUH|d(QYWZVy7hb7; z&RA?l_)YjL&ZxsZ`2A;|PUuw?>&m17^+eu3;8NoBlh(CIEuGJ=#xW=YMgz$HOn$#I zx=6uS)vHL|fPZ`n7k6YScE%JLbTf7ijUV_)8rK#rV%!|IzMPDdiSEpM6{ZoEZ3sX? z8%n{mT-xi4^2H@tVf_FYJ8KFH5d8I!o@3vjg;i})0b4{>AnxN*i#&TOEvsCP&&6za zv$_$am6DXQI47O7ij#5y+Fa6`K#H5USr*fVT+{7K_-y^(*l7Eue#>B1&Uv{04kOd$ zRvojBHCT7HSZ0gG)>x`EN8Ok-9x8%4sCD0#>LuK zEOs9mM6kC}z*u4Z{@byo1o!3Bk~BV%o)0w=<`_%q|EQVVUHy)CnnxvF5UP1&>Kc^X^UjN$AC<3{}^?Pl`t zaGuJFnpO4RiaZ;*}RmR&0$uNtl86( z2G1iy&5~@gW*;kFEan$cX9VOmn~G(zR>_O%pVw?E)_KC7L)0wQKd)KBvTK%tqGnY; z?FWl}HA`xxnoS`siILa}R>FKLcPHFhf;6bLgObky%*I_xM^^?xo_ z21LESgnEUcawRIXdF>OTI!nJ6S-o;)_-cy5PSRX`f23Jg&h80j>q@;@vNxzxxZW(P zaYCVRkZM1AI(}DB+i=J=t^VFfvq0D8jA&kW_<(U}@%><%V;pS!UQm~eiHUmZEHGvq zY4P5082pK&WqUR~9hl6iZoxxkk=+Za>5XR9){$r$$IM&UEYd$E~A8 zWi9n0I2{&AFeY-Ah6>Mg{;WS)v(ivcsD3Tw$~YHisI%bJpF zPtv%rVVhP#fiYJ9dt$r0`TQzbm7|7Gqk1vmw!{6dG}1h{Rc?w<^k8T8nNQ%78DKR z2+RUW!=7R|wM@=!@YRp$mK-UCJjKWgspfawVtm6X#!9;wuX&5n_ElMoZ5fIYOd6b3 zdNC+(Y47yil0|H>Ur?vL_PuT?iXY@H1MP^hVZt|gUabr+7_qBhPN*M~z17UpdqvBJBuNtV| z^FYe7uH;>P(M^+I+FN|-=|No#z34KEnN>bVWBKf} zqQxO)EP6Vv3F<$7&ZpMB?%;;Pd(2&Yn8wGaTVvcd8@8`plJpuQ@%OrQ@j_|l8Y8Sr zJy^aPqm>u0F~YKIjDj`1K6MKAxU~ONiW(y^-#rF6$YTkh`<$c1vZx&H32k;Mp7wSxUeP>*;`{oN$+#3HTl;qmMX+;GI^( z0^=98I{Gwb$8j*;1TQlRRv&FDTU4Ni{<=(AUBY)b-ctsjNm|&zmx8`xxu(7EvQXHp zT%_rzeJ&K%oq$S#Wlv!-xuzLiojvJJ?r=B*W@|k5pd>y`?vyuXbp8WR2xWGY+3j}U z{)ZHJHUixKLZV=)fKqUgprv4iOtn|(lv*uQYb5S+n?F{yWnoreg*vSxZI*e=3i1G~ zX+=Ok21D*wT&)fyjSrU@wbE*LE4;Cm!DidCstHj#Y`P$6e1-#>xw{7m*alY&9I&C9 z{02zCc66&US|<*^ZoOHLH6r^QK6tUHX=!G;^s8EL>3kmBeW)vVwOLduSBo9^`Ylz% zua*gq3##^0)EB&J6k)Exj#S}$XcX2I<6uokM0FOAUO#>FSQ3(3H7v=p`I3we&2XE- zS;~&?)EY@)FSf9y^jewiu}=)mB;kb*V`wHUX~z3n*=iOeR{qT(4=W0WdBt$jLbqA` zTNyTkJd-cgE3Lt>p|OPdKA&t4eU5WA-wuWXDtBkWqV)%D?~92W7WBdcB2<}Gsb;-v zk)z6c7710>E%U3g>Q|0eI!!5D?riU2sxuGT9_rlI4|93WFI|r$fZeX4$NLsli%%z^ zArg+Z%RERF3~~+OV8%P~Kd>mXhA?t_mn|1l1+q(U76bjIIPD{d-)UczQmCz!mdLh7 z3$zk7``98SSIk9UgMu)#g!%sGYD2Glmv3dWM6PTuJ zNC3G;dvQ^kf4INOfYiv&^p)A2bB#D{dU@61F7l}{(D|1rZLzc+Z-lckmMCz^qnp`-AHlj$6YIWEIBZ;HUJ+GL{Xx^L z%M0p;-gKO*-#FCxUBrwtYsCUk!|LSn_IXWT`gC?4}9E0x$Iip;R zP0(_qM$Rag;ESc4W|Z9ZzLCvo#&F2xnKTBI#uv*&!H{MA(rU@|43SPVz-KBxZZQl1 zp*<4<|FE(8er72x*kkpuzBFkZ=Yp_mOh(jZ=$M)JkWEFh&0K~rgd#QPH|3b#`C8$Z z)Mj)vhywBqd-g8+@DGI}dc7uTYkXNiu*V<1T*w^*O7u&YOY^X+^Ox-?Mw`f?|`9r^*aISwVf%Hzl|#T8$3tR_iYGvkD`CilW^B|H5rI z{J2#ZreWa|yP9<_xK%)1h|a6|QagXGSZX)Id&F8b@5dENX&&!BKOjwq%*9x5tj>8Q ztcvmTN=;c+h+_*)UDNF@t@#eenxp|@ud5Yjkw$sR#l=rZml+0#!>0GMVNcTdHE+J~ zQbwbJh0g~Dx#?J%w~|AaY$adCCgnMnn*Yg4rA^Eie^-gV9}MS&i^G*@E-IfhvhH0X z=L}snu3CN%wr^DG>bgq11EuC@bQLC-{JK1eXk4}QXEdLz{kyvv<2N+obqzrq*n}TZu zkb?G6DFwy$Bt6o=2EMrPYANC?3rV!KS;Bysy>sz>l0GW8OPyGN$l#i1&3LjbOJl6G*Vj_OhFVTY87xrI~01yPcUpf}L+dpF-cRq?H9*h6#NI<8wM)r{f)a zdA97>=cue8TP=8dl~R$9K}pl@tiqs_?cZ<0;D4p5mv7nJ3TJWSmJ$l@Km99k`M&1g zMOVVfU?E@I@l7Lmss_8t3_AcMLD20B_f*--UOD7X)4?EN6?(9m*xA$<1Qr793J1&H z5kNb8M^%;ZzAF|6)BqoR(_|=oJ zrl`@ti3f2T<979QweZ@-$|uz)u%y|7khTBmb(PKeY>Xb{XCMcJn{rsMkb>C1oNtieH#i8Qkx#aUtLpIzF$|( z+VlSqvE+2WdLX{34k5t>Bk7)&fMWvI|ybb8YE2X#TADdmfua47uYYs`zHE77`F z|1azHxOM$e>&PbSet0Z)PD;baP`j&=CaUdIxQu{^xJK{|gi@{%AccS8qCu!~C*``u zzK=dSvYNw3UnI=;XAxzPNGS!pMXWUffeQrLtERKqsPeQLW^c+Gysd{bVGE%By&(;{W zZUt?*g#qJ^-&sK{?D2o5afly4@~!8i_z0P@)R)ALvu_*ts-*GQV$V3_E@-dD0L20L zy0h+CPFE2=@;l6dxX@sSb%c4MnQL`!q7T@hXSy!r({=GNORuwPkHuc{Oxo9AhjX#9 zOHSH{lg5`8(?{yIUt5RwS%bf}*!h&3noFmyRLWcop`K~^T1?A}Lji|Ch@s|^2Tr+P zdR@}^7mnnDOT6Iglg8_dLuJ@b^<;os>JucQFs3eAw=9F=Ih5{S8UuuIf;3 z8vWb0xk7h#;-qJf6$)5|a^wBRr18;eqsXw>3M(W(Aa24&aWxh$I6K-Sa_6B?w)JJ* z`f@fU;X;N_f}4}Zr>jHZkXs*|;uhwmutmsw-CChoE3msDzeJBDjjvWy)qjpyTjxU! zts)yCHfTx}tJFtx3%>dNG>21ZnsY2o7VFle@vUljFXmOdP3WgB-j&euRxMvAz5p9?4?&MwUu&;~VnKT}BFb?nTv>xWY z7KJxt;qSuv#}Y#~Vn0K%v1NT$13K=QXK_KhRoKz)v|_py%ND0KnXeTBy!XwLbS# z>-FogAfl^$WUJWx=3>S=pXbBo@e+-FR$Jyd_iT-t>Nju~_gA>!`LeQ1EqY~%@_mIi zBsA?iOZcvHp1FANep&^Xd&|FUYH(JpHvTHo>}(?~s&;04P07DXE}1lK-97k*42XS9 z<3N3rH?|hHU7UNo#z79VZ}l1n*WL=4Zqpsg@8^pd#mtF4ZXSH%LHN+sI$pv0OF4H3 zEyn`y{GFy9bG$?m;8dXz*(9!MMcO3&QFoNzyb$# zt32w?i{D@3Tj0>zg%&u3^bQY_Z-GOfc6@HFT^TDDkkC|F7YjJUIiXs-~d5sbFqE|EYAXmRKXWGgzy~~ z>&L+23mmy1pal;1SL=~uS}X`ChiRAgCzOLVi_5jEEJY3~cVp<|1JC)dTS2AM3h5Sx zPxRj#GWBkEqwsJhD5!kt&gZnatOS(Fb5w=V$2NjhlXwg8lI=sOmGsvLS> zCMa7Hdjg+a&lr|=oKFzB)-Aea9H*4P37MiDch@^_Pa5y7!8i`WJr)$!q7aKt8@E%p zB61492d^sC7(qT&VMG)YG{#*l$r9KnZ;ds;x3|ql=Y0HUzwf~IW)1BD)7<6I-;zsY zomMNJFpycjGif{}#lq_33L(}rx^;%cx)+8HHO6{}A*3ymz<1#-ni^WDAUDkOuC%%% z?G=#r3X~fABA2#VcjI#6i(L9n(<+h*x({ovnur>43KkRvqtgbt=DI&=d^;^Kl+4Lu zMVFtyrve^G8b3|vkBtZ+cF3oe2b0DxYUrY@t>qQ6wopWr-=o5ZlE&}7xTOLYTbF1a zQcVxT+^N>n02G^Ls}JklN#iCjmTF@ux>YNAy$6p>)*36Z#^a|ed>s*c9cn%bHMf{( ziEg`lBx&4Vi=}Mrmty9Br~&@ly)!?3>hPH#Z?&MW{JHxs7l|)%5W3XAas6Iw#nsZr zH8y)8eW#^*ZrZ(h=lF$M>`mAQ!18Rz z%#OXynR?9mXq|HhRo+I$)D@uXNMgDUg{RE((+&*y<V-$A3AL1hkLcFk-({ zYu_IcNY3<P}mG#KNCocHhKs{w#K?zXC<&!=9F0eGBqk%H6YI?`Z>xY~Y z9WU*fy^T{L7xp$zLp4F^$p0k1$Tyx-WjhlO4-Srx4G)e?O-%pAc@zH^^)JYqc#x4x zaMH8u5_~UD8iS83H))1t0c&D(Vq!?*ouAorxXGD0uEQVKm`K=T`wl6F1=XUZoa(!I#2U_%iqkUk*Rvry1}OZo)@+0RF+l@!sw}c--#p zbUogZBWpK3;Y)9V*G+*Bf1MrDODH+xj@Xby$0m3JbsdPpMJT+03ZhnepnITR!nluZ z2L>uHh}_H)NDvM7dYrRDz{Z{sM1XtS?moCSZ)(WkdHjFef&TY%2MT*%nBd3J4~J%k z=B8%iQEe9C2TyT?nVJPS`2AtRkpYbFeJtR% z%IAwtc(j^po0=LQ9deySX5j31fL2YMOMINu9bA?XQm#ZwjPCL{K1?k?cXa3RDwxS< zos&j9$?wk#$iVi=H7*qFqzWH<OL(d7&2GKyjzH*4wc;)Ij2VR8dDy3@xf z>SIJP^%?y7^LT0+C*M4QKp@2*()rB5O&+mp|1IA zaF%$%+0rU~MuO*&tRjcGRrea-j~HF2rDmEhm@gUJ7Ys}Y7V^51>I>$1P{0=q?w&75!Ix;r&GrTJG$`N; z26tQ+q@W!&`mue%JOc{&g2DCKg(xcNwkUOQ+W)Y-CJBi<`MT`!M>?GcE z5aXsgTqoSxnh1lJ;}?!AO#b9N@g9W)kd1%*@L#EJAEGK9g-jq(n1HXfEZPW7l+y3pOl!lD3GxTjY_y9hm9}$ zHF|n>Dja$%hYL&Kw<4snTTCS?Hh*t4`5h^|HA=4NtPtL|*N6ci!kgloplz)v|F}DSlv6T{uN=>CtMLJV#Ov~CU-6xQw z9&Zm|kDIm|>O9+^wv7WHtp6K3w8-FvB27~?T(L{|O!v}ues+fg=l8bY6P#gM@J26aPTINa&t zi0OqRmiDOzMuYDLG7hz=NEmAItT75#Yrp1wJy}J}jry`xfHhKiaGws*e0+LB77jS9LiRBn|a@4?m zL8WjDKdF32kPoZjvRi4gs*631LG{{Cd1kCAEPsMZF>fQnRFT-BjnG7Sf6&&QfKY>m zXabTpHNIX*I|?K zA&%UV5m^ksw5SuCi(&pQF>WnC6?9tA-=qBKJf)(7_W0f1f zoKI4bXg)#LxU~iDQAE?BK{9>Yldrh#r!Q%6NXOs<2ewVA7o|ffkv3JS7o|h_#P2-t zxbg9T5;kCfe7QC&Q+Goc0j?Qcu8{RQIKQ_Ko#@F<< zZ&|&idtJXLX>N3OZpZA*$PNgwre8cf_-U-JWt4BF%c0wEuMqb69K5dyS-ym|KNFmv!1}NNu2}Wd0V^N zJUoHFtvA8t+Bveb#~9s*H)6o{1++A=9~1A}Ix;;w=I)vJQr$f;v7ZCneY?hJccp9R zQpOH5rE8S`)w*`^zk$sv6TV)lS4VkYXf?!>B^C{%9QHh+;uPdFjGfEY z0BsG6=2$bIIG3$OWG&0d!MJlSZX7812gooWXCQKh18GO3odt7n*7nr7tOKzQ0or)R zhwL+ss5s*ookPEx9G&}%JLfp^m-K3Ch(&OM;po~u*f;?Put@*kKI}+4%Luz!I42-S z!b~PQryzI1$T!2O#{v(g*5VLkDGov0$5Qcd>IyuVT89Ty`D3X8I#TEuI1lfkHfK0c z=m~bW#&K5SI}*WBiJgl5E_t$nBNPX_+mnj1QeY>1XCyd2vC{|q>2W8W1}n)2XDT5l zSI?PA1IAt_Sw4zLZ=BlP=?OQ<1*b1IdUyK;o@7_Z?t$&?o^)53?u0iTkC)m-?dg-) zc(>F}9dMuO!)uGpZmQ?JX^4a-)hEY~R|qrDMBKlx)h41O0L|^+a7rUu(OM zrJWn68pxQNczLhm+}3uFvNkmfo*cL>(K#Sr^rHhXo*#!{uQlO56o|vIhMp{v1+_ZZ z-s!1XdJK^RP_KXvxFzH7?FkU77NCS5#G6k~-(XLlM?5@WDU^|*mkcE{DFD4V+V9gu z!~Y!0{r5YRgR^BUP&(`hTAUbpj+`=qJttPBM4jVMryRzW5HRWh{pWDvsLO%TlSm!= zr}31MbD$&+$|T(X6kaOzTuRPcOz8ydNMbgp&p(3tx+kH2&R!6RA$Rc81sKA}$z zji2N2t)cWXr_?SPbdD9@&^Unn8JlHb%X z>ZdmfMWb;t5T~(7_wo|_k=Qox9`y>uain-&J``^{jc=j{=RCTzP}NexpKD*U5_ zK5F>cF?Rvui^(UN)&fa$VHA^(4^d1$K15vP<3kjaj}LJ#DlV5Qz~osq#bkaIllkGe z$&(+&WPTKr`QdWB;A!i4*W`KF0Pwv2Dbo3ydA&zOwKNdPC>nD*Z~Ccokke(gJhA zu0yMIdbG%9e6{a1{u<^&cwfpRDCU;U;`%FO{y!}S6Fy3AYMA^0#( z>x-XYI4xS}v_AC?!G}QcpLx8_ ziw~4Y;s*_4yN6mjVcB;G-kznfJn=pO_I`Y)*%=O^X@ixB?K=eD!SD}adY9ntlM_=n zB;xQ+{DL=uZ2mF=y<~IE$%&~1M4Tmv9|195zMvOuPT>LqZEX>8_5^+ z5c8=G#P$O_pMV6oxq+uWw0}(@ehUexF_Q#^bSDdL6wq9uKzgO8?$nt$JDx>?$@78< zJ)82zsWU0HB`Fq%Kp(*h01tcMF&X^_DNHixf=;NZ7$y68G5#nT5gw7zKX!6r+MOlh z(u17%_h|e4_KKlAesbc7OxS-;>*;5#KtD8NwxPuZ=**n9^VsX-bcNm9-WoB;qkv>== z9x?}=<3jF|2Ny6nD$ODCZqJgd#oZoxntpFM?YOYUMv@nR?hQAyjl@a1nybB9JWfKB zGk$2m7Ty*W3QGR>g$r1T)fu$3F6)W^uzvXqE5!YPwDPMzux)*0*>V`q@Pj})SZ@xW zh^wq3tSa9QE6YSllT^}(Sy+C=)a#<=Ox;M&Ihs=QERP+i8`-@~Q9Gr4i>6)NSV?ut^#&^O?yzf#_|HTVZ{EkqQ2gwq*oP?VrD(kYVS%8Z# zkSM5f(?n_wj(H^o^JVH%i7VWza$G6P%g`F$BfvRwajo@0+$vyJ*tGJa)}lC4FXcz; zQ5V9j{IHepz;V(JoXhEMfS`n>qlb8e-xI*(A&z4!LMKjBSu~`ocV{Vi!Zp<$Sy*E_WH%hb*STU8 z;J+ga?v7&5K>CpG+#f(8@cx6kg!}|QLw6pkt!v}t4j2v}=*k1l73?@(I5{28D3t-c zaB`-~ii=h4i&>6i(q~a1Bgl;^Y3I@W2|h)YX$?W4TUXKfI#c0{>nj5ojm z&56c_FGCaDU$f|P)X-L3Bi>}NueDKjLUa5%2g&p+S%vV_cG)I)$KM|-h)u^f<8MFy z-iE*T;O|%Q_v^7~i#-^NBz3@oL=}$?$B!V2DqN#$#ioxB_T13tH{R-_7`Y5B}bUzhB4Suj21vLVFv0 zQSOJ&iYsD$__)bkdvV; zarm|~hnQ7jdHWHc9NO-8T71HoOn>TTw9U%~j}1loNxEC&j3P0fyK!5+*Qt zJK$gDT-+=!F76k7*%kK-9&t%j@h@Fm+%@7v>EaT5DehOYVWQ{=Xp757fEv2biS3ocQE?}{i{9X!8#B2IqwzWl1; z^Ek3le)mN%jGzr+JYNF8qt@N19QbpC%aAC~QQX>rm#o7oywloGv)xQjv#E!odTW$D z_k}M$f8t@x%7>K-HT3O>(o0uZH7yBgG}TbszG5hFCm6$R{sWcosSj-U(h*_XN1*d`JwP7^%bG;#hQBN&tBGHRQqvyxJ~0% zNV)F>T&IGxeWDuNhufB;7Cd7w&8xJiAvOHmZRg*K)Uh?xx;pHcg|WJ8m_bO72qX$V zDu5JxR;GSYrhd!Au!VIHL*XHcM&p%-;Xr|Cf9+y@H&Sh{AoythDu5WxQ)K&I#2(m} z@r;1OR)LjDtn6D{6fCr%xI7*SvwX^1_yl^#tKmgTGAYpgK#evGa?csU3!xrl@x%Y>U2TOVt) zlyBh`t{D6uSvM_?6?uFyt-)jzp~kwHIKRuLKMnM~UWU6<6CO)V_=%g)X<3T}AM2xS z)(^jBho5Y-EcxisTD)5mF$(?pTEDHbKG$aDN*_gdO5(a`$OzeTEk`E4g6>L9coYd+ zgya(yDAX&RcJ`m-tg|HR2G{{a$+e?USsLq|lG8^jxKAOQ)7~lzWeG`6jqn5&CBKP+ z(^5(JS_Qqs=JAiP4i`3~hGxXdNZohyN4z+db#0Y(N1OHAZ(D~KTi5yChiZavAPj7V z)!K&DU+m4;PvE-XD8`P@^0AP`+S?_N~ z)4m$1-cylq-8MtL`>_t^l(H(P-rqQuTD|m;7OtR2c^OMJ_G@J^zlDDzCVNeti>iFG zKXEgr`h$zr?B{co&O+YkKc9n{UNO{5bTQMDk0g8r9V~w@KJ3o=jHbr#X#NwQxOd#B z>1XZ{)BTPcX~JLm+c2)BZvEkA+{|6~_(hw?q zI8?U_lX|@~sgrd`E}z;>GD@k!mrst;<(b-ljZ}APmp(|*&onAnw0veWcasyrsb($lBxeFQ-9#e#$E>GxN|ox1Niq^jy?CE!RLM| z59WTpab;hgr);YQkb?VVUWaTF3^h6S;$VhnKla{$y5*rya=c#F#^VGD=d8*9(g&aP&*H{yqtY-eQjQVXF zg}D_I984e2kpus3n#`~aj&7itBVV`j3-O@f4j8ITTZsx!!v7Kp_?9h;4f$q!D{1^F zha9>{>bg|wvDAdO<`0n;3wGq$2eUnAO;cD*S`^^n)L-UcwkJ=8j_lSmRo1O-R-PQ{ zH{fy59GdL^H>9%*TS+<+5@13F`)tYn47kI}p$Y%w>}_s%xYOa*%DI`6+nHFII^HwFzTdlu~@WN-9x8VK2%0w3a z$GI8jtyHAU^Ohg$C%H6l*@b`OxM$w-mXVIPco}o^L>aMx6wFg|-j;`bME-qzdmiSg zAiYBzQN??@n&N$VX+Ink)5}X@b>`TAa{7M+?`R3%OF_u~RKGjVwg(bZ2948aUx$x2 zl0r_k=R225Q!Et3+k3(wFQ6N z@VFT!bG9q-xp64=Z)n9TUk>qa3_SS;%5uIO5^AK0pT03D4|$eyG~ZUEY|tC8M}sCT z*|U%4H;Ts(mb#0SmaCacNUCV{6ck&Vv~u}aKJB^ZLhtPG@ zJ5#8$j})wDXX6Y1GV3KSoL6#eCi^6ZG3Djdft| zjkcjvmN0bMH9j=E=P%C6>Ds?6E2l85nYf}|6Q_Gl-NcEUyv-h%9hn<8bg*I(z?LTjDQ#ZFHYO1f_ z)DBw>napi{>||IHIoRCV#!hbT$+DBt6$!6CmiIHss&>|8N(lF|WI1OUgXv1hzPoam|-~}Ct!S2?6Zn+0v zptkU-7+&G)d-77joPUEuUF-$N(dGKx9MHfw5n4}qI!=FUPkaABZ^COXSnn6MyS2;1 zN-*k0XQu(`>#7eOs{TJ_(|}BugUv~Wk@b`&jsUrZtE+=? zwk&j_e7X4{J%!H#=5%yG5`Csn*VLwxN~gp z{JO?L*LDflNU<3UQ>7GhHQW%zJ!_=6B1Pl=v)Ej7_xE?U)&wbzK(-v3NRUi^F@SYuY001RYRH z@kL$^(60krB*qtNsxwYuEagzZO3iO=Ba8r|<;pog6>lka@)E*grZlKR22VopbV=8y%S&n{wTbdK3p?2PRQ`SQ2^)xpj7Q#KSZNvLKDuZqZYCaGUW;;b%AFVJCV+x<#ST^6tUu`SDHN zeSICMzgg7CVrr;G?PMuk3P4K8rQ!RS#FfXI5RlRkjF+0jVu(rmI)Y`p zbOe+3d>atslDc$Z7xPTOvMA>0$7|H+D00i##F)Q2_-%b66NN`LQX{N)3hzs8a8h~p z6(Hj3c9{DJy@`H0GBuRdRO!S-i%xf$E7DKVfRGEuFPyu2q1d0*m2Qyi?flk&Qw@B? z@0x_&pE8x=PxlHK`6+w4rdR27{oFRigDoK6Hm7SvtV`Ge!e(y{9(4W2fCtvaNbA6& z4dens#}Dn3QkHyov1@>J4|-;7DQnp;6!glbjpqXr;QGuRZlayW2E@zXEir?o$grb z8BV}-0s$uwbOIqK5OxAtP9WO}M4Uj>3H;X@9#%SHR5^jgPN3QeEO7!gPN3EaEOi3Q zoWOD?aGDcX;RNcO!2cb7l64){j+#bW${s(-)PzJ5HB9}q>md{h_#D#3uXO95T7Zbywnuyn6H0{4>r5?ia$;^>4&rQ~ihskT0#mXGi1Ee!f#o;njgDTCg&&HEvY+Mp8?#R24GwLus4NCMk7?|FQ3p&b~I0Oj%# z3xxtdy(Q{4lSSf2`3KO9p$jYo;qK7SBm*&ZEs~&IG^VEnF*c{!WhW!X*{MxjahO=Z zJO@iOWF0`^&psJ-lpoL$U8OL6dj-VkK_L*|b~54|l@<&{T!j;O%KEb+>maCipOjj6 zhP&z;1oh2X6|9a1g&dsuiJv7l=$#HI%7+{RMrpRjMQWUpR`HRYYP#L)F|p zPlp4wGCGc>t-be8Dw z^X9{B?4p-yxs%hD3Vz7TM{qh&4OZ}T_X<_{2a<^k{u#0lQ_XyF?mp?9yYq_*xV6s_ zNzd|1Kn)HIiKRSue+t!93z<9Z624SxwN$}CMx3qlLPOmxP`7ltTc35}ER~gJscJGy zSr+B8e4S(okgXb?bG*RRV;{mHr?TNgICj@I|2z~vVD4}K7_L+ZGlScld>^0WC+)jcbxu{CT5jDs|8ou! zFj|6gL7{9nb<>eF5%0mQ_soMTS!_joso$RU91}Bb9?)Mk)VvQo<~_RAHE)8Gy1rNGUIRMKNn}l2lp3GMY!I)}L|cqohlcq`sLJ zNf!k3@83~tGhoM_RrJ!cF?{!1`16?ca@KEcl>_FBPT|uJ1BIA=*!gBZfMP^&QdnMF zhgvDM6csk9v&t_i=dm)Id zg9Ba*7Z%oQgz^dR)pg#qadJTUq-VVv0lbrx(_C*_$+MSu#Y)wJttQTnOY9(WtO2(k z4RC8MS2Z9wYudVLiTzN)`|cW=SJ$jT$OG@*0zHGT$$5X%CQ)aXc+Pjd8)kaW{lN5? z-RYRI%+C%flra}=ev2)ekwT&Ke22{_&#t~rt!@5%r|dH+{`^RgY9AY<+P*P83fQYnYP%`h zX;RM)_KbUK{Y_38!Eq;Cb`^}^D%S2W^*tfl6O}QyYB=(&<$lBca}Ucelxi7)DA^sR z+AXGusymXJ=#HeChTjXb!WrBrRpmB*tw>hBTq+l+wY|=7hp`I&~#&pG=Gc{Scq$Vnt)XqTcU!y^#_tS#cVtH%wm>-BK3Iw2bpA zKmklfgaVcg4(C$6_vO?E$8GT}?tPmq9JTNd+uX3)7FD9&!H&V+H__~UC?3!0@;)Pb z-+XRD@qF3)WLK<^14^^^#qy7Fy<@QV9i#TXSms2q)x^aL)hc4=7%v3uhq>LOwG7TY z^Jp*qEzenuaLB%N}_`%FRDZv1C$rrm6OFunLoZN4V& zhvs-&M-ZcfCT;7DxEdkIMkB}yIqlx9BFIJTQ9NG+Id7aCP#QtTDaDlr`XVopcqZ6t z;`&O=g%~0z7!knex+#ZF#Rtw5$Nfpko~d4J zKZHde-&Fh<&A6}3dieZXImLDLhhSgMz*JIn4n$=FjpGT{`n?KF|^Y5j+RpQR8Xl?vDxdN@)_w6`sgEd(VquwJJ zX{6pvdJJ$pXN`BWOnR5IFP<-x-hKf7Quy8InG+mUbNe#L`V|s|+xs>Z68@uN>6JkS$2W&`5UFL-@eX@W{cFjL=rWZQwSFY@=r%%8rP`O|#; zf3Ys|;btSVb39V91X&tL`HOWctmFSjrQ8MEhLDug2`Q`f5R$OJvvP*Z$a982f=MmI zf`>EwS{XD?EN@K9n9QtfYXozs4%FJ?~to$Kgp z8h*g1+zUEyQiCIx9kBBPx5fS?A(iKx9Ldcio})JpnT+UPBwsd<&^vzZSmxhDVuH5> zPDW4>8-V)w-hg2YWTTR4Z-it#;P|9Bk9e*$(lYm8npY-tW%e8ysl5k`c{^rX)yeNAN#2?OKqb<{-9O|3ThY^&P?WGSzviJ+-{uc5wuHG-%JS z{4w@#wor&m86hoK@04EG zVArb4zbjyk$E$4>AwY7q8yOqB$EzB!KYKi?8RO*j zFq&(?Wd~Z0MLv%WQJV^u_#@^pxB)LwQ*4eY#?Ex#BMIn@TxiZ^E_Xp!BIc!vPThwZ z^w7VbwuO!h7ls`AeRL1Tw~urLKCPr+Qq*K=`tjk08P)Lr>Z(f#hQDwJ&x^Brn2pkE4D{YPtB>l-J20NDH_8Fwh0BD z(QU%Yz=EVF@27_XEz$Ny7w>L2#v-)53DUbvtQ*?h1Z<2+MJo)FbaCH+Nh}#!VUDEJ zVG=_N9X~z9z9ZDiWiS%*TiLd@zstlHf?1F0a3A6TYE~=Ju|N`it>FxqLTO3#tqNzD z$~T7s1Fb~gbYpu@50wvft~Xph)VcnR;qr!mIAGCAbS}?OSZq|AO3`)8LM+$Bvb0FmwtA3!}88V_Yajj5vc`J*RG2H?VwDC~z1|uVUG&BH68eb}wv6ww%@5 zg>Z$T2w+%i6V>>HvIoxWJv~%^TTfH8$mY&iiS~Gjww|_)n@EW}x8kHmx}P7}3YQMi1+!f=o$BN{Z5qUmVs(U5i(fXXM5yuG{k4elQt*&Ep5 z%-}f69^jL+boZWpCcaXF2}^7q9SIdlw4r->hi*e6ulLMN)r9Q$F$}77{^TZ6vQQ^3)J{n!qQ&$=fmf zfh`PRnWz!nz~tSm8}0Xl1!GCOum$KOO)AGMov8LNF?Zm2=;S~$?SUPP+GtR+KT)Xb z44tH{C;CVB5A8X3WT#Ho)%Y`6C#$6cBanD`#RnNN0^J81n*?Sa;l$;dbvSWFrNq`~ z;d(xhbT~>PG{`{2iBjzB+dQYC%-_Y!`5PS zN%{hlei72yh6|UZiKo=|9%73!Vf`gE+{j+K{^BKR0!RH^Mus9yG%(bwRlDt&@y9_} zTx3A&+hbggN6vQtkujkTm`BEhy3{<<@?&T4_?)dZu5h#|K}!GlE40-3f5VKz1dYmO zVNfAf6`2e#h(cBsJMf5G!;F|v;No{YV}*F+sBeP;CKR|G9+yJycEH{_N9ys<>g90WLxc428Vg|2pIk)95NV+ydqxfY7s3cxnvy|XuRg$(cAbwTZ zUO42zQhwy9Ke=Lf;9x0z6)iy9?qXT~ISl-tT_BVEZu}X`d{Z%D1gZBNF%!XWlS$29 zVe)GTAE0|0imWD~THw@oh>5SrEqsS)pb*M}fHM zV*DA){8%6RJzeq**b!8%&xcSXkhD88b0!tP-RFaGZmA2!33*wGMK#M$eB>pNG7uslPAFh=0eS2 za>tP~A)taxT3&@eh{A^%3!5DV(1OS#f~~O7YJK9_=O|+A4~Rs@U}Eo#5g%rzmV732 zb_kO{fC;8Mqi@|=kx8YUikr9mo4~W#Smt2L#J<9j`l6yzSmG-Y;ML4U4Z9YhR-6CO zdH&y_OB`!;(Xsv`V|O$P5dP;G=)%$kw~zy3wOA+>>I;pj^uh(%w_iMS51rgCZ~BMS z<^@;7#%AW8l)YdWQL^-pOZ1P6^p6Ylj}iT2Ke_Bm+4CkvosL2?g+_FS0Q2nF+z}O8 z%ZDqXi@(nJehj~+U_&T0?;y5V9wWq<3jc?nt5hz3o-i4IRI0+PN`aG2>KaqlN3xPk zAz7vDT2pqNDZAdJZZxSqCbie3_L0!X+8o5W-==cR&c>s<_{VA7OrmrYRtge zVC(TGNpEN=|0xVqgB8XVt~euZDL);~STvS-y<|*iDgQB?u^38E$!KaR{~?^Q1o5aO z}edMi}VZ^}Q1TGHyZ)~vG5 z=AV81v&O-nUj8|ofA%?R2#}K_RVtnPk{4T&pqS~JmDSOUjB0VB`Ok}SJP3>0I3#Fep81e?Er}W zH1FE1mlnz^w;?RpOXwjMm>m}I6W)l3V3z-UIoy>htDA1$HV+%j(RsDOAlTU?1Uq{M zlIxURN_ODfP80g#_cG{jN8W3YZt(usN9BW3clm2Dap1MFL=FcEtGci{` zz4R79^wRcmw+2&FOeO$H0ZrI>uof<>m=sLSUuoecr{=G+iK)2~Q;qcg)Z|YyHGiFr zOigYa0okC=>Du%snjhwndOt* zw^*cY|cL~ z#J1dcsj_vVVa0u96{bHsb#1`vb6_R*(Q1q52pz8qh3flU?gXpdYqGqb>V5g99oSaS z@~3(+*q0;8Z7MTed513LhgJ^Wjdb(c;~3M)%z>g z7D-mMy+5c8dx5I0DOp>Pq-w+CRK0UdpC8&e@PHBx7MnDEq8~Xy+x=qtUTfDO%-fZj z*QQ^Wy2^p6XqRJk*E#ONynU3Ky??^&O_dNP74No=jVFC@Y4)VeX+(SLTnE(Ep6u=m zk$^-bHIzS^FC1`B&F&t=_VSp-KawbH@S`sL%#6calD(UkAZG8rJfE1neDjI5uWxFE zm3?`>Y@I+>YKn96o^XX<%0G^x)D`*J))G^Sv-d<@%J8}(f0DJ9rBskNzCBluSQ$3U z-?jKt?OJL6^ef=cKG|y|)iAs=?^~%VhJ2x%lw_#3HK``V@Fl`fQo{^=2()6zP4wg> z!)76MV=Yv{-Xt~5aJ~|ZV#qarN|NDBVVI3EJlmv(86Io3diFf8Ngo=p)?I7?+-XO- zfc(|Sr8HFTLQY8?A{MB9c7a!?_T8h@^HE+=p40Qx^E|Iso^$in^L)?i@K$$t^E(iY znI>Jtw8v!BoFSOTBPW2qF}2?~n1d-vHPAUyo@OTpwCAj?v)>)w`6tN}SQ z$4g-YXP>XwCV$nrWJ(9ZSM~}TR2%~kGFjg!?QC>%-wWFLZPiX4jv>-cAa$i+vYljU z+W8RH*8;P?cuJLa#!GqD>O?!=)PYDJs-3*V6L~gHBv3U!(aHZQZ#ONG)5{;xP5@O4 z3aFYBpz4OskWdl(6{S_6617Ol4j&@wLNFo8HLt-w!72^(^UwKZmdB_CDFb0e)Pgq^ z#0vij?=^!6)JdbL5Ox*z6>pV%PPMcGtnw07I^s4^;3+`9KUmNc<0b~5HWNc*RCV|f zDVP*ES(=9aeZhC3AA7UMORcm{kj=hH<^k_+ES|$>&M~&V2##Gh$Emrupu_Iot=iYn zIZ#`ZvFEI2C^JO+di9*^Yn|h6QBQS;G};?Z00iHyEN^S&@?W|#8!=hQlU-599^9@l z94R&;;m)Y( zpkxwGSBUJbq8o!1L?nx+18b{jzmQdr{!>4omh&VA;Z03)YX82*E}bCz())a;I|X;X zcDf_;ACbOMNa5xa+tG(=rdcgq8RpxG8zy(E57jKQ%3kjuz1fy5THe;G%4f@7GTSNL zOTJS1-E>wXH52dtH+nA-w<;}+`Rz9#dND(mW-s{~9OuktTVi`jywq~bGo^UY>f~`O zUTU4S(OZMYE89IPN7Rlp+3Yy59Icz|)IC;XH>qCyTJ@p@J5K(j9<{@`sc9p%b?g6w zPc(zsPR>qm@98Cxqimo~Jq z)wPw}n9H?7O^)g@+^uN;3G8vRQx7L)evki-E>{X}w8w6=$LlKh7~WNcPqN3X+VuF{ zMJxt0U_p=LrB1Y9Wt;31SAj$mqkp2q_LyoX)#EAA9#3%^?h1N*d!-&9*%-r|R`?`) z%&JX~?=H?$->7OL2R)9LI>9>Sa6QHtSLrczWU9v@9~m6usZQf>f*$`;^>}tk8$-Li&3JS9HvFbc$zcex>`M}|CTO6{%f-u zF3N;Yvd662^!Q!1mDh2+RF!pHQ+13d1!IgT=;3ud-D$cj=<)59dVFNF8h*`$PqN3X z+VuGDae5ptRi($($5>8eGR6pY9PaT9XX0Z)kAGdM$JywtKDF}B1v6{mlk738Ha&iP zoF2zZRq1h|>KKcus`MC962m>7=}dZeNzdx*=no)1tB-7qVN)x7l09bCrpGsyD$nY8 zsVY6LKE`6VDm_N1-*As-Ig`H{^!Tp-dXHh^EqszaX4R(0_m(2xW5He>FU2q0!@rL! z>}%ooF*W9DuSPu3aF1J@<|l$4KlWemF@l2%pJb0&wdwJbrN}2+(BpV1ezN_yddyS4 z92g@;hCHz8@Mpw-B}>S;AEtyn6en|;NJB%Oi<7x>W=5{?IOP+Id_%)JWoWo_7%2Wd zgCj#PIBUZeA}@XSdM*E&aoFF4%#BvBtjMK^kjxE9NfR# zvX}LwNA`~n@kcG~)Yiecu&<|W3ryEm9^aG0<3Qh*4js4bob9w1%loODf{0T{M!+ zPaSG2jPG<0#DGkdT;8fuwK=9rMcB1Ezexif8#k<2-W4)QLx8nXC^KyD$esszDAU(< z8oLBJ@!#^ET1^KrhFLNQ7_yYG2hMEU&@}*~Gb_FHBFG`016t-lnv)I9#?5EKu5Qaf zTRW@;ncW5h%g(NiZD$QIKwQ7&9FNFh8#iz69q2f#V`EppWv_VAukQn=ovZBx8&2ig#q$OIRPRk3mJh3$jk&_osUL$Z&_27AciWy1|>Pk4Bg z*;mj95z%s7Twq(>GRb?d`GQocb z74XTq1Am?$v#>o8qpsa`d)Duwk=E{bz@U9dMNFWmMc4tc+-ig!7@`Qpjlf2mV7#$@ zWJ!7yZS{@0E|h>h(QrQ(Ew*+`clc-h#SsIpOTs2u>n{zPZ#`!Ntvj7LDxA(sH(c@8 zY@+qQ8BAw`vv_v4yQh20mbUf>*JgmwZb2-FeEqY}+I3FfQm1d3)3@B|TjBJzI(;jh zzOvKjIen{~zT;DU%a-E5W%zG7{#$|nTGOZWb#1X8gyz-Gbhq`jEO*j%0D%{45tt%t zXPs;+Tg;a7btTw*S(Y*U!Y|jwAKS(s$Ke-!!Vc`mP*hGjti@H_4(vyufE^evSh0-A~#ZOv*Upxj- zi{d9O@{@RDp^};x^C$ih5u%a;TdMpHB#mW03IiM%pTG>t`XU;I=2FL}{v?f#v{{26 zhv&O6I)QBj>_wbc#E6wq0qRXM(N-EY=Sd4bu9(1b#W}em6KJlIOehNWzc?&R-lpt` zXyNw07?TRb6fKGUxI9n701IXfv}}7_b>g``aY+gAD=_VV?bK9QWt>@^ShSU3P^XCR z!z&0@8L&`seo&oQw4flaSHzzLG2-#SM#j0lI&ljK+2;mji1#RnG43#Hah{D4tD#F* zlKLE<$%OOq13t;oceG#%`o1d0q=M9E`@~IZ$leIzNn#U|!cACY<{hR5^L!=~63>2I!)DGtr8+SeAf?}| z`u<%^SByJM{;XeBCzfkc5KmFWUjZ?i4f989tU7VYuX(EK^PkXcSR%m=$iBKdF_p$_ z_B2KO5m+E$q11x-3)P9Wwcd0kuxk}DjEC$G#E1_w-f~t#3udSmF!C2#0INOwmoX+4 z##>wK%~UP8T@k~8%6=e5e3%y0`ZAcMnEX@;5QdgE&OwnGcNivdZI_vsDXzk8Xgt9>nPw@nKq^ZHecoN%VHCe{9`NVDiBjlL{@6Loiw} zS2h2wkO7Ec@@cnJC(eVA&7Y^5|2wr+yCBBfrb^#|g;T@}6!Bfys?m4a51(%3suAng z^-+63F_!s6Zju5}m;h0Y2PEfRc3_hx!JyK<@eQia9d)?SPID3335F$K&e^VlNc;eoO2HhY!#=LY~N5ljijS6$+_ zmJY#8U~0*+pU7!U$z#O$I&K33Af?<1yXUws{lG6^hS7I_s6rTE2mvcJ*pfwiEQy9W zhnhP41DGc_-#U6wytmG0$^-u!VW&_ZJatNaa5hPI%6%{{b4-vW(Sp(0>=WK4`@Nf= z@qYK1H!#QR?eH?|)gv8yf{k%ZtNP#*O5l?2>EaxHpYP*w)jwe)@4koU2T_ld#1Uw= z)^XmN*WM}LM5v_+b2ac~B~fvT3abk#sA}~auWHpjVYrkvbG&Oh{EEBpkyDxgI|~Br z1U~X3dAn9knGdnHoV#2BPqJ}UE%ttw4rtFlv_^xc6B?ocw&&RHWe0PH~uR*?Y$r`Ry3@LiqC8B}VUBDGC% zGT#Ymdr;M;{eebm1FS>}R;dm8#gN3g>B#uj&p(7knw#&qkLT@@lK5{>8>~38?r}=y zr|sSrS~Cd3B}Jn$Ujmtvsge2b@`!y=MdrTt7kxY@~lJb<$PBN(S`gaSKOb-0gU z|GPjSlMF~DDH`qY(daOlnht-WFvmK!N{4TXcQ}C97A8xFCp-CnLx)#Nhrb$hxFynI zpv6#VoDSclI?VU7xIAux!kF>0j&ZC)i&OYXK`*Qy66)xQP z@WB#e2N403!$KDo!7&g4tMT!S*e8DqJnup;)t%UPI2sU*@4Q*z(Ehs7t=5<53HbK9 zH5!+Sjixw_bHJVE)I3wL-RUw1p7Q4aUzy=a52O(aWo^%1CsRGxz%Ajau%5W0s|O0k zAO747r+7_`9{#I|R&?9~hkyCY4?Fw}EI_*G@E?oeXEkQ{udRU@hFSpxB+^H6`~_5L zA^>toXV^SV%Mx{`Qw*u;PVGM;Cgcne!{7VxRL9Ll!~pma3h9`Tx>l}zdZd?U$Te}51fUTul37j(p+fyv%@>YbBmjsAT~Z`GRU47qZbTw*yXPhn9`BV%W{OB=I(3N7 z=!=9A9#xpks7Qd;K_M*?U8@#}JVPWoiiAgJ_+u2c$6Z^x;f60 z71_hi5+LP;E-I4aFiTjC5y|gsfQeVLL=ITbO(gtOP$HQvBAM+pTvODGGpIszoBt5Xn4>gx4?DgLNruAv`anuS~x-^*Wl6bvjm4(P{ix(VnUV^AA#$ zn<{kFAP`4=`OcKRZ$!%{bwQ@F>50OnnTuwri7RxE!210U+MrQD)qo_Hr+>%ptS#8t?Wl znC^X|-Fy67-af2$IfLq0Hhz2?1#+r~VMmQ`f4WJ`PZ8L&uEv@0og&O)WH)$Fgr7?GP=4S?F9WNA- zHBZcxH4FJ>cKqpztTR#4hm@@6l(QjOuNcexyqIwz>$zTkhnJq`ZK1>wuF98qc?Y5m z-c|1H_WGuKZ*2FT{8nK4C?zn1mvRONu&B~pIZ4iSny#(I4YAP8aLKg2^A@Cs4(hhjZ@@76n${w-+FS5K)hd3H1wqS&H91XbyP;oRWnbbte+TdqJ0&C1> z3a$0)C#n|+18Yoln%_{;9eOPxiH@5`hpbRwjg$$jp$xCoX;Z!-VF4%f(T1`n6IdhC zF79*I)WDx@FrGfK}!=&@amhKDIY?U=F1v*KbnM3OviO(9<<&Gk03AkQRu`! z0p=?u%;Bg+%a>X<`5Kdx50?vV}Y(OiTMO7^QelsGAWU}uwpI~#}6za6G!7c?^(>U zKVXm#7;wwF*e<^Z)bAbNOobogPp7;FD7#F3Dt}&H!9|CcZ-2o7MW22lg{8<_Ip91Y z<^bh+_wx-A&5*kWhkgh*x>B2u_k3&RpcLcbLV*RH2TbUE;6oPxA9_?8xKP)Aot;C% zqAY-+HSjczSQY&n+s-giCRQ;@05dkV^>69wV}97FemoP{Lj!?qjZuaIGY}qHA7Q(t z*Mw&vN;I0=y(yFnm}E3J9M6Kl(P(Zsss$0G4Uu{`b%%mmEM2xe*5+^~K&2uIkq{)Y zxh>QvEhnAX(I3tPQk1po%$Ou1c?txpK%|gEq{e7RW6g>7)0cv-u|L|)RXvkJQt0R( zXg^*4JIf3okgpS>WxD$MHitX4yr(f*08By*fOCyi0tTE%8%!m@?oJHxz$6&x@7Or7 zuGbU+%C=IGjo~8YNK1S!)^Q6fvTj+@QXzd~?;j$n9Ti*40u>rdal-aJHV~YWy&n5JM&;6Q8%r z<=Don&Jog$>X#xA2~f}e(=uSYS4cOP>IEGNHL_ef6`;a1=M3&T0DO3K9&ikMHurQP z{Y6OeUmv7+GS55QuPWeW72;9lB{8p+(X;^#yt$7I?Qb7Ffd5^r5q}DF2#!H+kQF0D zK#Gz5d&PQrODhM`0`h{&LF27knBou z=TL!Ykcc3okaEgl}GeUh$s^cfcnJci>}q zw@cqRhMGu$WRqZ6%^z!87aboT%WEoADW9ZLY0&IQ9-kyn^?zI6(DtDa%3UY~^urY! zJQ;3+=?U`qBzd~E9lL|z4?3yKEI8pO5R-rdpA2_CrI_cB*mh26cK;5fJwIsQ-OD({ z1z>!4GrmJK7Q|kO&X8TdXGxl%FCVgdKC!*o_4}5j&o_w&q^P}q|B^Hj5q{B8q^7dj z-3id|ZbWd{y*>*2y;us{yVqZ|Buy;2&jW~G(K8E_fr#JT$Wu=4*IyQi=J3ieHuyQC zfnN;Q(Al-&io;-m|1U*y@MAS-$gaS64~N_RK~8YHxKADrAsff-J`4)rc5y{KE`{80 zVA}b(-EV^exLw>Mk4qsJC!p|gyJMgLZuc060gpEkS?!U znIwo1Rcf}MB+EpS91WSuorAow%!9yN!I3#3Q_w0zP)`c+1#CqUBCA1LKGOFu2DH_2 zuS z>IjOtv`>itsEC2HO*s3n&}?dMNL;sHh<~7nfwN7`tzI(+mc%|t_w7pR1Z#e$Ix*)C zi5qs{&sgUBfXV@^d4#BDYQ9L^sQUbIG#l>XiSYYf^_satNIXH|YOh4iKF+Q?MyzHW zblJ%n#}^)%G^yqv0?HB4Xy7d!E@v#MyO22^w!GvMPxOfu%8@wB>#Gw7$X-SK0T2Ts zOK|Sa>crH`v)Pjsy7A3uHi!vSeV{rq)y*Vs#+1g8y%TdB09ArB|E4;zMs!b6L-q|E z6foYzQ~zysVvXpWs;22@6ft59q%NsW%*}?)o~8u$F-%j`OhEGE)rq;Ek=RG}K8eYK z?TI!7w^b+R&Pw7Ls@Y!xF{UZO_gBP-)l9?CCTE(QOTolP_CAFn!{z{3u(LYGqyn)9 zCi{rqN7ZB@B>Gd;iEI7lwDG%6`-@s!au+1O!`OOIgJjiH9o+bBpZQv zvW7ZJIP&FZP^xpG;N!M*G~WdHHie*g(!@9exb#oLdRQc3@37!55*S$-#8?E zZGNUThlLD|V8JC;iiLcShy1A=v`VVse-)g?PK%Nrl_XuPAPD4Q+W&fxPWHl1?6#&+ z;IG^bqJ6Aq8}%Z>I9!*fdNE7gVMwWnFb?nbGrGN|*`D=`XP@SE&-9uE5q!%t-eW)y z&n!Peyy=%f`!7(s9h~Y~t8RLo4a6_^9dR&IA95me9Mq089s7%U4F~!s1;%yZ3~ajA z=DO)=BSZ~umkFG3pb0pV(3?5OnmBt|rGZa=DewF5GqZQ`WywOz;d?bQMP#@AW`B7; zI!4cRoHC;NEr^%cOrzripqQxyZanz9FvWeAF`+RLFR z@d2@u!pX|Xwmw+CPhw@x9TX%wPPPB5NOY+WU@gX(01~~$A@IkuXP4W22(#>>6hJ|s zAejayeQiNY{w+kCX5FKd045L1 zr-e9Qkq>p;l0&8XAD?~J_qGf#q|*_3!?}{+vf~}Aly}^36;#v`C-n`sIqxo}e{%Pt zf$!Bida;GEAQzTifj36Iz;p#mhG-nZBiRvtF`1?IV8Qp(rIs3}_mWpC{I==sgN0+P zGC8St0Df3UVGi!m;1|YDJ!3jzFSj;8K*!I2u2C?L3eWf6u zl}N??DJ%?xOH!n))`;{koSI2#v5+qt4Cbd9!MRq3u&ZS^d z3S?;jF(0UzV;#jU!7dNVp2*{%Mr*Rh*-rioL5-hNH8!dm_e5%J0rHRqlQoj1squ?7 zaM{fo@9;OFQc&Y0>Ek4)@L*8m{fFrzU@KBEStD7R8V?b^%3VPBQ9-S-?YS*dV~bPs zo1n&D9;S~#)l0!-jbv$Rd{m^08g(D}MW)bA&4O-fc8YH*+Kugk47v)~NE|YA%E9<7 zaWFnIO}*!2O2eK3rJF>w%A>FUp5qzv%|(o$X%M%DV{klVjiy0wF0O!oSy*Ga#=kfs zIbB!8!K8e!JnTV045*`B)H9Befj=FGlZupFlPt+e^b}Z$basq<*y70^y`@ou(0_K#m4rhm5h0P%8V+z@tm*pY$ zRIQ9b{@>;PlH|9cT9UJ5y3TUy{!rAL!0%M$`g{~wl7PHR!DPi`X{7g55nExnMuD7j zICEm!l%C?$zr%-Qrc&1^NTxP5D*sx|RC%Alv`GpkYa~m9Y}?<3d@DvyrwLMK{X zh7*rf%Q5oNLVs7=f(@+iS6-VzxGIo5nh#sJg|GvwbsBE1wHqeMZ2Sb8kJT0&Y<7DS zF=R^zLgz}D#G(9z3R_te7yl{XGv~lD|4#4rEO2snp@9O21TgrYYkA~X>&YynR!lU> zP*A$=dnS>Df-V)Mr2wqM!M)$o2Xsr9sQq?0*-~K9QNB`3$=S&J+mOe)}0 z{;QVX!X^KGY^H>VlYG1oqOJtTS6&c`^rlZZ1Q=^+g46V|l0AE#jPpMzyd~O1;P{Py&QF$bnvk&p()ZrTL^^&fbGzV9tro;Gd8FGzi8o|D$4s>o z==PLTt^P4@x)uGvJQ4V4pIYtGg5Z}i6r{CN?@W9+fc<`#^2)l+Y7FIWBN#&ry>u4R~)H#!$D%mwh%NYLN2dri}wL%LN zcv%!uXN|-Q@sDf-UTVsqh?h(v#6JL?o6HqIZodK4Om{|$9Gi_3Vi z{k*hP{HMvfnC3KpnxxYHo53G4t+*~=4kiVYG9^nR)6dlT?pw{epiJY1;Jr1FX@Kxg zPnAATb*6kBeOBR2z83Tukyk=8g$*nUjnn6Eun~bw1H^t3^y}M&2!>u>AQnD&tPNf> zu+r*F0N~vgEwczc6AAp~VOS&@$>lm@u6#|La`3jOqu1d*K*H=F-8b@r!|#6Mg@oVD zT6yAk_ly`ft@|Zu&jrH<(|di+s_4!&vwh#_vD!oH!V2D9gHa3synman=*U&PwpK*v zI$>|E`L%7QZ`?AlsrPithRap;1jMCf!`G*JI=#Q`Q~>kJJ+09KnjeT0gy`r&b6skOL9fbOOg5$ujck1g18UWn|Pz&}qPMT~B9p z;5&g7ZB*H6O2~W(Im3lhTa_>E95|z^W6Opvh4@{$woTBZ6NO&oqs6E8Z9ctsU=w8{ zs8|m}J-Jd5Z$JiK3gJ)XLgfMJrWE3QtjKBQfOJ?20nu8yQ0st95h=7{yh1AmWWq=x z&e4k1Egz8SBZXFuS7_OQOeQH*9``BTX-0_5C26{ z1Y)NEdr2>$K0a~JNaxTwgQL4f)(!62v1^Db+cX&|GNAcls7D1aM0ynM=tC*@j3|_C zjL64s>f9))kA&Pa(z}0n@BZPDi$mU3l_Ol#7Ub>UJGyUp&$&lZCImZ8)Dg;4P)F3! zH+1eW0mK@==p%>sj3j}`szc`v00-IEw&@J`JKnqhfEJyiL+0o%-E5tuq$gRZEuhdI zQ_%=@YST@qinfe-HZ7qd1FYmHuYeVOc;c@1;gP@@t4`avcke!3o%XgGaltAmNM6E* zrqk$l-7`(9*=-rx9k3Hh!69%)1y2S)$vnYN26-~~f~QP`&JCWZQ!(A-li|rH!;?>j zC!Y*YKDl?`kB`)}*6&!79>Sv!Y&;iuN8l*WS&}~2Bn~&_n7DIEde|hMCr(mdu_S$- zN!tx-Cu^_YwIsdUr0%QRv0kAz_r*|~`xjB`{}}#Tz5e{g78jxqq8wR7Ikn)w-1-BH ztr7eXeV(=c0?7d&!m3+8y4bqF`?Cr!L}1<9V#J4Wp~oG8 zE${)A?*|iLrifg+?8uqa`%DTu@nbCWUUUN}9wOB)jxni#T%t0HEvR{g5Z{aUIb3KG z7dp2(v24Qpyye@;*-0hYgwF-ZzAodzNQ)t`?)W0|XqQkWu*HRH%FFCWV&kaf`~*4k#7iJdsaFx)zKUqxRcHYIpn_FgFRQqYRvw9xrEQ)jhxtA2f~`IEdC(*<=2S zJ!MtG1JJ<(cPw!{kpqfCOFi#6p9!RXi6k!gq1&P(foV?p10jSeW$t8%eSXqm6^7; z6V7S&&FX|_nu}XspK@0H27ZCua|wfqxTwKhv~c9wQdhKW(1Z(B!1(1#C4dF^{o*u* zH&BH*S(@N8h>Z;wI?h@}P71=oH9YY`E5$)XAO(JTXe@Mtkp${^Tf#9-SRf7t+FnhVbHVb*>UGGQZPBJ+^>yGj(0!@c$Al(?X6>jfC%v$T1IwVT6B{v5iohni9fMw{4- znMale7j#SQ0_~5dmUSstP+EW`l~k?=NX%Jp+-dq^w5+Ey-3Eu!QarQ<-dT!{`_)=| z+637x?_wL%?p%rySXp;(=S`U=*C~Iq;AAeF`CIsZv@@5ru7JWVm2oc}_=@U+Cj4!f(t({;snuJJ|~~>9vSqYVgo$WTQl9uE%Y+qybF}F(F1Gt?b=KZ?qTM5?HpsQ zEG@I^A+u}Ry+1tAExIgWig#iWQ|}%rqupg;n0er^xGSwG`MVO>+;unMZ!IM!`xmHv z)ywB;iZky{TQq-U_Z6Q$I7p=C5aDl;Z3k*qA)zFq+YT#Q9rXEG#I%(6zS(xBUu=mR zz@?!=$6M`2rrdUBK&Is6Z#(?yZ#z-`mqUBmj1aWmwK*>9m--SSJcHf@AtCWp^DI`l z<$W;geX!2U&G&Y7cpq3p@2x4zyCLh{fW&#;_73k|YrKXIuV8rx!Og5G%`FFRPWkM> zix$tGvUFzFP|*dKW4ZT0FW4Z{@_MB_1Y$cowKcSC;8P5Rly5{69~&FCI=(_&qGm+{ z=6I+1yNqtYX=nhw;U3I-2hnB$>fW)&%ekIak|`hsG3s*0!l?6*FD)F&9XiLcPRKd= z+e-FIHPW9&3k8ZG?zZTa&Mn_raNJk#z9e7B+e#oTk6;8n!y@&5C zyZfC5XW-!!islRZ-R*r7LS4;{Wu!I^?fJp-LRa%_mk$8p&qkHWpFYfuKm8TSp9|Go z;m@)udxA+_XHs7g%&RYyroi1&dZFhUJTyQlUnylWblQV;NHB+T5QeSOe-H_u_JntE z84z1%mzPlSor&-O4(q-n<6$WtbI8Mu@Mr-l=g4>*By#NR@)Yu@i|_z&=^?{IU?+kt zMPK{})fer54Vx@@)Gze1-}075b{S}#e@srE3nl*?@3E!c6>I3%SgHL{HvO$&M}qg< zUrO1Ol)Yb<_p?&>qJ+IqMYu63o7*6SFTbv+uG?C#%_) z=InD{#YfJ+&?9DGt6gwLzN%*6e{jxn4sybB7H*5oLKj;VYfa8Vw$Go1{Mn@D5P$mc z2>x7XQhmz+063tx>{xZEqOkzMB) zeN2|N8$6^uo-tcBFO7C;>vsc=?J5R z50R6Xtv(%L$MA6}n@&zg{}6GIQ}RlglCs7zOXu+&DNV#f{Udnbhm%a!h~A&?ck2CR zG!uvdW*St$XZA$>dF{J!_X`dW@Z%Q}9w1i<4^RV$!0w^ly9f6LUcOEfzh4-RAmvK< zwm!0uuftkN5I_fxw=!g@ZC-92Y?A?~Qw z>C#(QjiOO42r{61_cI7Q2q}``qswnp)T0%&?}|}(f2d7RXxB4YoEY_N30ETOOI^uJ z5?!oS++LDUWVafcNDH8e_gf5_a2wD^UoI~h*toe(BHAjspp!vP$EMzpmnP`w!#V9n zV(3wjb1DRFa-g9P=Y(jWoDaIw+3v^BRZRe}prm`+*^Ulr9Wk<(cZBoSwrv!khoVE| zTM?`XZXhw>%M_)`-2?@JX(o^Wb*xe4b#}F%erhPQwWq;kQd+0?h6Dx~hq5WMNH*jd z&2EomLqO7Ih;5*)W6QuxyZSa;sihbB4bsWO)4weW~I_sIq?<; z-9>H4i?>&SDdItSl};bqi21Te&o5XvFk zI+YoMFa!cbXJgF@1cZE*RP$czlWxl4~%? z!5r%yg-gIQhj)zZ40W$UZm54jrTrK0*}i3X_fXg~R?vB7p1yBKs7?(^2p5Ms4$92Y zT^J_aCp8~Ncd3b~Qw4><8!Uq~;FGLCO`%32LP1!&q2QCjCh*K|^7s_xcIGBXRddr| z3=x%1Q~(lbeWgxert6Z@{FX?Cd@_yUQ`mVG!txFVcq5?}6UF;bEO;{1%nMT==o>c9 z%6z#WSUb2YaHkh;c?gE0W+9L=()Tbx#djYTowU*taj_G$i%-%npCCFVg+RP;1O$8% z0=2WK_K0f0xfUZz51g-Ywil|;~EK0S{Sh$Y@|HtvjU4*)OeY&Mlzzk5k~ z4{G#bG>k(GA7j~AB;x%ldFT4`m!$Wb(xc0`J{#AM08#_0(e($Gq=|U(nK2x(172~@ zWK126IVQVQ)iApLk|pU&4GZ`r6V;oj8`i@onOse(r&leuMp4oS%DnnTe`Oo4Xx3Pn zDf-7${bQQ`FGvQv*;>Z$EM-)D^KMwWyfd zxvXG_DE9MXOp@r8Aa-*}N&f?Iog~l~*Y2)PtdU!Fiukq4?-GoXCkD(t~#-XJT;(;=<_cC`w_QbfD*)r4}%@jShNWTgvq0LodSH-gcjh6wA#$$ z#VMuUPL-%-fVqU?Lc%mY{5yY50jUfJVbz&;GNIXeN{W>-C>Og#QjQB8p zPy0-K2W5v41QmTp>=)~q7?TQdo|c%~wL82CukTm$0QR3|1vh0UII0sa7; zh7A&XoQoy;sp`bsrAgeP#u))RNt^*O#9wWJQ1MUV*=ndhk7lFK1vGo0I&qCpJVy~< z4`NJ`Jc!p+C3Zn8|9o`aHPCO(ROmWtFODu94%)WSu_l!q>uXv2cxs4Ksjp;#1t_?1 z@qq^$LERdl@=d$@`cA^L;}*+^goAQR3wX?K=;SX(FSFe(j9tdpmYC%OEFe7j&NE@rDyQ%=Zh`2ZjC(oEAX&*^GFCJH37pQ|V`7HSHlaeXc!vV}e;Q|Jb8G9o*e^-@Mk)Uo9< zS(tfS-kKZ)H3*e-$V12CvCL;Bzi%eA#)Aru!d+GrYLl7|9SdPJJI;eSd*)I>N8C?g zmI9r8DVIHU!kFctpX;e{2i}sAOq8alAI^*^KKTUTC>hhQ}!Jtz|3UTC@n49Y9(qQJ^w)PWt^p>)xYU zcYF#{lI>~V2CUdM`$T&Ux3OI>t7~}BjxXY}R zbWyE6saatH_;Y%&BEOn+dbl)6st`}YFiZ+pi{6{^-VJv7c5HAdY;eFZS!T7upUgwz z*{?6xjqKs_4dtmZ&kl&w_&XLUe;G?T;ua9jL;fH+uhHumJDXa^EiD4RYjNB+7wn@O zWgWksezJ-jvXry>9}3Q_W`BU(S5NyCM~p8G_d>c3xgg~n(-RsnplHD7mZ_Lc&zWLXfK_c;j2)d`uir8U!H5LJIi^K$7|pCG00} zg)_96uglhCRSE$p4KRD`TMO_z5X*$iToQ z%0EcX+seb;pq&cL=}x-i2zh=%EV)})Mr~zk8|GJ{Y{T`1LrdVE5pK@zD**E-FZg@a z@L?NH*>fk)d4+l}UE-dtcZT%+pa$4nNX&vDPri)E-0Z<$FGPGL>79XvjN`Mf7d-1k z!--34mG4W=$KpW7-#}>WkXI?b&W`sBnThd@!tvJ0vax>+@9UcK_VVlDW3d-e(k=W_ zp8f>w%H6P(r+1a!JpW}sA zS*x)dHp6d6GyGV*0^W|i*LRfP=C_h3J{co;388nJxlaCFL6G5h&?8vRov8Ng^CI4D zfZLLS$ySo38JX*A5_|Ru7`}L+74VD#teHRw1<^{$rRPYS<~W6as?n1BG~1MS;lhK^ zcK) zgdL|wMQKE!>hkRyJ8+nxqWK-N@kc#ftMFUMMjS+93lLGBUUg)=_g}GUxyTUApMtRe*V5 z<9!^N2c7Vu6cm6A9Q|5W;A42PY({8U<;4;>=whQ&`gzfwrk2D{Xwp)2C(teE>OY$R zv2_PcfY`88P}%L_)>b%BFr~?In!ztj4j!g|QLMPdvoYp`_={pzzhqj9y%H>S09UTTh5FO4gmiaLn2T zZ+Nvu!!gTALm8no$T>K%-tJ9`hD(VJF&oRhwacxOy(!5k&9Vm2_DEKA+-V!fn|Rf& zTGK6fE&O%RtzRfRpd$>*EN&-Z9whV?NBlQ*z!+^7+h7JF(&Fequ*JMXmKQ)#oVL1? zoW^&T>^imUT?b@2E?SnV!%45UtCD#Lr>#;jx$Bdqv8%eVRB=ki3;9!0T}*J_ITiCZ zTIfCCw4~hOpZ(~q(dj6^)IVei0-1-b;zS;@+=6V^+Y7DC4|#4G^Cv`M*7?Kd;)Pn3t)`iL z8!-9eg}SXC`RKseNsjeYBFM_giNnD3G-uKsbudSgulX;r@i}*jYW%s{x2kMYa2O~B zO}og6XGXF#627x8;g)}6g+j~msnM>^JZ-+CSt>_V)24DUq^CNQe;73FA=R|$s%bkS zO@r@1DVS^;S(>IjQkVD&V$-&7u!qxDyWccwOI6cqq-ixy^V5Nw#XqoVSvTG^ z*#%+kB?XgBBTLh?XXtxed<^%OyC%4D% zCwj&*AC?^YbCz|&w~rE9*bAea&U`$&uJAbJ zlm8sG$T)v!_yuQ?@uUBLEiy11fknp6@LlrXu*e`QZISU~IIj@azD35)ss^>vp32<4*(w^E-Zdb@W1l82(tiG=PsObT)^g(7vTW>TILI^VZyHAZ}!nQ@T?LV`v zH)OG}yr-mdDwshuGLM5W(AnJwr-$8}Lyd(ggwRTUJVg4k9*ykp3BqZ=i1GjH!}u$t zET&NcKd<1?$mty34_9=>y%kr%?8 zE5tvzo-wp*?{>H)Oo&|>U4%-+`l+lCLiyu#R#y-bD}XdOi;eCIW4txyJc?3Ravt5a zY49T5L5(uj0O5GLX4JcXsB`!NT{=h=%LARNcpOoZb{AHAPas9rg^Xc4g?~?RBJo}Ji6*)PZh@4Ew@%f3s z$r5@wicW_2J-M?K_`!O3-`ff1KExQolg|&Hp0h8$D;y28P3a$L{X;wCd(jJ@jZ5fS z3_;e;I@wgVm@Vb&N`L`}z3`2X3cgCAf^mO0o@2duxZ>9-R50fAxD@iqfpPc46+fF6 zR4{J6#-)(Y2vDSU;Llj*ph5-XVrM*xz_*`FJAUnzX7K)mGhOf^Dv4J^vf1GOeN-?% z*qJ1gR!TYK!6Y9Qe4i^=J>nA&q6KK%UC5L_hk@6UADQ^*;EyO|EbwdA!!ag@0Xh2U z;G56_corncvA;So#m$;)cHqxg<|+`wvmka@>xAmW)U}h?2lU>JX2Yi)FniV?s}u7g zlfc8vl%0;6eT zszv&Km=JAg<(Wn)iB#H1*MC>qr^4}- zgnfkjzkhS>iArnmRkQ#w)|@*D+S2q(e~9}ucL#wDa8vSWtO5mP1uR5Jl5Jrv2IX>} zo48;D@>(1T8x`n%?(#U4b-G{3aQZqpEfkd3%z54iI=m^$cM9%v(XcN{2jvALP>qQa zaAl&C`kianERc)BN71i5oS zNnf4SQ|1lC2xlupL7;7sf=OwSrMc99OEz)gJp+P>7it9*1V9Ptv%D_ZCcv8Ddke6p z%s*!Bnp36Ee~&h)J|ljrQZmRC29ODb#_97%h(4CUItLl!$QyXfdv+;x0iN9=Rr1xO zZX8RjGF@`qyHI7fRC#+)Wox8LV4qQFoGS0mPJ`dKHY^oXky|6R1bD521V776ak4)O zg#EA*_Efb@&WS7&K!&AYQrKi^mdTH^P~q$K*<#iw_dn@gp_zBwnPw;VOi=Mts^S@{ z;_Z=&;a5=#CMzaOQ}Lg&0Ch>lEs^!9&`-5W?Tq!=&GorR6wmqhH7jLpQHV%hm8~qP>Ap_vS3}@ z{8_0H*w5J@Q;2W17Wn&PA)}A~c`gzumb>`ui>wq2`Fnye6;-~Z8er}(b1L>JTyGLw z^S|U@R0X4*p@PwtD+Z&Lll_ZulWK4i`6lww6eSKI;U?3YG~9%7c$=K!+wyw4zF7g* z)pXte9OCdopDbL=Tx4yWu&mZh*lY4Wx>&(V^ju^ie=bUSH5d8Q%*D4e{QRJJU6r{A z$EGR{?>G|$#6UPuA3aVSUilRCg(Dp4PVaWa;pNwbdh>|JIo;sY-WG%?|13oW$cfsT zqe@$7oTcE`K_5M{k)=^Tej#abFbATF7oyVE0eV${Y6@V>uO`(rF@{LjJEiXgO?yx^ zEv^|A{UnSbq+qgXWNDiA-K4nzn-(ubr7fE#5INN}ei2F2iW5YCIst)85tv@-Pk)D| z0V(N6z0DGk5Y?X|AR|hLqr#G%e?EFDDKEx-XN^XG`c$6!Q$)SBjc;N&{(Fs}xB&u= z;tb%+?<&bzgIRdac=YRtT^{Gy1xpSom=rBpnq$|E1sp$2 zA#T!_jo#8uJB|D@}}07vp<>3#PPlC$%jLr(|zRfs8095fft@m z_o)|>PB;IYyzF5(0-f$f|1Fg+Icb&d_o31i&b~_b6;|%R#Rs;J>${%|UEygujNa5}W5K96o4@(b0`|DGxx(c{8lou9m^JEU2LI@nL{?g&*$Pi$m@ zt_-a0TRX6+t$%}QCVb1)sN7`({hLF|WvFPSr5%0C1~!FiL9{*ZWS(~deVp>k6msMF&Zc4kVa^l)trEQG6U<>oAq~le*k~-eQsY^kV7zPGr z+dHy%``*AimFBQ%?~a&;97@>Xk-m^qF(stYT^z`WZ!Xn(QN_kcv~CqrKxj2Rt~xcU zht*!B`aAk`LG4AVzjxh0fA40UELv01PTYsX%KxaQR=y=!i`2=dh+8U(BGM|kKMueExYE}WXyc18pQuxxv*2U%t z{;Ku{Pyauvi2on*43)`h*}#Ze)?1;nVCnz3J0 zC#LY(?Ajed{1zxR(PygB@2*bFF(+|J5kCp3Ly1id_{XXfYkg#$>hn*O9y*6+UtgVA zs}k!K@q0lG_b>EXb4GPyc|oDse%Q6wfEaFm=(XkubnjY$+lYyUalRP>^A)&1kJWq_ zEwH>>K;LwsF!_>d0lkuq#F$i=XY+TOg|mJgf=a)?vL7 z(uhtmMQ(agsqiZIm7ZHZDP_-^Hh0)5DVadYHmztFm% z(9Phq#8k(LKE*H85-PMhtoTTy(9}eAw}8`P!->;pTB5pJawl3{ETk@2+3@N65G@b? z?_cuq=K{H46-{z$(1=grvVSH?yCjzbJ7b@fiIFNV87@=jC{q4Z0bwN72=UWkIMuX; zU7wk3i;DOmEi4CZ`An3Q0-2R0T`CQg;D<)wp9Se;Q!6FVk|bSaBw$EC2hwStvjip> zUT%RXBdrCVCC^a&P&tXHN1o-)w7io$%4?w$GJMVVSaRfa+BWCMzaOQ}J8!#0{`w6`G{YS24?*TJ#eWw0?r> zv#_MxAyu?wQMGelc?{<`@6p zzv~sIGQTqXX;c`u`YH^l)8xeQz}&O<4WdM9=Z%f+gF9Mw;8UYzaM$p;dv*`)8DWkk zf8O)%8?9}4Nb^JFPdj()!Efir$@mE0KZJX_y?a{rj*hhKJ*Q>=;GT1b_#)%KXK%EI z{{~tTrB0iy)M?8rs?%_YvFsPsY1Pzea;Wq*M)Ka1={iYISE|zh)&P{PS*_DU;pzHZ z)M-F+2$$r9WwmC)elH(Ur|G%KLjGKo@@g*frSD}qm#KJP^|n#?I_x{NyN|)T5u_tlmb~A zoz-g!3G~lAycpw!D%d~<=#QM%^ttZ|ns&X?`HZLOlY+^nk)>(cdkYC0NH#5AsDce7 z4|XCo*ecT;aiWv`VnM6Z{s~PxtU3*FBb1J-({Rq=;pR(8dCkAnvRR{1r+ulARHwmx z-@T$VOPC|VW8ZzgqRlr)R4@~&(?nD0)H}H!2crGKVbp2RR7%05Xvxy3(|(dvr%|-= zLR6>OzT+Q$9I1C(k%%;a@$y&HD8!4C`U_=h;q3xcTq;36afVAQ_n6$CJmbTrwTBmSxjoqaDe|?Nj zcT#90Uj3_YV+${v_LY!rx2SpL(KNe*GY}jUewp5MJUF2d-D-&~AbhM?py1ttcoLeRc1iIh1V?U4 z@F!U8)^2UdEjWA$_ zI~!{#{Ctgg`)O3d7jHlCyh-7ow1cg@WYPAx@PVF$uOGGWqD|#zy=m&3iV5MfsqsRq zt#;kikb_A0NqlFK!q;t&55O^FnH%WFCKv#|;AH?J;nsL^w|wJZzT1)|I4P(q4wU;5 zdS)`0TYr*PUJHRD`8cT8GWDtadBuT&UBlZ3ltS?ZXCM5|l+)L7!ppW_eC~zAdtSD4 z@9v?OZ98vx|Ms0j`(Jhdv1zvLz363~`-c%YWaIF*mu(vz-nGL#AKTlx@tBR9R`iFG zMurZIyzGqUpXGu5+h0~VVqJ0`#=v_n7~UQzldsQN4DF`XzV^cDC5+v_WGd^JGu!u# z2D;&eR(8kGw$XEggjH6}@Sc&O{rgAvjRc9u2Rdb~b^cggkhIfRJX6h_8$Y_6>)4C4 zj=coP;+_JdpY@;B&%j?!D^#C7XLNTAwDlsH+RZL#b-OwdrL0!cQ4nUgeG=j>+p%Rs*IA+%UAeYRbkLJR`CtIc+paBrU8jYVr>#AcBkTwIH+FUPcH+NCp&Hdr zSj%>bmb-Q7(sPEW&c^e~^+P&y)@ z`Q>}tH~0CG(-bdgsde7Q&dt5iJeUjnbp3t*r@b$MkE6Kq?(UiCIW#jG-LejAB>9%H zB_Go^V9;SZmTYVziz5e?Wm~cZzVLxLLNE?zLcS#%a5H+zW;mG)m1$`@;KkJ+2yy0ALH(>dPluiRb5^6uUGDRy`Y+h zL)x?yO=mbpPtmlVr?hj|+yyTn1!QS@&)`Gv+~>3$E=q~Tcs&6})VT@pke;x?B6 zhFcU{r~}5UlvAaI2%t!L?f?7D{G~`RGETuGXo0R&=dd<4I_5 zU%Hef)Ccpd=~}sX&A_UD4c4JE>uDcc)8BQ*ns<53mg0|@)ktQ@vlQ}{X_+VkWn5Y1 zW^$X%AX*O2z%y`co+L-_&_39;xM$7k#hwfzZ-*4mps0yBrcWFWNcb20c?G64Na45u z5zY!>NEjC3JYuu@oc_h$ z*8Vw^Dq9YvuJXVq#NP8dC3U}ZHT))IBMpV{C8OP;;&{m@fLE)C`rLu86}n>W?Q;$9B!=<$2D4W=KAUaThl$sG3T*`3()le>@&!{ z0u_tuQGs-?*i;ogKe_aNnA6;)O9DAm|3ETeUac(&9hS<&B-B2Wvx^o5 z5|I17@6GphY6tF3(jOqdd>WCz-aMPzxUs>UngN8@2A`WNm(NJjf+TX@=y-9d3 zfwJjYeb(NQQHd83xD^17@^D20^n&MpP?132;Bh{pNCZMaLJ%H=BUvzQ^PfLu)5j%=!PMRWZ?_A;i9crl^#NnX&|#enx=#Z9wPWJ9v!_34Pou1fW zRniTDfnLB{E`p5>hIGwTc`2G5baU}rudunA$*Q$NH}q0^MbMb(rN?k3za|t))~F|u zjCxlF)YyS<_Mt6;396jJBu=M{+5C)N{mE;~(>qj0h%Vd((kS~kdNuE}P&Br*Ui! zSC$ichW6|l_B9;62CFPuJ=ALekM8{~T9@tX3PeAB>L|@pY#Z8gnlzy3cQ*|Zst?~- z=$2`5t(|&D!OKn36Eqt7{u?K0&2f_OF|AVxRCLEw!lK!cokLrPvpaV0#46*6R(%BM5!M;rGIWXL=LW^`*9umx z*(ZeVScoWLFc6OfuA-+qfrvY`KIU}C%q76|?Co224{h=Quo9r^k2vH#rMl>&trlysz=#F*fwAGTIm$TH9)sM7{cSkvG z?`{BhQQuw6yQ7>5@9rGjmH6(G-W}ykdv_$S%y(DryQ}c-s0@{KC#wdJ8>Ah$D7;eW z5zw6~GzZA`(&$d5aoA`tjqY?DtUK&5g7RDysD3j|a$&o2;92|0JSg$Y>a>bF#8+P1WlTpO zPJE?1j(219?KAc0Onq14_I#uY4CSAV#C_PBYA@~@=o;)<{%}ZLhSg<6UE1n0>Rs-S z$>2_Ld6AG8CGsLEFH-U%EiX#tMMhqf$%}G%Q6VoXQ&h1 z5il5w{IHDC(s)yjOTp`F$m~YK`e#r8Ej{%(6uf2ziqK}3@iZuamY#MT3U1rT92QzV z0}7y}r;kt3xCpsv)JJF$H!9XC?ju`00)UlsaRc9G@m&DoCL?CQTAUb#W|fm$S@J%NC~FQF zbw(_L!GI6WT0rswm)M0b@5iTU-2r0~)II?a@kuVRd$jEljNk#~ZGhxo=SdzPNK1jE zSp8B__9vk}nAC#_uwOp)j}ul26_}Z1HsS(jSRv9Qj>4?LOXtB8XF}ej8d4@)_-PCs zfq}CIt*R&n2$djtj)EhW{rVFq&aV)G}W&3J~+_A9R(%2G8M>6gJ2hvC!{| z6Qh2y+Es%1F%V}CV5>na^lWkBI+wUw5Z?`A7%mNBbO*)M=AkDT)a=9$BK=_0jB1+% z@dxsVkK;NX-hjRq$ZatBgV3N1uESfum8lXiL(;({-*NaN?Ef50>UjbqaGm8=Pu^(X2AS8cM5SN1(Jwh?!`L5(f zQR5yLHLe9UZf$YmoJ%}W5dQ+iwFit=5brBaJliF15@r6T=&mNByZWc%#Is!DtSIxx z1aTvX?6}2Scu*f*2cP!XU#U73E~f-%;=Kw^<{jvIPoNxc(y3>hankdu7>2l%_APaHx1ihLVq0><7X`Lvr0sk zY#@}2)b5PNseemBrk#a<(pziYDe35d$O5w2^(sJ*` z&sgL)NSVwUNY#w;3pwTaQt#YqpmsAyOFI`-(oX~Z(CtAMg0xP0vY39B(PP$^fWAM$ zlQ8|n@N@@rs%Z&w{%U9qkyAqi{^ln@|cpjzhz)$(5_`zqe0v=~(A8*SM#j~4j z88=j!_A=gHab1;&4QAOm3`oQVmVCAd)BBN#2w)@O$7R+XuD4YJ>@` zGCT56sSb`oA-)P2`Dj(vnB;_eacaPlJT4rIyu=9%IYoKC z1+{CTc5m-N>iSvnnNtbXSv}PX-B>LZzoD8GN2t3=azD*`e^HvRJb=%j$XEVkC{MiA zKCTZ}Pc`N^rs2d(op6hDW{(r?%bkgHo2W2W*eOpsnOB@YWXRC_JDmiIhjWosyrNSO zK&rY>@lFNYmJ_&m&qdZ+R3-u4L<#BrWE`#t8M~)(%uVb_*qt`JD6$`peLi`b75;HG zLJzX1et-g_xUF_2ohNTmaKGr{TO&1gWbyXI6_HC99!6>?vbS?;JaLJAL3Hs4M94qq z$^(x=3IlQh_hyFNnbet>-TMQQ=);mf0u}I;Ohn3^PvaH*jYXcVo@}%e-Rye9r915k z5sl6TpHu#MB9SgTJ<@-vZlDt#HS5;0b#V}*Qx1c-I`8Uns+Q+&hQZ5W@KD&P7Y46% zCMBKQJDrLi99+B3F`6CY!-!vX)GPqbQ;hPB}6Om2ip`xx2=kDtz+!8um#uozPC9V7IW<$=v24 z{2*8r=OwfGZA)Bdcn12rnkhzyUIO$~*lUE(2f%b&sUqs8LgI3j7&MwJm1{H~K6>V4 zF2rQZ{*_mVU&unpvvd80KrAlK8!QA33RNL~U6a>_-jqVPuAxG(Ip7+8cLASFLo4B# z8C<9tR`l;{rDwiadtA=|2G4neg(9x1Q1{lh8M&ZmXzqJl&&b3R@(c|wMIokhA*Lgo zs8@*J%R&_P%rrz4rM$sH5LZ=**K21Q&YNBc%`;qLc!q}$@Cv4#Rg>uP+Kfy*ANN-b-#N}i}Q)1o(f z427Z>%Y+Zmfxz+HgL~@eVCa#pXK3RA?2}~*Dq0TtL<8j^2(7Mm-+!4>0>HUW2z7mEYd1^1&Z|mxeR&w&pEQ)%_z|S$`JbuBf<*C`XH*oqk zaQe)|pW-1>a5g<>ZLQUuV-i4aHc6wm#vI}hGICsZmC z!-PHZkWwBcAQUra^mi6L7=aPXgf~jKyB?9ZMPq3oS=@3kOmJ^_=#=U4_C(RFs?bLs z{#yE|r_X~zpR~|tr%xYjV&#lMeTb#f=dpThVlAT2elfD5*Eg$)!TkVzlhAxID`)eG zuAwR`^Q@=bKl_a(x0JE5utAbD29+b0Y8&Kp_1F?FlxrhdcqPQ#4eK;t%d#^QsAG>! zu*!a4Z>CzT?q4Sn?iG2cFOnViX%3WNq)IXmh|OH)q?L)E#^_RpowfzXZhGwyWXli+#ru#Jw#=T z*%?u`9lo;R*j3KxFB=`!Ni0>_jx@ATq}g7#GPvKH>oA+qd$3gs&&)j1ih42AsyYVY zNjB`SNO;JeO~MhD!+wtw(mu}H#v;g?F&%T6WA*Zz>rc7oQL5yxjiU>~#(zY54^CqC zcnQVYMZYx}!SUOz>KhwnCvig~^;=UePa!G{y@K%aEi3n4I^0jq#s@9sN6nTm5@Ktt zrEfUe#Z5irWO_ocyGdnU4_RJj)qJi|p1*xNOR}3dy!lp&7cC@)OuMFjH+?^@9el(u z88MQX-ia=AZ1I(k*L0WzyZ_knvqJgBoNFri~*{AnMFW#;Si}qIt19T$~7nBQ{Pu z51H+QbKVs)m)$~B5SXC22Q6ev|015InEAEf97Xq~VYBo1A#3TULgs?I3uL2-4BJ}V zI`^HZk~g;fT5{Ft`w(xM`eUZK0t)a-04~DE| zupwpeiH;`*BfIQfxgVlpi#ZWKZW{a6xlClXG|!2=j;jK5B4lo|%vIhS`N@eB#l-A| zJncbrm=lRpCU?I(UCt1Rbm<1lq00gFbe&*GPj669Z&gpfte$?;6aL+am{lRARm7ma z_ZcDLq6xQoh|YT7?U8@bbzxocfM7P+G-l8Mmq(gr5@ZWP7%gwr_@ zH;(ZMdYgyT+k6F1Nok5l;!qc}%KB@%({^4x((A<7kg%xP*()+hrSN6r(C9#kfTdVO zW*X0B9Z)T@^t*4ovEbNTbT|juOz2C_rM`p(;$}77oJ57727ACNl~GOZM}z%@S!y*L zZZf}MimmX6ns{_$+vU?IQ!f)c^FPpDw_j!?qKQNz6*A}9Xu;u+Tw?Fox+jqdJ#5r{ z290}HA|5hlCF6-Wj{XVRX0-k~G_QNFxZ~gOiV9h;eJ-B3G!$-6;9&6RD=*X(F*8Lz-nBYih;;=iST1#J=G~ zRpf?MIKI7!=9oK0DoseQriF#mdYxrGxr;D_%&%peoic>1GN|H)4>_n?(+@e>Y0jyK za;tMky^6mYbMsA+zKHkWOq^`g6c5LpvR9lPJDh!SdV8<#adLflS)AMJBqGkcRJ-X% zV3KU4BjU{O<4=%|<+*yi11pX>M^`x|hn!jJzQ_6dmz;fr&M8khZSK=ooGVJ5+*6+H zHDi&3SyVJ<=5nW^(|LEC;&GkZ<2++KKT6Z}0mSAymdoh_=7F)uADiM;ai`U_j1-+! z_npoG7HvP}GXCDLdsfEz5m3_q+;=aW-N@$b=`6pi<7kkUC3}Yn3D} zbhWzIB$tmP`CJ^r#{z1W<-V#*e&<-^vohg6pX7IqMefbUtvLFTTrG^Dbb9w#`k1%4dvj!6ys)D@-Yn{xpGuG>r`;yKZi@eB5`(nMlPM_sO6xmt? zF3U!2^rgp~V?)jpDVmvwmtH#7ii#EahE#8d?Y`&e_cF%3;dO+MiUBRSbi(?||)!ebRw5o^_lHGxN1wM6zv6Qa>% zt%=`gHj|5Z)OtTu!>APy72bB9<2<)<(vt#KcmC#7U7 zY2q_eX*GYQ1t0P(qKQDDrxo0eAvRdmoYhB5%M<@d;3SpOvD> zIa%bECZ67IvRa?_iu^NQk(1KP8+_B-6LGL8Q4}aLF;_+YMN2DY68v7?I2QT$6Hxk0 z46h4JZw~{2cmmXDZTtMw+gyWWuK@^!@OowX2xb@(X=~Dzt#W4ck1zo~rEoAFzPl_6 zg|t^jZsRd9VnK3dC$!8ln`s`yv6f-km9M;y#MRtxY3iD*moK!CyKZ`rW^9A0Je!MU z2%1t2rkeB=sizi94ZErQWk%K7Czle5mU*0h#a1_HQOXNiw0m^J1#h{iMNhqzPQZy4 zids}CKv4n#igsVJV|bSrwFrwQCl-4szUz`*p82xe~A{Z zs2w3*D!oKRD?*Ti<%n9sv1{Bw2Z$Tt%YkkFOZ4y-b5>UP(wD64>R#c+>7einZwCM{ zD-(l*+lGgBj_ldC;TZtNs}Q4X{phB_;cXj7hqgUqB+aV$;NXbNP;OM0Qh%^}_m*Kd z&-c)4{8#PXuc5vujV-zZsIYmPa>Zs-H_gA{5};ln_}wJzpvRa0AIIsP ziWvJ*M|WX!tlY;3KqLyR(u14Hef(+9>2^JMK!H?kr#8T?I2hdJjzdNE=-cwg+bk-# zZVFkX=tJOw-Ey0;PtWMv)E3^1TX*x_Na?1&VcrKglDBQ}eA?9)?Hg?ipRclSp@$=Z z-GQ`YaBEw5o65L-1|1Ussr1w5JAvcR-cz^VlAESN@**rRBJ#qP7g2ffpWH|H-?l-E zMoNKgSsyRq4N!4ReiYr7H3|m!js^ubKqbbfXiOm^)i54Ku-L}5`-q1f{D@H9oQt=Q zVrBq`Az&*CUJ00{^JBgXz_p1riHK~%&sgM_AjYWzwC4%~ULRn*05RcViP#pz|AOiZ z=yC-A-Bp~J5E?`r6~x~KF|gh^(9QUGabl{rMC=}Z@lguvB zyWi{qC8+XCjoton2$Fl<@d;qNwy)*l1~{Dc2hkG zv&r@*ZT*oK{&4~X(@`T=SjyCPvCmqeZ9bZ;2M!r%o6;OE8oFMbDvM5DsmiHNl}-5`IGt-IEWwL2zKEE24ooY=AWI zIn<;!wU)boch#FZQ2wS&$GC3Ctnhb|vauc%ddZmJzPcS9i*UvwiYQYMY=QcEAuY<% zqE_TNPudS%D~PUPqfeSWCNdV0rix9{xQ*cpKXcSLdXRca@$sA_(cz?Jzv4OI7>SO0 zcx3r?&rJxkft=CbgwhBwO)OOtdNrAqvw*-dkfqC#5>fwcWp05j+SkW6&ragsc z(ymL%MSCo=YaJry>ySw<+PhqNk)yMLdnSH_5>`?PsVip@$rMcq+9@mcX^3cL5r5-} z!0fLk0^zffDM}a&X6#K@)Pkji+83NQa3d*GWfBF`5AEfO=1nZ@yT_eaC=nA2yGOSU z?|jQmEBxZEG_4RTG_61}j<*hP-8!_xn?pELgg7RLc+XzMSyuo5lMPY!t~b?iU(9fy z$ccvQ&Eub@i`j+}ir+WTd&ZLf_AbMkJ70UyK@S}5!5n(9PJ59W8QED`kjnY(jo z8o^EI@Fj2vPeC!qm%w2^MFJhjE5hZvvk~nplPm)X16^mRfS!mYsik!LQV_0J(zxM; zU1mKhp;xECtcXY9Kb}{k@Ey>L=$syf|A^jsD^pVVKv%B_dMm^uAg)U4_9ykM%qXfe zx(0fdX+=fUQI*;qNYxF|wOXe`JYSD%w=V@ztG$%2)w(SZX;~$8`;!nLSy5?%5NTN@ zbn6K{QiJ}p1CDjYASKVUo(7cUcdb_)h#%r|tD}ka6rXcZ8(k}a#^+sMiqE}BNsE%Q zcCN1|N-zECX}TXdtxTg+u3|bO)spi($<(?{bcaD9Ey?H0JY9Vr^QZZ}i8N)GfiCu% zr>2&o{K*=+H4(;#ZxAxi^8v?pEfu8~sjCLOX+dt{ReIu*voSG=m>ynn%#D zL6BaLeLGl4!;55XRuWx{Y$BZ2r7K2ZXIJWqb!m#VgRh?0KhUG`rHNKu>#m^I?T7%c zYmL*db*;hQr*)Uk9YJNI!X{m+CXbBBhu!kw$Oy`p5IMV74J=d7M@HVBY<-g^Tg5D3 za9UGDdkf5G{#VV-`l6gZwF{VA%e~A+37{06O*(uZTHUYTb5j;1#lE| zn)xS52Z>e;Uo`9;y&OzN9MCOZGWPG|utr_vz|PT4o7CK{2o%T}^5%?%6*2awAt*AL`my+8V*$hy9F8;(!$B9yuh{W?gd zzSbh7ulLn(lPUZvn}zz3cW~oD$*eBF;QuBr_ySCX>_O3I111A@Q5YQ9jA@A zWWl*AeEjH6@uOXSN)Niz`0d$(HiN*$o4h!cuBpx#+I7M3Mr{RzRywez;g63<3mrz@ zI>+YH(LRcsXhk>Y1x}2PkqlZr{E;*(^|?URo_3Sxv0!s*t=uZk0syNKA0=yxU5Ml>@zko?@@ z#B%ko^a7UrGn>N)VQSO>oT-@F{9XcGMiAeC(7{+btTF7+&x#Y%&Pr0-jokMgv3OMl z;?EQ(MulhMav}K(AVwvr1o8gj#QdrPgNmK_8H;>Uthtrr)cRw2#A4|%V-#4p%dSCjOB)j6DTnfKz=M6p&0|2}p9Sko>Y(GA;x0lf{X75CP%| zLh`o-aR$VnE>4_sCD#ebFNkB{6KG`*7AG!siR%UN{U|dcd?g_n)+koyv`gF|)V@Iw zmq79f)OEQ~+bD=15NgLk{E_04X_qZod!p!$KaW-hKi8tNypcyNDhv9+U}Y(BnKTI| zw?G44Dz?pCc}xlr%N6ddAl?sRw6-YJe`j%GbiAy7v#|P|!r!H^`sGE5`Aq?OBXJ>q z5NI;w1^=QY-DIZ7^0l3@jGx*P^ZcBRg`$LgvRI>9D)&P2c0)SKl`_&hNUgQDTx?)V zk#8@gU2kMnCh|*bflM9Z+|D76TN6g6zszE|Q^J9R9>LNft)bDIK`bhj(vAYV)H3%) zv1gYTm0pK60H;q-YGv9!eYz}f7aRTY(Zkv)j1+8cUhG;p9X*&{#G9Ag0; z4yxG$D{N2}aXTJ%m1QeoISdO7hP&(v7f*`Q5_&n7(C>?y(}d<)lVm>W*QrmJpT#S>24cH(LGlw245|EE8_@kXx*Dn}JJ%ZK`Al2+(9Q5+Tve}qCW zQmIPlWZAG~#}+RmsPfY5ZV^7=U13r zL23P&J{Fq@9L1kq+H96e%j?xt+J*#y(9_tV`ww1ezamOIk4n3|i#)rcf12i500TI) z(hv%AS&41A=h?5v3VN0@seOK5j|DtC71i0#=>c$>>Qop`xQ}AH)pf#y2t&4<8fBeq zlxU4fyt)>={4&*EZxKG5Vt=MA`>0pKABz%Z*`IbHe`2wkvj@vajFmrsQn-xynF3{; z27mf9{WOLX&HsFVTBsep2fa1_L^DASBF$Fx%DCLP{zocpjM^&ooa<$;!;ph4HWX0C zU^$7Ua?}1edL6bpU=|tEZ9%;%b|Lm!k>IQq`x{U2$LS3EnB6P{5BdaSw-sj$3Z|F8 z5`0S>K~-3AhIh}1rmMvsET4E}F7}^IwBlcnn+>9O`YHqi_L8*2_19sS`gydO)qY?7 zeRNGd?@0Zpwfc-*G)x*)g+@YZKiUIv#8Xk3WKTtz(q5&1Af7W$Rhg*mPDg$AbNU82 zO(9>`+m4}jEF+ZTcjMTEl-r-%fQ{JLdbvtZZbJ+WPJWn@>6J+XO!3OBr=4yH$C3C& z+$^2Wugssr2x6yOg5W0F>k`2@kS)VbPkXyz@w%k<%L}rUBE>DGNI}t@HxQoVDIAb} z0lLqlxd(F>uqJ7#NqHl?qtPn)U_!d%S~>w zNr-aC4T-=>-}Ex4Ov)WMBu+896esBpKc^3YQ(Mp-h&XXeg4|){HWqLP;#}Op$=#Gp z?w}#Na7P2XqrpmkEn$|qQ_fyeacNn=X?2gXd z7S@D5m{^nYT6RaRmHJ`AtQW20pM*O~xOEhD2f}DEsWKw*CU=k!<&GaE3XZKPlXAz8 z5*S-4PSPEIPCo`G?g{;^15sjs$@bo#TVKE(h`jP!PJWn@$sP2`Dcn)R?m)n&Yf8+t zaL0atDTO=Yw%;8H_k?U>a2;qJ*Os`Y47lUk5){pA9p}5P<9ybHzAA(!Ev!k4Rr*_Vi%FF`i8oaY5~3=`x22-~ArECz7315av*IKx zhM&_D;DmvAez)0atsP(x6 zv89l09Cy4dOBry-%bGh3x7+M=yG@$hF%Fl8jI%4d(&4MZSBI{#fWsZKjJ8UIjY^tx zM3cPfDi^`<+*oQzw<;e9nTr!CYtc$CRGukv z#uM8SUClxShaLAhw&5fVr;6t%dC-nMv@BG4g1(K&r=;m>?=APqr0-QoUqjUQQl@S# zlkZhXUnmI7&6$>YnQl%_Fj|HfhRx6LrFBg=-Y`z<6vTWzDpG1eN+?H>GIw~@y>^4M=Clg*UH zFQQoWI+Z*)iK(&6ys^l)lzpAfhQcNW7Wkru<8s~s9CI}ZJDds`tE;=xp{qhyyNzO6 zwN(KWZwECBD?}(>{FAWfEFM&i;ETiEC;U6`Mom>G$hEb{R{O8pUpI6z%sp z5o#2VLIIvyK(IZQs9FToV`>qkWS>`$|0UUCOjVg=i=a%WX_*!nr-_OyEBn==vQG|H zc9Al9ab(|M5FHQi)z!%dlPvbdosbMB&J6^x;-uqy9L z$q$-4fiT8*g#?RB3^n_!92@y5qjCjtB7YG}g`xgJDlm=W6v#BsScK8|D54Qzie!ji z=Cl+bR4ZrI%B`v=J=Go;s$r&pzO^>`R6~S#&KOjUSSr=NlfoyD%0w-XRLjpa-#Cp` z`#=x=5vtKNzj(1#@r$j>s(v9Q#~J@BaM_qei`)Kj24XfM+c+<_UrIx%7u$kMAO@qc z)NEtEgH874A=E@U;u&Ql(P9g05-uYnS%_};!L;<>wQ2Sr-mYY%&Glc_2Ezzr#~D@m zi4*yckpx~-x*_cjf7GagjFg{gu5oIvE4Q9?5^*I8H4F8%b3$-)qXB*wu?UH zcA;8b?qP&gN`%bW>q6G4e@s=$*KGAA?O$q-&OWa_+VSp1cg%?_y5pq5_9#7@_4kYJ zh$lwv5sG_=@JLRWI}!fMM$iHlp$bL)0~LyNdXHDA&!;iEbPzG-C?=@z&#mz5;4$Zo zc0}4;?^N`nrK@grE%hzt(`zVWR^(qN$(Z^ms5x!D%j8xtNh||%`5>Fy;KY`J`3514 z|2Zn|vbl})a2@^;D%^@IK=+U0A1`do8<^DBB3}A-{PT;|h3;pes%SHXp!?J%1ykuE zMGT-`DVWMVmIwPk|6?xf9~+LhjIJNtGqiK}TMqUA`dbP0AOG`E|M}4bDC__^$=eC= z@`*+mi0!&$*M{9&W=V|ymoe|boHkg~8q%To1UNG{&0DxK!5MY@emj7>fTz-PAK<@zvG?4E_iv{- z1uMh5ckUTRw4arc5u8AbtM-*~VgaE4Vhur#obvHf?J*(t-Q2z1{T%(k1=$0m?j|ht zCjboZCamb`AM`M^0OC*nefpeEGRT2PI_EP%KUFxB$5pzLH={{@CI~7g)f|Y6J z#-$!yvsx?20zjX&v~yN0(E>f>0Jqi>m+EN{rxUIjSUqQ4iA!{e*tMZEU9B@Eq_ifm zyI(=WQ9!rk1n=%YSCyPl;ld^i{MJ$k6E65s%9`H(6{|HJr58I};2o|F-PFrAass45E93Hx$XSavJ7C>rB>DfHAQ^OMD z;80*sw1k!0w{>sXzTtw=ZJQ)|)la;7k7rCjF%k+8i&97dySgqK8uhdi$Z$^EzHMZ5 z6ZBeg@eb|C^85_I8T&IR)e7Q?iM5-67B0&p>HwwrF}?z4te$Hm0#{8*OM92DV)VOa z!~&@SL^RRnL)DdSkdjvbrAz>*E`Zc7!+e~&kIoNM7dU;FE{IZB$*YHUj_$tXjO`nB z@OYtQt(2-PYjzB6820(O5K3DDvV|<^8nK&V&z6CUeLD=~<9`2R7v>zu?mf@TFZCE0 z-nt`SBAG?2c`|GF&>jXhQxlac`!VDI@*vCxW1}TcNxXFD&<6QTK&5x=*`jk4<-$Wh zOYwO9itT$>Z{Mr-NicewK5i6Vo9?*#;51tHQs`~ElzgeF%>bJm*b-j&JQCmn8ZG zgnVmW6rJsrF~X*AYYP)h(+$saA*0RBz8!60!YH{Vvn42=00m(0nCu)6k{;pN3{Zqd zSO!7s0ei=c=(rTz0FgN?WIO^2z}_*(IUYqLFL8i^=C4K38YNhha8&Li?y+#kt(*>`j?quTEgyb}c zuP;ta?=32GMqsjE0IV7~)dZ$0eqWrJ+(X1=7vTqi?txPU20sE~Cy)3zm~3)8F~PyE z#N=6^gux^X-@jOp3D!-6)~6~!Oe#c0d1)R zNph7SJ_N}LI`cYeo;^yt3G=SvlBo%iF)su07;iVR> z;gAZA`$h3@Lh+$O6}WsRk4u57Dz{R&*!0_=Keo)2gLrlx@o`i@XT&NrT_sd_2L1yV zOfk~jyssbu6-o)M$JE(gZUN?z%CGR)UyKJ4q6IQJSm}B=cfNB?DtAO9NS2?+Rxv^J$4cnUy9IAhQd#8L&TepQ0*)N0lw7$QGY&NxkR zB2y9w+Mnrn;55xi^Z?$yfpzECJwbglwFHEX)mouj6XH0sQ0Nvw!GJ0OJTPRoK12&x zm)V=;qGk9HBmn-!*_B*8WLFYn)FJ+(KF~#kh|ud)yQf@(Q`ab$LUZ1RW41eqmB>X! zm@0EAFwkcb&BhGMB~H%4g#o;5h)W^_vTT7|q)SD5N20>0%@Mq&C+fVrluspw9~a1D zlq9UZEM#<6bfqI#MXnBC6S|i01oj?oIBlQNuY!)fB7i%s^#`ZP;W_M}Qo zO@kWf$(}u*P56M~mrkLSon&oAB&d-U&w7Hq)X_*!Z#|V>?V`jqS zl-X^rbXm(Lx9GCnBRvX}*Z944QjoMoc#BBqXry&UljB>|4AJ;GF9oR3{>e!-bAlH{B4P^ z(o-iwm7X$HYnj|iulkT#)Q9+U-Bp4^9!Q?ZMTxUzE+z1;l2eVvs_s$)qH0gM-L8!; z!(4YGegSuv_^Lg%VygCeq~drleyU1vcL}O}ZYdxWSK&1ip6rbFIGvLn`!y%B*!j|H z&MPnFaF&;R2mQN&17z00o)2(;PTt~oQEfH#=gDfz{(gzrsA7e_LoQ*cKVTka-_5jn zV~E4YFPTqBb_V=~_S@aq?IfNez)n~pyMT@bE)pPjaxPqLQ#8>HxsZOm$s8QUuIJ&1qddCM zHh^TRj!eh!qRNUtmXxE!hcuIh!gkf-!VUGl&aV}+_{~QVe1&)e|{drm|0SXD3 z1d1%+;ulC0?0^_`9<&|vuw!N!h=&8?2z8z&f6{m>-NN#4g7;M^DQ}+}8#7-Xklx5N zj=ZZ0fyMIn6_7`>A1p7EJ~9&yNL$Izrp($3F5hjC2Sm5r{1Y-y{w6#C{P5+|N3`N% z_Zn#G3XIo@yQ;Q#rluHe-0YqpO{i1hV@Uw6{c_Cc-PW7jR{nhIEn=7H28 z_cgK-RcF-&%)bs@Kz^=MjV=c8{k82_%9emyUYiEg67_nWTeZ~LVa{0OBWW_HsBFCl zy`2S#QhFOiO0CkrP0Qx@S%BH3En&znP~+R?L)&5FEN2fkK4PqjbXVHlNSs%s{9GMI zP8JCcpc0S+XljrhUY#U|mn5ysKc=zag&puDl*ES87@fvNaKLjvcCu!3>>}l?K?R9v zr8g+}J|XA)HeW#9Zho$l42L?v&>?UCA>LPua3BzWv3Ni#PV4PQN#OzW>NX>~Uf)!D5kEwY~6_vm@AKB_-WQ7{aqTP81W*aH8z6M<1GRB zebpovcZ^pQ=k`*nCvkVzG08V@KaZpuYkB$@=wf|3 zTm<7bS>?BuO5@&A>ND;IFmA!q;`iE@^9PqWk&@>hfVX5mLGzMeW!~FL-T4Q<;V6@9 zILXv$3%Kj57v}MJyF8`ABI1 zaeFcb=lPikal0R52}Vqd_c2X73f1`3@Gwpdf5lVnm{1KzUQz2G@u`N5ikva18nINW zy;>RobCYWMnFN^o0*4XPLN%IDWYv-rk4(WN*F>x8BN?-zjk~75%JADW&S%ZrF+Od+ zJ)!kZ*g1;aRs2Q>ypC?l1V)0VP?tm^)y&ULnOVj>0iyO^r>9~%B|~E}cUzz8{}6 zu@7;JqtRSt29~TD@R-j7n%Gkk2d~MX(iD(5MY<3Ww13H(B^o*wU{xCfkA($U;?Z%;fhr~%VDmb-;)zYlnO-NIc|6D zhdK(xqD+Gtz7VZhgpi3KWCOU^G`VRUMMs~?>xBF}1EgO(BaR+(i5P^uEn=I2c* zKH!=^xqoT?x0OV8zHU8I1@36VS%>DhjLz^J6H7@6LLND)pNP z^GgEeCjf63w1u~Tw~K?@4(wh5m>)yn@=<;QNw>2tyi3vV_5u3#=&-lGi*$(G|1uEV ze=k&x2IU$UZ6j`R2vV4lXP8DB591Z#0WUI3tQshQJi{!_xD-5q28A1N^$}12d4_3| zaVdB}4vLV_>QPVtd4?H=@hBSU%b7cS{OiKZXhMP>(Ta=vh^A`j5iJqAkLYWc9?_zT zctjuveiReZzlkCP0zvUZ&xQs_eU$R@PY|m_GmpeCE{LB*sDTOPmnI z9{@3M9|*{3ex^7vO-YmFk`erjMIJ%eQ$VdK6y&?}hz0Z{TnK7Kld;4kB``~$7aAZ8 zrukqVlK}E0ZE+t3;Sv1+ON?6iPA2}9kW3*VVdr9%hN>t@ zb^&g$qsH;Ei?(r7aboaiVi(}{EQsNEOf(pKiW5`YB*|66V7G!8kSS^*3yKrd)GQHK z3s+qQpb^xj$ffu^FIHv=Y^)K)FQBGDZ3=@4mc@vvwUXpoLHtEn8%;Ca9o z0)VVmvy1r!MRGF?5Q|N)BKO$R#dne1Xkobkh;hcCTw zU+tuxm8)2o<8)XRR`f-$;LnSKSBt6L^L^8gz(H}wV8Mx{ntuEhDWNh^*HDiJke|sh zPWP6ZyjA{iIjz82^ zek6)HUZ*8Hq@YMVcwEZ^xBtbEtwJa)pP8uA8f$sTi)9=G%Q!R`GuXwY%EhHt$-j9n z{;6eIQ0{Ecg=h@D0f{uh3v5 z`?;7|E~5C|4#9+P5Gyp%;0g_p4al7j7;vlo=Sif}i`>+BkztZVRqa0?qqu$?<>pZ& zFx~;{i}%K8fu=JzN{gXtfd~cn>Ac-f#(PxZO@W~iD565iAinds8r@^b0JZ_1TX!gHnIWM zmoo+>5=(^*dm)DIf?f>oM|c|iuE&DkxlaEp&c2=A8etVCrEDUqnLGVhPe`tpWQ zqDd5c=(?LVC4jEtj6o%crHU?mRUAWrfD%_giCq-&y2pJpQ|H8bj2oMV+GQ{Yw^=L> dQS%6<(nE?(!^^SMDtz3z^>_W%JjzYwOoFH8D@$ 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�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 |%ah3Z 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 B*t-A# literal 0 HcmV?d00001 diff --git a/Demo/Common/drivers/LuminaryMicro/adc.h b/Demo/Common/drivers/LuminaryMicro/adc.h new file mode 100644 index 000000000..d8239b7d9 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/adc.h @@ -0,0 +1,130 @@ +//***************************************************************************** +// +// adc.h - ADC headers for using the ADC driver functions. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __ADC_H__ +#define __ADC_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to ADCSequenceConfigure as the ulTrigger +// parameter. +// +//***************************************************************************** +#define ADC_TRIGGER_PROCESSOR 0x00000000 // Processor event +#define ADC_TRIGGER_COMP0 0x00000001 // Analog comparator 0 event +#define ADC_TRIGGER_COMP1 0x00000002 // Analog comparator 1 event +#define ADC_TRIGGER_COMP2 0x00000003 // Analog comparator 2 event +#define ADC_TRIGGER_EXTERNAL 0x00000004 // External event +#define ADC_TRIGGER_TIMER 0x00000005 // Timer event +#define ADC_TRIGGER_PWM0 0x00000006 // PWM0 event +#define ADC_TRIGGER_PWM1 0x00000007 // PWM1 event +#define ADC_TRIGGER_PWM2 0x00000008 // PWM2 event +#define ADC_TRIGGER_ALWAYS 0x0000000F // Always event + +//***************************************************************************** +// +// Values that can be passed to ADCSequenceStepConfigure as the ulConfig +// parameter. +// +//***************************************************************************** +#define ADC_CTL_TS 0x00000080 // Temperature sensor select +#define ADC_CTL_IE 0x00000040 // Interrupt enable +#define ADC_CTL_END 0x00000020 // Sequence end select +#define ADC_CTL_D 0x00000010 // Differential select +#define ADC_CTL_CH0 0x00000000 // Input channel 0 +#define ADC_CTL_CH1 0x00000001 // Input channel 1 +#define ADC_CTL_CH2 0x00000002 // Input channel 2 +#define ADC_CTL_CH3 0x00000003 // Input channel 3 +#define ADC_CTL_CH4 0x00000004 // Input channel 4 +#define ADC_CTL_CH5 0x00000005 // Input channel 5 +#define ADC_CTL_CH6 0x00000006 // Input channel 6 +#define ADC_CTL_CH7 0x00000007 // Input channel 7 + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void ADCIntRegister(unsigned long ulBase, unsigned long ulSequenceNum, + void (*pfnHandler)(void)); +extern void ADCIntUnregister(unsigned long ulBase, + unsigned long ulSequenceNum); +extern void ADCIntDisable(unsigned long ulBase, unsigned long ulSequenceNum); +extern void ADCIntEnable(unsigned long ulBase, unsigned long ulSequenceNum); +extern unsigned long ADCIntStatus(unsigned long ulBase, + unsigned long ulSequenceNum, + tBoolean bMasked); +extern void ADCIntClear(unsigned long ulBase, unsigned long ulSequenceNum); +extern void ADCSequenceEnable(unsigned long ulBase, + unsigned long ulSequenceNum); +extern void ADCSequenceDisable(unsigned long ulBase, + unsigned long ulSequenceNum); +extern void ADCSequenceConfigure(unsigned long ulBase, + unsigned long ulSequenceNum, + unsigned long ulTrigger, + unsigned long ulPriority); +extern void ADCSequenceStepConfigure(unsigned long ulBase, + unsigned long ulSequenceNum, + unsigned long ulStep, + unsigned long ulConfig); +extern long ADCSequenceOverflow(unsigned long ulBase, + unsigned long ulSequenceNum); +extern void ADCSequenceOverflowClear(unsigned long ulBase, + unsigned long ulSequenceNum); +extern long ADCSequenceUnderflow(unsigned long ulBase, + unsigned long ulSequenceNum); +extern void ADCSequenceUnderflowClear(unsigned long ulBase, + unsigned long ulSequenceNum); +extern long ADCSequenceDataGet(unsigned long ulBase, + unsigned long ulSequenceNum, + unsigned long *pulBuffer); +extern void ADCProcessorTrigger(unsigned long ulBase, + unsigned long ulSequenceNum); +extern void ADCSoftwareOversampleConfigure(unsigned long ulBase, + unsigned long ulSequenceNum, + unsigned long ulFactor); +extern void ADCSoftwareOversampleStepConfigure(unsigned long ulBase, + unsigned long ulSequenceNum, + unsigned long ulStep, + unsigned long ulConfig); +extern void ADCSoftwareOversampleDataGet(unsigned long ulBase, + unsigned long ulSequenceNum, + unsigned long *pulBuffer, + unsigned long ulCount); +extern void ADCHardwareOversampleConfigure(unsigned long ulBase, + unsigned long ulFactor); + +#ifdef __cplusplus +} +#endif + +#endif // __ADC_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/arm-none-eabi-gcc/libdriver.a b/Demo/Common/drivers/LuminaryMicro/arm-none-eabi-gcc/libdriver.a new file mode 100644 index 0000000000000000000000000000000000000000..0464e5adff421458189662ce42a3f1e23c9c2fea GIT binary patch literal 89696 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 literal 0 HcmV?d00001 diff --git a/Demo/Common/drivers/LuminaryMicro/can.h b/Demo/Common/drivers/LuminaryMicro/can.h new file mode 100644 index 000000000..0df5c4587 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/can.h @@ -0,0 +1,441 @@ +//***************************************************************************** +// +// can.h - Defines and Macros for the CAN controller. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __CAN_H__ +#define __CAN_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +//! \addtogroup can_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// Miscellaneous defines for Message ID Types +// +//***************************************************************************** + +//***************************************************************************** +// +//! These are the flags used by the tCANMsgObject variable when calling the +//! the CANMessageSet() and CANMessageGet() APIs. +// +//***************************************************************************** +typedef enum +{ + // + //! This indicates that transmit interrupts should be enabled, or are + //! enabled. + // + MSG_OBJ_TX_INT_ENABLE = 0x00000001, + + // + //! This indicates that receive interrupts should be enabled or are + //! enabled. + // + MSG_OBJ_RX_INT_ENABLE = 0x00000002, + + // + //! This indicates that a message object will use or is using an extended + //! identifier. + // + MSG_OBJ_EXTENDED_ID = 0x00000004, + + // + //! This indicates that a message object will use or is using filtering + //! based on the object's message Identifier. + // + MSG_OBJ_USE_ID_FILTER = 0x00000008, + + // + //! This indicates that new data was available in the message object. + // + MSG_OBJ_NEW_DATA = 0x00000080, + + // + //! This indicates that data was lost since this message object was last + //! read. + // + MSG_OBJ_DATA_LOST = 0x00000100, + + // + //! This indicates that a message object will use or is using filtering + //! based on the direction of the transfer. If the direction filtering is + //! used then ID filtering must also be enabled. + // + MSG_OBJ_USE_DIR_FILTER = (0x00000010 | MSG_OBJ_USE_ID_FILTER), + + // + //! This indicates that a message object will use or is using message + //! identifier filtering based of the the extended identifier. + //! If the extended identifier filtering is used then ID filtering must + //! also be enabled. + // + MSG_OBJ_USE_EXT_FILTER = (0x00000020 | MSG_OBJ_USE_ID_FILTER), + + // + //! This indicates that a message object is a remote frame. + // + MSG_OBJ_REMOTE_FRAME = 0x00000040, + + // + //! This indicates that a message object has no flags set. + // + MSG_OBJ_NO_FLAGS = 0x00000000 +} +tCANObjFlags; + +//***************************************************************************** +// +//! This define is used with the #tCANObjFlags enumerated values to allow +//! checking only status flags and not configuration flags. +// +//***************************************************************************** +#define MSG_OBJ_STATUS_MASK (MSG_OBJ_NEW_DATA | MSG_OBJ_DATA_LOST) + +//***************************************************************************** +// +//! This structure used for encapsulating all the items associated with a CAN +//! message object in the CAN controller. +// +//***************************************************************************** +typedef struct +{ + // + //! The CAN message identifier used for 11 or 29 bit identifiers. + // + unsigned long ulMsgID; + + // + //! The message identifier mask used when identifier filtering is enabled. + // + unsigned long ulMsgIDMask; + + // + //! This value holds various status flags and settings specified by + //! tCANObjFlags. + // + unsigned long ulFlags; + + // + //! This value is the number of bytes of data in the message object. + // + unsigned long ulMsgLen; + + // + //! This is a pointer to the message object's data. + // + unsigned char *pucMsgData; +} +tCANMsgObject; + +//***************************************************************************** +// +//! This structure is used for encapsulating the values associated with setting +//! up the bit timing for a CAN controller. The structure is used when calling +//! the CANGetBitTiming and CANSetBitTiming functions. +// +//***************************************************************************** +typedef struct +{ + // + //! This value holds the sum of the Synchronization, Propagation, and Phase + //! Buffer 1 segments, measured in time quanta. The valid values for this + //! setting range from 2 to 16. + // + unsigned int uSyncPropPhase1Seg; + + // + //! This value holds the Phase Buffer 2 segment in time quanta. The valid + //! values for this setting range from 1 to 8. + // + unsigned int uPhase2Seg; + + // + //! This value holds the Resynchronization Jump Width in time quanta. The + //! valid values for this setting range from 1 to 4. + // + unsigned int uSJW; + + // + //! This value holds the CAN_CLK divider used to determine time quanta. + //! The valid values for this setting range from 1 to 1023. + // + unsigned int uQuantumPrescaler; + +} +tCANBitClkParms; + +//***************************************************************************** +// +//! This data type is used to identify the interrupt status register. This is +//! used when calling the a CANIntStatus() function. +// +//***************************************************************************** +typedef enum +{ + // + //! Read the CAN interrupt status information. + // + CAN_INT_STS_CAUSE, + + // + //! Read a message object's interrupt status. + // + CAN_INT_STS_OBJECT +} +tCANIntStsReg; + +//***************************************************************************** +// +//! This data type is used to identify which of the several status registers +//! to read when calling the CANStatusGet() function. +// +//***************************************************************************** +typedef enum +{ + // + //! Read the full CAN controller status. + // + CAN_STS_CONTROL, + + // + //! Read the full 32 bit mask of message objects with a transmit request + //! set. + // + CAN_STS_TXREQUEST, + + // + //! Read the full 32 bit mask of message objects with a new data available. + // + CAN_STS_NEWDAT, + + // + //! Read the full 32 bit mask of message objects that are enabled. + // + CAN_STS_MSGVAL +} +tCANStsReg; + +//***************************************************************************** +// +//! These definitions are used to specify interrupt sources to CANIntEnable() +//! and CANIntDisable(). +// +//***************************************************************************** +typedef enum +{ + // + //! This flag is used to allow a CAN controller to generate error + //! interrupts. + // + CAN_INT_ERROR = 0x00000008, + + // + //! This flag is used to allow a CAN controller to generate status + //! interrupts. + // + CAN_INT_STATUS = 0x00000004, + + // + //! This flag is used to allow a CAN controller to generate any CAN + //! interrupts. If this is not set then no interrupts will be generated by + //! the CAN controller. + // + CAN_INT_MASTER = 0x00000002 +} +tCANIntFlags; + +//***************************************************************************** +// +//! This definition is used to determine the type of message object that will +//! be set up via a call to the CANMessageSet() API. +// +//***************************************************************************** +typedef enum +{ + // + //! Transmit message object. + // + MSG_OBJ_TYPE_TX, + + // + //! Transmit remote request message object + // + MSG_OBJ_TYPE_TX_REMOTE, + + // + //! Receive message object. + // + MSG_OBJ_TYPE_RX, + + // + //! Receive remote request message object. + // + MSG_OBJ_TYPE_RX_REMOTE, + + // + //! Remote frame receive remote, with auto-transmit message object. + // + MSG_OBJ_TYPE_RXTX_REMOTE +} +tMsgObjType; + +//***************************************************************************** +// +//! The following enumeration contains all error or status indicators that +//! can be returned when calling the CANStatusGet() API. +// +//***************************************************************************** +typedef enum +{ + // + //! CAN controller has entered a Bus Off state. + // + CAN_STATUS_BUS_OFF = 0x00000080, + + // + //! CAN controller error level has reached warning level. + // + CAN_STATUS_EWARN = 0x00000040, + + // + //! CAN controller error level has reached error passive level. + // + CAN_STATUS_EPASS = 0x00000020, + + // + //! A message was received successfully since the last read of this status. + // + CAN_STATUS_RXOK = 0x00000010, + + // + //! A message was transmitted successfully since the last read of this + //! status. + // + CAN_STATUS_TXOK = 0x00000008, + + // + //! This is the mask for the last error code field. + // + CAN_STATUS_LEC_MSK = 0x00000007, + + // + //! There was no error. + // + CAN_STATUS_LEC_NONE = 0x00000000, + + // + //! A bit stuffing error has occurred. + // + CAN_STATUS_LEC_STUFF = 0x00000001, + + // + //! A formatting error has occurred. + // + CAN_STATUS_LEC_FORM = 0x00000002, + + // + //! An acknowledge error has occurred. + // + CAN_STATUS_LEC_ACK = 0x00000003, + + // + //! The bus remained a bit level of 1 for longer than is allowed. + // + CAN_STATUS_LEC_BIT1 = 0x00000004, + + // + //! The bus remained a bit level of 0 for longer than is allowed. + // + CAN_STATUS_LEC_BIT0 = 0x00000005, + + // + //! A CRC error has occurred. + // + CAN_STATUS_LEC_CRC = 0x00000006, + + // + //! This is the mask for the CAN Last Error Code (LEC). + // + CAN_STATUS_LEC_MASK = 0x00000007 +} +tCANStatusCtrl; + +//***************************************************************************** +// +// API Function prototypes +// +//***************************************************************************** +extern void CANInit(unsigned long ulBase); +extern void CANEnable(unsigned long ulBase); +extern void CANDisable(unsigned long ulBase); +extern void CANSetBitTiming(unsigned long ulBase, tCANBitClkParms *pClkParms); +extern void CANGetBitTiming(unsigned long ulBase, tCANBitClkParms *pClkParms); +extern unsigned long CANReadReg(unsigned long ulRegAddress); +extern void CANWriteReg(unsigned long ulRegAddress, unsigned long ulRegValue); +extern void CANMessageSet(unsigned long ulBase, unsigned long ulObjID, + tCANMsgObject *pMsgObject, tMsgObjType eMsgType); +extern void CANMessageGet(unsigned long ulBase, unsigned long ulObjID, + tCANMsgObject *pMsgObject, tBoolean bClrPendingInt); +extern unsigned long CANStatusGet(unsigned long ulBase, tCANStsReg eStatusReg); +extern void CANMessageClear(unsigned long ulBase, unsigned long ulObjID); +extern void CANIntRegister(unsigned long ulBase, void (*pfnHandler)(void)); +extern void CANIntEnable(unsigned long ulBase, unsigned long ulIntFlags); +extern void CANIntDisable(unsigned long ulBase, unsigned long ulIntFlags); +extern void CANIntClear(unsigned long ulBase, unsigned long ulIntClr); +extern unsigned long CANIntStatus(unsigned long ulBase, + tCANIntStsReg eIntStsReg); +extern tBoolean CANRetryGet(unsigned long ulBase); +extern void CANRetrySet(unsigned long ulBase, tBoolean bAutoRetry); +extern tBoolean CANErrCntrGet(unsigned long ulBase, unsigned long *pulRxCount, + unsigned long *pulTxCount); +extern long CANGetIntNumber(unsigned long ulBase); +extern void CANReadDataReg(unsigned char *pucData, unsigned long *pulRegister, + int iSize); +extern void CANWriteDataReg(unsigned char *pucData, unsigned long *pulRegister, + int iSize); + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** + +#ifdef __cplusplus +} +#endif + +#endif // __CAN_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/comp.h b/Demo/Common/drivers/LuminaryMicro/comp.h new file mode 100644 index 000000000..be88edba1 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/comp.h @@ -0,0 +1,122 @@ +//***************************************************************************** +// +// comp.h - Prototypes for the analog comparator driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __COMP_H__ +#define __COMP_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to ComparatorConfigure() as the ulConfig +// parameter. For each group (i.e. COMP_TRIG_xxx, COMP_INT_xxx, etc.), one of +// the values may be selected and ORed together will values from the other +// groups. +// +//***************************************************************************** +#define COMP_TRIG_NONE 0x00000000 // No ADC trigger +#define COMP_TRIG_HIGH 0x00000880 // Trigger when high +#define COMP_TRIG_LOW 0x00000800 // Trigger when low +#define COMP_TRIG_FALL 0x00000820 // Trigger on falling edge +#define COMP_TRIG_RISE 0x00000840 // Trigger on rising edge +#define COMP_TRIG_BOTH 0x00000860 // Trigger on both edges +#define COMP_INT_HIGH 0x00000010 // Interrupt when high +#define COMP_INT_LOW 0x00000000 // Interrupt when low +#define COMP_INT_FALL 0x00000004 // Interrupt on falling edge +#define COMP_INT_RISE 0x00000008 // Interrupt on rising edge +#define COMP_INT_BOTH 0x0000000C // Interrupt on both edges +#define COMP_ASRCP_PIN 0x00000000 // Dedicated Comp+ pin +#define COMP_ASRCP_PIN0 0x00000200 // Comp0+ pin +#define COMP_ASRCP_REF 0x00000400 // Internal voltage reference +#ifndef DEPRECATED +#define COMP_OUTPUT_NONE 0x00000000 // No comparator output +#endif +#define COMP_OUTPUT_NORMAL 0x00000000 // Comparator output normal +#define COMP_OUTPUT_INVERT 0x00000002 // Comparator output inverted + +//***************************************************************************** +// +// Values that can be passed to ComparatorSetRef() as the ulRef parameter. +// +//***************************************************************************** +#define COMP_REF_OFF 0x00000000 // Turn off the internal reference +#define COMP_REF_0V 0x00000300 // Internal reference of 0V +#define COMP_REF_0_1375V 0x00000301 // Internal reference of 0.1375V +#define COMP_REF_0_275V 0x00000302 // Internal reference of 0.275V +#define COMP_REF_0_4125V 0x00000303 // Internal reference of 0.4125V +#define COMP_REF_0_55V 0x00000304 // Internal reference of 0.55V +#define COMP_REF_0_6875V 0x00000305 // Internal reference of 0.6875V +#define COMP_REF_0_825V 0x00000306 // Internal reference of 0.825V +#define COMP_REF_0_928125V 0x00000201 // Internal reference of 0.928125V +#define COMP_REF_0_9625V 0x00000307 // Internal reference of 0.9625V +#define COMP_REF_1_03125V 0x00000202 // Internal reference of 1.03125V +#define COMP_REF_1_134375V 0x00000203 // Internal reference of 1.134375V +#define COMP_REF_1_1V 0x00000308 // Internal reference of 1.1V +#define COMP_REF_1_2375V 0x00000309 // Internal reference of 1.2375V +#define COMP_REF_1_340625V 0x00000205 // Internal reference of 1.340625V +#define COMP_REF_1_375V 0x0000030A // Internal reference of 1.375V +#define COMP_REF_1_44375V 0x00000206 // Internal reference of 1.44375V +#define COMP_REF_1_5125V 0x0000030B // Internal reference of 1.5125V +#define COMP_REF_1_546875V 0x00000207 // Internal reference of 1.546875V +#define COMP_REF_1_65V 0x0000030C // Internal reference of 1.65V +#define COMP_REF_1_753125V 0x00000209 // Internal reference of 1.753125V +#define COMP_REF_1_7875V 0x0000030D // Internal reference of 1.7875V +#define COMP_REF_1_85625V 0x0000020A // Internal reference of 1.85625V +#define COMP_REF_1_925V 0x0000030E // Internal reference of 1.925V +#define COMP_REF_1_959375V 0x0000020B // Internal reference of 1.959375V +#define COMP_REF_2_0625V 0x0000030F // Internal reference of 2.0625V +#define COMP_REF_2_165625V 0x0000020D // Internal reference of 2.165625V +#define COMP_REF_2_26875V 0x0000020E // Internal reference of 2.26875V +#define COMP_REF_2_371875V 0x0000020F // Internal reference of 2.371875V + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void ComparatorConfigure(unsigned long ulBase, unsigned long ulComp, + unsigned long ulConfig); +extern void ComparatorRefSet(unsigned long ulBase, unsigned long ulRef); +extern tBoolean ComparatorValueGet(unsigned long ulBase, unsigned long ulComp); +extern void ComparatorIntRegister(unsigned long ulBase, unsigned long ulComp, + void (*pfnHandler)(void)); +extern void ComparatorIntUnregister(unsigned long ulBase, + unsigned long ulComp); +extern void ComparatorIntEnable(unsigned long ulBase, unsigned long ulComp); +extern void ComparatorIntDisable(unsigned long ulBase, unsigned long ulComp); +extern tBoolean ComparatorIntStatus(unsigned long ulBase, unsigned long ulComp, + tBoolean bMasked); +extern void ComparatorIntClear(unsigned long ulBase, unsigned long ulComp); + +#ifdef __cplusplus +} +#endif + +#endif // __COMP_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/cpu.h b/Demo/Common/drivers/LuminaryMicro/cpu.h new file mode 100644 index 000000000..6cabc3393 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/cpu.h @@ -0,0 +1,40 @@ +//***************************************************************************** +// +// cpu.h - Prototypes for the CPU instruction wrapper functions. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __CPU_H__ +#define __CPU_H__ + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern void CPUcpsid(void); +extern void CPUcpsie(void); +extern void CPUwfi(void); + +#endif // __CPU_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/debug.h b/Demo/Common/drivers/LuminaryMicro/debug.h new file mode 100644 index 000000000..0843731af --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/debug.h @@ -0,0 +1,56 @@ +//***************************************************************************** +// +// debug.h - Macros for assisting debug of the driver library. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __DEBUG_H__ +#define __DEBUG_H__ + +//***************************************************************************** +// +// Prototype for the function that is called when an invalid argument is passed +// to an API. This is only used when doing a DEBUG build. +// +//***************************************************************************** +extern void __error__(char *pcFilename, unsigned long ulLine); + +//***************************************************************************** +// +// The ASSERT macro, which does the actual assertion checking. Typically, this +// will be for procedure arguments. +// +//***************************************************************************** +#ifdef DEBUG +#define ASSERT(expr) { \ + if(!(expr)) \ + { \ + __error__(__FILE__, __LINE__); \ + } \ + } +#else +#define ASSERT(expr) +#endif + +#endif // __DEBUG_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/ethernet.h b/Demo/Common/drivers/LuminaryMicro/ethernet.h new file mode 100644 index 000000000..268a5e708 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/ethernet.h @@ -0,0 +1,271 @@ +//***************************************************************************** +// +// ethernet.h - Defines and Macros for the ethernet module. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __ETHERNET_H__ +#define __ETHERNET_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to EthernetConfigSet as the ulConfig value, and +// returned from EthernetConfigGet. +// +//***************************************************************************** +#define ETH_CFG_TS_TSEN 0x010000 // Enable Timestamp (CCP) +#define ETH_CFG_RX_BADCRCDIS 0x000800 // Disable RX BAD CRC Packets +#define ETH_CFG_RX_PRMSEN 0x000400 // Enable RX Promiscuous +#define ETH_CFG_RX_AMULEN 0x000200 // Enable RX Multicast +#define ETH_CFG_TX_DPLXEN 0x000010 // Enable TX Duplex Mode +#define ETH_CFG_TX_CRCEN 0x000004 // Enable TX CRC Generation +#define ETH_CFG_TX_PADEN 0x000002 // Enable TX Padding + +//***************************************************************************** +// +// Values that can be passed to EthernetIntEnable, EthernetIntDisable, and +// EthernetIntClear as the ulIntFlags parameter, and returned from +// EthernetIntStatus. +// +//***************************************************************************** +#define ETH_INT_PHY 0x040 // PHY Event/Interrupt +#define ETH_INT_MDIO 0x020 // Management Transaction +#define ETH_INT_RXER 0x010 // RX Error +#define ETH_INT_RXOF 0x008 // RX FIFO Overrun +#define ETH_INT_TX 0x004 // TX Complete +#define ETH_INT_TXER 0x002 // TX Error +#define ETH_INT_RX 0x001 // RX Complete + +//***************************************************************************** +// +// The following define values that can be passed as register addresses to +// EthernetPHYRead and EthernetPHYWrite. +// +//***************************************************************************** +#define PHY_MR0 0 // Control +#define PHY_MR1 1 // Status +#define PHY_MR2 2 // PHY Identifier 1 +#define PHY_MR3 3 // PHY Identifier 2 +#define PHY_MR4 4 // Auto-Neg. Advertisement +#define PHY_MR5 5 // Auto-Neg. Link Partner Ability +#define PHY_MR6 6 // Auto-Neg. Expansion + // 7-15 Reserved/Not Implemented +#define PHY_MR16 16 // Vendor Specific +#define PHY_MR17 17 // Interrupt Control/Status +#define PHY_MR18 18 // Diagnostic Register +#define PHY_MR19 19 // Transceiver Control + // 20-22 Reserved +#define PHY_MR23 23 // LED Configuration Register +#define PHY_MR24 24 // MDI/MDIX Control Register + // 25-31 Reserved/Not Implemented + +//***************************************************************************** +// +// The following define bit fields in the ETH_MR0 register +// +//***************************************************************************** +#define PHY_MR0_RESET 0x8000 // Reset the PHY +#define PHY_MR0_LOOPBK 0x4000 // TXD to RXD Loopback +#define PHY_MR0_SPEEDSL 0x2000 // Speed Selection +#define PHY_MR0_SPEEDSL_10 0x0000 // Speed Selection 10BASE-T +#define PHY_MR0_SPEEDSL_100 0x2000 // Speed Selection 100BASE-T +#define PHY_MR0_ANEGEN 0x1000 // Auto-Negotiation Enable +#define PHY_MR0_PWRDN 0x0800 // Power Down +#define PHY_MR0_RANEG 0x0200 // Restart Auto-Negotiation +#define PHY_MR0_DUPLEX 0x0100 // Enable full duplex +#define PHY_MR0_DUPLEX_HALF 0x0000 // Enable half duplex mode +#define PHY_MR0_DUPLEX_FULL 0x0100 // Enable full duplex mode + +//***************************************************************************** +// +// The following define bit fields in the ETH_MR1 register +// +//***************************************************************************** +#define PHY_MR1_ANEGC 0x0020 // Auto-Negotiate Complete +#define PHY_MR1_RFAULT 0x0010 // Remove Fault Detected +#define PHY_MR1_LINK 0x0004 // Link Established +#define PHY_MR1_JAB 0x0002 // Jabber Condition Detected + +//***************************************************************************** +// +// The following define bit fields in the ETH_MR17 register +// +//***************************************************************************** +#define PHY_MR17_RXER_IE 0x4000 // Enable Receive Error Interrupt +#define PHY_MR17_LSCHG_IE 0x0400 // Enable Link Status Change Int. +#define PHY_MR17_ANEGCOMP_IE 0x0100 // Enable Auto-Negotiate Cmpl. Int. +#define PHY_MR17_RXER_INT 0x0040 // Receive Error Interrupt +#define PHY_MR17_LSCHG_INT 0x0004 // Link Status Change Interrupt +#define PHY_MR17_ANEGCOMP_INT 0x0001 // Auto-Negotiate Complete Int. + +//***************************************************************************** +// +// The following define bit fields in the ETH_MR18 register +// +//***************************************************************************** +#define PHY_MR18_ANEGF 0x1000 // Auto-Negotiate Failed +#define PHY_MR18_DPLX 0x0800 // Duplex Mode Negotiated +#define PHY_MR18_DPLX_HALF 0x0000 // Half Duplex Mode Negotiated +#define PHY_MR18_DPLX_FULL 0x0800 // Full Duplex Mode Negotiated +#define PHY_MR18_RATE 0x0400 // Rate Negotiated +#define PHY_MR18_RATE_10 0x0000 // Rate Negotiated is 10BASE-T +#define PHY_MR18_RATE_100 0x0400 // Rate Negotiated is 100BASE-TX + +//***************************************************************************** +// +// The following define bit fields in the ETH_MR23 register +// +//***************************************************************************** +#define PHY_MR23_LED1 0x00f0 // LED1 Configuration +#define PHY_MR23_LED1_LINK 0x0000 // LED1 is Link Status +#define PHY_MR23_LED1_RXTX 0x0010 // LED1 is RX or TX Activity +#define PHY_MR23_LED1_TX 0x0020 // LED1 is TX Activity +#define PHY_MR23_LED1_RX 0x0030 // LED1 is RX Activity +#define PHY_MR23_LED1_COL 0x0040 // LED1 is RX Activity +#define PHY_MR23_LED1_100 0x0050 // LED1 is RX Activity +#define PHY_MR23_LED1_10 0x0060 // LED1 is RX Activity +#define PHY_MR23_LED1_DUPLEX 0x0070 // LED1 is RX Activity +#define PHY_MR23_LED1_LINKACT 0x0080 // LED1 is Link Status + Activity +#define PHY_MR23_LED0 0x000f // LED0 Configuration +#define PHY_MR23_LED0_LINK 0x0000 // LED0 is Link Status +#define PHY_MR23_LED0_RXTX 0x0001 // LED0 is RX or TX Activity +#define PHY_MR23_LED0_TX 0x0002 // LED0 is TX Activity +#define PHY_MR23_LED0_RX 0x0003 // LED0 is RX Activity +#define PHY_MR23_LED0_COL 0x0004 // LED0 is RX Activity +#define PHY_MR23_LED0_100 0x0005 // LED0 is RX Activity +#define PHY_MR23_LED0_10 0x0006 // LED0 is RX Activity +#define PHY_MR23_LED0_DUPLEX 0x0007 // LED0 is RX Activity +#define PHY_MR23_LED0_LINKACT 0x0008 // LED0 is Link Status + Activity + +//***************************************************************************** +// +// The following define bit fields in the ETH_MR24 register +// +//***************************************************************************** +#define PHY_MR24_MDIX 0x0020 // Auto-Switching Configuration +#define PHY_MR24_MDIX_NORMAL 0x0000 // Auto-Switching in passthrough +#define PHY_MR23_MDIX_CROSSOVER 0x0020 // Auto-Switching in crossover + +//***************************************************************************** +// +// Helper Macros for Ethernet Processing +// +//***************************************************************************** +// +// htonl/ntohl - big endian/little endian byte swapping macros for +// 32-bit (long) values +// +//***************************************************************************** +#ifndef htonl + #define htonl(a) \ + ((((a) >> 24) & 0x000000ff) | \ + (((a) >> 8) & 0x0000ff00) | \ + (((a) << 8) & 0x00ff0000) | \ + (((a) << 24) & 0xff000000)) +#endif + +#ifndef ntohl + #define ntohl(a) htonl((a)) +#endif + +//***************************************************************************** +// +// htons/ntohs - big endian/little endian byte swapping macros for +// 16-bit (short) values +// +//***************************************************************************** +#ifndef htons + #define htons(a) \ + ((((a) >> 8) & 0x00ff) | \ + (((a) << 8) & 0xff00)) +#endif + +#ifndef ntohs + #define ntohs(a) htons((a)) +#endif + +//***************************************************************************** +// +// API Function prototypes +// +//***************************************************************************** +extern void EthernetInitExpClk(unsigned long ulBase, unsigned long ulEthClk); +extern void EthernetConfigSet(unsigned long ulBase, unsigned long ulConfig); +extern unsigned long EthernetConfigGet(unsigned long ulBase); +extern void EthernetMACAddrSet(unsigned long ulBase, + unsigned char *pucMACAddr); +extern void EthernetMACAddrGet(unsigned long ulBase, + unsigned char *pucMACAddr); +extern void EthernetEnable(unsigned long ulBase); +extern void EthernetDisable(unsigned long ulBase); +extern tBoolean EthernetPacketAvail(unsigned long ulBase); +extern tBoolean EthernetSpaceAvail(unsigned long ulBase); +extern long EthernetPacketGetNonBlocking(unsigned long ulBase, + unsigned char *pucBuf, + long lBufLen); +extern long EthernetPacketGet(unsigned long ulBase, unsigned char *pucBuf, + long lBufLen); +extern long EthernetPacketPutNonBlocking(unsigned long ulBase, + unsigned char *pucBuf, + long lBufLen); +extern long EthernetPacketPut(unsigned long ulBase, unsigned char *pucBuf, + long lBufLen); +extern void EthernetIntRegister(unsigned long ulBase, + void (*pfnHandler)(void)); +extern void EthernetIntUnregister(unsigned long ulBase); +extern void EthernetIntEnable(unsigned long ulBase, unsigned long ulIntFlags); +extern void EthernetIntDisable(unsigned long ulBase, unsigned long ulIntFlags); +extern unsigned long EthernetIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void EthernetIntClear(unsigned long ulBase, unsigned long ulIntFlags); +extern void EthernetPHYWrite(unsigned long ulBase, unsigned char ucRegAddr, + unsigned long ulData); +extern unsigned long EthernetPHYRead(unsigned long ulBase, + unsigned char ucRegAddr); + +//***************************************************************************** +// +// Several Ethernet APIs have been renamed, with the original function name +// being deprecated. These defines provide backward compatibility. +// +//***************************************************************************** +#ifndef DEPRECATED +#include "sysctl.h" +#define EthernetInit(a) \ + EthernetInitExpClk(a, SysCtlClockGet()) +#define EthernetPacketNonBlockingGet(a, b, c) \ + EthernetPacketGetNonBlocking(a, b, c) +#define EthernetPacketNonBlockingPut(a, b, c) \ + EthernetPacketPutNonBlocking(a, b, c) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // __ETHERNET_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/gpio.h b/Demo/Common/drivers/LuminaryMicro/gpio.h new file mode 100644 index 000000000..67cd90bc0 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/gpio.h @@ -0,0 +1,140 @@ +//***************************************************************************** +// +// gpio.h - Defines and Macros for GPIO API. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __GPIO_H__ +#define __GPIO_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// The following values define the bit field for the ucPins argument to several +// of the APIs. +// +//***************************************************************************** +#define GPIO_PIN_0 0x00000001 // GPIO pin 0 +#define GPIO_PIN_1 0x00000002 // GPIO pin 1 +#define GPIO_PIN_2 0x00000004 // GPIO pin 2 +#define GPIO_PIN_3 0x00000008 // GPIO pin 3 +#define GPIO_PIN_4 0x00000010 // GPIO pin 4 +#define GPIO_PIN_5 0x00000020 // GPIO pin 5 +#define GPIO_PIN_6 0x00000040 // GPIO pin 6 +#define GPIO_PIN_7 0x00000080 // GPIO pin 7 + +//***************************************************************************** +// +// Values that can be passed to GPIODirModeSet as the ulPinIO parameter, and +// returned from GPIODirModeGet. +// +//***************************************************************************** +#define GPIO_DIR_MODE_IN 0x00000000 // Pin is a GPIO input +#define GPIO_DIR_MODE_OUT 0x00000001 // Pin is a GPIO output +#define GPIO_DIR_MODE_HW 0x00000002 // Pin is a peripheral function + +//***************************************************************************** +// +// Values that can be passed to GPIOIntTypeSet as the ulIntType parameter, and +// returned from GPIOIntTypeGet. +// +//***************************************************************************** +#define GPIO_FALLING_EDGE 0x00000000 // Interrupt on falling edge +#define GPIO_RISING_EDGE 0x00000004 // Interrupt on rising edge +#define GPIO_BOTH_EDGES 0x00000001 // Interrupt on both edges +#define GPIO_LOW_LEVEL 0x00000002 // Interrupt on low level +#define GPIO_HIGH_LEVEL 0x00000007 // Interrupt on high level + +//***************************************************************************** +// +// Values that can be passed to GPIOPadConfigSet as the ulStrength parameter, +// and returned by GPIOPadConfigGet in the *pulStrength parameter. +// +//***************************************************************************** +#define GPIO_STRENGTH_2MA 0x00000001 // 2mA drive strength +#define GPIO_STRENGTH_4MA 0x00000002 // 4mA drive strength +#define GPIO_STRENGTH_8MA 0x00000004 // 8mA drive strength +#define GPIO_STRENGTH_8MA_SC 0x0000000C // 8mA drive with slew rate control + +//***************************************************************************** +// +// Values that can be passed to GPIOPadConfigSet as the ulPadType parameter, +// and returned by GPIOPadConfigGet in the *pulPadType parameter. +// +//***************************************************************************** +#define GPIO_PIN_TYPE_STD 0x00000008 // Push-pull +#define GPIO_PIN_TYPE_STD_WPU 0x0000000A // Push-pull with weak pull-up +#define GPIO_PIN_TYPE_STD_WPD 0x0000000C // Push-pull with weak pull-down +#define GPIO_PIN_TYPE_OD 0x00000009 // Open-drain +#define GPIO_PIN_TYPE_OD_WPU 0x0000000B // Open-drain with weak pull-up +#define GPIO_PIN_TYPE_OD_WPD 0x0000000D // Open-drain with weak pull-down +#define GPIO_PIN_TYPE_ANALOG 0x00000000 // Analog comparator + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins, + unsigned long ulPinIO); +extern unsigned long GPIODirModeGet(unsigned long ulPort, unsigned char ucPin); +extern void GPIOIntTypeSet(unsigned long ulPort, unsigned char ucPins, + unsigned long ulIntType); +extern unsigned long GPIOIntTypeGet(unsigned long ulPort, unsigned char ucPin); +extern void GPIOPadConfigSet(unsigned long ulPort, unsigned char ucPins, + unsigned long ulStrength, + unsigned long ulPadType); +extern void GPIOPadConfigGet(unsigned long ulPort, unsigned char ucPin, + unsigned long *pulStrength, + unsigned long *pulPadType); +extern void GPIOPinIntEnable(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinIntDisable(unsigned long ulPort, unsigned char ucPins); +extern long GPIOPinIntStatus(unsigned long ulPort, tBoolean bMasked); +extern void GPIOPinIntClear(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPortIntRegister(unsigned long ulPort, + void (*pfIntHandler)(void)); +extern void GPIOPortIntUnregister(unsigned long ulPort); +extern long GPIOPinRead(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinWrite(unsigned long ulPort, unsigned char ucPins, + unsigned char ucVal); +extern void GPIOPinTypeCAN(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeComparator(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeGPIOInput(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeGPIOOutput(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeI2C(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypePWM(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeQEI(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeSSI(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeTimer(unsigned long ulPort, unsigned char ucPins); +extern void GPIOPinTypeUART(unsigned long ulPort, unsigned char ucPins); + +#ifdef __cplusplus +} +#endif + +#endif // __GPIO_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hibernate.h b/Demo/Common/drivers/LuminaryMicro/hibernate.h new file mode 100644 index 000000000..ed9387352 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hibernate.h @@ -0,0 +1,119 @@ +//***************************************************************************** +// +// hibernate.h - API definition for the Hibernation module. +// +// Copyright (c) 2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HIBERNATE_H__ +#define __HIBERNATE_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Macros needed for selecting the clock source for HibernateClockSelect() +// +//***************************************************************************** +#define HIBERNATE_CLOCK_SEL_RAW 0x04 +#define HIBERNATE_CLOCK_SEL_DIV128 0x00 + +//***************************************************************************** +// +// Macros need to configure wake events for HibernateWakeSet() +// +//***************************************************************************** +#define HIBERNATE_WAKE_PIN 0x10 +#define HIBERNATE_WAKE_RTC 0x08 + +//***************************************************************************** +// +// Macros needed to configure low battery detect for HibernateLowBatSet() +// +//***************************************************************************** +#define HIBERNATE_LOW_BAT_DETECT 0x20 +#define HIBERNATE_LOW_BAT_ABORT 0xA0 + +//***************************************************************************** +// +// Macros defining interrupt source bits for the interrupt functions. +// +//***************************************************************************** +#define HIBERNATE_INT_PIN_WAKE 0x08 +#define HIBERNATE_INT_LOW_BAT 0x04 +#define HIBERNATE_INT_RTC_MATCH_0 0x01 +#define HIBERNATE_INT_RTC_MATCH_1 0x02 + +//***************************************************************************** +// +// API Function prototypes +// +//***************************************************************************** +extern void HibernateEnableExpClk(unsigned long ulHibClk); +extern void HibernateDisable(void); +extern void HibernateClockSelect(unsigned long ulClockInput); +extern void HibernateRTCEnable(void); +extern void HibernateRTCDisable(void); +extern void HibernateWakeSet(unsigned long ulWakeFlags); +extern unsigned long HibernateWakeGet(void); +extern void HibernateLowBatSet(unsigned long ulLowBatFlags); +extern unsigned long HibernateLowBatGet(void); +extern void HibernateRTCSet(unsigned long ulRTCValue); +extern unsigned long HibernateRTCGet(void); +extern void HibernateRTCMatch0Set(unsigned long ulMatch); +extern unsigned long HibernateRTCMatch0Get(void); +extern void HibernateRTCMatch1Set(unsigned long ulMatch); +extern unsigned long HibernateRTCMatch1Get(void); +extern void HibernateRTCTrimSet(unsigned long ulTrim); +extern unsigned long HibernateRTCTrimGet(void); +extern void HibernateDataSet(unsigned long *pulData, unsigned long ulCount); +extern void HibernateDataGet(unsigned long *pulData, unsigned long ulCount); +extern void HibernateRequest(void); +extern void HibernateIntEnable(unsigned long ulIntFlags); +extern void HibernateIntDisable(unsigned long ulIntFlags); +extern void HibernateIntRegister(void (*pfnHandler)(void)); +extern void HibernateIntUnregister(void); +extern unsigned long HibernateIntStatus(tBoolean bMasked); +extern void HibernateIntClear(unsigned long ulIntFlags); +extern unsigned int HibernateIsActive(void); + +//***************************************************************************** +// +// Several Hibernate module APIs have been renamed, with the original function +// name being deprecated. These defines provide backward compatibility. +// +//***************************************************************************** +#ifndef DEPRECATED +#include "sysctl.h" +#define HibernateEnable(a) \ + HibernateEnableExpClk(a, SysCtlClockGet()) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // __HIBERNATE_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_adc.h b/Demo/Common/drivers/LuminaryMicro/hw_adc.h new file mode 100644 index 000000000..6ee79f46e --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_adc.h @@ -0,0 +1,343 @@ +//***************************************************************************** +// +// hw_adc.h - Macros used when accessing the ADC hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_ADC_H__ +#define __HW_ADC_H__ + +//***************************************************************************** +// +// The following define the offsets of the ADC registers. +// +//***************************************************************************** +#define ADC_O_ACTSS 0x00000000 // Active sample register +#define ADC_O_RIS 0x00000004 // Raw interrupt status register +#define ADC_O_IM 0x00000008 // Interrupt mask register +#define ADC_O_ISC 0x0000000C // Interrupt status/clear register +#define ADC_O_OSTAT 0x00000010 // Overflow status register +#define ADC_O_EMUX 0x00000014 // Event multiplexer select reg. +#define ADC_O_USTAT 0x00000018 // Underflow status register +#define ADC_O_SSPRI 0x00000020 // Channel priority register +#define ADC_O_PSSI 0x00000028 // Processor sample initiate reg. +#define ADC_O_SAC 0x00000030 // Sample Averaging Control reg. +#define ADC_O_SSMUX0 0x00000040 // Multiplexer select 0 register +#define ADC_O_SSCTL0 0x00000044 // Sample sequence control 0 reg. +#define ADC_O_SSFIFO0 0x00000048 // Result FIFO 0 register +#define ADC_O_SSFSTAT0 0x0000004C // FIFO 0 status register +#define ADC_O_SSMUX1 0x00000060 // Multiplexer select 1 register +#define ADC_O_SSCTL1 0x00000064 // Sample sequence control 1 reg. +#define ADC_O_SSFIFO1 0x00000068 // Result FIFO 1 register +#define ADC_O_SSFSTAT1 0x0000006C // FIFO 1 status register +#define ADC_O_SSMUX2 0x00000080 // Multiplexer select 2 register +#define ADC_O_SSCTL2 0x00000084 // Sample sequence control 2 reg. +#define ADC_O_SSFIFO2 0x00000088 // Result FIFO 2 register +#define ADC_O_SSFSTAT2 0x0000008C // FIFO 2 status register +#define ADC_O_SSMUX3 0x000000A0 // Multiplexer select 3 register +#define ADC_O_SSCTL3 0x000000A4 // Sample sequence control 3 reg. +#define ADC_O_SSFIFO3 0x000000A8 // Result FIFO 3 register +#define ADC_O_SSFSTAT3 0x000000AC // FIFO 3 status register +#define ADC_O_TMLB 0x00000100 // Test mode loopback register + +//***************************************************************************** +// +// The following define the offsets of the ADC sequence registers. +// +//***************************************************************************** +#define ADC_O_SEQ 0x00000040 // Offset to the first sequence +#define ADC_O_SEQ_STEP 0x00000020 // Increment to the next sequence +#define ADC_O_X_SSMUX 0x00000000 // Multiplexer select register +#define ADC_O_X_SSCTL 0x00000004 // Sample sequence control register +#define ADC_O_X_SSFIFO 0x00000008 // Result FIFO register +#define ADC_O_X_SSFSTAT 0x0000000C // FIFO status register + +//***************************************************************************** +// +// The following define the bit fields in the ADC_ACTSS register. +// +//***************************************************************************** +#define ADC_ACTSS_ASEN3 0x00000008 // Sample sequence 3 enable +#define ADC_ACTSS_ASEN2 0x00000004 // Sample sequence 2 enable +#define ADC_ACTSS_ASEN1 0x00000002 // Sample sequence 1 enable +#define ADC_ACTSS_ASEN0 0x00000001 // Sample sequence 0 enable + +//***************************************************************************** +// +// The following define the bit fields in the ADC_RIS register. +// +//***************************************************************************** +#define ADC_RIS_INR3 0x00000008 // Sample sequence 3 interrupt +#define ADC_RIS_INR2 0x00000004 // Sample sequence 2 interrupt +#define ADC_RIS_INR1 0x00000002 // Sample sequence 1 interrupt +#define ADC_RIS_INR0 0x00000001 // Sample sequence 0 interrupt + +//***************************************************************************** +// +// The following define the bit fields in the ADC_IM register. +// +//***************************************************************************** +#define ADC_IM_MASK3 0x00000008 // Sample sequence 3 mask +#define ADC_IM_MASK2 0x00000004 // Sample sequence 2 mask +#define ADC_IM_MASK1 0x00000002 // Sample sequence 1 mask +#define ADC_IM_MASK0 0x00000001 // Sample sequence 0 mask + +//***************************************************************************** +// +// The following define the bit fields in the ADC_ISC register. +// +//***************************************************************************** +#define ADC_ISC_IN3 0x00000008 // Sample sequence 3 interrupt +#define ADC_ISC_IN2 0x00000004 // Sample sequence 2 interrupt +#define ADC_ISC_IN1 0x00000002 // Sample sequence 1 interrupt +#define ADC_ISC_IN0 0x00000001 // Sample sequence 0 interrupt + +//***************************************************************************** +// +// The following define the bit fields in the ADC_OSTAT register. +// +//***************************************************************************** +#define ADC_OSTAT_OV3 0x00000008 // Sample sequence 3 overflow +#define ADC_OSTAT_OV2 0x00000004 // Sample sequence 2 overflow +#define ADC_OSTAT_OV1 0x00000002 // Sample sequence 1 overflow +#define ADC_OSTAT_OV0 0x00000001 // Sample sequence 0 overflow + +//***************************************************************************** +// +// The following define the bit fields in the ADC_EMUX register. +// +//***************************************************************************** +#define ADC_EMUX_EM3_MASK 0x0000F000 // Event mux 3 mask +#define ADC_EMUX_EM3_PROCESSOR 0x00000000 // Processor event +#define ADC_EMUX_EM3_COMP0 0x00001000 // Analog comparator 0 event +#define ADC_EMUX_EM3_COMP1 0x00002000 // Analog comparator 1 event +#define ADC_EMUX_EM3_COMP2 0x00003000 // Analog comparator 2 event +#define ADC_EMUX_EM3_EXTERNAL 0x00004000 // External event +#define ADC_EMUX_EM3_TIMER 0x00005000 // Timer event +#define ADC_EMUX_EM3_PWM0 0x00006000 // PWM0 event +#define ADC_EMUX_EM3_PWM1 0x00007000 // PWM1 event +#define ADC_EMUX_EM3_PWM2 0x00008000 // PWM2 event +#define ADC_EMUX_EM3_ALWAYS 0x0000F000 // Always event +#define ADC_EMUX_EM2_MASK 0x00000F00 // Event mux 2 mask +#define ADC_EMUX_EM2_PROCESSOR 0x00000000 // Processor event +#define ADC_EMUX_EM2_COMP0 0x00000100 // Analog comparator 0 event +#define ADC_EMUX_EM2_COMP1 0x00000200 // Analog comparator 1 event +#define ADC_EMUX_EM2_COMP2 0x00000300 // Analog comparator 2 event +#define ADC_EMUX_EM2_EXTERNAL 0x00000400 // External event +#define ADC_EMUX_EM2_TIMER 0x00000500 // Timer event +#define ADC_EMUX_EM2_PWM0 0x00000600 // PWM0 event +#define ADC_EMUX_EM2_PWM1 0x00000700 // PWM1 event +#define ADC_EMUX_EM2_PWM2 0x00000800 // PWM2 event +#define ADC_EMUX_EM2_ALWAYS 0x00000F00 // Always event +#define ADC_EMUX_EM1_MASK 0x000000F0 // Event mux 1 mask +#define ADC_EMUX_EM1_PROCESSOR 0x00000000 // Processor event +#define ADC_EMUX_EM1_COMP0 0x00000010 // Analog comparator 0 event +#define ADC_EMUX_EM1_COMP1 0x00000020 // Analog comparator 1 event +#define ADC_EMUX_EM1_COMP2 0x00000030 // Analog comparator 2 event +#define ADC_EMUX_EM1_EXTERNAL 0x00000040 // External event +#define ADC_EMUX_EM1_TIMER 0x00000050 // Timer event +#define ADC_EMUX_EM1_PWM0 0x00000060 // PWM0 event +#define ADC_EMUX_EM1_PWM1 0x00000070 // PWM1 event +#define ADC_EMUX_EM1_PWM2 0x00000080 // PWM2 event +#define ADC_EMUX_EM1_ALWAYS 0x000000F0 // Always event +#define ADC_EMUX_EM0_MASK 0x0000000F // Event mux 0 mask +#define ADC_EMUX_EM0_PROCESSOR 0x00000000 // Processor event +#define ADC_EMUX_EM0_COMP0 0x00000001 // Analog comparator 0 event +#define ADC_EMUX_EM0_COMP1 0x00000002 // Analog comparator 1 event +#define ADC_EMUX_EM0_COMP2 0x00000003 // Analog comparator 2 event +#define ADC_EMUX_EM0_EXTERNAL 0x00000004 // External event +#define ADC_EMUX_EM0_TIMER 0x00000005 // Timer event +#define ADC_EMUX_EM0_PWM0 0x00000006 // PWM0 event +#define ADC_EMUX_EM0_PWM1 0x00000007 // PWM1 event +#define ADC_EMUX_EM0_PWM2 0x00000008 // PWM2 event +#define ADC_EMUX_EM0_ALWAYS 0x0000000F // Always event +#define ADC_EMUX_EM0_SHIFT 0 // The shift for the first event +#define ADC_EMUX_EM1_SHIFT 4 // The shift for the second event +#define ADC_EMUX_EM2_SHIFT 8 // The shift for the third event +#define ADC_EMUX_EM3_SHIFT 12 // The shift for the fourth event + +//***************************************************************************** +// +// The following define the bit fields in the ADC_USTAT register. +// +//***************************************************************************** +#define ADC_USTAT_UV3 0x00000008 // Sample sequence 3 underflow +#define ADC_USTAT_UV2 0x00000004 // Sample sequence 2 underflow +#define ADC_USTAT_UV1 0x00000002 // Sample sequence 1 underflow +#define ADC_USTAT_UV0 0x00000001 // Sample sequence 0 underflow + +//***************************************************************************** +// +// The following define the bit fields in the ADC_SSPRI register. +// +//***************************************************************************** +#define ADC_SSPRI_SS3_MASK 0x00003000 // Sequencer 3 priority mask +#define ADC_SSPRI_SS3_1ST 0x00000000 // First priority +#define ADC_SSPRI_SS3_2ND 0x00001000 // Second priority +#define ADC_SSPRI_SS3_3RD 0x00002000 // Third priority +#define ADC_SSPRI_SS3_4TH 0x00003000 // Fourth priority +#define ADC_SSPRI_SS2_MASK 0x00000300 // Sequencer 2 priority mask +#define ADC_SSPRI_SS2_1ST 0x00000000 // First priority +#define ADC_SSPRI_SS2_2ND 0x00000100 // Second priority +#define ADC_SSPRI_SS2_3RD 0x00000200 // Third priority +#define ADC_SSPRI_SS2_4TH 0x00000300 // Fourth priority +#define ADC_SSPRI_SS1_MASK 0x00000030 // Sequencer 1 priority mask +#define ADC_SSPRI_SS1_1ST 0x00000000 // First priority +#define ADC_SSPRI_SS1_2ND 0x00000010 // Second priority +#define ADC_SSPRI_SS1_3RD 0x00000020 // Third priority +#define ADC_SSPRI_SS1_4TH 0x00000030 // Fourth priority +#define ADC_SSPRI_SS0_MASK 0x00000003 // Sequencer 0 priority mask +#define ADC_SSPRI_SS0_1ST 0x00000000 // First priority +#define ADC_SSPRI_SS0_2ND 0x00000001 // Second priority +#define ADC_SSPRI_SS0_3RD 0x00000002 // Third priority +#define ADC_SSPRI_SS0_4TH 0x00000003 // Fourth priority + +//***************************************************************************** +// +// The following define the bit fields in the ADC_PSSI register. +// +//***************************************************************************** +#define ADC_PSSI_SS3 0x00000008 // Trigger sample sequencer 3 +#define ADC_PSSI_SS2 0x00000004 // Trigger sample sequencer 2 +#define ADC_PSSI_SS1 0x00000002 // Trigger sample sequencer 1 +#define ADC_PSSI_SS0 0x00000001 // Trigger sample sequencer 0 + +//***************************************************************************** +// +// The following define the bit fields in the ADC_SAC register. +// +//***************************************************************************** +#define ADC_SAC_AVG_OFF 0x00000000 // No hardware oversampling +#define ADC_SAC_AVG_2X 0x00000001 // 2x hardware oversampling +#define ADC_SAC_AVG_4X 0x00000002 // 4x hardware oversampling +#define ADC_SAC_AVG_8X 0x00000003 // 8x hardware oversampling +#define ADC_SAC_AVG_16X 0x00000004 // 16x hardware oversampling +#define ADC_SAC_AVG_32X 0x00000005 // 32x hardware oversampling +#define ADC_SAC_AVG_64X 0x00000006 // 64x hardware oversampling + +//***************************************************************************** +// +// The following define the bit fields in the ADC_SSMUX0, ADC_SSMUX1, +// ADC_SSMUX2, and ADC_SSMUX3 registers. Not all fields are present in all +// registers. +// +//***************************************************************************** +#define ADC_SSMUX_MUX7_MASK 0x70000000 // 8th mux select mask +#define ADC_SSMUX_MUX6_MASK 0x07000000 // 7th mux select mask +#define ADC_SSMUX_MUX5_MASK 0x00700000 // 6th mux select mask +#define ADC_SSMUX_MUX4_MASK 0x00070000 // 5th mux select mask +#define ADC_SSMUX_MUX3_MASK 0x00007000 // 4th mux select mask +#define ADC_SSMUX_MUX2_MASK 0x00000700 // 3rd mux select mask +#define ADC_SSMUX_MUX1_MASK 0x00000070 // 2nd mux select mask +#define ADC_SSMUX_MUX0_MASK 0x00000007 // 1st mux select mask +#define ADC_SSMUX_MUX7_SHIFT 28 +#define ADC_SSMUX_MUX6_SHIFT 24 +#define ADC_SSMUX_MUX5_SHIFT 20 +#define ADC_SSMUX_MUX4_SHIFT 16 +#define ADC_SSMUX_MUX3_SHIFT 12 +#define ADC_SSMUX_MUX2_SHIFT 8 +#define ADC_SSMUX_MUX1_SHIFT 4 +#define ADC_SSMUX_MUX0_SHIFT 0 + +//***************************************************************************** +// +// The following define the bit fields in the ADC_SSCTL0, ADC_SSCTL1, +// ADC_SSCTL2, and ADC_SSCTL3 registers. Not all fields are present in all +// registers. +// +//***************************************************************************** +#define ADC_SSCTL_TS7 0x80000000 // 8th temperature sensor select +#define ADC_SSCTL_IE7 0x40000000 // 8th interrupt enable +#define ADC_SSCTL_END7 0x20000000 // 8th sequence end select +#define ADC_SSCTL_D7 0x10000000 // 8th differential select +#define ADC_SSCTL_TS6 0x08000000 // 7th temperature sensor select +#define ADC_SSCTL_IE6 0x04000000 // 7th interrupt enable +#define ADC_SSCTL_END6 0x02000000 // 7th sequence end select +#define ADC_SSCTL_D6 0x01000000 // 7th differential select +#define ADC_SSCTL_TS5 0x00800000 // 6th temperature sensor select +#define ADC_SSCTL_IE5 0x00400000 // 6th interrupt enable +#define ADC_SSCTL_END5 0x00200000 // 6th sequence end select +#define ADC_SSCTL_D5 0x00100000 // 6th differential select +#define ADC_SSCTL_TS4 0x00080000 // 5th temperature sensor select +#define ADC_SSCTL_IE4 0x00040000 // 5th interrupt enable +#define ADC_SSCTL_END4 0x00020000 // 5th sequence end select +#define ADC_SSCTL_D4 0x00010000 // 5th differential select +#define ADC_SSCTL_TS3 0x00008000 // 4th temperature sensor select +#define ADC_SSCTL_IE3 0x00004000 // 4th interrupt enable +#define ADC_SSCTL_END3 0x00002000 // 4th sequence end select +#define ADC_SSCTL_D3 0x00001000 // 4th differential select +#define ADC_SSCTL_TS2 0x00000800 // 3rd temperature sensor select +#define ADC_SSCTL_IE2 0x00000400 // 3rd interrupt enable +#define ADC_SSCTL_END2 0x00000200 // 3rd sequence end select +#define ADC_SSCTL_D2 0x00000100 // 3rd differential select +#define ADC_SSCTL_TS1 0x00000080 // 2nd temperature sensor select +#define ADC_SSCTL_IE1 0x00000040 // 2nd interrupt enable +#define ADC_SSCTL_END1 0x00000020 // 2nd sequence end select +#define ADC_SSCTL_D1 0x00000010 // 2nd differential select +#define ADC_SSCTL_TS0 0x00000008 // 1st temperature sensor select +#define ADC_SSCTL_IE0 0x00000004 // 1st interrupt enable +#define ADC_SSCTL_END0 0x00000002 // 1st sequence end select +#define ADC_SSCTL_D0 0x00000001 // 1st differential select + +//***************************************************************************** +// +// The following define the bit fields in the ADC_SSFIFO0, ADC_SSFIFO1, +// ADC_SSFIFO2, and ADC_SSFIFO3 registers. +// +//***************************************************************************** +#define ADC_SSFIFO_DATA_MASK 0x000003FF // Sample data +#define ADC_SSFIFO_DATA_SHIFT 0 + +//***************************************************************************** +// +// The following define the bit fields in the ADC_SSFSTAT0, ADC_SSFSTAT1, +// ADC_SSFSTAT2, and ADC_SSFSTAT3 registers. +// +//***************************************************************************** +#define ADC_SSFSTAT_FULL 0x00001000 // FIFO is full +#define ADC_SSFSTAT_EMPTY 0x00000100 // FIFO is empty +#define ADC_SSFSTAT_HPTR 0x000000F0 // FIFO head pointer +#define ADC_SSFSTAT_TPTR 0x0000000F // FIFO tail pointer + +//***************************************************************************** +// +// The following define the bit fields in the ADC_TMLB register. +// +//***************************************************************************** +#define ADC_TMLB_LB 0x00000001 // Loopback control signals + +//***************************************************************************** +// +// The following define the bit fields in the loopback ADC data. +// +//***************************************************************************** +#define ADC_LB_CNT_MASK 0x000003C0 // Sample counter mask +#define ADC_LB_CONT 0x00000020 // Continuation sample +#define ADC_LB_DIFF 0x00000010 // Differential sample +#define ADC_LB_TS 0x00000008 // Temperature sensor sample +#define ADC_LB_MUX_MASK 0x00000007 // Input channel number mask +#define ADC_LB_CNT_SHIFT 6 // Sample counter shift +#define ADC_LB_MUX_SHIFT 0 // Input channel number shift + +#endif // __HW_ADC_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_can.h b/Demo/Common/drivers/LuminaryMicro/hw_can.h new file mode 100644 index 000000000..9fe03a66e --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_can.h @@ -0,0 +1,379 @@ +//***************************************************************************** +// +// hw_can.h - Defines and macros used when accessing the can. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_CAN_H__ +#define __HW_CAN_H__ + +//***************************************************************************** +// +// The following define the offsets of the can registers. +// +//***************************************************************************** +#define CAN_O_CTL 0x00000000 // Control register +#define CAN_O_STS 0x00000004 // Status register +#define CAN_O_ERR 0x00000008 // Error register +#define CAN_O_BIT 0x0000000C // Bit Timing register +#define CAN_O_INT 0x00000010 // Interrupt register +#define CAN_O_TST 0x00000014 // Test register +#define CAN_O_BRPE 0x00000018 // Baud Rate Prescaler register +#define CAN_O_IF1CRQ 0x00000020 // Interface 1 Command Request reg. +#define CAN_O_IF1CMSK 0x00000024 // Interface 1 Command Mask reg. +#define CAN_O_IF1MSK1 0x00000028 // Interface 1 Mask 1 register +#define CAN_O_IF1MSK2 0x0000002C // Interface 1 Mask 2 register +#define CAN_O_IF1ARB1 0x00000030 // Interface 1 Arbitration 1 reg. +#define CAN_O_IF1ARB2 0x00000034 // Interface 1 Arbitration 2 reg. +#define CAN_O_IF1MCTL 0x00000038 // Interface 1 Message Control reg. +#define CAN_O_IF1DA1 0x0000003C // Interface 1 DataA 1 register +#define CAN_O_IF1DA2 0x00000040 // Interface 1 DataA 2 register +#define CAN_O_IF1DB1 0x00000044 // Interface 1 DataB 1 register +#define CAN_O_IF1DB2 0x00000048 // Interface 1 DataB 2 register +#define CAN_O_IF2CRQ 0x00000080 // Interface 2 Command Request reg. +#define CAN_O_IF2CMSK 0x00000084 // Interface 2 Command Mask reg. +#define CAN_O_IF2MSK1 0x00000088 // Interface 2 Mask 1 register +#define CAN_O_IF2MSK2 0x0000008C // Interface 2 Mask 2 register +#define CAN_O_IF2ARB1 0x00000090 // Interface 2 Arbitration 1 reg. +#define CAN_O_IF2ARB2 0x00000094 // Interface 2 Arbitration 2 reg. +#define CAN_O_IF2MCTL 0x00000098 // Interface 2 Message Control reg. +#define CAN_O_IF2DA1 0x0000009C // Interface 2 DataA 1 register +#define CAN_O_IF2DA2 0x000000A0 // Interface 2 DataA 2 register +#define CAN_O_IF2DB1 0x000000A4 // Interface 2 DataB 1 register +#define CAN_O_IF2DB2 0x000000A8 // Interface 2 DataB 2 register +#define CAN_O_TXRQ1 0x00000100 // Transmission Request 1 register +#define CAN_O_TXRQ2 0x00000104 // Transmission Request 2 register +#define CAN_O_NWDA1 0x00000120 // New Data 1 register +#define CAN_O_NWDA2 0x00000124 // New Data 2 register +#define CAN_O_MSGINT1 0x00000140 // Intr. Pending in Msg Obj 1 reg. +#define CAN_O_MSGINT2 0x00000144 // Intr. Pending in Msg Obj 2 reg. +#define CAN_O_MSGVAL1 0x00000160 // Message Valid in Msg Obj 1 reg. +#define CAN_O_MSGVAL2 0x00000164 // Message Valid in Msg Obj 2 reg. + +//***************************************************************************** +// +// The following define the reset values of the can registers. +// +//***************************************************************************** +#define CAN_RV_CTL 0x00000001 +#define CAN_RV_STS 0x00000000 +#define CAN_RV_ERR 0x00000000 +#define CAN_RV_BIT 0x00002301 +#define CAN_RV_INT 0x00000000 +#define CAN_RV_TST 0x00000000 +#define CAN_RV_BRPE 0x00000000 +#define CAN_RV_IF1CRQ 0x00000001 +#define CAN_RV_IF1CMSK 0x00000000 +#define CAN_RV_IF1MSK1 0x0000FFFF +#define CAN_RV_IF1MSK2 0x0000FFFF +#define CAN_RV_IF1ARB1 0x00000000 +#define CAN_RV_IF1ARB2 0x00000000 +#define CAN_RV_IF1MCTL 0x00000000 +#define CAN_RV_IF1DA1 0x00000000 +#define CAN_RV_IF1DA2 0x00000000 +#define CAN_RV_IF1DB1 0x00000000 +#define CAN_RV_IF1DB2 0x00000000 +#define CAN_RV_IF2CRQ 0x00000001 +#define CAN_RV_IF2CMSK 0x00000000 +#define CAN_RV_IF2MSK1 0x0000FFFF +#define CAN_RV_IF2MSK2 0x0000FFFF +#define CAN_RV_IF2ARB1 0x00000000 +#define CAN_RV_IF2ARB2 0x00000000 +#define CAN_RV_IF2MCTL 0x00000000 +#define CAN_RV_IF2DA1 0x00000000 +#define CAN_RV_IF2DA2 0x00000000 +#define CAN_RV_IF2DB1 0x00000000 +#define CAN_RV_IF2DB2 0x00000000 +#define CAN_RV_TXRQ1 0x00000000 +#define CAN_RV_TXRQ2 0x00000000 +#define CAN_RV_NWDA1 0x00000000 +#define CAN_RV_NWDA2 0x00000000 +#define CAN_RV_MSGINT1 0x00000000 +#define CAN_RV_MSGINT2 0x00000000 +#define CAN_RV_MSGVAL1 0x00000000 +#define CAN_RV_MSGVAL2 0x00000000 + +//***************************************************************************** +// +// The following define the bit fields in the CAN_CTL register. +// +//***************************************************************************** +#define CAN_CTL_TEST 0x00000080 // Test mode enable +#define CAN_CTL_CCE 0x00000040 // Configuration change enable +#define CAN_CTL_DAR 0x00000020 // Disable automatic retransmission +#define CAN_CTL_EIE 0x00000008 // Error interrupt enable +#define CAN_CTL_SIE 0x00000004 // Status change interrupt enable +#define CAN_CTL_IE 0x00000002 // Module interrupt enable +#define CAN_CTL_INIT 0x00000001 // Initialization + +//***************************************************************************** +// +// The following define the bit fields in the CAN_STS register. +// +//***************************************************************************** +#define CAN_STS_BOFF 0x00000080 // Bus Off status +#define CAN_STS_EWARN 0x00000040 // Error Warning status +#define CAN_STS_EPASS 0x00000020 // Error Passive status +#define CAN_STS_RXOK 0x00000010 // Received Message Successful +#define CAN_STS_TXOK 0x00000008 // Transmitted Message Successful +#define CAN_STS_LEC_MSK 0x00000007 // Last Error Code +#define CAN_STS_LEC_NONE 0x00000000 // No error +#define CAN_STS_LEC_STUFF 0x00000001 // Stuff error +#define CAN_STS_LEC_FORM 0x00000002 // Form(at) error +#define CAN_STS_LEC_ACK 0x00000003 // Ack error +#define CAN_STS_LEC_BIT1 0x00000004 // Bit 1 error +#define CAN_STS_LEC_BIT0 0x00000005 // Bit 0 error +#define CAN_STS_LEC_CRC 0x00000006 // CRC error + +//***************************************************************************** +// +// The following define the bit fields in the CAN_ERR register. +// +//***************************************************************************** +#define CAN_ERR_RP 0x00008000 // Receive error passive status +#define CAN_ERR_REC_MASK 0x00007F00 // Receive error counter status +#define CAN_ERR_REC_SHIFT 8 // Receive error counter bit pos +#define CAN_ERR_TEC_MASK 0x000000FF // Transmit error counter status +#define CAN_ERR_TEC_SHIFT 0 // Transmit error counter bit pos + +//***************************************************************************** +// +// The following define the bit fields in the CAN_BIT register. +// +//***************************************************************************** +#define CAN_BIT_TSEG2 0x00007000 // Time segment after sample point +#define CAN_BIT_TSEG1 0x00000F00 // Time segment before sample point +#define CAN_BIT_SJW 0x000000C0 // (Re)Synchronization jump width +#define CAN_BIT_BRP 0x0000003F // Baud rate prescaler + +//***************************************************************************** +// +// The following define the bit fields in the CAN_INT register. +// +//***************************************************************************** +#define CAN_INT_INTID_MSK 0x0000FFFF // Interrupt Identifier +#define CAN_INT_INTID_NONE 0x00000000 // No Interrupt Pending +#define CAN_INT_INTID_STATUS 0x00008000 // Status Interrupt + +//***************************************************************************** +// +// The following define the bit fields in the CAN_TST register. +// +//***************************************************************************** +#define CAN_TST_RX 0x00000080 // CAN_RX pin status +#define CAN_TST_TX_MSK 0x00000060 // Overide control of CAN_TX pin +#define CAN_TST_TX_CANCTL 0x00000000 // CAN core controls CAN_TX +#define CAN_TST_TX_SAMPLE 0x00000020 // Sample Point on CAN_TX +#define CAN_TST_TX_DOMINANT 0x00000040 // Dominant value on CAN_TX +#define CAN_TST_TX_RECESSIVE 0x00000060 // Recessive value on CAN_TX +#define CAN_TST_LBACK 0x00000010 // Loop back mode +#define CAN_TST_SILENT 0x00000008 // Silent mode +#define CAN_TST_BASIC 0x00000004 // Basic mode + +//***************************************************************************** +// +// The following define the bit fields in the CAN_BRPE register. +// +//***************************************************************************** +#define CAN_BRPE_BRPE 0x0000000F // Baud rate prescaler extension + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1CRQ and CAN_IF1CRQ +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFCRQ_BUSY 0x00008000 // Busy flag status +#define CAN_IFCRQ_MNUM_MSK 0x0000003F // Message Number + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1CMSK and CAN_IF2CMSK +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFCMSK_WRNRD 0x00000080 // Write, not Read +#define CAN_IFCMSK_MASK 0x00000040 // Access Mask Bits +#define CAN_IFCMSK_ARB 0x00000020 // Access Arbitration Bits +#define CAN_IFCMSK_CONTROL 0x00000010 // Access Control Bits +#define CAN_IFCMSK_CLRINTPND 0x00000008 // Clear interrupt pending Bit +#define CAN_IFCMSK_TXRQST 0x00000004 // Access Tx request bit (WRNRD=1) +#define CAN_IFCMSK_NEWDAT 0x00000004 // Access New Data bit (WRNRD=0) +#define CAN_IFCMSK_DATAA 0x00000002 // DataA access - bytes 0 to 3 +#define CAN_IFCMSK_DATAB 0x00000001 // DataB access - bytes 4 to 7 + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1MSK1 and CAN_IF2MSK1 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFMSK1_MSK 0x0000FFFF // Identifier Mask + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1MSK2 and CAN_IF2MSK2 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFMSK2_MXTD 0x00008000 // Mask extended identifier +#define CAN_IFMSK2_MDIR 0x00004000 // Mask message direction +#define CAN_IFMSK2_MSK 0x00001FFF // Mask identifier + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1ARB1 and CAN_IF2ARB1 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFARB1_ID 0x0000FFFF // Identifier + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1ARB2 and CAN_IF2ARB2 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFARB2_MSGVAL 0x00008000 // Message valid +#define CAN_IFARB2_XTD 0x00004000 // Extended identifier +#define CAN_IFARB2_DIR 0x00002000 // Message direction +#define CAN_IFARB2_ID 0x00001FFF // Message identifier + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1MCTL and CAN_IF2MCTL +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFMCTL_NEWDAT 0x00008000 // New Data +#define CAN_IFMCTL_MSGLST 0x00004000 // Message lost +#define CAN_IFMCTL_INTPND 0x00002000 // Interrupt pending +#define CAN_IFMCTL_UMASK 0x00001000 // Use acceptance mask +#define CAN_IFMCTL_TXIE 0x00000800 // Transmit interrupt enable +#define CAN_IFMCTL_RXIE 0x00000400 // Receive interrupt enable +#define CAN_IFMCTL_RMTEN 0x00000200 // Remote enable +#define CAN_IFMCTL_TXRQST 0x00000100 // Transmit request +#define CAN_IFMCTL_EOB 0x00000080 // End of buffer +#define CAN_IFMCTL_DLC 0x0000000F // Data length code + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1DA1 and CAN_IF2DA1 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFDA1_DATA 0x0000FFFF // Data - bytes 1 and 0 + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1DA2 and CAN_IF2DA2 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFDA2_DATA 0x0000FFFF // Data - bytes 3 and 2 + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1DB1 and CAN_IF2DB1 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFDB1_DATA 0x0000FFFF // Data - bytes 5 and 4 + +//***************************************************************************** +// +// The following define the bit fields in the CAN_IF1DB2 and CAN_IF2DB2 +// registers. +// Note: All bits may not be available in all registers +// +//***************************************************************************** +#define CAN_IFDB2_DATA 0x0000FFFF // Data - bytes 7 and 6 + +//***************************************************************************** +// +// The following define the bit fields in the CAN_TXRQ1 register. +// +//***************************************************************************** +#define CAN_TXRQ1_TXRQST 0x0000FFFF // Transmission Request Bits + +//***************************************************************************** +// +// The following define the bit fields in the CAN_TXRQ2 register. +// +//***************************************************************************** +#define CAN_TXRQ2_TXRQST 0x0000FFFF // Transmission Request Bits + +//***************************************************************************** +// +// The following define the bit fields in the CAN_NWDA1 register. +// +//***************************************************************************** +#define CAN_NWDA1_NEWDATA 0x0000FFFF // New Data Bits + +//***************************************************************************** +// +// The following define the bit fields in the CAN_NWDA2 register. +// +//***************************************************************************** +#define CAN_NWDA2_NEWDATA 0x0000FFFF // New Data Bits + +//***************************************************************************** +// +// The following define the bit fields in the CAN_MSGINT1 register. +// +//***************************************************************************** +#define CAN_MSGINT1_INTPND 0x0000FFFF // Interrupt Pending Bits + +//***************************************************************************** +// +// The following define the bit fields in the CAN_MSGINT2 register. +// +//***************************************************************************** +#define CAN_MSGINT2_INTPND 0x0000FFFF // Interrupt Pending Bits + +//***************************************************************************** +// +// The following define the bit fields in the CAN_MSGVAL1 register. +// +//***************************************************************************** +#define CAN_MSGVAL1_MSGVAL 0x0000FFFF // Message Valid Bits + +//***************************************************************************** +// +// The following define the bit fields in the CAN_MSGVAL2 register. +// +//***************************************************************************** +#define CAN_MSGVAL2_MSGVAL 0x0000FFFF // Message Valid Bits + +#endif // __HW_CAN_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_comp.h b/Demo/Common/drivers/LuminaryMicro/hw_comp.h new file mode 100644 index 000000000..2299016f4 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_comp.h @@ -0,0 +1,118 @@ +//***************************************************************************** +// +// hw_comp.h - Macros used when accessing the comparator hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_COMP_H__ +#define __HW_COMP_H__ + +//***************************************************************************** +// +// The following define the offsets of the comparator registers. +// +//***************************************************************************** +#define COMP_O_MIS 0x00000000 // Interrupt status register +#define COMP_O_RIS 0x00000004 // Raw interrupt status register +#define COMP_O_INTEN 0x00000008 // Interrupt enable register +#define COMP_O_REFCTL 0x00000010 // Reference voltage control reg. +#define COMP_O_ACSTAT0 0x00000020 // Comp0 status register +#define COMP_O_ACCTL0 0x00000024 // Comp0 control register +#define COMP_O_ACSTAT1 0x00000040 // Comp1 status register +#define COMP_O_ACCTL1 0x00000044 // Comp1 control register +#define COMP_O_ACSTAT2 0x00000060 // Comp2 status register +#define COMP_O_ACCTL2 0x00000064 // Comp2 control register + +//***************************************************************************** +// +// The following define the bit fields in the COMP_MIS, COMP_RIS, and +// COMP_INTEN registers. +// +//***************************************************************************** +#define COMP_INT_2 0x00000004 // Comp2 interrupt +#define COMP_INT_1 0x00000002 // Comp1 interrupt +#define COMP_INT_0 0x00000001 // Comp0 interrupt + +//***************************************************************************** +// +// The following define the bit fields in the COMP_REFCTL register. +// +//***************************************************************************** +#define COMP_REFCTL_EN 0x00000200 // Reference voltage enable +#define COMP_REFCTL_RNG 0x00000100 // Reference voltage range +#define COMP_REFCTL_VREF_MASK 0x0000000F // Reference voltage select mask +#define COMP_REFCTL_VREF_SHIFT 0 + +//***************************************************************************** +// +// The following define the bit fields in the COMP_ACSTAT0, COMP_ACSTAT1, and +// COMP_ACSTAT2 registers. +// +//***************************************************************************** +#define COMP_ACSTAT_OVAL 0x00000002 // Comparator output value + +//***************************************************************************** +// +// The following define the bit fields in the COMP_ACCTL0, COMP_ACCTL1, and +// COMP_ACCTL2 registers. +// +//***************************************************************************** +#define COMP_ACCTL_TMASK 0x00000800 // Trigger enable +#define COMP_ACCTL_ASRCP_MASK 0x00000600 // Vin+ source select mask +#define COMP_ACCTL_ASRCP_PIN 0x00000000 // Dedicated Comp+ pin +#define COMP_ACCTL_ASRCP_PIN0 0x00000200 // Comp0+ pin +#define COMP_ACCTL_ASRCP_REF 0x00000400 // Internal voltage reference +#define COMP_ACCTL_ASRCP_RES 0x00000600 // Reserved +#define COMP_ACCTL_OEN 0x00000100 // Comparator output enable +#define COMP_ACCTL_TSVAL 0x00000080 // Trigger polarity select +#define COMP_ACCTL_TSEN_MASK 0x00000060 // Trigger sense mask +#define COMP_ACCTL_TSEN_LEVEL 0x00000000 // Trigger is level sense +#define COMP_ACCTL_TSEN_FALL 0x00000020 // Trigger is falling edge +#define COMP_ACCTL_TSEN_RISE 0x00000040 // Trigger is rising edge +#define COMP_ACCTL_TSEN_BOTH 0x00000060 // Trigger is both edges +#define COMP_ACCTL_ISLVAL 0x00000010 // Interrupt polarity select +#define COMP_ACCTL_ISEN_MASK 0x0000000C // Interrupt sense mask +#define COMP_ACCTL_ISEN_LEVEL 0x00000000 // Interrupt is level sense +#define COMP_ACCTL_ISEN_FALL 0x00000004 // Interrupt is falling edge +#define COMP_ACCTL_ISEN_RISE 0x00000008 // Interrupt is rising edge +#define COMP_ACCTL_ISEN_BOTH 0x0000000C // Interrupt is both edges +#define COMP_ACCTL_CINV 0x00000002 // Comparator output invert + +//***************************************************************************** +// +// The following define the reset values for the comparator registers. +// +//***************************************************************************** +#define COMP_RV_MIS 0x00000000 // Interrupt status register +#define COMP_RV_RIS 0x00000000 // Raw interrupt status register +#define COMP_RV_INTEN 0x00000000 // Interrupt enable register +#define COMP_RV_REFCTL 0x00000000 // Reference voltage control reg. +#define COMP_RV_ACSTAT0 0x00000000 // Comp0 status register +#define COMP_RV_ACCTL0 0x00000000 // Comp0 control register +#define COMP_RV_ACSTAT1 0x00000000 // Comp1 status register +#define COMP_RV_ACCTL1 0x00000000 // Comp1 control register +#define COMP_RV_ACSTAT2 0x00000000 // Comp2 status register +#define COMP_RV_ACCTL2 0x00000000 // Comp2 control register + +#endif // __HW_COMP_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_ethernet.h b/Demo/Common/drivers/LuminaryMicro/hw_ethernet.h new file mode 100644 index 000000000..d25c415f0 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_ethernet.h @@ -0,0 +1,213 @@ +//***************************************************************************** +// +// hw_ethernet.h - Macros used when accessing the ethernet hardware. +// +// Copyright (c) 2006-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_ETHERNET_H__ +#define __HW_ETHERNET_H__ + +//***************************************************************************** +// +// The following define the offsets of the MAC registers in the Ethernet +// Controller. +// +//***************************************************************************** +#define MAC_O_IS 0x00000000 // Interrupt Status Register +#define MAC_O_IACK 0x00000000 // Interrupt Acknowledge Register +#define MAC_O_IM 0x00000004 // Interrupt Mask Register +#define MAC_O_RCTL 0x00000008 // Receive Control Register +#define MAC_O_TCTL 0x0000000C // Transmit Control Register +#define MAC_O_DATA 0x00000010 // Data Register +#define MAC_O_IA0 0x00000014 // Individual Address Register 0 +#define MAC_O_IA1 0x00000018 // Individual Address Register 1 +#define MAC_O_THR 0x0000001C // Threshold Register +#define MAC_O_MCTL 0x00000020 // Management Control Register +#define MAC_O_MDV 0x00000024 // Management Divider Register +#define MAC_O_MADD 0x00000028 // Management Address Register +#define MAC_O_MTXD 0x0000002C // Management Transmit Data Reg +#define MAC_O_MRXD 0x00000030 // Management Receive Data Reg +#define MAC_O_NP 0x00000034 // Number of Packets Register +#define MAC_O_TR 0x00000038 // Transmission Request Register +#define MAC_O_TS 0x0000003C // Timer Support Register + +//***************************************************************************** +// +// The following define the reset values of the MAC registers. +// +//***************************************************************************** +#define MAC_RV_IS 0x00000000 +#define MAC_RV_IACK 0x00000000 +#define MAC_RV_IM 0x0000007F +#define MAC_RV_RCTL 0x00000008 +#define MAC_RV_TCTL 0x00000000 +#define MAC_RV_DATA 0x00000000 +#define MAC_RV_IA0 0x00000000 +#define MAC_RV_IA1 0x00000000 +#define MAC_RV_THR 0x0000003F +#define MAC_RV_MCTL 0x00000000 +#define MAC_RV_MDV 0x00000080 +#define MAC_RV_MADD 0x00000000 +#define MAC_RV_MTXD 0x00000000 +#define MAC_RV_MRXD 0x00000000 +#define MAC_RV_NP 0x00000000 +#define MAC_RV_TR 0x00000000 + +//***************************************************************************** +// +// The following define the bit fields in the MAC_IS register. +// +//***************************************************************************** +#define MAC_IS_PHYINT 0x00000040 // PHY Interrupt +#define MAC_IS_MDINT 0x00000020 // MDI Transaction Complete +#define MAC_IS_RXER 0x00000010 // RX Error +#define MAC_IS_FOV 0x00000008 // RX FIFO Overrun +#define MAC_IS_TXEMP 0x00000004 // TX FIFO Empy +#define MAC_IS_TXER 0x00000002 // TX Error +#define MAC_IS_RXINT 0x00000001 // RX Packet Available + +//***************************************************************************** +// +// The following define the bit fields in the MAC_IACK register. +// +//***************************************************************************** +#define MAC_IACK_PHYINT 0x00000040 // Clear PHY Interrupt +#define MAC_IACK_MDINT 0x00000020 // Clear MDI Transaction Complete +#define MAC_IACK_RXER 0x00000010 // Clear RX Error +#define MAC_IACK_FOV 0x00000008 // Clear RX FIFO Overrun +#define MAC_IACK_TXEMP 0x00000004 // Clear TX FIFO Empy +#define MAC_IACK_TXER 0x00000002 // Clear TX Error +#define MAC_IACK_RXINT 0x00000001 // Clear RX Packet Available + +//***************************************************************************** +// +// The following define the bit fields in the MAC_IM register. +// +//***************************************************************************** +#define MAC_IM_PHYINTM 0x00000040 // Mask PHY Interrupt +#define MAC_IM_MDINTM 0x00000020 // Mask MDI Transaction Complete +#define MAC_IM_RXERM 0x00000010 // Mask RX Error +#define MAC_IM_FOVM 0x00000008 // Mask RX FIFO Overrun +#define MAC_IM_TXEMPM 0x00000004 // Mask TX FIFO Empy +#define MAC_IM_TXERM 0x00000002 // Mask TX Error +#define MAC_IM_RXINTM 0x00000001 // Mask RX Packet Available + +//***************************************************************************** +// +// The following define the bit fields in the MAC_RCTL register. +// +//***************************************************************************** +#define MAC_RCTL_RSTFIFO 0x00000010 // Clear the Receive FIFO +#define MAC_RCTL_BADCRC 0x00000008 // Reject Packets With Bad CRC +#define MAC_RCTL_PRMS 0x00000004 // Enable Promiscuous Mode +#define MAC_RCTL_AMUL 0x00000002 // Enable Multicast Packets +#define MAC_RCTL_RXEN 0x00000001 // Enable Ethernet Receiver + +//***************************************************************************** +// +// The following define the bit fields in the MAC_TCTL register. +// +//***************************************************************************** +#define MAC_TCTL_DUPLEX 0x00000010 // Enable Duplex mode +#define MAC_TCTL_CRC 0x00000004 // Enable CRC Generation +#define MAC_TCTL_PADEN 0x00000002 // Enable Automatic Padding +#define MAC_TCTL_TXEN 0x00000001 // Enable Ethernet Transmitter + +//***************************************************************************** +// +// The following define the bit fields in the MAC_IA0 register. +// +//***************************************************************************** +#define MAC_IA0_MACOCT4 0xFF000000 // 4th Octet of MAC address +#define MAC_IA0_MACOCT3 0x00FF0000 // 3rd Octet of MAC address +#define MAC_IA0_MACOCT2 0x0000FF00 // 2nd Octet of MAC address +#define MAC_IA0_MACOCT1 0x000000FF // 1st Octet of MAC address + +//***************************************************************************** +// +// The following define the bit fields in the MAC_IA1 register. +// +//***************************************************************************** +#define MAC_IA1_MACOCT6 0x0000FF00 // 6th Octet of MAC address +#define MAC_IA1_MACOCT5 0x000000FF // 5th Octet of MAC address + +//***************************************************************************** +// +// The following define the bit fields in the MAC_TXTH register. +// +//***************************************************************************** +#define MAC_THR_THRESH 0x0000003F // Transmit Threshold Value + +//***************************************************************************** +// +// The following define the bit fields in the MAC_MCTL register. +// +//***************************************************************************** +#define MAC_MCTL_REGADR 0x000000F8 // Address for Next MII Transaction +#define MAC_MCTL_WRITE 0x00000002 // Next MII Transaction is Write +#define MAC_MCTL_START 0x00000001 // Start MII Transaction + +//***************************************************************************** +// +// The following define the bit fields in the MAC_MDV register. +// +//***************************************************************************** +#define MAC_MDV_DIV 0x000000FF // Clock Divider for MDC for TX + +//***************************************************************************** +// +// The following define the bit fields in the MAC_MTXD register. +// +//***************************************************************************** +#define MAC_MTXD_MDTX 0x0000FFFF // Data for Next MII Transaction + +//***************************************************************************** +// +// The following define the bit fields in the MAC_MRXD register. +// +//***************************************************************************** +#define MAC_MRXD_MDRX 0x0000FFFF // Data Read from Last MII Trans. + +//***************************************************************************** +// +// The following define the bit fields in the MAC_NP register. +// +//***************************************************************************** +#define MAC_NP_NPR 0x0000003F // Number of RX Frames in FIFO + +//***************************************************************************** +// +// The following define the bit fields in the MAC_TXRQ register. +// +//***************************************************************************** +#define MAC_TR_NEWTX 0x00000001 // Start an Ethernet Transmission + +//***************************************************************************** +// +// The following define the bit fields in the MAC_TS register. +// +//***************************************************************************** +#define MAC_TS_TSEN 0x00000001 // Enable Timestamp Logic + +#endif // __HW_ETHERNET_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_flash.h b/Demo/Common/drivers/LuminaryMicro/hw_flash.h new file mode 100644 index 000000000..e4f147bce --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_flash.h @@ -0,0 +1,147 @@ +//***************************************************************************** +// +// hw_flash.h - Macros used when accessing the flash controller. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_FLASH_H__ +#define __HW_FLASH_H__ + +//***************************************************************************** +// +// The following define the offsets of the FLASH registers. +// +//***************************************************************************** +#define FLASH_FMA 0x400FD000 // Memory address register +#define FLASH_FMD 0x400FD004 // Memory data register +#define FLASH_FMC 0x400FD008 // Memory control register +#define FLASH_FCRIS 0x400FD00c // Raw interrupt status register +#define FLASH_FCIM 0x400FD010 // Interrupt mask register +#define FLASH_FCMISC 0x400FD014 // Interrupt status register +#define FLASH_FMPRE 0x400FE130 // FLASH read protect register +#define FLASH_FMPPE 0x400FE134 // FLASH program protect register +#define FLASH_USECRL 0x400FE140 // uSec reload register +#define FLASH_FMPRE0 0x400FE200 // FLASH read protect register 0 +#define FLASH_FMPRE1 0x400FE204 // FLASH read protect register 1 +#define FLASH_FMPRE2 0x400FE208 // FLASH read protect register 2 +#define FLASH_FMPRE3 0x400FE20C // FLASH read protect register 3 +#define FLASH_FMPPE0 0x400FE400 // FLASH program protect register 0 +#define FLASH_FMPPE1 0x400FE404 // FLASH program protect register 1 +#define FLASH_FMPPE2 0x400FE408 // FLASH program protect register 2 +#define FLASH_FMPPE3 0x400FE40C // FLASH program protect register 3 + +//***************************************************************************** +// +// The following define the bit fields in the FLASH_FMC register. +// +//***************************************************************************** +#define FLASH_FMC_WRKEY_MASK 0xFFFF0000 // FLASH write key mask +#define FLASH_FMC_WRKEY 0xA4420000 // FLASH write key +#define FLASH_FMC_COMT 0x00000008 // Commit user register +#define FLASH_FMC_MERASE 0x00000004 // Mass erase FLASH +#define FLASH_FMC_ERASE 0x00000002 // Erase FLASH page +#define FLASH_FMC_WRITE 0x00000001 // Write FLASH word + +//***************************************************************************** +// +// The following define the bit fields in the FLASH_FCRIS register. +// +//***************************************************************************** +#define FLASH_FCRIS_PROGRAM 0x00000002 // Programming status +#define FLASH_FCRIS_ACCESS 0x00000001 // Invalid access status + +//***************************************************************************** +// +// The following define the bit fields in the FLASH_FCIM register. +// +//***************************************************************************** +#define FLASH_FCIM_PROGRAM 0x00000002 // Programming mask +#define FLASH_FCIM_ACCESS 0x00000001 // Invalid access mask + +//***************************************************************************** +// +// The following define the bit fields in the FLASH_FMIS register. +// +//***************************************************************************** +#define FLASH_FCMISC_PROGRAM 0x00000002 // Programming status +#define FLASH_FCMISC_ACCESS 0x00000001 // Invalid access status + +//***************************************************************************** +// +// The following define the bit fields in the FLASH_FMPRE and FLASH_FMPPE +// registers. +// +//***************************************************************************** +#define FLASH_FMP_BLOCK_31 0x80000000 // Enable for block 31 +#define FLASH_FMP_BLOCK_30 0x40000000 // Enable for block 30 +#define FLASH_FMP_BLOCK_29 0x20000000 // Enable for block 29 +#define FLASH_FMP_BLOCK_28 0x10000000 // Enable for block 28 +#define FLASH_FMP_BLOCK_27 0x08000000 // Enable for block 27 +#define FLASH_FMP_BLOCK_26 0x04000000 // Enable for block 26 +#define FLASH_FMP_BLOCK_25 0x02000000 // Enable for block 25 +#define FLASH_FMP_BLOCK_24 0x01000000 // Enable for block 24 +#define FLASH_FMP_BLOCK_23 0x00800000 // Enable for block 23 +#define FLASH_FMP_BLOCK_22 0x00400000 // Enable for block 22 +#define FLASH_FMP_BLOCK_21 0x00200000 // Enable for block 21 +#define FLASH_FMP_BLOCK_20 0x00100000 // Enable for block 20 +#define FLASH_FMP_BLOCK_19 0x00080000 // Enable for block 19 +#define FLASH_FMP_BLOCK_18 0x00040000 // Enable for block 18 +#define FLASH_FMP_BLOCK_17 0x00020000 // Enable for block 17 +#define FLASH_FMP_BLOCK_16 0x00010000 // Enable for block 16 +#define FLASH_FMP_BLOCK_15 0x00008000 // Enable for block 15 +#define FLASH_FMP_BLOCK_14 0x00004000 // Enable for block 14 +#define FLASH_FMP_BLOCK_13 0x00002000 // Enable for block 13 +#define FLASH_FMP_BLOCK_12 0x00001000 // Enable for block 12 +#define FLASH_FMP_BLOCK_11 0x00000800 // Enable for block 11 +#define FLASH_FMP_BLOCK_10 0x00000400 // Enable for block 10 +#define FLASH_FMP_BLOCK_9 0x00000200 // Enable for block 9 +#define FLASH_FMP_BLOCK_8 0x00000100 // Enable for block 8 +#define FLASH_FMP_BLOCK_7 0x00000080 // Enable for block 7 +#define FLASH_FMP_BLOCK_6 0x00000040 // Enable for block 6 +#define FLASH_FMP_BLOCK_5 0x00000020 // Enable for block 5 +#define FLASH_FMP_BLOCK_4 0x00000010 // Enable for block 4 +#define FLASH_FMP_BLOCK_3 0x00000008 // Enable for block 3 +#define FLASH_FMP_BLOCK_2 0x00000004 // Enable for block 2 +#define FLASH_FMP_BLOCK_1 0x00000002 // Enable for block 1 +#define FLASH_FMP_BLOCK_0 0x00000001 // Enable for block 0 + +//***************************************************************************** +// +// The following define the bit fields in the FLASH_USECRL register. +// +//***************************************************************************** +#define FLASH_USECRL_MASK 0x000000FF // Clock per uSec +#define FLASH_USECRL_SHIFT 0 + +//***************************************************************************** +// +// The erase size is the size of the FLASH block that is erased by an erase +// operation, and the protect size is the size of the FLASH block that is +// protected by each protection register. +// +//***************************************************************************** +#define FLASH_ERASE_SIZE 0x00000400 +#define FLASH_PROTECT_SIZE 0x00000800 + +#endif // __HW_FLASH_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_gpio.h b/Demo/Common/drivers/LuminaryMicro/hw_gpio.h new file mode 100644 index 000000000..1b6c15a88 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_gpio.h @@ -0,0 +1,115 @@ +//***************************************************************************** +// +// hw_gpio.h - Defines and Macros for GPIO hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_GPIO_H__ +#define __HW_GPIO_H__ + +//***************************************************************************** +// +// GPIO Register Offsets. +// +//***************************************************************************** +#define GPIO_O_DATA 0x00000000 // Data register. +#define GPIO_O_DIR 0x00000400 // Data direction register. +#define GPIO_O_IS 0x00000404 // Interrupt sense register. +#define GPIO_O_IBE 0x00000408 // Interrupt both edges register. +#define GPIO_O_IEV 0x0000040C // Interrupt event register. +#define GPIO_O_IM 0x00000410 // Interrupt mask register. +#define GPIO_O_RIS 0x00000414 // Raw interrupt status register. +#define GPIO_O_MIS 0x00000418 // Masked interrupt status reg. +#define GPIO_O_ICR 0x0000041C // Interrupt clear register. +#define GPIO_O_AFSEL 0x00000420 // Mode control select register. +#define GPIO_O_DR2R 0x00000500 // 2ma drive select register. +#define GPIO_O_DR4R 0x00000504 // 4ma drive select register. +#define GPIO_O_DR8R 0x00000508 // 8ma drive select register. +#define GPIO_O_ODR 0x0000050C // Open drain select register. +#define GPIO_O_PUR 0x00000510 // Pull up select register. +#define GPIO_O_PDR 0x00000514 // Pull down select register. +#define GPIO_O_SLR 0x00000518 // Slew rate control enable reg. +#define GPIO_O_DEN 0x0000051C // Digital input enable register. +#define GPIO_O_LOCK 0x00000520 // Lock register. +#define GPIO_O_CR 0x00000524 // Commit register. +#define GPIO_O_PeriphID4 0x00000FD0 // +#define GPIO_O_PeriphID5 0x00000FD4 // +#define GPIO_O_PeriphID6 0x00000FD8 // +#define GPIO_O_PeriphID7 0x00000FDC // +#define GPIO_O_PeriphID0 0x00000FE0 // +#define GPIO_O_PeriphID1 0x00000FE4 // +#define GPIO_O_PeriphID2 0x00000FE8 // +#define GPIO_O_PeriphID3 0x00000FEC // +#define GPIO_O_PCellID0 0x00000FF0 // +#define GPIO_O_PCellID1 0x00000FF4 // +#define GPIO_O_PCellID2 0x00000FF8 // +#define GPIO_O_PCellID3 0x00000FFC // + +//***************************************************************************** +// +// The following define the bit fields in the GPIO_LOCK register. +// +//***************************************************************************** +#define GPIO_LOCK_LOCKED 0x00000001 // GPIO_CR register is locked +#define GPIO_LOCK_UNLOCKED 0x00000000 // GPIO_CR register is unlocked +#define GPIO_LOCK_KEY 0x1ACCE551 // Unlocks the GPIO_CR register + +//***************************************************************************** +// +// GPIO Register reset values. +// +//***************************************************************************** +#define GPIO_RV_DATA 0x00000000 // Data register reset value. +#define GPIO_RV_DIR 0x00000000 // Data direction reg RV. +#define GPIO_RV_IS 0x00000000 // Interrupt sense reg RV. +#define GPIO_RV_IBE 0x00000000 // Interrupt both edges reg RV. +#define GPIO_RV_IEV 0x00000000 // Interrupt event reg RV. +#define GPIO_RV_IM 0x00000000 // Interrupt mask reg RV. +#define GPIO_RV_RIS 0x00000000 // Raw interrupt status reg RV. +#define GPIO_RV_MIS 0x00000000 // Masked interrupt status reg RV. +#define GPIO_RV_IC 0x00000000 // Interrupt clear reg RV. +#define GPIO_RV_AFSEL 0x00000000 // Mode control select reg RV. +#define GPIO_RV_DR2R 0x000000FF // 2ma drive select reg RV. +#define GPIO_RV_DR4R 0x00000000 // 4ma drive select reg RV. +#define GPIO_RV_DR8R 0x00000000 // 8ma drive select reg RV. +#define GPIO_RV_ODR 0x00000000 // Open drain select reg RV. +#define GPIO_RV_PUR 0x000000FF // Pull up select reg RV. +#define GPIO_RV_PDR 0x00000000 // Pull down select reg RV. +#define GPIO_RV_SLR 0x00000000 // Slew rate control enable reg RV. +#define GPIO_RV_DEN 0x000000FF // Digital input enable reg RV. +#define GPIO_RV_LOCK 0x00000001 // Lock register RV. +#define GPIO_RV_PeriphID4 0x00000000 // +#define GPIO_RV_PeriphID5 0x00000000 // +#define GPIO_RV_PeriphID6 0x00000000 // +#define GPIO_RV_PeriphID7 0x00000000 // +#define GPIO_RV_PeriphID0 0x00000061 // +#define GPIO_RV_PeriphID1 0x00000010 // +#define GPIO_RV_PeriphID2 0x00000004 // +#define GPIO_RV_PeriphID3 0x00000000 // +#define GPIO_RV_PCellID0 0x0000000D // +#define GPIO_RV_PCellID1 0x000000F0 // +#define GPIO_RV_PCellID2 0x00000005 // +#define GPIO_RV_PCellID3 0x000000B1 // + +#endif // __HW_GPIO_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_hibernate.h b/Demo/Common/drivers/LuminaryMicro/hw_hibernate.h new file mode 100644 index 000000000..a363cceff --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_hibernate.h @@ -0,0 +1,145 @@ +//***************************************************************************** +// +// hw_hibernate.h - Defines and Macros for the Hibernation module. +// +// Copyright (c) 2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_HIBERNATE_H__ +#define __HW_HIBERNATE_H__ + +//***************************************************************************** +// +// The following define the addresses of the hibernation module registers. +// +//***************************************************************************** +#define HIB_RTCC 0x400fc000 // Hibernate RTC counter +#define HIB_RTCM0 0x400fc004 // Hibernate RTC match 0 +#define HIB_RTCM1 0x400fc008 // Hibernate RTC match 1 +#define HIB_RTCLD 0x400fc00C // Hibernate RTC load +#define HIB_CTL 0x400fc010 // Hibernate RTC control +#define HIB_IM 0x400fc014 // Hibernate interrupt mask +#define HIB_RIS 0x400fc018 // Hibernate raw interrupt status +#define HIB_MIS 0x400fc01C // Hibernate masked interrupt stat +#define HIB_IC 0x400fc020 // Hibernate interrupt clear +#define HIB_RTCT 0x400fc024 // Hibernate RTC trim +#define HIB_DATA 0x400fc030 // Hibernate data area +#define HIB_DATA_END 0x400fc130 // end of data area, exclusive + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate RTC counter register. +// +//***************************************************************************** +#define HIB_RTCC_MASK 0xffffffff // RTC counter mask + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate RTC match 0 register. +// +//***************************************************************************** +#define HIB_RTCM0_MASK 0xffffffff // RTC match 0 mask + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate RTC match 1 register. +// +//***************************************************************************** +#define HIB_RTCM1_MASK 0xffffffff // RTC match 1 mask + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate RTC load register. +// +//***************************************************************************** +#define HIB_RTCLD_MASK 0xffffffff // RTC load mask + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate control register +// +//***************************************************************************** +#define HIB_CTL_VABORT 0x00000080 // low bat abort +#define HIB_CTL_CLK32EN 0x00000040 // enable clock/oscillator +#define HIB_CTL_LOWBATEN 0x00000020 // enable low battery detect +#define HIB_CTL_PINWEN 0x00000010 // enable wake on WAKE pin +#define HIB_CTL_RTCWEN 0x00000008 // enable wake on RTC match +#define HIB_CTL_CLKSEL 0x00000004 // clock input selection +#define HIB_CTL_HIBREQ 0x00000002 // request hibernation +#define HIB_CTL_RTCEN 0x00000001 // RTC enable + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate interrupt mask reg. +// +//***************************************************************************** +#define HIB_IM_EXTW 0x00000008 // wake from external pin interrupt +#define HIB_IM_LOWBAT 0x00000004 // low battery interrupt +#define HIB_IM_RTCALT1 0x00000002 // RTC match 1 interrupt +#define HIB_IM_RTCALT0 0x00000001 // RTC match 0 interrupt + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate raw interrupt status. +// +//***************************************************************************** +#define HIB_RIS_EXTW 0x00000008 // wake from external pin interrupt +#define HIB_RIS_LOWBAT 0x00000004 // low battery interrupt +#define HIB_RIS_RTCALT1 0x00000002 // RTC match 1 interrupt +#define HIB_RID_RTCALT0 0x00000001 // RTC match 0 interrupt + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate masked int status. +// +//***************************************************************************** +#define HIB_MIS_EXTW 0x00000008 // wake from external pin interrupt +#define HIB_MIS_LOWBAT 0x00000004 // low battery interrupt +#define HIB_MIS_RTCALT1 0x00000002 // RTC match 1 interrupt +#define HIB_MID_RTCALT0 0x00000001 // RTC match 0 interrupt + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate interrupt clear reg. +// +//***************************************************************************** +#define HIB_IC_EXTW 0x00000008 // wake from external pin interrupt +#define HIB_IC_LOWBAT 0x00000004 // low battery interrupt +#define HIB_IC_RTCALT1 0x00000002 // RTC match 1 interrupt +#define HIB_IC_RTCALT0 0x00000001 // RTC match 0 interrupt + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate RTC trim register. +// +//***************************************************************************** +#define HIB_RTCT_MASK 0x0000ffff // RTC trim mask + +//***************************************************************************** +// +// The following define the bit fields in the Hibernate data register. +// +//***************************************************************************** +#define HIB_DATA_MASK 0xffffffff // NV memory data mask + +#endif // __HW_HIBERNATE_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_i2c.h b/Demo/Common/drivers/LuminaryMicro/hw_i2c.h new file mode 100644 index 000000000..0c0d54f26 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_i2c.h @@ -0,0 +1,197 @@ +//***************************************************************************** +// +// hw_i2c.h - Macros used when accessing the I2C master and slave hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_I2C_H__ +#define __HW_I2C_H__ + +//***************************************************************************** +// +// The following defines the offset between the I2C master and slave registers. +// +//***************************************************************************** +#define I2C_O_SLAVE 0x00000800 // Offset from master to slave + +//***************************************************************************** +// +// The following define the offsets of the I2C master registers. +// +//***************************************************************************** +#define I2C_MASTER_O_SA 0x00000000 // Slave address register +#define I2C_MASTER_O_CS 0x00000004 // Control and Status register +#define I2C_MASTER_O_DR 0x00000008 // Data register +#define I2C_MASTER_O_TPR 0x0000000C // Timer period register +#define I2C_MASTER_O_IMR 0x00000010 // Interrupt mask register +#define I2C_MASTER_O_RIS 0x00000014 // Raw interrupt status register +#define I2C_MASTER_O_MIS 0x00000018 // Masked interrupt status reg +#define I2C_MASTER_O_MICR 0x0000001c // Interrupt clear register +#define I2C_MASTER_O_CR 0x00000020 // Configuration register + +//***************************************************************************** +// +// The following define the offsets of the I2C slave registers. +// +//***************************************************************************** +#define I2C_SLAVE_O_OAR 0x00000000 // Own address register +#define I2C_SLAVE_O_CSR 0x00000004 // Control/Status register +#define I2C_SLAVE_O_DR 0x00000008 // Data register +#define I2C_SLAVE_O_IM 0x0000000C // Interrupt mask register +#define I2C_SLAVE_O_RIS 0x00000010 // Raw interrupt status register +#define I2C_SLAVE_O_MIS 0x00000014 // Masked interrupt status reg +#define I2C_SLAVE_O_SICR 0x00000018 // Interrupt clear register + +//***************************************************************************** +// +// The followng define the bit fields in the I2C master slave address register. +// +//***************************************************************************** +#define I2C_MASTER_SA_SA_MASK 0x000000FE // Slave address +#define I2C_MASTER_SA_RS 0x00000001 // Receive/send +#define I2C_MASTER_SA_SA_SHIFT 1 + +//***************************************************************************** +// +// The following define the bit fields in the I2C Master Control and Status +// register. +// +//***************************************************************************** +#define I2C_MASTER_CS_ACK 0x00000008 // Acknowlegde +#define I2C_MASTER_CS_STOP 0x00000004 // Stop +#define I2C_MASTER_CS_START 0x00000002 // Start +#define I2C_MASTER_CS_RUN 0x00000001 // Run +#define I2C_MASTER_CS_BUS_BUSY 0x00000040 // Bus busy +#define I2C_MASTER_CS_IDLE 0x00000020 // Idle +#define I2C_MASTER_CS_ARB_LOST 0x00000010 // Lost arbitration +#define I2C_MASTER_CS_DATA_ACK 0x00000008 // Data byte not acknowledged +#define I2C_MASTER_CS_ADDR_ACK 0x00000004 // Address byte not acknowledged +#define I2C_MASTER_CS_ERROR 0x00000002 // Error occurred +#define I2C_MASTER_CS_BUSY 0x00000001 // Controller is TX/RX data +#define I2C_MASTER_CS_ERR_MASK 0x0000001C + +//***************************************************************************** +// +// The following define values used in determining the contents of the I2C +// Master Timer Period register. +// +//***************************************************************************** +#define I2C_MASTER_TPR_SCL_HP 0x00000004 // SCL high period +#define I2C_MASTER_TPR_SCL_LP 0x00000006 // SCL low period +#define I2C_MASTER_TPR_SCL (I2C_MASTER_TPR_SCL_HP + I2C_MASTER_TPR_SCL_LP) +#define I2C_SCL_STANDARD 100000 // SCL standard frequency +#define I2C_SCL_FAST 400000 // SCL fast frequency + +//***************************************************************************** +// +// The following define the bit fields in the I2C Master Interrupt Mask +// register. +// +//***************************************************************************** +#define I2C_MASTER_IMR_IM 0x00000001 // Master interrupt mask + +//***************************************************************************** +// +// The following define the bit fields in the I2C Master Raw Interrupt Status +// register. +// +//***************************************************************************** +#define I2C_MASTER_RIS_RIS 0x00000001 // Master raw interrupt status + +//***************************************************************************** +// +// The following define the bit fields in the I2C Master Masked Interrupt +// Status register. +// +//***************************************************************************** +#define I2C_MASTER_MIS_MIS 0x00000001 // Master masked interrupt status + +//***************************************************************************** +// +// The following define the bit fields in the I2C Master Interrupt Clear +// register. +// +//***************************************************************************** +#define I2C_MASTER_MICR_IC 0x00000001 // Master interrupt clear + +//***************************************************************************** +// +// The following define the bit fields in the I2C Master Configuration +// register. +// +//***************************************************************************** +#define I2C_MASTER_CR_SFE 0x00000020 // Slave function enable +#define I2C_MASTER_CR_MFE 0x00000010 // Master function enable +#define I2C_MASTER_CR_LPBK 0x00000001 // Loopback enable + +//***************************************************************************** +// +// The following define the bit fields in the I2C Slave Own Address register. +// +//***************************************************************************** +#define I2C_SLAVE_SOAR_OAR_MASK 0x0000007F // Slave address + +//***************************************************************************** +// +// The following define the bit fields in the I2C Slave Control/Status +// register. +// +//***************************************************************************** +#define I2C_SLAVE_CSR_DA 0x00000001 // Enable the device +#define I2C_SLAVE_CSR_TREQ 0x00000002 // Transmit request received +#define I2C_SLAVE_CSR_RREQ 0x00000001 // Receive data from I2C master + +//***************************************************************************** +// +// The following define the bit fields in the I2C Slave Interrupt Mask +// register. +// +//***************************************************************************** +#define I2C_SLAVE_IMR_IM 0x00000001 // Slave interrupt mask + +//***************************************************************************** +// +// The following define the bit fields in the I2C Slave Raw Interrupt Status +// register. +// +//***************************************************************************** +#define I2C_SLAVE_RIS_RIS 0x00000001 // Slave raw interrupt status + +//***************************************************************************** +// +// The following define the bit fields in the I2C Slave Masked Interrupt +// Status register. +// +//***************************************************************************** +#define I2C_SLAVE_MIS_MIS 0x00000001 // Slave masked interrupt status + +//***************************************************************************** +// +// The following define the bit fields in the I2C Slave Interrupt Clear +// register. +// +//***************************************************************************** +#define I2C_SLAVE_SICR_IC 0x00000001 // Slave interrupt clear + +#endif // __HW_I2C_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_ints.h b/Demo/Common/drivers/LuminaryMicro/hw_ints.h new file mode 100644 index 000000000..8e97c6550 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_ints.h @@ -0,0 +1,114 @@ +//***************************************************************************** +// +// hw_ints.h - Macros that define the interrupt assignment on Stellaris. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_INTS_H__ +#define __HW_INTS_H__ + +//***************************************************************************** +// +// The following define the fault assignments. +// +//***************************************************************************** +#define FAULT_NMI 2 // NMI fault +#define FAULT_HARD 3 // Hard fault +#define FAULT_MPU 4 // MPU fault +#define FAULT_BUS 5 // Bus fault +#define FAULT_USAGE 6 // Usage fault +#define FAULT_SVCALL 11 // SVCall +#define FAULT_DEBUG 12 // Debug monitor +#define FAULT_PENDSV 14 // PendSV +#define FAULT_SYSTICK 15 // System Tick + +//***************************************************************************** +// +// The following define the interrupt assignments. +// +//***************************************************************************** +#define INT_GPIOA 16 // GPIO Port A +#define INT_GPIOB 17 // GPIO Port B +#define INT_GPIOC 18 // GPIO Port C +#define INT_GPIOD 19 // GPIO Port D +#define INT_GPIOE 20 // GPIO Port E +#define INT_UART0 21 // UART0 Rx and Tx +#define INT_UART1 22 // UART1 Rx and Tx +#define INT_SSI 23 // SSI Rx and Tx +#define INT_SSI0 23 // SSI0 Rx and Tx +#define INT_I2C 24 // I2C Master and Slave +#define INT_I2C0 24 // I2C0 Master and Slave +#define INT_PWM_FAULT 25 // PWM Fault +#define INT_PWM0 26 // PWM Generator 0 +#define INT_PWM1 27 // PWM Generator 1 +#define INT_PWM2 28 // PWM Generator 2 +#define INT_QEI 29 // Quadrature Encoder +#define INT_QEI0 29 // Quadrature Encoder 0 +#define INT_ADC0 30 // ADC Sequence 0 +#define INT_ADC1 31 // ADC Sequence 1 +#define INT_ADC2 32 // ADC Sequence 2 +#define INT_ADC3 33 // ADC Sequence 3 +#define INT_WATCHDOG 34 // Watchdog timer +#define INT_TIMER0A 35 // Timer 0 subtimer A +#define INT_TIMER0B 36 // Timer 0 subtimer B +#define INT_TIMER1A 37 // Timer 1 subtimer A +#define INT_TIMER1B 38 // Timer 1 subtimer B +#define INT_TIMER2A 39 // Timer 2 subtimer A +#define INT_TIMER2B 40 // Timer 2 subtimer B +#define INT_COMP0 41 // Analog Comparator 0 +#define INT_COMP1 42 // Analog Comparator 1 +#define INT_COMP2 43 // Analog Comparator 2 +#define INT_SYSCTL 44 // System Control (PLL, OSC, BO) +#define INT_FLASH 45 // FLASH Control +#define INT_GPIOF 46 // GPIO Port F +#define INT_GPIOG 47 // GPIO Port G +#define INT_GPIOH 48 // GPIO Port H +#define INT_UART2 49 // UART2 Rx and Tx +#define INT_SSI1 50 // SSI1 Rx and Tx +#define INT_TIMER3A 51 // Timer 3 subtimer A +#define INT_TIMER3B 52 // Timer 3 subtimer B +#define INT_I2C1 53 // I2C1 Master and Slave +#define INT_QEI1 54 // Quadrature Encoder 1 +#define INT_CAN0 55 // CAN0 +#define INT_CAN1 56 // CAN1 +#define INT_CAN2 57 // CAN2 +#define INT_ETH 58 // Ethernet +#define INT_HIBERNATE 59 // Hibernation module + +//***************************************************************************** +// +// The total number of interrupts. +// +//***************************************************************************** +#define NUM_INTERRUPTS 60 + +//***************************************************************************** +// +// The total number of priority levels. +// +//***************************************************************************** +#define NUM_PRIORITY 8 +#define NUM_PRIORITY_BITS 3 + +#endif // __HW_INTS_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_memmap.h b/Demo/Common/drivers/LuminaryMicro/hw_memmap.h new file mode 100644 index 000000000..ac1bf2d86 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_memmap.h @@ -0,0 +1,81 @@ +//***************************************************************************** +// +// hw_memmap.h - Macros defining the memory map of Stellaris. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_MEMMAP_H__ +#define __HW_MEMMAP_H__ + +//***************************************************************************** +// +// The following define the base address of the memories and peripherals. +// +//***************************************************************************** +#define FLASH_BASE 0x00000000 // FLASH memory +#define SRAM_BASE 0x20000000 // SRAM memory +#define WATCHDOG_BASE 0x40000000 // Watchdog +#define GPIO_PORTA_BASE 0x40004000 // GPIO Port A +#define GPIO_PORTB_BASE 0x40005000 // GPIO Port B +#define GPIO_PORTC_BASE 0x40006000 // GPIO Port C +#define GPIO_PORTD_BASE 0x40007000 // GPIO Port D +#define SSI_BASE 0x40008000 // SSI +#define SSI0_BASE 0x40008000 // SSI0 +#define SSI1_BASE 0x40009000 // SSI1 +#define UART0_BASE 0x4000C000 // UART0 +#define UART1_BASE 0x4000D000 // UART1 +#define UART2_BASE 0x4000E000 // UART2 +#define I2C_MASTER_BASE 0x40020000 // I2C Master +#define I2C_SLAVE_BASE 0x40020800 // I2C Slave +#define I2C0_MASTER_BASE 0x40020000 // I2C0 Master +#define I2C0_SLAVE_BASE 0x40020800 // I2C0 Slave +#define I2C1_MASTER_BASE 0x40021000 // I2C1 Master +#define I2C1_SLAVE_BASE 0x40021800 // I2C1 Slave +#define GPIO_PORTE_BASE 0x40024000 // GPIO Port E +#define GPIO_PORTF_BASE 0x40025000 // GPIO Port F +#define GPIO_PORTG_BASE 0x40026000 // GPIO Port G +#define GPIO_PORTH_BASE 0x40027000 // GPIO Port H +#define PWM_BASE 0x40028000 // PWM +#define QEI_BASE 0x4002C000 // QEI +#define QEI0_BASE 0x4002C000 // QEI0 +#define QEI1_BASE 0x4002D000 // QEI1 +#define TIMER0_BASE 0x40030000 // Timer0 +#define TIMER1_BASE 0x40031000 // Timer1 +#define TIMER2_BASE 0x40032000 // Timer2 +#define TIMER3_BASE 0x40033000 // Timer3 +#define ADC_BASE 0x40038000 // ADC +#define COMP_BASE 0x4003C000 // Analog comparators +#define CAN0_BASE 0x40040000 // CAN0 +#define CAN1_BASE 0x40041000 // CAN1 +#define CAN2_BASE 0x40042000 // CAN2 +#define ETH_BASE 0x40048000 // Ethernet +#define FLASH_CTRL_BASE 0x400FD000 // FLASH Controller +#define SYSCTL_BASE 0x400FE000 // System Control +#define ITM_BASE 0xE0000000 // Instrumentation Trace Macrocell +#define DWT_BASE 0xE0001000 // Data Watchpoint and Trace +#define FPB_BASE 0xE0002000 // FLASH Patch and Breakpoint +#define NVIC_BASE 0xE000E000 // Nested Vectored Interrupt Ctrl +#define TPIU_BASE 0xE0040000 // Trace Port Interface Unit + +#endif // __HW_MEMMAP_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_nvic.h b/Demo/Common/drivers/LuminaryMicro/hw_nvic.h new file mode 100644 index 000000000..862f40cc0 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_nvic.h @@ -0,0 +1,1050 @@ +//***************************************************************************** +// +// hw_nvic.h - Macros used when accessing the NVIC hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_NVIC_H__ +#define __HW_NVIC_H__ + +//***************************************************************************** +// +// The following define the addresses of the NVIC registers. +// +//***************************************************************************** +#define NVIC_INT_TYPE 0xE000E004 // Interrupt Controller Type Reg. +#define NVIC_ST_CTRL 0xE000E010 // SysTick Control and Status Reg. +#define NVIC_ST_RELOAD 0xE000E014 // SysTick Reload Value Register +#define NVIC_ST_CURRENT 0xE000E018 // SysTick Current Value Register +#define NVIC_ST_CAL 0xE000E01C // SysTick Calibration Value Reg. +#define NVIC_EN0 0xE000E100 // IRQ 0 to 31 Set Enable Register +#define NVIC_EN1 0xE000E104 // IRQ 32 to 63 Set Enable Register +#define NVIC_DIS0 0xE000E180 // IRQ 0 to 31 Clear Enable Reg. +#define NVIC_DIS1 0xE000E184 // IRQ 32 to 63 Clear Enable Reg. +#define NVIC_PEND0 0xE000E200 // IRQ 0 to 31 Set Pending Register +#define NVIC_PEND1 0xE000E204 // IRQ 32 to 63 Set Pending Reg. +#define NVIC_UNPEND0 0xE000E280 // IRQ 0 to 31 Clear Pending Reg. +#define NVIC_UNPEND1 0xE000E284 // IRQ 32 to 63 Clear Pending Reg. +#define NVIC_ACTIVE0 0xE000E300 // IRQ 0 to 31 Active Register +#define NVIC_ACTIVE1 0xE000E304 // IRQ 32 to 63 Active Register +#define NVIC_PRI0 0xE000E400 // IRQ 0 to 3 Priority Register +#define NVIC_PRI1 0xE000E404 // IRQ 4 to 7 Priority Register +#define NVIC_PRI2 0xE000E408 // IRQ 8 to 11 Priority Register +#define NVIC_PRI3 0xE000E40C // IRQ 12 to 15 Priority Register +#define NVIC_PRI4 0xE000E410 // IRQ 16 to 19 Priority Register +#define NVIC_PRI5 0xE000E414 // IRQ 20 to 23 Priority Register +#define NVIC_PRI6 0xE000E418 // IRQ 24 to 27 Priority Register +#define NVIC_PRI7 0xE000E41C // IRQ 28 to 31 Priority Register +#define NVIC_PRI8 0xE000E420 // IRQ 32 to 35 Priority Register +#define NVIC_PRI9 0xE000E424 // IRQ 36 to 39 Priority Register +#define NVIC_PRI10 0xE000E428 // IRQ 40 to 43 Priority Register +#define NVIC_CPUID 0xE000ED00 // CPUID Base Register +#define NVIC_INT_CTRL 0xE000ED04 // Interrupt Control State Register +#define NVIC_VTABLE 0xE000ED08 // Vector Table Offset Register +#define NVIC_APINT 0xE000ED0C // App. Int & Reset Control Reg. +#define NVIC_SYS_CTRL 0xE000ED10 // System Control Register +#define NVIC_CFG_CTRL 0xE000ED14 // Configuration Control Register +#define NVIC_SYS_PRI1 0xE000ED18 // Sys. Handlers 4 to 7 Priority +#define NVIC_SYS_PRI2 0xE000ED1C // Sys. Handlers 8 to 11 Priority +#define NVIC_SYS_PRI3 0xE000ED20 // Sys. Handlers 12 to 15 Priority +#define NVIC_SYS_HND_CTRL 0xE000ED24 // System Handler Control and State +#define NVIC_FAULT_STAT 0xE000ED28 // Configurable Fault Status Reg. +#define NVIC_HFAULT_STAT 0xE000ED2C // Hard Fault Status Register +#define NVIC_DEBUG_STAT 0xE000ED30 // Debug Status Register +#define NVIC_MM_ADDR 0xE000ED34 // Mem Manage Address Register +#define NVIC_FAULT_ADDR 0xE000ED38 // Bus Fault Address Register +#define NVIC_MPU_TYPE 0xE000ED90 // MPU Type Register +#define NVIC_MPU_CTRL 0xE000ED94 // MPU Control Register +#define NVIC_MPU_NUMBER 0xE000ED98 // MPU Region Number Register +#define NVIC_MPU_BASE 0xE000ED9C // MPU Region Base Address Register +#define NVIC_MPU_ATTR 0xE000EDA0 // MPU Region Attribute & Size Reg. +#define NVIC_DBG_CTRL 0xE000EDF0 // Debug Control and Status Reg. +#define NVIC_DBG_XFER 0xE000EDF4 // Debug Core Reg. Transfer Select +#define NVIC_DBG_DATA 0xE000EDF8 // Debug Core Register Data +#define NVIC_DBG_INT 0xE000EDFC // Debug Reset Interrupt Control +#define NVIC_SW_TRIG 0xE000EF00 // Software Trigger Interrupt Reg. + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_INT_TYPE register. +// +//***************************************************************************** +#define NVIC_INT_TYPE_LINES_M 0x0000001F // Number of interrupt lines (x32) +#define NVIC_INT_TYPE_LINES_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_ST_CTRL register. +// +//***************************************************************************** +#define NVIC_ST_CTRL_COUNT 0x00010000 // Count flag +#define NVIC_ST_CTRL_CLK_SRC 0x00000004 // Clock Source +#define NVIC_ST_CTRL_INTEN 0x00000002 // Interrupt enable +#define NVIC_ST_CTRL_ENABLE 0x00000001 // Counter mode + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_ST_RELOAD register. +// +//***************************************************************************** +#define NVIC_ST_RELOAD_M 0x00FFFFFF // Counter load value +#define NVIC_ST_RELOAD_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_ST_CURRENT register. +// +//***************************************************************************** +#define NVIC_ST_CURRENT_M 0x00FFFFFF // Counter current value +#define NVIC_ST_CURRENT_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_ST_CAL register. +// +//***************************************************************************** +#define NVIC_ST_CAL_NOREF 0x80000000 // No reference clock +#define NVIC_ST_CAL_SKEW 0x40000000 // Clock skew +#define NVIC_ST_CAL_ONEMS_M 0x00FFFFFF // 1ms reference value +#define NVIC_ST_CAL_ONEMS_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_EN0 register. +// +//***************************************************************************** +#define NVIC_EN0_INT31 0x80000000 // Interrupt 31 enable +#define NVIC_EN0_INT30 0x40000000 // Interrupt 30 enable +#define NVIC_EN0_INT29 0x20000000 // Interrupt 29 enable +#define NVIC_EN0_INT28 0x10000000 // Interrupt 28 enable +#define NVIC_EN0_INT27 0x08000000 // Interrupt 27 enable +#define NVIC_EN0_INT26 0x04000000 // Interrupt 26 enable +#define NVIC_EN0_INT25 0x02000000 // Interrupt 25 enable +#define NVIC_EN0_INT24 0x01000000 // Interrupt 24 enable +#define NVIC_EN0_INT23 0x00800000 // Interrupt 23 enable +#define NVIC_EN0_INT22 0x00400000 // Interrupt 22 enable +#define NVIC_EN0_INT21 0x00200000 // Interrupt 21 enable +#define NVIC_EN0_INT20 0x00100000 // Interrupt 20 enable +#define NVIC_EN0_INT19 0x00080000 // Interrupt 19 enable +#define NVIC_EN0_INT18 0x00040000 // Interrupt 18 enable +#define NVIC_EN0_INT17 0x00020000 // Interrupt 17 enable +#define NVIC_EN0_INT16 0x00010000 // Interrupt 16 enable +#define NVIC_EN0_INT15 0x00008000 // Interrupt 15 enable +#define NVIC_EN0_INT14 0x00004000 // Interrupt 14 enable +#define NVIC_EN0_INT13 0x00002000 // Interrupt 13 enable +#define NVIC_EN0_INT12 0x00001000 // Interrupt 12 enable +#define NVIC_EN0_INT11 0x00000800 // Interrupt 11 enable +#define NVIC_EN0_INT10 0x00000400 // Interrupt 10 enable +#define NVIC_EN0_INT9 0x00000200 // Interrupt 9 enable +#define NVIC_EN0_INT8 0x00000100 // Interrupt 8 enable +#define NVIC_EN0_INT7 0x00000080 // Interrupt 7 enable +#define NVIC_EN0_INT6 0x00000040 // Interrupt 6 enable +#define NVIC_EN0_INT5 0x00000020 // Interrupt 5 enable +#define NVIC_EN0_INT4 0x00000010 // Interrupt 4 enable +#define NVIC_EN0_INT3 0x00000008 // Interrupt 3 enable +#define NVIC_EN0_INT2 0x00000004 // Interrupt 2 enable +#define NVIC_EN0_INT1 0x00000002 // Interrupt 1 enable +#define NVIC_EN0_INT0 0x00000001 // Interrupt 0 enable + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_EN1 register. +// +//***************************************************************************** +#define NVIC_EN1_INT59 0x08000000 // Interrupt 59 enable +#define NVIC_EN1_INT58 0x04000000 // Interrupt 58 enable +#define NVIC_EN1_INT57 0x02000000 // Interrupt 57 enable +#define NVIC_EN1_INT56 0x01000000 // Interrupt 56 enable +#define NVIC_EN1_INT55 0x00800000 // Interrupt 55 enable +#define NVIC_EN1_INT54 0x00400000 // Interrupt 54 enable +#define NVIC_EN1_INT53 0x00200000 // Interrupt 53 enable +#define NVIC_EN1_INT52 0x00100000 // Interrupt 52 enable +#define NVIC_EN1_INT51 0x00080000 // Interrupt 51 enable +#define NVIC_EN1_INT50 0x00040000 // Interrupt 50 enable +#define NVIC_EN1_INT49 0x00020000 // Interrupt 49 enable +#define NVIC_EN1_INT48 0x00010000 // Interrupt 48 enable +#define NVIC_EN1_INT47 0x00008000 // Interrupt 47 enable +#define NVIC_EN1_INT46 0x00004000 // Interrupt 46 enable +#define NVIC_EN1_INT45 0x00002000 // Interrupt 45 enable +#define NVIC_EN1_INT44 0x00001000 // Interrupt 44 enable +#define NVIC_EN1_INT43 0x00000800 // Interrupt 43 enable +#define NVIC_EN1_INT42 0x00000400 // Interrupt 42 enable +#define NVIC_EN1_INT41 0x00000200 // Interrupt 41 enable +#define NVIC_EN1_INT40 0x00000100 // Interrupt 40 enable +#define NVIC_EN1_INT39 0x00000080 // Interrupt 39 enable +#define NVIC_EN1_INT38 0x00000040 // Interrupt 38 enable +#define NVIC_EN1_INT37 0x00000020 // Interrupt 37 enable +#define NVIC_EN1_INT36 0x00000010 // Interrupt 36 enable +#define NVIC_EN1_INT35 0x00000008 // Interrupt 35 enable +#define NVIC_EN1_INT34 0x00000004 // Interrupt 34 enable +#define NVIC_EN1_INT33 0x00000002 // Interrupt 33 enable +#define NVIC_EN1_INT32 0x00000001 // Interrupt 32 enable + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_DIS0 register. +// +//***************************************************************************** +#define NVIC_DIS0_INT31 0x80000000 // Interrupt 31 disable +#define NVIC_DIS0_INT30 0x40000000 // Interrupt 30 disable +#define NVIC_DIS0_INT29 0x20000000 // Interrupt 29 disable +#define NVIC_DIS0_INT28 0x10000000 // Interrupt 28 disable +#define NVIC_DIS0_INT27 0x08000000 // Interrupt 27 disable +#define NVIC_DIS0_INT26 0x04000000 // Interrupt 26 disable +#define NVIC_DIS0_INT25 0x02000000 // Interrupt 25 disable +#define NVIC_DIS0_INT24 0x01000000 // Interrupt 24 disable +#define NVIC_DIS0_INT23 0x00800000 // Interrupt 23 disable +#define NVIC_DIS0_INT22 0x00400000 // Interrupt 22 disable +#define NVIC_DIS0_INT21 0x00200000 // Interrupt 21 disable +#define NVIC_DIS0_INT20 0x00100000 // Interrupt 20 disable +#define NVIC_DIS0_INT19 0x00080000 // Interrupt 19 disable +#define NVIC_DIS0_INT18 0x00040000 // Interrupt 18 disable +#define NVIC_DIS0_INT17 0x00020000 // Interrupt 17 disable +#define NVIC_DIS0_INT16 0x00010000 // Interrupt 16 disable +#define NVIC_DIS0_INT15 0x00008000 // Interrupt 15 disable +#define NVIC_DIS0_INT14 0x00004000 // Interrupt 14 disable +#define NVIC_DIS0_INT13 0x00002000 // Interrupt 13 disable +#define NVIC_DIS0_INT12 0x00001000 // Interrupt 12 disable +#define NVIC_DIS0_INT11 0x00000800 // Interrupt 11 disable +#define NVIC_DIS0_INT10 0x00000400 // Interrupt 10 disable +#define NVIC_DIS0_INT9 0x00000200 // Interrupt 9 disable +#define NVIC_DIS0_INT8 0x00000100 // Interrupt 8 disable +#define NVIC_DIS0_INT7 0x00000080 // Interrupt 7 disable +#define NVIC_DIS0_INT6 0x00000040 // Interrupt 6 disable +#define NVIC_DIS0_INT5 0x00000020 // Interrupt 5 disable +#define NVIC_DIS0_INT4 0x00000010 // Interrupt 4 disable +#define NVIC_DIS0_INT3 0x00000008 // Interrupt 3 disable +#define NVIC_DIS0_INT2 0x00000004 // Interrupt 2 disable +#define NVIC_DIS0_INT1 0x00000002 // Interrupt 1 disable +#define NVIC_DIS0_INT0 0x00000001 // Interrupt 0 disable + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_DIS1 register. +// +//***************************************************************************** +#define NVIC_DIS1_INT59 0x08000000 // Interrupt 59 disable +#define NVIC_DIS1_INT58 0x04000000 // Interrupt 58 disable +#define NVIC_DIS1_INT57 0x02000000 // Interrupt 57 disable +#define NVIC_DIS1_INT56 0x01000000 // Interrupt 56 disable +#define NVIC_DIS1_INT55 0x00800000 // Interrupt 55 disable +#define NVIC_DIS1_INT54 0x00400000 // Interrupt 54 disable +#define NVIC_DIS1_INT53 0x00200000 // Interrupt 53 disable +#define NVIC_DIS1_INT52 0x00100000 // Interrupt 52 disable +#define NVIC_DIS1_INT51 0x00080000 // Interrupt 51 disable +#define NVIC_DIS1_INT50 0x00040000 // Interrupt 50 disable +#define NVIC_DIS1_INT49 0x00020000 // Interrupt 49 disable +#define NVIC_DIS1_INT48 0x00010000 // Interrupt 48 disable +#define NVIC_DIS1_INT47 0x00008000 // Interrupt 47 disable +#define NVIC_DIS1_INT46 0x00004000 // Interrupt 46 disable +#define NVIC_DIS1_INT45 0x00002000 // Interrupt 45 disable +#define NVIC_DIS1_INT44 0x00001000 // Interrupt 44 disable +#define NVIC_DIS1_INT43 0x00000800 // Interrupt 43 disable +#define NVIC_DIS1_INT42 0x00000400 // Interrupt 42 disable +#define NVIC_DIS1_INT41 0x00000200 // Interrupt 41 disable +#define NVIC_DIS1_INT40 0x00000100 // Interrupt 40 disable +#define NVIC_DIS1_INT39 0x00000080 // Interrupt 39 disable +#define NVIC_DIS1_INT38 0x00000040 // Interrupt 38 disable +#define NVIC_DIS1_INT37 0x00000020 // Interrupt 37 disable +#define NVIC_DIS1_INT36 0x00000010 // Interrupt 36 disable +#define NVIC_DIS1_INT35 0x00000008 // Interrupt 35 disable +#define NVIC_DIS1_INT34 0x00000004 // Interrupt 34 disable +#define NVIC_DIS1_INT33 0x00000002 // Interrupt 33 disable +#define NVIC_DIS1_INT32 0x00000001 // Interrupt 32 disable + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PEND0 register. +// +//***************************************************************************** +#define NVIC_PEND0_INT31 0x80000000 // Interrupt 31 pend +#define NVIC_PEND0_INT30 0x40000000 // Interrupt 30 pend +#define NVIC_PEND0_INT29 0x20000000 // Interrupt 29 pend +#define NVIC_PEND0_INT28 0x10000000 // Interrupt 28 pend +#define NVIC_PEND0_INT27 0x08000000 // Interrupt 27 pend +#define NVIC_PEND0_INT26 0x04000000 // Interrupt 26 pend +#define NVIC_PEND0_INT25 0x02000000 // Interrupt 25 pend +#define NVIC_PEND0_INT24 0x01000000 // Interrupt 24 pend +#define NVIC_PEND0_INT23 0x00800000 // Interrupt 23 pend +#define NVIC_PEND0_INT22 0x00400000 // Interrupt 22 pend +#define NVIC_PEND0_INT21 0x00200000 // Interrupt 21 pend +#define NVIC_PEND0_INT20 0x00100000 // Interrupt 20 pend +#define NVIC_PEND0_INT19 0x00080000 // Interrupt 19 pend +#define NVIC_PEND0_INT18 0x00040000 // Interrupt 18 pend +#define NVIC_PEND0_INT17 0x00020000 // Interrupt 17 pend +#define NVIC_PEND0_INT16 0x00010000 // Interrupt 16 pend +#define NVIC_PEND0_INT15 0x00008000 // Interrupt 15 pend +#define NVIC_PEND0_INT14 0x00004000 // Interrupt 14 pend +#define NVIC_PEND0_INT13 0x00002000 // Interrupt 13 pend +#define NVIC_PEND0_INT12 0x00001000 // Interrupt 12 pend +#define NVIC_PEND0_INT11 0x00000800 // Interrupt 11 pend +#define NVIC_PEND0_INT10 0x00000400 // Interrupt 10 pend +#define NVIC_PEND0_INT9 0x00000200 // Interrupt 9 pend +#define NVIC_PEND0_INT8 0x00000100 // Interrupt 8 pend +#define NVIC_PEND0_INT7 0x00000080 // Interrupt 7 pend +#define NVIC_PEND0_INT6 0x00000040 // Interrupt 6 pend +#define NVIC_PEND0_INT5 0x00000020 // Interrupt 5 pend +#define NVIC_PEND0_INT4 0x00000010 // Interrupt 4 pend +#define NVIC_PEND0_INT3 0x00000008 // Interrupt 3 pend +#define NVIC_PEND0_INT2 0x00000004 // Interrupt 2 pend +#define NVIC_PEND0_INT1 0x00000002 // Interrupt 1 pend +#define NVIC_PEND0_INT0 0x00000001 // Interrupt 0 pend + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PEND1 register. +// +//***************************************************************************** +#define NVIC_PEND1_INT59 0x08000000 // Interrupt 59 pend +#define NVIC_PEND1_INT58 0x04000000 // Interrupt 58 pend +#define NVIC_PEND1_INT57 0x02000000 // Interrupt 57 pend +#define NVIC_PEND1_INT56 0x01000000 // Interrupt 56 pend +#define NVIC_PEND1_INT55 0x00800000 // Interrupt 55 pend +#define NVIC_PEND1_INT54 0x00400000 // Interrupt 54 pend +#define NVIC_PEND1_INT53 0x00200000 // Interrupt 53 pend +#define NVIC_PEND1_INT52 0x00100000 // Interrupt 52 pend +#define NVIC_PEND1_INT51 0x00080000 // Interrupt 51 pend +#define NVIC_PEND1_INT50 0x00040000 // Interrupt 50 pend +#define NVIC_PEND1_INT49 0x00020000 // Interrupt 49 pend +#define NVIC_PEND1_INT48 0x00010000 // Interrupt 48 pend +#define NVIC_PEND1_INT47 0x00008000 // Interrupt 47 pend +#define NVIC_PEND1_INT46 0x00004000 // Interrupt 46 pend +#define NVIC_PEND1_INT45 0x00002000 // Interrupt 45 pend +#define NVIC_PEND1_INT44 0x00001000 // Interrupt 44 pend +#define NVIC_PEND1_INT43 0x00000800 // Interrupt 43 pend +#define NVIC_PEND1_INT42 0x00000400 // Interrupt 42 pend +#define NVIC_PEND1_INT41 0x00000200 // Interrupt 41 pend +#define NVIC_PEND1_INT40 0x00000100 // Interrupt 40 pend +#define NVIC_PEND1_INT39 0x00000080 // Interrupt 39 pend +#define NVIC_PEND1_INT38 0x00000040 // Interrupt 38 pend +#define NVIC_PEND1_INT37 0x00000020 // Interrupt 37 pend +#define NVIC_PEND1_INT36 0x00000010 // Interrupt 36 pend +#define NVIC_PEND1_INT35 0x00000008 // Interrupt 35 pend +#define NVIC_PEND1_INT34 0x00000004 // Interrupt 34 pend +#define NVIC_PEND1_INT33 0x00000002 // Interrupt 33 pend +#define NVIC_PEND1_INT32 0x00000001 // Interrupt 32 pend + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_UNPEND0 register. +// +//***************************************************************************** +#define NVIC_UNPEND0_INT31 0x80000000 // Interrupt 31 unpend +#define NVIC_UNPEND0_INT30 0x40000000 // Interrupt 30 unpend +#define NVIC_UNPEND0_INT29 0x20000000 // Interrupt 29 unpend +#define NVIC_UNPEND0_INT28 0x10000000 // Interrupt 28 unpend +#define NVIC_UNPEND0_INT27 0x08000000 // Interrupt 27 unpend +#define NVIC_UNPEND0_INT26 0x04000000 // Interrupt 26 unpend +#define NVIC_UNPEND0_INT25 0x02000000 // Interrupt 25 unpend +#define NVIC_UNPEND0_INT24 0x01000000 // Interrupt 24 unpend +#define NVIC_UNPEND0_INT23 0x00800000 // Interrupt 23 unpend +#define NVIC_UNPEND0_INT22 0x00400000 // Interrupt 22 unpend +#define NVIC_UNPEND0_INT21 0x00200000 // Interrupt 21 unpend +#define NVIC_UNPEND0_INT20 0x00100000 // Interrupt 20 unpend +#define NVIC_UNPEND0_INT19 0x00080000 // Interrupt 19 unpend +#define NVIC_UNPEND0_INT18 0x00040000 // Interrupt 18 unpend +#define NVIC_UNPEND0_INT17 0x00020000 // Interrupt 17 unpend +#define NVIC_UNPEND0_INT16 0x00010000 // Interrupt 16 unpend +#define NVIC_UNPEND0_INT15 0x00008000 // Interrupt 15 unpend +#define NVIC_UNPEND0_INT14 0x00004000 // Interrupt 14 unpend +#define NVIC_UNPEND0_INT13 0x00002000 // Interrupt 13 unpend +#define NVIC_UNPEND0_INT12 0x00001000 // Interrupt 12 unpend +#define NVIC_UNPEND0_INT11 0x00000800 // Interrupt 11 unpend +#define NVIC_UNPEND0_INT10 0x00000400 // Interrupt 10 unpend +#define NVIC_UNPEND0_INT9 0x00000200 // Interrupt 9 unpend +#define NVIC_UNPEND0_INT8 0x00000100 // Interrupt 8 unpend +#define NVIC_UNPEND0_INT7 0x00000080 // Interrupt 7 unpend +#define NVIC_UNPEND0_INT6 0x00000040 // Interrupt 6 unpend +#define NVIC_UNPEND0_INT5 0x00000020 // Interrupt 5 unpend +#define NVIC_UNPEND0_INT4 0x00000010 // Interrupt 4 unpend +#define NVIC_UNPEND0_INT3 0x00000008 // Interrupt 3 unpend +#define NVIC_UNPEND0_INT2 0x00000004 // Interrupt 2 unpend +#define NVIC_UNPEND0_INT1 0x00000002 // Interrupt 1 unpend +#define NVIC_UNPEND0_INT0 0x00000001 // Interrupt 0 unpend + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_UNPEND1 register. +// +//***************************************************************************** +#define NVIC_UNPEND1_INT59 0x08000000 // Interrupt 59 unpend +#define NVIC_UNPEND1_INT58 0x04000000 // Interrupt 58 unpend +#define NVIC_UNPEND1_INT57 0x02000000 // Interrupt 57 unpend +#define NVIC_UNPEND1_INT56 0x01000000 // Interrupt 56 unpend +#define NVIC_UNPEND1_INT55 0x00800000 // Interrupt 55 unpend +#define NVIC_UNPEND1_INT54 0x00400000 // Interrupt 54 unpend +#define NVIC_UNPEND1_INT53 0x00200000 // Interrupt 53 unpend +#define NVIC_UNPEND1_INT52 0x00100000 // Interrupt 52 unpend +#define NVIC_UNPEND1_INT51 0x00080000 // Interrupt 51 unpend +#define NVIC_UNPEND1_INT50 0x00040000 // Interrupt 50 unpend +#define NVIC_UNPEND1_INT49 0x00020000 // Interrupt 49 unpend +#define NVIC_UNPEND1_INT48 0x00010000 // Interrupt 48 unpend +#define NVIC_UNPEND1_INT47 0x00008000 // Interrupt 47 unpend +#define NVIC_UNPEND1_INT46 0x00004000 // Interrupt 46 unpend +#define NVIC_UNPEND1_INT45 0x00002000 // Interrupt 45 unpend +#define NVIC_UNPEND1_INT44 0x00001000 // Interrupt 44 unpend +#define NVIC_UNPEND1_INT43 0x00000800 // Interrupt 43 unpend +#define NVIC_UNPEND1_INT42 0x00000400 // Interrupt 42 unpend +#define NVIC_UNPEND1_INT41 0x00000200 // Interrupt 41 unpend +#define NVIC_UNPEND1_INT40 0x00000100 // Interrupt 40 unpend +#define NVIC_UNPEND1_INT39 0x00000080 // Interrupt 39 unpend +#define NVIC_UNPEND1_INT38 0x00000040 // Interrupt 38 unpend +#define NVIC_UNPEND1_INT37 0x00000020 // Interrupt 37 unpend +#define NVIC_UNPEND1_INT36 0x00000010 // Interrupt 36 unpend +#define NVIC_UNPEND1_INT35 0x00000008 // Interrupt 35 unpend +#define NVIC_UNPEND1_INT34 0x00000004 // Interrupt 34 unpend +#define NVIC_UNPEND1_INT33 0x00000002 // Interrupt 33 unpend +#define NVIC_UNPEND1_INT32 0x00000001 // Interrupt 32 unpend + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_ACTIVE0 register. +// +//***************************************************************************** +#define NVIC_ACTIVE0_INT31 0x80000000 // Interrupt 31 active +#define NVIC_ACTIVE0_INT30 0x40000000 // Interrupt 30 active +#define NVIC_ACTIVE0_INT29 0x20000000 // Interrupt 29 active +#define NVIC_ACTIVE0_INT28 0x10000000 // Interrupt 28 active +#define NVIC_ACTIVE0_INT27 0x08000000 // Interrupt 27 active +#define NVIC_ACTIVE0_INT26 0x04000000 // Interrupt 26 active +#define NVIC_ACTIVE0_INT25 0x02000000 // Interrupt 25 active +#define NVIC_ACTIVE0_INT24 0x01000000 // Interrupt 24 active +#define NVIC_ACTIVE0_INT23 0x00800000 // Interrupt 23 active +#define NVIC_ACTIVE0_INT22 0x00400000 // Interrupt 22 active +#define NVIC_ACTIVE0_INT21 0x00200000 // Interrupt 21 active +#define NVIC_ACTIVE0_INT20 0x00100000 // Interrupt 20 active +#define NVIC_ACTIVE0_INT19 0x00080000 // Interrupt 19 active +#define NVIC_ACTIVE0_INT18 0x00040000 // Interrupt 18 active +#define NVIC_ACTIVE0_INT17 0x00020000 // Interrupt 17 active +#define NVIC_ACTIVE0_INT16 0x00010000 // Interrupt 16 active +#define NVIC_ACTIVE0_INT15 0x00008000 // Interrupt 15 active +#define NVIC_ACTIVE0_INT14 0x00004000 // Interrupt 14 active +#define NVIC_ACTIVE0_INT13 0x00002000 // Interrupt 13 active +#define NVIC_ACTIVE0_INT12 0x00001000 // Interrupt 12 active +#define NVIC_ACTIVE0_INT11 0x00000800 // Interrupt 11 active +#define NVIC_ACTIVE0_INT10 0x00000400 // Interrupt 10 active +#define NVIC_ACTIVE0_INT9 0x00000200 // Interrupt 9 active +#define NVIC_ACTIVE0_INT8 0x00000100 // Interrupt 8 active +#define NVIC_ACTIVE0_INT7 0x00000080 // Interrupt 7 active +#define NVIC_ACTIVE0_INT6 0x00000040 // Interrupt 6 active +#define NVIC_ACTIVE0_INT5 0x00000020 // Interrupt 5 active +#define NVIC_ACTIVE0_INT4 0x00000010 // Interrupt 4 active +#define NVIC_ACTIVE0_INT3 0x00000008 // Interrupt 3 active +#define NVIC_ACTIVE0_INT2 0x00000004 // Interrupt 2 active +#define NVIC_ACTIVE0_INT1 0x00000002 // Interrupt 1 active +#define NVIC_ACTIVE0_INT0 0x00000001 // Interrupt 0 active + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_ACTIVE1 register. +// +//***************************************************************************** +#define NVIC_ACTIVE1_INT59 0x08000000 // Interrupt 59 active +#define NVIC_ACTIVE1_INT58 0x04000000 // Interrupt 58 active +#define NVIC_ACTIVE1_INT57 0x02000000 // Interrupt 57 active +#define NVIC_ACTIVE1_INT56 0x01000000 // Interrupt 56 active +#define NVIC_ACTIVE1_INT55 0x00800000 // Interrupt 55 active +#define NVIC_ACTIVE1_INT54 0x00400000 // Interrupt 54 active +#define NVIC_ACTIVE1_INT53 0x00200000 // Interrupt 53 active +#define NVIC_ACTIVE1_INT52 0x00100000 // Interrupt 52 active +#define NVIC_ACTIVE1_INT51 0x00080000 // Interrupt 51 active +#define NVIC_ACTIVE1_INT50 0x00040000 // Interrupt 50 active +#define NVIC_ACTIVE1_INT49 0x00020000 // Interrupt 49 active +#define NVIC_ACTIVE1_INT48 0x00010000 // Interrupt 48 active +#define NVIC_ACTIVE1_INT47 0x00008000 // Interrupt 47 active +#define NVIC_ACTIVE1_INT46 0x00004000 // Interrupt 46 active +#define NVIC_ACTIVE1_INT45 0x00002000 // Interrupt 45 active +#define NVIC_ACTIVE1_INT44 0x00001000 // Interrupt 44 active +#define NVIC_ACTIVE1_INT43 0x00000800 // Interrupt 43 active +#define NVIC_ACTIVE1_INT42 0x00000400 // Interrupt 42 active +#define NVIC_ACTIVE1_INT41 0x00000200 // Interrupt 41 active +#define NVIC_ACTIVE1_INT40 0x00000100 // Interrupt 40 active +#define NVIC_ACTIVE1_INT39 0x00000080 // Interrupt 39 active +#define NVIC_ACTIVE1_INT38 0x00000040 // Interrupt 38 active +#define NVIC_ACTIVE1_INT37 0x00000020 // Interrupt 37 active +#define NVIC_ACTIVE1_INT36 0x00000010 // Interrupt 36 active +#define NVIC_ACTIVE1_INT35 0x00000008 // Interrupt 35 active +#define NVIC_ACTIVE1_INT34 0x00000004 // Interrupt 34 active +#define NVIC_ACTIVE1_INT33 0x00000002 // Interrupt 33 active +#define NVIC_ACTIVE1_INT32 0x00000001 // Interrupt 32 active + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI0 register. +// +//***************************************************************************** +#define NVIC_PRI0_INT3_M 0xFF000000 // Interrupt 3 priority mask +#define NVIC_PRI0_INT2_M 0x00FF0000 // Interrupt 2 priority mask +#define NVIC_PRI0_INT1_M 0x0000FF00 // Interrupt 1 priority mask +#define NVIC_PRI0_INT0_M 0x000000FF // Interrupt 0 priority mask +#define NVIC_PRI0_INT3_S 24 +#define NVIC_PRI0_INT2_S 16 +#define NVIC_PRI0_INT1_S 8 +#define NVIC_PRI0_INT0_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI1 register. +// +//***************************************************************************** +#define NVIC_PRI1_INT7_M 0xFF000000 // Interrupt 7 priority mask +#define NVIC_PRI1_INT6_M 0x00FF0000 // Interrupt 6 priority mask +#define NVIC_PRI1_INT5_M 0x0000FF00 // Interrupt 5 priority mask +#define NVIC_PRI1_INT4_M 0x000000FF // Interrupt 4 priority mask +#define NVIC_PRI1_INT7_S 24 +#define NVIC_PRI1_INT6_S 16 +#define NVIC_PRI1_INT5_S 8 +#define NVIC_PRI1_INT4_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI2 register. +// +//***************************************************************************** +#define NVIC_PRI2_INT11_M 0xFF000000 // Interrupt 11 priority mask +#define NVIC_PRI2_INT10_M 0x00FF0000 // Interrupt 10 priority mask +#define NVIC_PRI2_INT9_M 0x0000FF00 // Interrupt 9 priority mask +#define NVIC_PRI2_INT8_M 0x000000FF // Interrupt 8 priority mask +#define NVIC_PRI2_INT11_S 24 +#define NVIC_PRI2_INT10_S 16 +#define NVIC_PRI2_INT9_S 8 +#define NVIC_PRI2_INT8_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI3 register. +// +//***************************************************************************** +#define NVIC_PRI3_INT15_M 0xFF000000 // Interrupt 15 priority mask +#define NVIC_PRI3_INT14_M 0x00FF0000 // Interrupt 14 priority mask +#define NVIC_PRI3_INT13_M 0x0000FF00 // Interrupt 13 priority mask +#define NVIC_PRI3_INT12_M 0x000000FF // Interrupt 12 priority mask +#define NVIC_PRI3_INT15_S 24 +#define NVIC_PRI3_INT14_S 16 +#define NVIC_PRI3_INT13_S 8 +#define NVIC_PRI3_INT12_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI4 register. +// +//***************************************************************************** +#define NVIC_PRI4_INT19_M 0xFF000000 // Interrupt 19 priority mask +#define NVIC_PRI4_INT18_M 0x00FF0000 // Interrupt 18 priority mask +#define NVIC_PRI4_INT17_M 0x0000FF00 // Interrupt 17 priority mask +#define NVIC_PRI4_INT16_M 0x000000FF // Interrupt 16 priority mask +#define NVIC_PRI4_INT19_S 24 +#define NVIC_PRI4_INT18_S 16 +#define NVIC_PRI4_INT17_S 8 +#define NVIC_PRI4_INT16_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI5 register. +// +//***************************************************************************** +#define NVIC_PRI5_INT23_M 0xFF000000 // Interrupt 23 priority mask +#define NVIC_PRI5_INT22_M 0x00FF0000 // Interrupt 22 priority mask +#define NVIC_PRI5_INT21_M 0x0000FF00 // Interrupt 21 priority mask +#define NVIC_PRI5_INT20_M 0x000000FF // Interrupt 20 priority mask +#define NVIC_PRI5_INT23_S 24 +#define NVIC_PRI5_INT22_S 16 +#define NVIC_PRI5_INT21_S 8 +#define NVIC_PRI5_INT20_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI6 register. +// +//***************************************************************************** +#define NVIC_PRI6_INT27_M 0xFF000000 // Interrupt 27 priority mask +#define NVIC_PRI6_INT26_M 0x00FF0000 // Interrupt 26 priority mask +#define NVIC_PRI6_INT25_M 0x0000FF00 // Interrupt 25 priority mask +#define NVIC_PRI6_INT24_M 0x000000FF // Interrupt 24 priority mask +#define NVIC_PRI6_INT27_S 24 +#define NVIC_PRI6_INT26_S 16 +#define NVIC_PRI6_INT25_S 8 +#define NVIC_PRI6_INT24_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI7 register. +// +//***************************************************************************** +#define NVIC_PRI7_INT31_M 0xFF000000 // Interrupt 31 priority mask +#define NVIC_PRI7_INT30_M 0x00FF0000 // Interrupt 30 priority mask +#define NVIC_PRI7_INT29_M 0x0000FF00 // Interrupt 29 priority mask +#define NVIC_PRI7_INT28_M 0x000000FF // Interrupt 28 priority mask +#define NVIC_PRI7_INT31_S 24 +#define NVIC_PRI7_INT30_S 16 +#define NVIC_PRI7_INT29_S 8 +#define NVIC_PRI7_INT28_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI8 register. +// +//***************************************************************************** +#define NVIC_PRI8_INT35_M 0xFF000000 // Interrupt 35 priority mask +#define NVIC_PRI8_INT34_M 0x00FF0000 // Interrupt 34 priority mask +#define NVIC_PRI8_INT33_M 0x0000FF00 // Interrupt 33 priority mask +#define NVIC_PRI8_INT32_M 0x000000FF // Interrupt 32 priority mask +#define NVIC_PRI8_INT35_S 24 +#define NVIC_PRI8_INT34_S 16 +#define NVIC_PRI8_INT33_S 8 +#define NVIC_PRI8_INT32_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI9 register. +// +//***************************************************************************** +#define NVIC_PRI9_INT39_M 0xFF000000 // Interrupt 39 priority mask +#define NVIC_PRI9_INT38_M 0x00FF0000 // Interrupt 38 priority mask +#define NVIC_PRI9_INT37_M 0x0000FF00 // Interrupt 37 priority mask +#define NVIC_PRI9_INT36_M 0x000000FF // Interrupt 36 priority mask +#define NVIC_PRI9_INT39_S 24 +#define NVIC_PRI9_INT38_S 16 +#define NVIC_PRI9_INT37_S 8 +#define NVIC_PRI9_INT36_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_PRI10 register. +// +//***************************************************************************** +#define NVIC_PRI10_INT43_M 0xFF000000 // Interrupt 43 priority mask +#define NVIC_PRI10_INT42_M 0x00FF0000 // Interrupt 42 priority mask +#define NVIC_PRI10_INT41_M 0x0000FF00 // Interrupt 41 priority mask +#define NVIC_PRI10_INT40_M 0x000000FF // Interrupt 40 priority mask +#define NVIC_PRI10_INT43_S 24 +#define NVIC_PRI10_INT42_S 16 +#define NVIC_PRI10_INT41_S 8 +#define NVIC_PRI10_INT40_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_CPUID register. +// +//***************************************************************************** +#define NVIC_CPUID_IMP_M 0xFF000000 // Implementer +#define NVIC_CPUID_VAR_M 0x00F00000 // Variant +#define NVIC_CPUID_PARTNO_M 0x0000FFF0 // Processor part number +#define NVIC_CPUID_REV_M 0x0000000F // Revision + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_INT_CTRL register. +// +//***************************************************************************** +#define NVIC_INT_CTRL_NMI_SET 0x80000000 // Pend a NMI +#define NVIC_INT_CTRL_PEND_SV 0x10000000 // Pend a PendSV +#define NVIC_INT_CTRL_UNPEND_SV 0x08000000 // Unpend a PendSV +#define NVIC_INT_CTRL_ISR_PRE 0x00800000 // Debug interrupt handling +#define NVIC_INT_CTRL_ISR_PEND 0x00400000 // Debug interrupt pending +#define NVIC_INT_CTRL_VEC_PEN_M 0x003FF000 // Highest pending exception +#define NVIC_INT_CTRL_RET_BASE 0x00000800 // Return to base +#define NVIC_INT_CTRL_VEC_ACT_M 0x000003FF // Current active exception +#define NVIC_INT_CTRL_VEC_PEN_S 12 +#define NVIC_INT_CTRL_VEC_ACT_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_VTABLE register. +// +//***************************************************************************** +#define NVIC_VTABLE_BASE 0x20000000 // Vector table base +#define NVIC_VTABLE_OFFSET_M 0x1FFFFF00 // Vector table offset +#define NVIC_VTABLE_OFFSET_S 8 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_APINT register. +// +//***************************************************************************** +#define NVIC_APINT_VECTKEY_M 0xFFFF0000 // Vector key mask +#define NVIC_APINT_VECTKEY 0x05FA0000 // Vector key +#define NVIC_APINT_ENDIANESS 0x00008000 // Data endianess +#define NVIC_APINT_PRIGROUP_M 0x00000700 // Priority group +#define NVIC_APINT_PRIGROUP_7_1 0x00000000 // Priority group 7.1 split +#define NVIC_APINT_PRIGROUP_6_2 0x00000100 // Priority group 6.2 split +#define NVIC_APINT_PRIGROUP_5_3 0x00000200 // Priority group 5.3 split +#define NVIC_APINT_PRIGROUP_4_4 0x00000300 // Priority group 4.4 split +#define NVIC_APINT_PRIGROUP_3_5 0x00000400 // Priority group 3.5 split +#define NVIC_APINT_PRIGROUP_2_6 0x00000500 // Priority group 2.6 split +#define NVIC_APINT_PRIGROUP_1_7 0x00000600 // Priority group 1.7 split +#define NVIC_APINT_PRIGROUP_0_8 0x00000700 // Priority group 0.8 split +#define NVIC_APINT_SYSRESETREQ 0x00000004 // System reset request +#define NVIC_APINT_VECT_CLR_ACT 0x00000002 // Clear active NMI/fault info +#define NVIC_APINT_VECT_RESET 0x00000001 // System reset + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_SYS_CTRL register. +// +//***************************************************************************** +#define NVIC_SYS_CTRL_SEVONPEND 0x00000010 // Wakeup on pend +#define NVIC_SYS_CTRL_SLEEPDEEP 0x00000004 // Deep sleep enable +#define NVIC_SYS_CTRL_SLEEPEXIT 0x00000002 // Sleep on ISR exit + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_CFG_CTRL register. +// +//***************************************************************************** +#define NVIC_CFG_CTRL_BFHFNMIGN 0x00000100 // Ignore bus fault in NMI/fault +#define NVIC_CFG_CTRL_DIV0 0x00000010 // Trap on divide by 0 +#define NVIC_CFG_CTRL_UNALIGNED 0x00000008 // Trap on unaligned access +#define NVIC_CFG_CTRL_DEEP_PEND 0x00000004 // Allow deep interrupt trigger +#define NVIC_CFG_CTRL_MAIN_PEND 0x00000002 // Allow main interrupt trigger +#define NVIC_CFG_CTRL_BASE_THR 0x00000001 // Thread state control + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_SYS_PRI1 register. +// +//***************************************************************************** +#define NVIC_SYS_PRI1_RES_M 0xFF000000 // Priority of reserved handler +#define NVIC_SYS_PRI1_USAGE_M 0x00FF0000 // Priority of usage fault handler +#define NVIC_SYS_PRI1_BUS_M 0x0000FF00 // Priority of bus fault handler +#define NVIC_SYS_PRI1_MEM_M 0x000000FF // Priority of mem manage handler +#define NVIC_SYS_PRI1_USAGE_S 16 +#define NVIC_SYS_PRI1_BUS_S 8 +#define NVIC_SYS_PRI1_MEM_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_SYS_PRI2 register. +// +//***************************************************************************** +#define NVIC_SYS_PRI2_SVC_M 0xFF000000 // Priority of SVCall handler +#define NVIC_SYS_PRI2_RES_M 0x00FFFFFF // Priority of reserved handlers +#define NVIC_SYS_PRI2_SVC_S 24 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_SYS_PRI3 register. +// +//***************************************************************************** +#define NVIC_SYS_PRI3_TICK_M 0xFF000000 // Priority of Sys Tick handler +#define NVIC_SYS_PRI3_PENDSV_M 0x00FF0000 // Priority of PendSV handler +#define NVIC_SYS_PRI3_RES_M 0x0000FF00 // Priority of reserved handler +#define NVIC_SYS_PRI3_DEBUG_M 0x000000FF // Priority of debug handler +#define NVIC_SYS_PRI3_TICK_S 24 +#define NVIC_SYS_PRI3_PENDSV_S 16 +#define NVIC_SYS_PRI3_DEBUG_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_SYS_HND_CTRL register. +// +//***************************************************************************** +#define NVIC_SYS_HND_CTRL_USAGE 0x00040000 // Usage fault enable +#define NVIC_SYS_HND_CTRL_BUS 0x00020000 // Bus fault enable +#define NVIC_SYS_HND_CTRL_MEM 0x00010000 // Mem manage fault enable +#define NVIC_SYS_HND_CTRL_SVC 0x00008000 // SVCall is pended +#define NVIC_SYS_HND_CTRL_BUSP 0x00004000 // Bus fault is pended +#define NVIC_SYS_HND_CTRL_TICK 0x00000800 // Sys tick is active +#define NVIC_SYS_HND_CTRL_PNDSV 0x00000400 // PendSV is active +#define NVIC_SYS_HND_CTRL_MON 0x00000100 // Monitor is active +#define NVIC_SYS_HND_CTRL_SVCA 0x00000080 // SVCall is active +#define NVIC_SYS_HND_CTRL_USGA 0x00000008 // Usage fault is active +#define NVIC_SYS_HND_CTRL_BUSA 0x00000002 // Bus fault is active +#define NVIC_SYS_HND_CTRL_MEMA 0x00000001 // Mem manage is active + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_FAULT_STAT register. +// +//***************************************************************************** +#define NVIC_FAULT_STAT_DIV0 0x02000000 // Divide by zero fault +#define NVIC_FAULT_STAT_UNALIGN 0x01000000 // Unaligned access fault +#define NVIC_FAULT_STAT_NOCP 0x00080000 // No coprocessor fault +#define NVIC_FAULT_STAT_INVPC 0x00040000 // Invalid PC fault +#define NVIC_FAULT_STAT_INVSTAT 0x00020000 // Invalid state fault +#define NVIC_FAULT_STAT_UNDEF 0x00010000 // Undefined instruction fault +#define NVIC_FAULT_STAT_BFARV 0x00008000 // BFAR is valid +#define NVIC_FAULT_STAT_BSTKE 0x00001000 // Stack bus fault +#define NVIC_FAULT_STAT_BUSTKE 0x00000800 // Unstack bus fault +#define NVIC_FAULT_STAT_IMPRE 0x00000400 // Imprecise data bus error +#define NVIC_FAULT_STAT_PRECISE 0x00000200 // Precise data bus error +#define NVIC_FAULT_STAT_IBUS 0x00000100 // Instruction bus fault +#define NVIC_FAULT_STAT_MMARV 0x00000080 // MMAR is valid +#define NVIC_FAULT_STAT_MSTKE 0x00000010 // Stack access violation +#define NVIC_FAULT_STAT_MUSTKE 0x00000008 // Unstack access violation +#define NVIC_FAULT_STAT_DERR 0x00000002 // Data access violation +#define NVIC_FAULT_STAT_IERR 0x00000001 // Instruction access violation + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_HFAULT_STAT register. +// +//***************************************************************************** +#define NVIC_HFAULT_STAT_DBG 0x80000000 // Debug event +#define NVIC_HFAULT_STAT_FORCED 0x40000000 // Cannot execute fault handler +#define NVIC_HFAULT_STAT_VECT 0x00000002 // Vector table read fault + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_DEBUG_STAT register. +// +//***************************************************************************** +#define NVIC_DEBUG_STAT_EXTRNL 0x00000010 // EDBGRQ asserted +#define NVIC_DEBUG_STAT_VCATCH 0x00000008 // Vector catch +#define NVIC_DEBUG_STAT_DWTTRAP 0x00000004 // DWT match +#define NVIC_DEBUG_STAT_BKPT 0x00000002 // Breakpoint instruction +#define NVIC_DEBUG_STAT_HALTED 0x00000001 // Halt request + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_MM_ADDR register. +// +//***************************************************************************** +#define NVIC_MM_ADDR_M 0xFFFFFFFF // Data fault address +#define NVIC_MM_ADDR_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_FAULT_ADDR register. +// +//***************************************************************************** +#define NVIC_FAULT_ADDR_M 0xFFFFFFFF // Data bus fault address +#define NVIC_FAULT_ADDR_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_EXC_STACK register. +// +//***************************************************************************** +#define NVIC_EXC_STACK_DEEP 0x00000001 // Exception stack + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_EXC_NUM register. +// +//***************************************************************************** +#define NVIC_EXC_NUM_M 0x000003FF // Exception number +#define NVIC_EXC_NUM_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_COPRO register. +// +//***************************************************************************** +#define NVIC_COPRO_15_M 0xC0000000 // Coprocessor 15 access mask +#define NVIC_COPRO_15_DENIED 0x00000000 // Coprocessor 15 access denied +#define NVIC_COPRO_15_PRIV 0x40000000 // Coprocessor 15 privileged addess +#define NVIC_COPRO_15_FULL 0xC0000000 // Coprocessor 15 full access +#define NVIC_COPRO_14_M 0x30000000 // Coprocessor 14 access mask +#define NVIC_COPRO_14_DENIED 0x00000000 // Coprocessor 14 access denied +#define NVIC_COPRO_14_PRIV 0x10000000 // Coprocessor 14 privileged addess +#define NVIC_COPRO_14_FULL 0x30000000 // Coprocessor 14 full access +#define NVIC_COPRO_13_M 0x0C000000 // Coprocessor 13 access mask +#define NVIC_COPRO_13_DENIED 0x00000000 // Coprocessor 13 access denied +#define NVIC_COPRO_13_PRIV 0x04000000 // Coprocessor 13 privileged addess +#define NVIC_COPRO_13_FULL 0x0C000000 // Coprocessor 13 full access +#define NVIC_COPRO_12_M 0x03000000 // Coprocessor 12 access mask +#define NVIC_COPRO_12_DENIED 0x00000000 // Coprocessor 12 access denied +#define NVIC_COPRO_12_PRIV 0x01000000 // Coprocessor 12 privileged addess +#define NVIC_COPRO_12_FULL 0x03000000 // Coprocessor 12 full access +#define NVIC_COPRO_11_M 0x00C00000 // Coprocessor 11 access mask +#define NVIC_COPRO_11_DENIED 0x00000000 // Coprocessor 11 access denied +#define NVIC_COPRO_11_PRIV 0x00400000 // Coprocessor 11 privileged addess +#define NVIC_COPRO_11_FULL 0x00C00000 // Coprocessor 11 full access +#define NVIC_COPRO_10_M 0x00300000 // Coprocessor 10 access mask +#define NVIC_COPRO_10_DENIED 0x00000000 // Coprocessor 10 access denied +#define NVIC_COPRO_10_PRIV 0x00100000 // Coprocessor 10 privileged addess +#define NVIC_COPRO_10_FULL 0x00300000 // Coprocessor 10 full access +#define NVIC_COPRO_9_M 0x000C0000 // Coprocessor 9 access mask +#define NVIC_COPRO_9_DENIED 0x00000000 // Coprocessor 9 access denied +#define NVIC_COPRO_9_PRIV 0x00040000 // Coprocessor 9 privileged addess +#define NVIC_COPRO_9_FULL 0x000C0000 // Coprocessor 9 full access +#define NVIC_COPRO_8_M 0x00030000 // Coprocessor 8 access mask +#define NVIC_COPRO_8_DENIED 0x00000000 // Coprocessor 8 access denied +#define NVIC_COPRO_8_PRIV 0x00010000 // Coprocessor 8 privileged addess +#define NVIC_COPRO_8_FULL 0x00030000 // Coprocessor 8 full access +#define NVIC_COPRO_7_M 0x0000C000 // Coprocessor 7 access mask +#define NVIC_COPRO_7_DENIED 0x00000000 // Coprocessor 7 access denied +#define NVIC_COPRO_7_PRIV 0x00004000 // Coprocessor 7 privileged addess +#define NVIC_COPRO_7_FULL 0x0000C000 // Coprocessor 7 full access +#define NVIC_COPRO_6_M 0x00003000 // Coprocessor 6 access mask +#define NVIC_COPRO_6_DENIED 0x00000000 // Coprocessor 6 access denied +#define NVIC_COPRO_6_PRIV 0x00001000 // Coprocessor 6 privileged addess +#define NVIC_COPRO_6_FULL 0x00003000 // Coprocessor 6 full access +#define NVIC_COPRO_5_M 0x00000C00 // Coprocessor 5 access mask +#define NVIC_COPRO_5_DENIED 0x00000000 // Coprocessor 5 access denied +#define NVIC_COPRO_5_PRIV 0x00000400 // Coprocessor 5 privileged addess +#define NVIC_COPRO_5_FULL 0x00000C00 // Coprocessor 5 full access +#define NVIC_COPRO_4_M 0x00000300 // Coprocessor 4 access mask +#define NVIC_COPRO_4_DENIED 0x00000000 // Coprocessor 4 access denied +#define NVIC_COPRO_4_PRIV 0x00000100 // Coprocessor 4 privileged addess +#define NVIC_COPRO_4_FULL 0x00000300 // Coprocessor 4 full access +#define NVIC_COPRO_3_M 0x000000C0 // Coprocessor 3 access mask +#define NVIC_COPRO_3_DENIED 0x00000000 // Coprocessor 3 access denied +#define NVIC_COPRO_3_PRIV 0x00000040 // Coprocessor 3 privileged addess +#define NVIC_COPRO_3_FULL 0x000000C0 // Coprocessor 3 full access +#define NVIC_COPRO_2_M 0x00000030 // Coprocessor 2 access mask +#define NVIC_COPRO_2_DENIED 0x00000000 // Coprocessor 2 access denied +#define NVIC_COPRO_2_PRIV 0x00000010 // Coprocessor 2 privileged addess +#define NVIC_COPRO_2_FULL 0x00000030 // Coprocessor 2 full access +#define NVIC_COPRO_1_M 0x0000000C // Coprocessor 1 access mask +#define NVIC_COPRO_1_DENIED 0x00000000 // Coprocessor 1 access denied +#define NVIC_COPRO_1_PRIV 0x00000004 // Coprocessor 1 privileged addess +#define NVIC_COPRO_1_FULL 0x0000000C // Coprocessor 1 full access +#define NVIC_COPRO_0_M 0x00000003 // Coprocessor 0 access mask +#define NVIC_COPRO_0_DENIED 0x00000000 // Coprocessor 0 access denied +#define NVIC_COPRO_0_PRIV 0x00000001 // Coprocessor 0 privileged addess +#define NVIC_COPRO_0_FULL 0x00000003 // Coprocessor 0 full access + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_MPU_TYPE register. +// +//***************************************************************************** +#define NVIC_MPU_TYPE_IREGION_M 0x00FF0000 // Number of I regions +#define NVIC_MPU_TYPE_DREGION_M 0x0000FF00 // Number of D regions +#define NVIC_MPU_TYPE_SEPARATE 0x00000001 // Separate or unified MPU +#define NVIC_MPU_TYPE_IREGION_S 16 +#define NVIC_MPU_TYPE_DREGION_S 8 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_MPU_CTRL register. +// +//***************************************************************************** +#define NVIC_MPU_CTRL_HFNMIENA 0x00000002 // MPU enabled during faults +#define NVIC_MPU_CTRL_ENABLE 0x00000001 // MPU enable + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_MPU_NUMBER register. +// +//***************************************************************************** +#define NVIC_MPU_NUMBER_M 0x000000FF // MPU region to access +#define NVIC_MPU_NUMBER_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_MPU_BASE register. +// +//***************************************************************************** +#define NVIC_MPU_BASE_ADDR_M 0xFFFFFF00 // Base address +#define NVIC_MPU_BASE_VALID 0x00000010 // Region number valid +#define NVIC_MPU_BASE_REGION_M 0x0000000F // Region number +#define NVIC_MPU_BASE_ADDR_S 8 +#define NVIC_MPU_BASE_REGION_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_MPU_ATTR register. +// +//***************************************************************************** +#define NVIC_MPU_ATTR_ATTRS 0xFFFF0000 // Attributes +#define NVIC_MPU_ATTR_SRD 0x0000FF00 // Sub-region disable +#define NVIC_MPU_ATTR_SZENABLE 0x000000FF // Region size + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_DBG_CTRL register. +// +//***************************************************************************** +#define NVIC_DBG_CTRL_DBGKEY_M 0xFFFF0000 // Debug key mask +#define NVIC_DBG_CTRL_DBGKEY 0xA05F0000 // Debug key +#define NVIC_DBG_CTRL_MON_PEND 0x00008000 // Pend the monitor +#define NVIC_DBG_CTRL_MON_REQ 0x00004000 // Monitor request +#define NVIC_DBG_CTRL_MON_EN 0x00002000 // Debug monitor enable +#define NVIC_DBG_CTRL_MONSTEP 0x00001000 // Monitor step the core +#define NVIC_DBG_CTRL_S_SLEEP 0x00000400 // Core is sleeping +#define NVIC_DBG_CTRL_S_HALT 0x00000200 // Core status on halt +#define NVIC_DBG_CTRL_S_REGRDY 0x00000100 // Register read/write available +#define NVIC_DBG_CTRL_S_LOCKUP 0x00000080 // Core is locked up +#define NVIC_DBG_CTRL_C_RESET 0x00000010 // Reset the core +#define NVIC_DBG_CTRL_C_MASKINT 0x00000008 // Mask interrupts when stepping +#define NVIC_DBG_CTRL_C_STEP 0x00000004 // Step the core +#define NVIC_DBG_CTRL_C_HALT 0x00000002 // Halt the core +#define NVIC_DBG_CTRL_C_DEBUGEN 0x00000001 // Enable debug + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_DBG_XFER register. +// +//***************************************************************************** +#define NVIC_DBG_XFER_REG_WNR 0x00010000 // Write or not read +#define NVIC_DBG_XFER_REG_SEL_M 0x0000001F // Register +#define NVIC_DBG_XFER_REG_R0 0x00000000 // Register R0 +#define NVIC_DBG_XFER_REG_R1 0x00000001 // Register R1 +#define NVIC_DBG_XFER_REG_R2 0x00000002 // Register R2 +#define NVIC_DBG_XFER_REG_R3 0x00000003 // Register R3 +#define NVIC_DBG_XFER_REG_R4 0x00000004 // Register R4 +#define NVIC_DBG_XFER_REG_R5 0x00000005 // Register R5 +#define NVIC_DBG_XFER_REG_R6 0x00000006 // Register R6 +#define NVIC_DBG_XFER_REG_R7 0x00000007 // Register R7 +#define NVIC_DBG_XFER_REG_R8 0x00000008 // Register R8 +#define NVIC_DBG_XFER_REG_R9 0x00000009 // Register R9 +#define NVIC_DBG_XFER_REG_R10 0x0000000A // Register R10 +#define NVIC_DBG_XFER_REG_R11 0x0000000B // Register R11 +#define NVIC_DBG_XFER_REG_R12 0x0000000C // Register R12 +#define NVIC_DBG_XFER_REG_R13 0x0000000D // Register R13 +#define NVIC_DBG_XFER_REG_R14 0x0000000E // Register R14 +#define NVIC_DBG_XFER_REG_R15 0x0000000F // Register R15 +#define NVIC_DBG_XFER_REG_FLAGS 0x00000010 // xPSR/Flags register +#define NVIC_DBG_XFER_REG_MSP 0x00000011 // Main SP +#define NVIC_DBG_XFER_REG_PSP 0x00000012 // Process SP +#define NVIC_DBG_XFER_REG_DSP 0x00000013 // Deep SP +#define NVIC_DBG_XFER_REG_CFBP 0x00000014 // Control/Fault/BasePri/PriMask + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_DBG_DATA register. +// +//***************************************************************************** +#define NVIC_DBG_DATA_M 0xFFFFFFFF // Data temporary cache +#define NVIC_DBG_DATA_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_DBG_INT register. +// +//***************************************************************************** +#define NVIC_DBG_INT_HARDERR 0x00000400 // Debug trap on hard fault +#define NVIC_DBG_INT_INTERR 0x00000200 // Debug trap on interrupt errors +#define NVIC_DBG_INT_BUSERR 0x00000100 // Debug trap on bus error +#define NVIC_DBG_INT_STATERR 0x00000080 // Debug trap on usage fault state +#define NVIC_DBG_INT_CHKERR 0x00000040 // Debug trap on usage fault check +#define NVIC_DBG_INT_NOCPERR 0x00000020 // Debug trap on coprocessor error +#define NVIC_DBG_INT_MMERR 0x00000010 // Debug trap on mem manage fault +#define NVIC_DBG_INT_RESET 0x00000008 // Core reset status +#define NVIC_DBG_INT_RSTPENDCLR 0x00000004 // Clear pending core reset +#define NVIC_DBG_INT_RSTPENDING 0x00000002 // Core reset is pending +#define NVIC_DBG_INT_RSTVCATCH 0x00000001 // Reset vector catch + +//***************************************************************************** +// +// The following define the bit fields in the NVIC_SW_TRIG register. +// +//***************************************************************************** +#define NVIC_SW_TRIG_INTID_M 0x000003FF // Interrupt to trigger +#define NVIC_SW_TRIG_INTID_S 0 + +#endif // __HW_NVIC_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_pwm.h b/Demo/Common/drivers/LuminaryMicro/hw_pwm.h new file mode 100644 index 000000000..6f670c108 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_pwm.h @@ -0,0 +1,260 @@ +//***************************************************************************** +// +// hw_pwm.h - Defines and Macros for Pulse Width Modulation (PWM) ports +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_PWM_H__ +#define __HW_PWM_H__ + +//***************************************************************************** +// +// PWM Module Register Offsets. +// +//***************************************************************************** +#define PWM_O_CTL 0x00000000 // PWM Master Control register +#define PWM_O_SYNC 0x00000004 // PWM Time Base Sync register +#define PWM_O_ENABLE 0x00000008 // PWM Output Enable register +#define PWM_O_INVERT 0x0000000C // PWM Output Inversion register +#define PWM_O_FAULT 0x00000010 // PWM Output Fault register +#define PWM_O_INTEN 0x00000014 // PWM Interrupt Enable register +#define PWM_O_RIS 0x00000018 // PWM Interrupt Raw Status reg. +#define PWM_O_ISC 0x0000001C // PWM Interrupt Status register +#define PWM_O_STATUS 0x00000020 // PWM Status register + +//***************************************************************************** +// +// The following define the bit fields in the PWM Master Control register. +// +//***************************************************************************** +#define PWM_CTL_GLOBAL_SYNC2 0x00000004 // Global sync generator 2 +#define PWM_CTL_GLOBAL_SYNC1 0x00000002 // Global sync generator 1 +#define PWM_CTL_GLOBAL_SYNC0 0x00000001 // Global sync generator 0 + +//***************************************************************************** +// +// The following define the bit fields in the PWM Time Base Sync register. +// +//***************************************************************************** +#define PWM_SYNC_SYNC2 0x00000004 // Reset generator 2 counter +#define PWM_SYNC_SYNC1 0x00000002 // Reset generator 1 counter +#define PWM_SYNC_SYNC0 0x00000001 // Reset generator 0 counter + +//***************************************************************************** +// +// The following define the bit fields in the PWM Output Enable register. +// +//***************************************************************************** +#define PWM_ENABLE_PWM5EN 0x00000020 // PWM5 pin enable +#define PWM_ENABLE_PWM4EN 0x00000010 // PWM4 pin enable +#define PWM_ENABLE_PWM3EN 0x00000008 // PWM3 pin enable +#define PWM_ENABLE_PWM2EN 0x00000004 // PWM2 pin enable +#define PWM_ENABLE_PWM1EN 0x00000002 // PWM1 pin enable +#define PWM_ENABLE_PWM0EN 0x00000001 // PWM0 pin enable + +//***************************************************************************** +// +// The following define the bit fields in the PWM Inversion register. +// +//***************************************************************************** +#define PWM_INVERT_PWM5INV 0x00000020 // PWM5 pin invert +#define PWM_INVERT_PWM4INV 0x00000010 // PWM4 pin invert +#define PWM_INVERT_PWM3INV 0x00000008 // PWM3 pin invert +#define PWM_INVERT_PWM2INV 0x00000004 // PWM2 pin invert +#define PWM_INVERT_PWM1INV 0x00000002 // PWM1 pin invert +#define PWM_INVERT_PWM0INV 0x00000001 // PWM0 pin invert + +//***************************************************************************** +// +// The following define the bit fields in the PWM Fault register. +// +//***************************************************************************** +#define PWM_FAULT_FAULT5 0x00000020 // PWM5 pin fault +#define PWM_FAULT_FAULT4 0x00000010 // PWM5 pin fault +#define PWM_FAULT_FAULT3 0x00000008 // PWM5 pin fault +#define PWM_FAULT_FAULT2 0x00000004 // PWM5 pin fault +#define PWM_FAULT_FAULT1 0x00000002 // PWM5 pin fault +#define PWM_FAULT_FAULT0 0x00000001 // PWM5 pin fault + +//***************************************************************************** +// +// PWM Interrupt Register bit definitions. +// +//***************************************************************************** +#define PWM_INT_INTFAULT 0x00010000 // Fault interrupt pending + +//***************************************************************************** +// +// The following define the bit fields in the PWM Status register. +// +//***************************************************************************** +#define PWM_STATUS_FAULT 0x00000001 // Fault status + +//***************************************************************************** +// +// PWM Generator standard offsets. +// +//***************************************************************************** +#define PWM_GEN_0_OFFSET 0x00000040 // PWM0 base +#define PWM_GEN_1_OFFSET 0x00000080 // PWM1 base +#define PWM_GEN_2_OFFSET 0x000000C0 // PWM2 base + +#define PWM_O_X_CTL 0x00000000 // Gen Control Reg +#define PWM_O_X_INTEN 0x00000004 // Gen Int/Trig Enable Reg +#define PWM_O_X_RIS 0x00000008 // Gen Raw Int Status Reg +#define PWM_O_X_ISC 0x0000000C // Gen Int Status Reg +#define PWM_O_X_LOAD 0x00000010 // Gen Load Reg +#define PWM_O_X_COUNT 0x00000014 // Gen Counter Reg +#define PWM_O_X_CMPA 0x00000018 // Gen Compare A Reg +#define PWM_O_X_CMPB 0x0000001C // Gen Compare B Reg +#define PWM_O_X_GENA 0x00000020 // Gen Generator A Ctrl Reg +#define PWM_O_X_GENB 0x00000024 // Gen Generator B Ctrl Reg +#define PWM_O_X_DBCTL 0x00000028 // Gen Dead Band Ctrl Reg +#define PWM_O_X_DBRISE 0x0000002C // Gen DB Rising Edge Delay Reg +#define PWM_O_X_DBFALL 0x00000030 // Gen DB Falling Edge Delay Reg + +//***************************************************************************** +// +// PWM_X Control Register bit definitions. +// +//***************************************************************************** +#define PWM_X_CTL_ENABLE 0x00000001 // Master enable for gen block +#define PWM_X_CTL_MODE 0x00000002 // Counter mode, down or up/down +#define PWM_X_CTL_DEBUG 0x00000004 // Debug mode +#define PWM_X_CTL_LOADUPD 0x00000008 // Update mode for the load reg +#define PWM_X_CTL_CMPAUPD 0x00000010 // Update mode for comp A reg +#define PWM_X_CTL_CMPBUPD 0x00000020 // Update mode for comp B reg + +//***************************************************************************** +// +// PWM_X Interrupt/Trigger Enable Register bit definitions. +// +//***************************************************************************** +#define PWM_X_INTEN_INTCNTZERO 0x00000001 // Int if COUNT = 0 +#define PWM_X_INTEN_INTCNTLOAD 0x00000002 // Int if COUNT = LOAD +#define PWM_X_INTEN_INTCMPAU 0x00000004 // Int if COUNT = CMPA U +#define PWM_X_INTEN_INTCMPAD 0x00000008 // Int if COUNT = CMPA D +#define PWM_X_INTEN_INTCMPBU 0x00000010 // Int if COUNT = CMPA U +#define PWM_X_INTEN_INTCMPBD 0x00000020 // Int if COUNT = CMPA D +#define PWM_X_INTEN_TRCNTZERO 0x00000100 // Trig if COUNT = 0 +#define PWM_X_INTEN_TRCNTLOAD 0x00000200 // Trig if COUNT = LOAD +#define PWM_X_INTEN_TRCMPAU 0x00000400 // Trig if COUNT = CMPA U +#define PWM_X_INTEN_TRCMPAD 0x00000800 // Trig if COUNT = CMPA D +#define PWM_X_INTEN_TRCMPBU 0x00001000 // Trig if COUNT = CMPA U +#define PWM_X_INTEN_TRCMPBD 0x00002000 // Trig if COUNT = CMPA D + +//***************************************************************************** +// +// PWM_X Raw Interrupt Status Register bit definitions. +// +//***************************************************************************** +#define PWM_X_RIS_INTCNTZERO 0x00000001 // PWM_X_COUNT = 0 int +#define PWM_X_RIS_INTCNTLOAD 0x00000002 // PWM_X_COUNT = PWM_X_LOAD int +#define PWM_X_RIS_INTCMPAU 0x00000004 // PWM_X_COUNT = PWM_X_CMPA U int +#define PWM_X_RIS_INTCMPAD 0x00000008 // PWM_X_COUNT = PWM_X_CMPA D int +#define PWM_X_RIS_INTCMPBU 0x00000010 // PWM_X_COUNT = PWM_X_CMPB U int +#define PWM_X_RIS_INTCMPBD 0x00000020 // PWM_X_COUNT = PWM_X_CMPB D int + +//***************************************************************************** +// +// PWM_X Interrupt Status Register bit definitions. +// +//***************************************************************************** +#define PWM_X_INT_INTCNTZERO 0x00000001 // PWM_X_COUNT = 0 received +#define PWM_X_INT_INTCNTLOAD 0x00000002 // PWM_X_COUNT = PWM_X_LOAD rcvd +#define PWM_X_INT_INTCMPAU 0x00000004 // PWM_X_COUNT = PWM_X_CMPA U rcvd +#define PWM_X_INT_INTCMPAD 0x00000008 // PWM_X_COUNT = PWM_X_CMPA D rcvd +#define PWM_X_INT_INTCMPBU 0x00000010 // PWM_X_COUNT = PWM_X_CMPB U rcvd +#define PWM_X_INT_INTCMPBD 0x00000020 // PWM_X_COUNT = PWM_X_CMPB D rcvd + +//***************************************************************************** +// +// PWM_X Generator A/B Control Register bit definitions. +// +//***************************************************************************** +#define PWM_X_GEN_Y_ACTZERO 0x00000003 // Act PWM_X_COUNT = 0 +#define PWM_X_GEN_Y_ACTLOAD 0x0000000C // Act PWM_X_COUNT = PWM_X_LOAD +#define PWM_X_GEN_Y_ACTCMPAU 0x00000030 // Act PWM_X_COUNT = PWM_X_CMPA U +#define PWM_X_GEN_Y_ACTCMPAD 0x000000C0 // Act PWM_X_COUNT = PWM_X_CMPA D +#define PWM_X_GEN_Y_ACTCMPBU 0x00000300 // Act PWM_X_COUNT = PWM_X_CMPB U +#define PWM_X_GEN_Y_ACTCMPBD 0x00000C00 // Act PWM_X_COUNT = PWM_X_CMPB D + +//***************************************************************************** +// +// PWM_X Generator A/B Control Register action definitions. +// +//***************************************************************************** +#define PWM_GEN_ACT_NONE 0x0 // Do nothing +#define PWM_GEN_ACT_INV 0x1 // Invert the output signal +#define PWM_GEN_ACT_ZERO 0x2 // Set the output signal to zero +#define PWM_GEN_ACT_ONE 0x3 // Set the output signal to one +#define PWM_GEN_ACT_ZERO_SHIFT 0 // Shift amount for the zero action +#define PWM_GEN_ACT_LOAD_SHIFT 2 // Shift amount for the load action +#define PWM_GEN_ACT_A_UP_SHIFT 4 // Shift amount for the A up action +#define PWM_GEN_ACT_A_DN_SHIFT 6 // Shift amount for the A dn action +#define PWM_GEN_ACT_B_UP_SHIFT 8 // Shift amount for the B up action +#define PWM_GEN_ACT_B_DN_SHIFT 10 // Shift amount for the B dn action + +//***************************************************************************** +// +// PWM_X Dead Band Control Register bit definitions. +// +//***************************************************************************** +#define PWM_DBCTL_ENABLE 0x00000001 // Enable dead band insertion + +//***************************************************************************** +// +// PWM Register reset values. +// +//***************************************************************************** +#define PWM_RV_CTL 0x00000000 // Master control of the PWM module +#define PWM_RV_SYNC 0x00000000 // Counter synch for PWM generators +#define PWM_RV_ENABLE 0x00000000 // Master enable for the PWM + // output pins +#define PWM_RV_INVERT 0x00000000 // Inversion control for + // PWM output pins +#define PWM_RV_FAULT 0x00000000 // Fault handling for the PWM + // output pins +#define PWM_RV_INTEN 0x00000000 // Interrupt enable +#define PWM_RV_RIS 0x00000000 // Raw interrupt status +#define PWM_RV_ISC 0x00000000 // Interrupt status and clearing +#define PWM_RV_STATUS 0x00000000 // Status +#define PWM_RV_X_CTL 0x00000000 // Master control of the PWM + // generator block +#define PWM_RV_X_INTEN 0x00000000 // Interrupt and trigger enable +#define PWM_RV_X_RIS 0x00000000 // Raw interrupt status +#define PWM_RV_X_ISC 0x00000000 // Interrupt status and clearing +#define PWM_RV_X_LOAD 0x00000000 // The load value for the counter +#define PWM_RV_X_COUNT 0x00000000 // The current counter value +#define PWM_RV_X_CMPA 0x00000000 // The comparator A value +#define PWM_RV_X_CMPB 0x00000000 // The comparator B value +#define PWM_RV_X_GENA 0x00000000 // Controls PWM generator A +#define PWM_RV_X_GENB 0x00000000 // Controls PWM generator B +#define PWM_RV_X_DBCTL 0x00000000 // Control the dead band generator +#define PWM_RV_X_DBRISE 0x00000000 // The dead band rising edge delay + // count +#define PWM_RV_X_DBFALL 0x00000000 // The dead band falling edge delay + // count + +#endif // __HW_PWM_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_qei.h b/Demo/Common/drivers/LuminaryMicro/hw_qei.h new file mode 100644 index 000000000..c06fe0e4d --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_qei.h @@ -0,0 +1,176 @@ +//***************************************************************************** +// +// hw_qei.h - Macros used when accessing the QEI hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_QEI_H__ +#define __HW_QEI_H__ + +//***************************************************************************** +// +// The following define the offsets of the QEI registers. +// +//***************************************************************************** +#define QEI_O_CTL 0x00000000 // Configuration and control reg. +#define QEI_O_STAT 0x00000004 // Status register +#define QEI_O_POS 0x00000008 // Current position register +#define QEI_O_MAXPOS 0x0000000C // Maximum position register +#define QEI_O_LOAD 0x00000010 // Velocity timer load register +#define QEI_O_TIME 0x00000014 // Velocity timer register +#define QEI_O_COUNT 0x00000018 // Velocity pulse count register +#define QEI_O_SPEED 0x0000001C // Velocity speed register +#define QEI_O_INTEN 0x00000020 // Interrupt enable register +#define QEI_O_RIS 0x00000024 // Raw interrupt status register +#define QEI_O_ISC 0x00000028 // Interrupt status register + +//***************************************************************************** +// +// The following define the bit fields in the QEI_CTL register. +// +//***************************************************************************** +#define QEI_CTL_STALLEN 0x00001000 // Stall enable +#define QEI_CTL_INVI 0x00000800 // Invert Index input +#define QEI_CTL_INVB 0x00000400 // Invert PhB input +#define QEI_CTL_INVA 0x00000200 // Invert PhA input +#define QEI_CTL_VELDIV_M 0x000001C0 // Velocity predivider mask +#define QEI_CTL_VELDIV_1 0x00000000 // Predivide by 1 +#define QEI_CTL_VELDIV_2 0x00000040 // Predivide by 2 +#define QEI_CTL_VELDIV_4 0x00000080 // Predivide by 4 +#define QEI_CTL_VELDIV_8 0x000000C0 // Predivide by 8 +#define QEI_CTL_VELDIV_16 0x00000100 // Predivide by 16 +#define QEI_CTL_VELDIV_32 0x00000140 // Predivide by 32 +#define QEI_CTL_VELDIV_64 0x00000180 // Predivide by 64 +#define QEI_CTL_VELDIV_128 0x000001C0 // Predivide by 128 +#define QEI_CTL_VELEN 0x00000020 // Velocity enable +#define QEI_CTL_RESMODE 0x00000010 // Position counter reset mode +#define QEI_CTL_CAPMODE 0x00000008 // Edge capture mode +#define QEI_CTL_SIGMODE 0x00000004 // Encoder signaling mode +#define QEI_CTL_SWAP 0x00000002 // Swap input signals +#define QEI_CTL_ENABLE 0x00000001 // QEI enable + +//***************************************************************************** +// +// The following define the bit fields in the QEI_STAT register. +// +//***************************************************************************** +#define QEI_STAT_DIRECTION 0x00000002 // Direction of rotation +#define QEI_STAT_ERROR 0x00000001 // Signalling error detected + +//***************************************************************************** +// +// The following define the bit fields in the QEI_POS register. +// +//***************************************************************************** +#define QEI_POS_M 0xFFFFFFFF // Current encoder position +#define QEI_POS_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the QEI_MAXPOS register. +// +//***************************************************************************** +#define QEI_MAXPOS_M 0xFFFFFFFF // Maximum encoder position +#define QEI_MAXPOS_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the QEI_LOAD register. +// +//***************************************************************************** +#define QEI_LOAD_M 0xFFFFFFFF // Velocity timer load value +#define QEI_LOAD_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the QEI_TIME register. +// +//***************************************************************************** +#define QEI_TIME_M 0xFFFFFFFF // Velocity timer current value +#define QEI_TIME_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the QEI_COUNT register. +// +//***************************************************************************** +#define QEI_COUNT_M 0xFFFFFFFF // Encoder running pulse count +#define QEI_COUNT_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the QEI_SPEED register. +// +//***************************************************************************** +#define QEI_SPEED_M 0xFFFFFFFF // Encoder pulse count +#define QEI_SPEED_S 0 + +//***************************************************************************** +// +// The following define the bit fields in the QEI_INTEN register. +// +//***************************************************************************** +#define QEI_INTEN_ERROR 0x00000008 // Phase error detected +#define QEI_INTEN_DIR 0x00000004 // Direction change +#define QEI_INTEN_TIMER 0x00000002 // Velocity timer expired +#define QEI_INTEN_INDEX 0x00000001 // Index pulse detected + +//***************************************************************************** +// +// The following define the bit fields in the QEI_RIS register. +// +//***************************************************************************** +#define QEI_RIS_ERROR 0x00000008 // Phase error detected +#define QEI_RIS_DIR 0x00000004 // Direction change +#define QEI_RIS_TIMER 0x00000002 // Velocity timer expired +#define QEI_RIS_INDEX 0x00000001 // Index pulse detected + +//***************************************************************************** +// +// The following define the bit fields in the QEI_ISC register. +// +//***************************************************************************** +#define QEI_INT_ERROR 0x00000008 // Phase error detected +#define QEI_INT_DIR 0x00000004 // Direction change +#define QEI_INT_TIMER 0x00000002 // Velocity timer expired +#define QEI_INT_INDEX 0x00000001 // Index pulse detected + +//***************************************************************************** +// +// The following define the reset values for the QEI registers. +// +//***************************************************************************** +#define QEI_RV_CTL 0x00000000 // Configuration and control reg. +#define QEI_RV_STAT 0x00000000 // Status register +#define QEI_RV_POS 0x00000000 // Current position register +#define QEI_RV_MAXPOS 0x00000000 // Maximum position register +#define QEI_RV_LOAD 0x00000000 // Velocity timer load register +#define QEI_RV_TIME 0x00000000 // Velocity timer register +#define QEI_RV_COUNT 0x00000000 // Velocity pulse count register +#define QEI_RV_SPEED 0x00000000 // Velocity speed register +#define QEI_RV_INTEN 0x00000000 // Interrupt enable register +#define QEI_RV_RIS 0x00000000 // Raw interrupt status register +#define QEI_RV_ISC 0x00000000 // Interrupt status register + +#endif // __HW_QEI_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_ssi.h b/Demo/Common/drivers/LuminaryMicro/hw_ssi.h new file mode 100644 index 000000000..b12c2c4f4 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_ssi.h @@ -0,0 +1,120 @@ +//***************************************************************************** +// +// hw_ssi.h - Macros used when accessing the SSI hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_SSI_H__ +#define __HW_SSI_H__ + +//***************************************************************************** +// +// The following define the offsets of the SSI registers. +// +//***************************************************************************** +#define SSI_O_CR0 0x00000000 // Control register 0 +#define SSI_O_CR1 0x00000004 // Control register 1 +#define SSI_O_DR 0x00000008 // Data register +#define SSI_O_SR 0x0000000C // Status register +#define SSI_O_CPSR 0x00000010 // Clock prescale register +#define SSI_O_IM 0x00000014 // Int mask set and clear register +#define SSI_O_RIS 0x00000018 // Raw interrupt register +#define SSI_O_MIS 0x0000001C // Masked interrupt register +#define SSI_O_ICR 0x00000020 // Interrupt clear register + +//***************************************************************************** +// +// The following define the bit fields in the SSI Control register 0. +// +//***************************************************************************** +#define SSI_CR0_SCR 0x0000FF00 // Serial clock rate +#define SSI_CR0_SPH 0x00000080 // SSPCLKOUT phase +#define SSI_CR0_SPO 0x00000040 // SSPCLKOUT polarity +#define SSI_CR0_FRF_MASK 0x00000030 // Frame format mask +#define SSI_CR0_FRF_MOTO 0x00000000 // Motorola SPI frame format +#define SSI_CR0_FRF_TI 0x00000010 // TI sync serial frame format +#define SSI_CR0_FRF_NMW 0x00000020 // National Microwire frame format +#define SSI_CR0_DSS 0x0000000F // Data size select +#define SSI_CR0_DSS_4 0x00000003 // 4 bit data +#define SSI_CR0_DSS_5 0x00000004 // 5 bit data +#define SSI_CR0_DSS_6 0x00000005 // 6 bit data +#define SSI_CR0_DSS_7 0x00000006 // 7 bit data +#define SSI_CR0_DSS_8 0x00000007 // 8 bit data +#define SSI_CR0_DSS_9 0x00000008 // 9 bit data +#define SSI_CR0_DSS_10 0x00000009 // 10 bit data +#define SSI_CR0_DSS_11 0x0000000A // 11 bit data +#define SSI_CR0_DSS_12 0x0000000B // 12 bit data +#define SSI_CR0_DSS_13 0x0000000C // 13 bit data +#define SSI_CR0_DSS_14 0x0000000D // 14 bit data +#define SSI_CR0_DSS_15 0x0000000E // 15 bit data +#define SSI_CR0_DSS_16 0x0000000F // 16 bit data + +//***************************************************************************** +// +// The following define the bit fields in the SSI Control register 1. +// +//***************************************************************************** +#define SSI_CR1_SOD 0x00000008 // Slave mode output disable +#define SSI_CR1_MS 0x00000004 // Master or slave mode select +#define SSI_CR1_SSE 0x00000002 // Sync serial port enable +#define SSI_CR1_LBM 0x00000001 // Loopback mode + +//***************************************************************************** +// +// The following define the bit fields in the SSI Status register. +// +//***************************************************************************** +#define SSI_SR_BSY 0x00000010 // SSI busy +#define SSI_SR_RFF 0x00000008 // RX FIFO full +#define SSI_SR_RNE 0x00000004 // RX FIFO not empty +#define SSI_SR_TNF 0x00000002 // TX FIFO not full +#define SSI_SR_TFE 0x00000001 // TX FIFO empty + +//***************************************************************************** +// +// The following define the bit fields in the SSI clock prescale register. +// +//***************************************************************************** +#define SSI_CPSR_CPSDVSR_MASK 0x000000FF // Clock prescale + +//***************************************************************************** +// +// The following define information concerning the SSI Data register. +// +//***************************************************************************** +#define TX_FIFO_SIZE (8) // Number of entries in the TX FIFO +#define RX_FIFO_SIZE (8) // Number of entries in the RX FIFO + +//***************************************************************************** +// +// The following define the bit fields in the interrupt mask set and clear, +// raw interrupt, masked interrupt, and interrupt clear registers. +// +//***************************************************************************** +#define SSI_INT_TXFF 0x00000008 // TX FIFO interrupt +#define SSI_INT_RXFF 0x00000004 // RX FIFO interrupt +#define SSI_INT_RXTO 0x00000002 // RX timeout interrupt +#define SSI_INT_RXOR 0x00000001 // RX overrun interrupt + +#endif // __HW_SSI_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_sysctl.h b/Demo/Common/drivers/LuminaryMicro/hw_sysctl.h new file mode 100644 index 000000000..f540e63a4 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_sysctl.h @@ -0,0 +1,703 @@ +//***************************************************************************** +// +// hw_sysctl.h - Macros used when accessing the system control hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_SYSCTL_H__ +#define __HW_SYSCTL_H__ + +//***************************************************************************** +// +// The following define the addresses of the system control registers. +// +//***************************************************************************** +#define SYSCTL_DID0 0x400fe000 // Device identification register 0 +#define SYSCTL_DID1 0x400fe004 // Device identification register 1 +#define SYSCTL_DC0 0x400fe008 // Device capabilities register 0 +#define SYSCTL_DC1 0x400fe010 // Device capabilities register 1 +#define SYSCTL_DC2 0x400fe014 // Device capabilities register 2 +#define SYSCTL_DC3 0x400fe018 // Device capabilities register 3 +#define SYSCTL_DC4 0x400fe01C // Device capabilities register 4 +#define SYSCTL_PBORCTL 0x400fe030 // POR/BOR reset control register +#define SYSCTL_LDOPCTL 0x400fe034 // LDO power control register +#define SYSCTL_SRCR0 0x400fe040 // Software reset control reg 0 +#define SYSCTL_SRCR1 0x400fe044 // Software reset control reg 1 +#define SYSCTL_SRCR2 0x400fe048 // Software reset control reg 2 +#define SYSCTL_RIS 0x400fe050 // Raw interrupt status register +#define SYSCTL_IMC 0x400fe054 // Interrupt mask/control register +#define SYSCTL_MISC 0x400fe058 // Interrupt status register +#define SYSCTL_RESC 0x400fe05c // Reset cause register +#define SYSCTL_RCC 0x400fe060 // Run-mode clock config register +#define SYSCTL_PLLCFG 0x400fe064 // PLL configuration register +#define SYSCTL_RCC2 0x400fe070 // Run-mode clock config register 2 +#define SYSCTL_RCGC0 0x400fe100 // Run-mode clock gating register 0 +#define SYSCTL_RCGC1 0x400fe104 // Run-mode clock gating register 1 +#define SYSCTL_RCGC2 0x400fe108 // Run-mode clock gating register 2 +#define SYSCTL_SCGC0 0x400fe110 // Sleep-mode clock gating reg 0 +#define SYSCTL_SCGC1 0x400fe114 // Sleep-mode clock gating reg 1 +#define SYSCTL_SCGC2 0x400fe118 // Sleep-mode clock gating reg 2 +#define SYSCTL_DCGC0 0x400fe120 // Deep Sleep-mode clock gate reg 0 +#define SYSCTL_DCGC1 0x400fe124 // Deep Sleep-mode clock gate reg 1 +#define SYSCTL_DCGC2 0x400fe128 // Deep Sleep-mode clock gate reg 2 +#define SYSCTL_DSLPCLKCFG 0x400fe144 // Deep Sleep-mode clock config reg +#define SYSCTL_CLKVCLR 0x400fe150 // Clock verifcation clear register +#define SYSCTL_LDOARST 0x400fe160 // LDO reset control register +#define SYSCTL_USER0 0x400fe1e0 // NV User Register 0 +#define SYSCTL_USER1 0x400fe1e4 // NV User Register 1 + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DID0 register. +// +//***************************************************************************** +#define SYSCTL_DID0_VER_MASK 0x70000000 // DID0 version mask +#define SYSCTL_DID0_VER_0 0x00000000 // DID0 version 0 +#define SYSCTL_DID0_VER_1 0x10000000 // DID0 version 1 +#define SYSCTL_DID0_CLASS_MASK 0x00FF0000 // Device Class +#define SYSCTL_DID0_CLASS_SANDSTORM 0x00000000 // Sandstorm-class Device +#define SYSCTL_DID0_CLASS_FURY 0x00010000 // Fury-class Device +#define SYSCTL_DID0_MAJ_MASK 0x0000FF00 // Major revision mask +#define SYSCTL_DID0_MAJ_A 0x00000000 // Major revision A +#define SYSCTL_DID0_MAJ_B 0x00000100 // Major revision B +#define SYSCTL_DID0_MAJ_C 0x00000200 // Major revision C +#define SYSCTL_DID0_MIN_MASK 0x000000FF // Minor revision mask +#define SYSCTL_DID0_MIN_0 0x00000000 // Minor revision 0 +#define SYSCTL_DID0_MIN_1 0x00000001 // Minor revision 1 +#define SYSCTL_DID0_MIN_2 0x00000002 // Minor revision 2 +#define SYSCTL_DID0_MIN_3 0x00000003 // Minor revision 3 +#define SYSCTL_DID0_MIN_4 0x00000004 // Minor revision 4 +#define SYSCTL_DID0_MIN_5 0x00000005 // Minor revision 5 + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DID1 register. +// +//***************************************************************************** +#define SYSCTL_DID1_VER_MASK 0xF0000000 // Register version mask +#define SYSCTL_DID1_FAM_MASK 0x0F000000 // Family mask +#define SYSCTL_DID1_FAM_S 0x00000000 // Stellaris family +#define SYSCTL_DID1_PRTNO_MASK 0x00FF0000 // Part number mask +#define SYSCTL_DID1_PRTNO_101 0x00010000 // LM3S101 +#define SYSCTL_DID1_PRTNO_102 0x00020000 // LM3S102 +#define SYSCTL_DID1_PRTNO_301 0x00110000 // LM3S301 +#define SYSCTL_DID1_PRTNO_310 0x00120000 // LM3S310 +#define SYSCTL_DID1_PRTNO_315 0x00130000 // LM3S315 +#define SYSCTL_DID1_PRTNO_316 0x00140000 // LM3S316 +#define SYSCTL_DID1_PRTNO_317 0x00170000 // LM3S317 +#define SYSCTL_DID1_PRTNO_328 0x00150000 // LM3S328 +#define SYSCTL_DID1_PRTNO_601 0x00210000 // LM3S601 +#define SYSCTL_DID1_PRTNO_610 0x00220000 // LM3S610 +#define SYSCTL_DID1_PRTNO_611 0x00230000 // LM3S611 +#define SYSCTL_DID1_PRTNO_612 0x00240000 // LM3S612 +#define SYSCTL_DID1_PRTNO_613 0x00250000 // LM3S613 +#define SYSCTL_DID1_PRTNO_615 0x00260000 // LM3S615 +#define SYSCTL_DID1_PRTNO_617 0x00280000 // LM3S617 +#define SYSCTL_DID1_PRTNO_618 0x00290000 // LM3S618 +#define SYSCTL_DID1_PRTNO_628 0x00270000 // LM3S628 +#define SYSCTL_DID1_PRTNO_801 0x00310000 // LM3S801 +#define SYSCTL_DID1_PRTNO_811 0x00320000 // LM3S811 +#define SYSCTL_DID1_PRTNO_812 0x00330000 // LM3S812 +#define SYSCTL_DID1_PRTNO_815 0x00340000 // LM3S815 +#define SYSCTL_DID1_PRTNO_817 0x00360000 // LM3S817 +#define SYSCTL_DID1_PRTNO_818 0x00370000 // LM3S818 +#define SYSCTL_DID1_PRTNO_828 0x00350000 // LM3S828 +#define SYSCTL_DID1_PRTNO_1110 0x00BF0000 // LM3S1110 +#define SYSCTL_DID1_PRTNO_1133 0x00C30000 // LM3S1133 +#define SYSCTL_DID1_PRTNO_1138 0x00C50000 // LM3S1138 +#define SYSCTL_DID1_PRTNO_1150 0x00C10000 // LM3S1150 +#define SYSCTL_DID1_PRTNO_1162 0x00C40000 // LM3S1162 +#define SYSCTL_DID1_PRTNO_1165 0x00C20000 // LM3S1165 +#define SYSCTL_DID1_PRTNO_1332 0x00C60000 // LM3S1332 +#define SYSCTL_DID1_PRTNO_1435 0x00BC0000 // LM3S1435 +#define SYSCTL_DID1_PRTNO_1439 0x00BA0000 // LM3S1439 +#define SYSCTL_DID1_PRTNO_1512 0x00BB0000 // LM3S1512 +#define SYSCTL_DID1_PRTNO_1538 0x00C70000 // LM3S1538 +#define SYSCTL_DID1_PRTNO_1620 0x00C00000 // LM3S1620 +#define SYSCTL_DID1_PRTNO_1635 0x00B30000 // LM3S1635 +#define SYSCTL_DID1_PRTNO_1637 0x00BD0000 // LM3S1637 +#define SYSCTL_DID1_PRTNO_1751 0x00B90000 // LM3S1751 +#define SYSCTL_DID1_PRTNO_1850 0x00B40000 // LM3S1850 +#define SYSCTL_DID1_PRTNO_1937 0x00B70000 // LM3S1937 +#define SYSCTL_DID1_PRTNO_1958 0x00BE0000 // LM3S1958 +#define SYSCTL_DID1_PRTNO_1960 0x00B50000 // LM3S1960 +#define SYSCTL_DID1_PRTNO_1968 0x00B80000 // LM3S1968 +#define SYSCTL_DID1_PRTNO_2110 0x00510000 // LM3S2110 +#define SYSCTL_DID1_PRTNO_2139 0x00840000 // LM3S2139 +#define SYSCTL_DID1_PRTNO_2410 0x00A20000 // LM3S2410 +#define SYSCTL_DID1_PRTNO_2412 0x00590000 // LM3S2412 +#define SYSCTL_DID1_PRTNO_2432 0x00560000 // LM3S2432 +#define SYSCTL_DID1_PRTNO_2533 0x005A0000 // LM3S2533 +#define SYSCTL_DID1_PRTNO_2620 0x00570000 // LM3S2620 +#define SYSCTL_DID1_PRTNO_2637 0x00850000 // LM3S2637 +#define SYSCTL_DID1_PRTNO_2651 0x00530000 // LM3S2651 +#define SYSCTL_DID1_PRTNO_2730 0x00A40000 // LM3S2730 +#define SYSCTL_DID1_PRTNO_2739 0x00520000 // LM3S2739 +#define SYSCTL_DID1_PRTNO_2939 0x00540000 // LM3S2939 +#define SYSCTL_DID1_PRTNO_2948 0x008F0000 // LM3S2948 +#define SYSCTL_DID1_PRTNO_2950 0x00580000 // LM3S2950 +#define SYSCTL_DID1_PRTNO_2965 0x00550000 // LM3S2965 +#define SYSCTL_DID1_PRTNO_6100 0x00A10000 // LM3S6100 +#define SYSCTL_DID1_PRTNO_6110 0x00740000 // LM3S6110 +#define SYSCTL_DID1_PRTNO_6420 0x00A50000 // LM3S6420 +#define SYSCTL_DID1_PRTNO_6422 0x00820000 // LM3S6422 +#define SYSCTL_DID1_PRTNO_6432 0x00750000 // LM3S6432 +#define SYSCTL_DID1_PRTNO_6537 0x00760000 // LM3S6537 +#define SYSCTL_DID1_PRTNO_6610 0x00710000 // LM3S6610 +#define SYSCTL_DID1_PRTNO_6633 0x00830000 // LM3S6633 +#define SYSCTL_DID1_PRTNO_6637 0x008B0000 // LM3S6637 +#define SYSCTL_DID1_PRTNO_6730 0x00A30000 // LM3S6730 +#define SYSCTL_DID1_PRTNO_6753 0x00770000 // LM3S6753 +#define SYSCTL_DID1_PRTNO_6938 0x00890000 // LM3S6938 +#define SYSCTL_DID1_PRTNO_6950 0x00720000 // LM3S6950 +#define SYSCTL_DID1_PRTNO_6952 0x00780000 // LM3S6952 +#define SYSCTL_DID1_PRTNO_6965 0x00730000 // LM3S6965 +#define SYSCTL_DID1_PRTNO_8530 0x00640000 // LM3S8530 +#define SYSCTL_DID1_PRTNO_8538 0x008E0000 // LM3S8538 +#define SYSCTL_DID1_PRTNO_8630 0x00610000 // LM3S8630 +#define SYSCTL_DID1_PRTNO_8730 0x00630000 // LM3S8730 +#define SYSCTL_DID1_PRTNO_8733 0x008D0000 // LM3S8733 +#define SYSCTL_DID1_PRTNO_8738 0x00860000 // LM3S8738 +#define SYSCTL_DID1_PRTNO_8930 0x00650000 // LM3S8930 +#define SYSCTL_DID1_PRTNO_8933 0x008C0000 // LM3S8933 +#define SYSCTL_DID1_PRTNO_8938 0x00880000 // LM3S8938 +#define SYSCTL_DID1_PRTNO_8962 0x00A60000 // LM3S8962 +#define SYSCTL_DID1_PRTNO_8970 0x00620000 // LM3S8970 +#define SYSCTL_DID1_PINCNT_MASK 0x0000E000 // Pin count +#define SYSCTL_DID1_PINCNT_100 0x00004000 // 100 pin package +#define SYSCTL_DID1_TEMP_MASK 0x000000E0 // Temperature range mask +#define SYSCTL_DID1_TEMP_C 0x00000000 // Commercial temp range (0..70C) +#define SYSCTL_DID1_TEMP_I 0x00000020 // Industrial temp range (-40..85C) +#define SYSCTL_DID1_PKG_MASK 0x00000018 // Package mask +#define SYSCTL_DID1_PKG_28SOIC 0x00000000 // 28-pin SOIC +#define SYSCTL_DID1_PKG_48QFP 0x00000008 // 48-pin QFP +#define SYSCTL_DID1_ROHS 0x00000004 // Part is RoHS compliant +#define SYSCTL_DID1_QUAL_MASK 0x00000003 // Qualification status mask +#define SYSCTL_DID1_QUAL_ES 0x00000000 // Engineering sample (unqualified) +#define SYSCTL_DID1_QUAL_PP 0x00000001 // Pilot production (unqualified) +#define SYSCTL_DID1_QUAL_FQ 0x00000002 // Fully qualified +#define SYSCTL_DID1_PRTNO_SHIFT 16 + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DC0 register. +// +//***************************************************************************** +#define SYSCTL_DC0_SRAMSZ_MASK 0xFFFF0000 // SRAM size mask +#define SYSCTL_DC0_SRAMSZ_2KB 0x00070000 // 2 KB of SRAM +#define SYSCTL_DC0_SRAMSZ_4KB 0x000F0000 // 4 KB of SRAM +#define SYSCTL_DC0_SRAMSZ_8KB 0x001F0000 // 8 KB of SRAM +#define SYSCTL_DC0_SRAMSZ_16KB 0x003F0000 // 16 KB of SRAM +#define SYSCTL_DC0_SRAMSZ_32KB 0x007F0000 // 32 KB of SRAM +#define SYSCTL_DC0_SRAMSZ_64KB 0x00FF0000 // 64 KB of SRAM +#define SYSCTL_DC0_FLASHSZ_MASK 0x0000FFFF // Flash size mask +#define SYSCTL_DC0_FLASHSZ_8KB 0x00000003 // 8 KB of flash +#define SYSCTL_DC0_FLASHSZ_16KB 0x00000007 // 16 KB of flash +#define SYSCTL_DC0_FLASHSZ_32KB 0x0000000F // 32 KB of flash +#define SYSCTL_DC0_FLASHSZ_64KB 0x0000001F // 64 KB of flash +#define SYSCTL_DC0_FLASHSZ_96KB 0x0000002F // 96 KB of flash +#define SYSCTL_DC0_FLASHSZ_128K 0x0000003F // 128 KB of flash +#define SYSCTL_DC0_FLASHSZ_256K 0x0000007F // 256 KB of flash + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DC1 register. +// +//***************************************************************************** +#define SYSCTL_DC1_CAN2 0x04000000 // CAN2 module present +#define SYSCTL_DC1_CAN1 0x02000000 // CAN1 module present +#define SYSCTL_DC1_CAN0 0x01000000 // CAN0 module present +#define SYSCTL_DC1_PWM 0x00100000 // PWM module present +#define SYSCTL_DC1_ADC 0x00010000 // ADC module present +#define SYSCTL_DC1_SYSDIV_MASK 0x0000F000 // Minimum system divider mask +#define SYSCTL_DC1_ADCSPD_MASK 0x00000F00 // ADC speed mask +#define SYSCTL_DC1_ADCSPD_1M 0x00000300 // 1Msps ADC +#define SYSCTL_DC1_ADCSPD_500K 0x00000200 // 500Ksps ADC +#define SYSCTL_DC1_ADCSPD_250K 0x00000100 // 250Ksps ADC +#define SYSCTL_DC1_ADCSPD_125K 0x00000000 // 125Ksps ADC +#define SYSCTL_DC1_MPU 0x00000080 // Cortex M3 MPU present +#define SYSCTL_DC1_HIB 0x00000040 // Hibernation module present +#define SYSCTL_DC1_TEMP 0x00000020 // Temperature sensor present +#define SYSCTL_DC1_PLL 0x00000010 // PLL present +#define SYSCTL_DC1_WDOG 0x00000008 // Watchdog present +#define SYSCTL_DC1_SWO 0x00000004 // Serial wire output present +#define SYSCTL_DC1_SWD 0x00000002 // Serial wire debug present +#define SYSCTL_DC1_JTAG 0x00000001 // JTAG debug present + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DC2 register. +// +//***************************************************************************** +#define SYSCTL_DC2_COMP2 0x04000000 // Analog comparator 2 present +#define SYSCTL_DC2_COMP1 0x02000000 // Analog comparator 1 present +#define SYSCTL_DC2_COMP0 0x01000000 // Analog comparator 0 present +#define SYSCTL_DC2_TIMER3 0x00080000 // Timer 3 present +#define SYSCTL_DC2_TIMER2 0x00040000 // Timer 2 present +#define SYSCTL_DC2_TIMER1 0x00020000 // Timer 1 present +#define SYSCTL_DC2_TIMER0 0x00010000 // Timer 0 present +#define SYSCTL_DC2_I2C1 0x00004000 // I2C 1 present +#define SYSCTL_DC2_I2C0 0x00001000 // I2C 0 present +#ifndef DEPRECATED +#define SYSCTL_DC2_I2C 0x00001000 // I2C present +#endif +#define SYSCTL_DC2_QEI1 0x00000200 // QEI 1 present +#define SYSCTL_DC2_QEI0 0x00000100 // QEI 0 present +#ifndef DEPRECATED +#define SYSCTL_DC2_QEI 0x00000100 // QEI present +#endif +#define SYSCTL_DC2_SSI1 0x00000020 // SSI 1 present +#define SYSCTL_DC2_SSI0 0x00000010 // SSI 0 present +#ifndef DEPRECATED +#define SYSCTL_DC2_SSI 0x00000010 // SSI present +#endif +#define SYSCTL_DC2_UART2 0x00000004 // UART 2 present +#define SYSCTL_DC2_UART1 0x00000002 // UART 1 present +#define SYSCTL_DC2_UART0 0x00000001 // UART 0 present + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DC3 register. +// +//***************************************************************************** +#define SYSCTL_DC3_32KHZ 0x80000000 // 32kHz pin present +#define SYSCTL_DC3_CCP5 0x20000000 // CCP5 pin present +#define SYSCTL_DC3_CCP4 0x10000000 // CCP4 pin present +#define SYSCTL_DC3_CCP3 0x08000000 // CCP3 pin present +#define SYSCTL_DC3_CCP2 0x04000000 // CCP2 pin present +#define SYSCTL_DC3_CCP1 0x02000000 // CCP1 pin present +#define SYSCTL_DC3_CCP0 0x01000000 // CCP0 pin present +#define SYSCTL_DC3_ADC7 0x00800000 // ADC7 pin present +#define SYSCTL_DC3_ADC6 0x00400000 // ADC6 pin present +#define SYSCTL_DC3_ADC5 0x00200000 // ADC5 pin present +#define SYSCTL_DC3_ADC4 0x00100000 // ADC4 pin present +#define SYSCTL_DC3_ADC3 0x00080000 // ADC3 pin present +#define SYSCTL_DC3_ADC2 0x00040000 // ADC2 pin present +#define SYSCTL_DC3_ADC1 0x00020000 // ADC1 pin present +#define SYSCTL_DC3_ADC0 0x00010000 // ADC0 pin present +#define SYSCTL_DC3_MC_FAULT0 0x00008000 // MC0 fault pin present +#define SYSCTL_DC3_C2O 0x00004000 // C2o pin present +#define SYSCTL_DC3_C2PLUS 0x00002000 // C2+ pin present +#define SYSCTL_DC3_C2MINUS 0x00001000 // C2- pin present +#define SYSCTL_DC3_C1O 0x00000800 // C1o pin present +#define SYSCTL_DC3_C1PLUS 0x00000400 // C1+ pin present +#define SYSCTL_DC3_C1MINUS 0x00000200 // C1- pin present +#define SYSCTL_DC3_C0O 0x00000100 // C0o pin present +#define SYSCTL_DC3_C0PLUS 0x00000080 // C0+ pin present +#define SYSCTL_DC3_C0MINUS 0x00000040 // C0- pin present +#define SYSCTL_DC3_PWM5 0x00000020 // PWM5 pin present +#define SYSCTL_DC3_PWM4 0x00000010 // PWM4 pin present +#define SYSCTL_DC3_PWM3 0x00000008 // PWM3 pin present +#define SYSCTL_DC3_PWM2 0x00000004 // PWM2 pin present +#define SYSCTL_DC3_PWM1 0x00000002 // PWM1 pin present +#define SYSCTL_DC3_PWM0 0x00000001 // PWM0 pin present + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DC4 register. +// +//***************************************************************************** +#define SYSCTL_DC4_ETH 0x50000000 // Ethernet present +#define SYSCTL_DC4_GPIOH 0x00000080 // GPIO port H present +#define SYSCTL_DC4_GPIOG 0x00000040 // GPIO port G present +#define SYSCTL_DC4_GPIOF 0x00000020 // GPIO port F present +#define SYSCTL_DC4_GPIOE 0x00000010 // GPIO port E present +#define SYSCTL_DC4_GPIOD 0x00000008 // GPIO port D present +#define SYSCTL_DC4_GPIOC 0x00000004 // GPIO port C present +#define SYSCTL_DC4_GPIOB 0x00000002 // GPIO port B present +#define SYSCTL_DC4_GPIOA 0x00000001 // GPIO port A present + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_PBORCTL register. +// +//***************************************************************************** +#define SYSCTL_PBORCTL_BOR_MASK 0x0000FFFC // BOR wait timer +#define SYSCTL_PBORCTL_BORIOR 0x00000002 // BOR interrupt or reset +#define SYSCTL_PBORCTL_BORWT 0x00000001 // BOR wait and check for noise +#define SYSCTL_PBORCTL_BOR_SH 2 + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_LDOPCTL register. +// +//***************************************************************************** +#define SYSCTL_LDOPCTL_MASK 0x0000003F // Voltage adjust mask +#define SYSCTL_LDOPCTL_2_25V 0x00000005 // LDO output of 2.25V +#define SYSCTL_LDOPCTL_2_30V 0x00000004 // LDO output of 2.30V +#define SYSCTL_LDOPCTL_2_35V 0x00000003 // LDO output of 2.35V +#define SYSCTL_LDOPCTL_2_40V 0x00000002 // LDO output of 2.40V +#define SYSCTL_LDOPCTL_2_45V 0x00000001 // LDO output of 2.45V +#define SYSCTL_LDOPCTL_2_50V 0x00000000 // LDO output of 2.50V +#define SYSCTL_LDOPCTL_2_55V 0x0000001F // LDO output of 2.55V +#define SYSCTL_LDOPCTL_2_60V 0x0000001E // LDO output of 2.60V +#define SYSCTL_LDOPCTL_2_65V 0x0000001D // LDO output of 2.65V +#define SYSCTL_LDOPCTL_2_70V 0x0000001C // LDO output of 2.70V +#define SYSCTL_LDOPCTL_2_75V 0x0000001B // LDO output of 2.75V + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_SRCR0, SYSCTL_RCGC0, +// SYSCTL_SCGC0, and SYSCTL_DCGC0 registers. +// +//***************************************************************************** +#define SYSCTL_SET0_CAN2 0x04000000 // CAN2 module +#define SYSCTL_SET0_CAN1 0x02000000 // CAN1 module +#define SYSCTL_SET0_CAN0 0x01000000 // CAN0 module +#define SYSCTL_SET0_PWM 0x00100000 // PWM module +#define SYSCTL_SET0_ADC 0x00010000 // ADC module +#define SYSCTL_SET0_ADCSPD_MASK 0x00000F00 // ADC speed mask +#define SYSCTL_SET0_ADCSPD_1M 0x00000300 // 1Msps ADC +#define SYSCTL_SET0_ADCSPD_500K 0x00000200 // 500Ksps ADC +#define SYSCTL_SET0_ADCSPD_250K 0x00000100 // 250Ksps ADC +#define SYSCTL_SET0_ADCSPD_125K 0x00000000 // 125Ksps ADC +#define SYSCTL_SET0_HIB 0x00000040 // Hibernation module +#define SYSCTL_SET0_WDOG 0x00000008 // Watchdog module + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_SRCR1, SYSCTL_RCGC1, +// SYSCTL_SCGC1, and SYSCTL_DCGC1 registers. +// +//***************************************************************************** +#define SYSCTL_SET1_COMP2 0x04000000 // Analog comparator module 2 +#define SYSCTL_SET1_COMP1 0x02000000 // Analog comparator module 1 +#define SYSCTL_SET1_COMP0 0x01000000 // Analog comparator module 0 +#define SYSCTL_SET1_TIMER3 0x00080000 // Timer module 3 +#define SYSCTL_SET1_TIMER2 0x00040000 // Timer module 2 +#define SYSCTL_SET1_TIMER1 0x00020000 // Timer module 1 +#define SYSCTL_SET1_TIMER0 0x00010000 // Timer module 0 +#define SYSCTL_SET1_I2C1 0x00004000 // I2C module 1 +#define SYSCTL_SET1_I2C0 0x00001000 // I2C module 0 +#ifndef DEPRECATED +#define SYSCTL_SET1_I2C 0x00001000 // I2C module +#endif +#define SYSCTL_SET1_QEI1 0x00000200 // QEI module 1 +#define SYSCTL_SET1_QEI0 0x00000100 // QEI module 0 +#ifndef DEPRECATED +#define SYSCTL_SET1_QEI 0x00000100 // QEI module +#endif +#define SYSCTL_SET1_SSI1 0x00000020 // SSI module 1 +#define SYSCTL_SET1_SSI0 0x00000010 // SSI module 0 +#ifndef DEPRECATED +#define SYSCTL_SET1_SSI 0x00000010 // SSI module +#endif +#define SYSCTL_SET1_UART2 0x00000004 // UART module 2 +#define SYSCTL_SET1_UART1 0x00000002 // UART module 1 +#define SYSCTL_SET1_UART0 0x00000001 // UART module 0 + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_SRCR2, SYSCTL_RCGC2, +// SYSCTL_SCGC2, and SYSCTL_DCGC2 registers. +// +//***************************************************************************** +#define SYSCTL_SET2_ETH 0x50000000 // ETH module +#define SYSCTL_SET2_GPIOH 0x00000080 // GPIO H module +#define SYSCTL_SET2_GPIOG 0x00000040 // GPIO G module +#define SYSCTL_SET2_GPIOF 0x00000020 // GPIO F module +#define SYSCTL_SET2_GPIOE 0x00000010 // GPIO E module +#define SYSCTL_SET2_GPIOD 0x00000008 // GPIO D module +#define SYSCTL_SET2_GPIOC 0x00000004 // GPIO C module +#define SYSCTL_SET2_GPIOB 0x00000002 // GPIO B module +#define SYSCTL_SET2_GPIOA 0x00000001 // GIPO A module + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_RIS, SYSCTL_IMC, and +// SYSCTL_IMS registers. +// +//***************************************************************************** +#define SYSCTL_INT_PLL_LOCK 0x00000040 // PLL lock interrupt +#define SYSCTL_INT_CUR_LIMIT 0x00000020 // Current limit interrupt +#define SYSCTL_INT_IOSC_FAIL 0x00000010 // Internal oscillator failure int +#define SYSCTL_INT_MOSC_FAIL 0x00000008 // Main oscillator failure int +#define SYSCTL_INT_POR 0x00000004 // Power on reset interrupt +#define SYSCTL_INT_BOR 0x00000002 // Brown out interrupt +#define SYSCTL_INT_PLL_FAIL 0x00000001 // PLL failure interrupt + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_RESC register. +// +//***************************************************************************** +#define SYSCTL_RESC_LDO 0x00000020 // LDO power OK lost reset +#define SYSCTL_RESC_SW 0x00000010 // Software reset +#define SYSCTL_RESC_WDOG 0x00000008 // Watchdog reset +#define SYSCTL_RESC_BOR 0x00000004 // Brown-out reset +#define SYSCTL_RESC_POR 0x00000002 // Power on reset +#define SYSCTL_RESC_EXT 0x00000001 // External reset + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_RCC register. +// +//***************************************************************************** +#define SYSCTL_RCC_ACG 0x08000000 // Automatic clock gating +#define SYSCTL_RCC_SYSDIV_MASK 0x07800000 // System clock divider +#define SYSCTL_RCC_SYSDIV_2 0x00800000 // System clock /2 +#define SYSCTL_RCC_SYSDIV_3 0x01000000 // System clock /3 +#define SYSCTL_RCC_SYSDIV_4 0x01800000 // System clock /4 +#define SYSCTL_RCC_SYSDIV_5 0x02000000 // System clock /5 +#define SYSCTL_RCC_SYSDIV_6 0x02800000 // System clock /6 +#define SYSCTL_RCC_SYSDIV_7 0x03000000 // System clock /7 +#define SYSCTL_RCC_SYSDIV_8 0x03800000 // System clock /8 +#define SYSCTL_RCC_SYSDIV_9 0x04000000 // System clock /9 +#define SYSCTL_RCC_SYSDIV_10 0x04800000 // System clock /10 +#define SYSCTL_RCC_SYSDIV_11 0x05000000 // System clock /11 +#define SYSCTL_RCC_SYSDIV_12 0x05800000 // System clock /12 +#define SYSCTL_RCC_SYSDIV_13 0x06000000 // System clock /13 +#define SYSCTL_RCC_SYSDIV_14 0x06800000 // System clock /14 +#define SYSCTL_RCC_SYSDIV_15 0x07000000 // System clock /15 +#define SYSCTL_RCC_SYSDIV_16 0x07800000 // System clock /16 +#define SYSCTL_RCC_USE_SYSDIV 0x00400000 // Use sytem clock divider +#define SYSCTL_RCC_USE_PWMDIV 0x00100000 // Use PWM clock divider +#define SYSCTL_RCC_PWMDIV_MASK 0x000E0000 // PWM clock divider +#define SYSCTL_RCC_PWMDIV_2 0x00000000 // PWM clock /2 +#define SYSCTL_RCC_PWMDIV_4 0x00020000 // PWM clock /4 +#define SYSCTL_RCC_PWMDIV_8 0x00040000 // PWM clock /8 +#define SYSCTL_RCC_PWMDIV_16 0x00060000 // PWM clock /16 +#define SYSCTL_RCC_PWMDIV_32 0x00080000 // PWM clock /32 +#define SYSCTL_RCC_PWMDIV_64 0x000A0000 // PWM clock /64 +#define SYSCTL_RCC_PWRDN 0x00002000 // PLL power down +#define SYSCTL_RCC_OE 0x00001000 // PLL output enable +#define SYSCTL_RCC_BYPASS 0x00000800 // PLL bypass +#define SYSCTL_RCC_PLLVER 0x00000400 // PLL verification timer enable +#define SYSCTL_RCC_XTAL_MASK 0x000003C0 // Crystal attached to main osc +#define SYSCTL_RCC_XTAL_1MHZ 0x00000000 // Using a 1MHz crystal +#define SYSCTL_RCC_XTAL_1_84MHZ 0x00000040 // Using a 1.8432MHz crystal +#define SYSCTL_RCC_XTAL_2MHZ 0x00000080 // Using a 2MHz crystal +#define SYSCTL_RCC_XTAL_2_45MHZ 0x000000C0 // Using a 2.4576MHz crystal +#define SYSCTL_RCC_XTAL_3_57MHZ 0x00000100 // Using a 3.579545MHz crystal +#define SYSCTL_RCC_XTAL_3_68MHZ 0x00000140 // Using a 3.6864MHz crystal +#define SYSCTL_RCC_XTAL_4MHZ 0x00000180 // Using a 4MHz crystal +#ifdef DEPRECATED +#define SYSCTL_RCC_XTAL_3_68MHz 0x00000140 // Using a 3.6864MHz crystal +#define SYSCTL_RCC_XTAL_4MHz 0x00000180 // Using a 4MHz crystal +#endif +#define SYSCTL_RCC_XTAL_4_09MHZ 0x000001C0 // Using a 4.096MHz crystal +#define SYSCTL_RCC_XTAL_4_91MHZ 0x00000200 // Using a 4.9152MHz crystal +#define SYSCTL_RCC_XTAL_5MHZ 0x00000240 // Using a 5MHz crystal +#define SYSCTL_RCC_XTAL_5_12MHZ 0x00000280 // Using a 5.12MHz crystal +#define SYSCTL_RCC_XTAL_6MHZ 0x000002C0 // Using a 6MHz crystal +#define SYSCTL_RCC_XTAL_6_14MHZ 0x00000300 // Using a 6.144MHz crystal +#define SYSCTL_RCC_XTAL_7_37MHZ 0x00000340 // Using a 7.3728MHz crystal +#define SYSCTL_RCC_XTAL_8MHZ 0x00000380 // Using a 8MHz crystal +#define SYSCTL_RCC_XTAL_8_19MHZ 0x000003C0 // Using a 8.192MHz crystal +#define SYSCTL_RCC_OSCSRC_MASK 0x00000030 // Oscillator input select +#define SYSCTL_RCC_OSCSRC_MAIN 0x00000000 // Use the main oscillator +#define SYSCTL_RCC_OSCSRC_INT 0x00000010 // Use the internal oscillator +#define SYSCTL_RCC_OSCSRC_INT4 0x00000020 // Use the internal oscillator / 4 +#define SYSCTL_RCC_IOSCVER 0x00000008 // Int. osc. verification timer en +#define SYSCTL_RCC_MOSCVER 0x00000004 // Main osc. verification timer en +#define SYSCTL_RCC_IOSCDIS 0x00000002 // Internal oscillator disable +#define SYSCTL_RCC_MOSCDIS 0x00000001 // Main oscillator disable +#define SYSCTL_RCC_SYSDIV_SHIFT 23 // Shift to the SYSDIV field +#define SYSCTL_RCC_PWMDIV_SHIFT 17 // Shift to the PWMDIV field +#define SYSCTL_RCC_XTAL_SHIFT 6 // Shift to the XTAL field +#define SYSCTL_RCC_OSCSRC_SHIFT 4 // Shift to the OSCSRC field + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_PLLCFG register. +// +//***************************************************************************** +#define SYSCTL_PLLCFG_OD_MASK 0x0000C000 // Output divider +#define SYSCTL_PLLCFG_OD_1 0x00000000 // Output divider is 1 +#define SYSCTL_PLLCFG_OD_2 0x00004000 // Output divider is 2 +#define SYSCTL_PLLCFG_OD_4 0x00008000 // Output divider is 4 +#define SYSCTL_PLLCFG_F_MASK 0x00003FE0 // PLL multiplier +#define SYSCTL_PLLCFG_R_MASK 0x0000001F // Input predivider +#define SYSCTL_PLLCFG_F_SHIFT 5 +#define SYSCTL_PLLCFG_R_SHIFT 0 + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_RCC2 register. +// +//***************************************************************************** +#define SYSCTL_RCC2_USERCC2 0x80000000 // Use RCC2 +#define SYSCTL_RCC2_SYSDIV2_MSK 0x1F800000 // System clock divider +#define SYSCTL_RCC2_SYSDIV2_2 0x00800000 // System clock /2 +#define SYSCTL_RCC2_SYSDIV2_3 0x01000000 // System clock /3 +#define SYSCTL_RCC2_SYSDIV2_4 0x01800000 // System clock /4 +#define SYSCTL_RCC2_SYSDIV2_5 0x02000000 // System clock /5 +#define SYSCTL_RCC2_SYSDIV2_6 0x02800000 // System clock /6 +#define SYSCTL_RCC2_SYSDIV2_7 0x03000000 // System clock /7 +#define SYSCTL_RCC2_SYSDIV2_8 0x03800000 // System clock /8 +#define SYSCTL_RCC2_SYSDIV2_9 0x04000000 // System clock /9 +#define SYSCTL_RCC2_SYSDIV2_10 0x04800000 // System clock /10 +#define SYSCTL_RCC2_SYSDIV2_11 0x05000000 // System clock /11 +#define SYSCTL_RCC2_SYSDIV2_12 0x05800000 // System clock /12 +#define SYSCTL_RCC2_SYSDIV2_13 0x06000000 // System clock /13 +#define SYSCTL_RCC2_SYSDIV2_14 0x06800000 // System clock /14 +#define SYSCTL_RCC2_SYSDIV2_15 0x07000000 // System clock /15 +#define SYSCTL_RCC2_SYSDIV2_16 0x07800000 // System clock /16 +#define SYSCTL_RCC2_SYSDIV2_17 0x08000000 // System clock /17 +#define SYSCTL_RCC2_SYSDIV2_18 0x08800000 // System clock /18 +#define SYSCTL_RCC2_SYSDIV2_19 0x09000000 // System clock /19 +#define SYSCTL_RCC2_SYSDIV2_20 0x09800000 // System clock /20 +#define SYSCTL_RCC2_SYSDIV2_21 0x0A000000 // System clock /21 +#define SYSCTL_RCC2_SYSDIV2_22 0x0A800000 // System clock /22 +#define SYSCTL_RCC2_SYSDIV2_23 0x0B000000 // System clock /23 +#define SYSCTL_RCC2_SYSDIV2_24 0x0B800000 // System clock /24 +#define SYSCTL_RCC2_SYSDIV2_25 0x0C000000 // System clock /25 +#define SYSCTL_RCC2_SYSDIV2_26 0x0C800000 // System clock /26 +#define SYSCTL_RCC2_SYSDIV2_27 0x0D000000 // System clock /27 +#define SYSCTL_RCC2_SYSDIV2_28 0x0D800000 // System clock /28 +#define SYSCTL_RCC2_SYSDIV2_29 0x0E000000 // System clock /29 +#define SYSCTL_RCC2_SYSDIV2_30 0x0E800000 // System clock /30 +#define SYSCTL_RCC2_SYSDIV2_31 0x0F000000 // System clock /31 +#define SYSCTL_RCC2_SYSDIV2_32 0x0F800000 // System clock /32 +#define SYSCTL_RCC2_SYSDIV2_33 0x10000000 // System clock /33 +#define SYSCTL_RCC2_SYSDIV2_34 0x10800000 // System clock /34 +#define SYSCTL_RCC2_SYSDIV2_35 0x11000000 // System clock /35 +#define SYSCTL_RCC2_SYSDIV2_36 0x11800000 // System clock /36 +#define SYSCTL_RCC2_SYSDIV2_37 0x12000000 // System clock /37 +#define SYSCTL_RCC2_SYSDIV2_38 0x12800000 // System clock /38 +#define SYSCTL_RCC2_SYSDIV2_39 0x13000000 // System clock /39 +#define SYSCTL_RCC2_SYSDIV2_40 0x13800000 // System clock /40 +#define SYSCTL_RCC2_SYSDIV2_41 0x14000000 // System clock /41 +#define SYSCTL_RCC2_SYSDIV2_42 0x14800000 // System clock /42 +#define SYSCTL_RCC2_SYSDIV2_43 0x15000000 // System clock /43 +#define SYSCTL_RCC2_SYSDIV2_44 0x15800000 // System clock /44 +#define SYSCTL_RCC2_SYSDIV2_45 0x16000000 // System clock /45 +#define SYSCTL_RCC2_SYSDIV2_46 0x16800000 // System clock /46 +#define SYSCTL_RCC2_SYSDIV2_47 0x17000000 // System clock /47 +#define SYSCTL_RCC2_SYSDIV2_48 0x17800000 // System clock /48 +#define SYSCTL_RCC2_SYSDIV2_49 0x18000000 // System clock /49 +#define SYSCTL_RCC2_SYSDIV2_50 0x18800000 // System clock /50 +#define SYSCTL_RCC2_SYSDIV2_51 0x19000000 // System clock /51 +#define SYSCTL_RCC2_SYSDIV2_52 0x19800000 // System clock /52 +#define SYSCTL_RCC2_SYSDIV2_53 0x1A000000 // System clock /53 +#define SYSCTL_RCC2_SYSDIV2_54 0x1A800000 // System clock /54 +#define SYSCTL_RCC2_SYSDIV2_55 0x1B000000 // System clock /55 +#define SYSCTL_RCC2_SYSDIV2_56 0x1B800000 // System clock /56 +#define SYSCTL_RCC2_SYSDIV2_57 0x1C000000 // System clock /57 +#define SYSCTL_RCC2_SYSDIV2_58 0x1C800000 // System clock /58 +#define SYSCTL_RCC2_SYSDIV2_59 0x1D000000 // System clock /59 +#define SYSCTL_RCC2_SYSDIV2_60 0x1D800000 // System clock /60 +#define SYSCTL_RCC2_SYSDIV2_61 0x1E000000 // System clock /61 +#define SYSCTL_RCC2_SYSDIV2_62 0x1E800000 // System clock /62 +#define SYSCTL_RCC2_SYSDIV2_63 0x1F000000 // System clock /63 +#define SYSCTL_RCC2_SYSDIV2_64 0x1F800000 // System clock /64 +#define SYSCTL_RCC2_PWRDN2 0x00002000 // PLL power down +#define SYSCTL_RCC2_BYPASS2 0x00000800 // PLL bypass +#define SYSCTL_RCC2_OSCSRC2_MSK 0x00000070 // Oscillator input select +#define SYSCTL_RCC2_OSCSRC2_MO 0x00000000 // Use the main oscillator +#define SYSCTL_RCC2_OSCSRC2_IO 0x00000010 // Use the internal oscillator +#define SYSCTL_RCC2_OSCSRC2_IO4 0x00000020 // Use the internal oscillator / 4 +#define SYSCTL_RCC2_OSCSRC2_30 0x00000030 // Use the 30 KHz internal osc. +#define SYSCTL_RCC2_OSCSRC2_32 0x00000070 // Use the 32 KHz external osc. + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_DSLPCLKCFG register. +// +//***************************************************************************** +#define SYSCTL_DSLPCLKCFG_D_MSK 0x1f800000 // Deep sleep system clock override +#define SYSCTL_DSLPCLKCFG_D_2 0x00800000 // System clock /2 +#define SYSCTL_DSLPCLKCFG_D_3 0x01000000 // System clock /3 +#define SYSCTL_DSLPCLKCFG_D_4 0x01800000 // System clock /4 +#define SYSCTL_DSLPCLKCFG_D_5 0x02000000 // System clock /5 +#define SYSCTL_DSLPCLKCFG_D_6 0x02800000 // System clock /6 +#define SYSCTL_DSLPCLKCFG_D_7 0x03000000 // System clock /7 +#define SYSCTL_DSLPCLKCFG_D_8 0x03800000 // System clock /8 +#define SYSCTL_DSLPCLKCFG_D_9 0x04000000 // System clock /9 +#define SYSCTL_DSLPCLKCFG_D_10 0x04800000 // System clock /10 +#define SYSCTL_DSLPCLKCFG_D_11 0x05000000 // System clock /11 +#define SYSCTL_DSLPCLKCFG_D_12 0x05800000 // System clock /12 +#define SYSCTL_DSLPCLKCFG_D_13 0x06000000 // System clock /13 +#define SYSCTL_DSLPCLKCFG_D_14 0x06800000 // System clock /14 +#define SYSCTL_DSLPCLKCFG_D_15 0x07000000 // System clock /15 +#define SYSCTL_DSLPCLKCFG_D_16 0x07800000 // System clock /16 +#define SYSCTL_DSLPCLKCFG_D_17 0x08000000 // System clock /17 +#define SYSCTL_DSLPCLKCFG_D_18 0x08800000 // System clock /18 +#define SYSCTL_DSLPCLKCFG_D_19 0x09000000 // System clock /19 +#define SYSCTL_DSLPCLKCFG_D_20 0x09800000 // System clock /20 +#define SYSCTL_DSLPCLKCFG_D_21 0x0A000000 // System clock /21 +#define SYSCTL_DSLPCLKCFG_D_22 0x0A800000 // System clock /22 +#define SYSCTL_DSLPCLKCFG_D_23 0x0B000000 // System clock /23 +#define SYSCTL_DSLPCLKCFG_D_24 0x0B800000 // System clock /24 +#define SYSCTL_DSLPCLKCFG_D_25 0x0C000000 // System clock /25 +#define SYSCTL_DSLPCLKCFG_D_26 0x0C800000 // System clock /26 +#define SYSCTL_DSLPCLKCFG_D_27 0x0D000000 // System clock /27 +#define SYSCTL_DSLPCLKCFG_D_28 0x0D800000 // System clock /28 +#define SYSCTL_DSLPCLKCFG_D_29 0x0E000000 // System clock /29 +#define SYSCTL_DSLPCLKCFG_D_30 0x0E800000 // System clock /30 +#define SYSCTL_DSLPCLKCFG_D_31 0x0F000000 // System clock /31 +#define SYSCTL_DSLPCLKCFG_D_32 0x0F800000 // System clock /32 +#define SYSCTL_DSLPCLKCFG_D_33 0x10000000 // System clock /33 +#define SYSCTL_DSLPCLKCFG_D_34 0x10800000 // System clock /34 +#define SYSCTL_DSLPCLKCFG_D_35 0x11000000 // System clock /35 +#define SYSCTL_DSLPCLKCFG_D_36 0x11800000 // System clock /36 +#define SYSCTL_DSLPCLKCFG_D_37 0x12000000 // System clock /37 +#define SYSCTL_DSLPCLKCFG_D_38 0x12800000 // System clock /38 +#define SYSCTL_DSLPCLKCFG_D_39 0x13000000 // System clock /39 +#define SYSCTL_DSLPCLKCFG_D_40 0x13800000 // System clock /40 +#define SYSCTL_DSLPCLKCFG_D_41 0x14000000 // System clock /41 +#define SYSCTL_DSLPCLKCFG_D_42 0x14800000 // System clock /42 +#define SYSCTL_DSLPCLKCFG_D_43 0x15000000 // System clock /43 +#define SYSCTL_DSLPCLKCFG_D_44 0x15800000 // System clock /44 +#define SYSCTL_DSLPCLKCFG_D_45 0x16000000 // System clock /45 +#define SYSCTL_DSLPCLKCFG_D_46 0x16800000 // System clock /46 +#define SYSCTL_DSLPCLKCFG_D_47 0x17000000 // System clock /47 +#define SYSCTL_DSLPCLKCFG_D_48 0x17800000 // System clock /48 +#define SYSCTL_DSLPCLKCFG_D_49 0x18000000 // System clock /49 +#define SYSCTL_DSLPCLKCFG_D_50 0x18800000 // System clock /50 +#define SYSCTL_DSLPCLKCFG_D_51 0x19000000 // System clock /51 +#define SYSCTL_DSLPCLKCFG_D_52 0x19800000 // System clock /52 +#define SYSCTL_DSLPCLKCFG_D_53 0x1A000000 // System clock /53 +#define SYSCTL_DSLPCLKCFG_D_54 0x1A800000 // System clock /54 +#define SYSCTL_DSLPCLKCFG_D_55 0x1B000000 // System clock /55 +#define SYSCTL_DSLPCLKCFG_D_56 0x1B800000 // System clock /56 +#define SYSCTL_DSLPCLKCFG_D_57 0x1C000000 // System clock /57 +#define SYSCTL_DSLPCLKCFG_D_58 0x1C800000 // System clock /58 +#define SYSCTL_DSLPCLKCFG_D_59 0x1D000000 // System clock /59 +#define SYSCTL_DSLPCLKCFG_D_60 0x1D800000 // System clock /60 +#define SYSCTL_DSLPCLKCFG_D_61 0x1E000000 // System clock /61 +#define SYSCTL_DSLPCLKCFG_D_62 0x1E800000 // System clock /62 +#define SYSCTL_DSLPCLKCFG_D_63 0x1F000000 // System clock /63 +#define SYSCTL_DSLPCLKCFG_D_64 0x1F800000 // System clock /64 +#define SYSCTL_DSLPCLKCFG_O_MSK 0x00000070 // Deep sleep oscillator override +#define SYSCTL_DSLPCLKCFG_O_IGN 0x00000000 // Do not override +#define SYSCTL_DSLPCLKCFG_O_IO 0x00000010 // Use the internal oscillator +#define SYSCTL_DSLPCLKCFG_O_30 0x00000030 // Use the 30 KHz internal osc. +#define SYSCTL_DSLPCLKCFG_O_32 0x00000070 // Use the 32 KHz external osc. + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_CLKVCLR register. +// +//***************************************************************************** +#define SYSCTL_CLKVCLR_CLR 0x00000001 // Clear clock verification fault + +//***************************************************************************** +// +// The following define the bit fields in the SYSCTL_LDOARST register. +// +//***************************************************************************** +#define SYSCTL_LDOARST_ARST 0x00000001 // Allow LDO to reset device + +#endif // __HW_SYSCTL_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_timer.h b/Demo/Common/drivers/LuminaryMicro/hw_timer.h new file mode 100644 index 000000000..6bf0d5305 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_timer.h @@ -0,0 +1,235 @@ +//***************************************************************************** +// +// hw_timer.h - Defines and macros used when accessing the timer. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_TIMER_H__ +#define __HW_TIMER_H__ + +//***************************************************************************** +// +// The following define the offsets of the timer registers. +// +//***************************************************************************** +#define TIMER_O_CFG 0x00000000 // Configuration register +#define TIMER_O_TAMR 0x00000004 // TimerA mode register +#define TIMER_O_TBMR 0x00000008 // TimerB mode register +#define TIMER_O_CTL 0x0000000C // Control register +#define TIMER_O_IMR 0x00000018 // Interrupt mask register +#define TIMER_O_RIS 0x0000001C // Interrupt status register +#define TIMER_O_MIS 0x00000020 // Masked interrupt status reg. +#define TIMER_O_ICR 0x00000024 // Interrupt clear register +#define TIMER_O_TAILR 0x00000028 // TimerA interval load register +#define TIMER_O_TBILR 0x0000002C // TimerB interval load register +#define TIMER_O_TAMATCHR 0x00000030 // TimerA match register +#define TIMER_O_TBMATCHR 0x00000034 // TimerB match register +#define TIMER_O_TAPR 0x00000038 // TimerA prescale register +#define TIMER_O_TBPR 0x0000003C // TimerB prescale register +#define TIMER_O_TAPMR 0x00000040 // TimerA prescale match register +#define TIMER_O_TBPMR 0x00000044 // TimerB prescale match register +#define TIMER_O_TAR 0x00000048 // TimerA register +#define TIMER_O_TBR 0x0000004C // TimerB register + +//***************************************************************************** +// +// The following define the reset values of the timer registers. +// +//***************************************************************************** +#define TIMER_RV_CFG 0x00000000 // Configuration register RV +#define TIMER_RV_TAMR 0x00000000 // TimerA mode register RV +#define TIMER_RV_TBMR 0x00000000 // TimerB mode register RV +#define TIMER_RV_CTL 0x00000000 // Control register RV +#define TIMER_RV_IMR 0x00000000 // Interrupt mask register RV +#define TIMER_RV_RIS 0x00000000 // Interrupt status register RV +#define TIMER_RV_MIS 0x00000000 // Masked interrupt status reg RV +#define TIMER_RV_ICR 0x00000000 // Interrupt clear register RV +#define TIMER_RV_TAILR 0xFFFFFFFF // TimerA interval load reg RV +#define TIMER_RV_TBILR 0x0000FFFF // TimerB interval load reg RV +#define TIMER_RV_TAMATCHR 0xFFFFFFFF // TimerA match register RV +#define TIMER_RV_TBMATCHR 0x0000FFFF // TimerB match register RV +#define TIMER_RV_TAPR 0x00000000 // TimerA prescale register RV +#define TIMER_RV_TBPR 0x00000000 // TimerB prescale register RV +#define TIMER_RV_TAPMR 0x00000000 // TimerA prescale match reg RV +#define TIMER_RV_TBPMR 0x00000000 // TimerB prescale match regi RV +#define TIMER_RV_TAR 0xFFFFFFFF // TimerA register RV +#define TIMER_RV_TBR 0x0000FFFF // TimerB register RV + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_CFG register. +// +//***************************************************************************** +#define TIMER_CFG_CFG_MSK 0x00000007 // Configuration options mask +#define TIMER_CFG_16_BIT 0x00000004 // Two 16 bit timers +#define TIMER_CFG_32_BIT_RTC 0x00000001 // 32 bit RTC +#define TIMER_CFG_32_BIT_TIMER 0x00000000 // 32 bit timer + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_TnMR register. +// +//***************************************************************************** +#define TIMER_TNMR_TNAMS 0x00000008 // Alternate mode select +#define TIMER_TNMR_TNCMR 0x00000004 // Capture mode - count or time +#define TIMER_TNMR_TNTMR_MSK 0x00000003 // Timer mode mask +#define TIMER_TNMR_TNTMR_CAP 0x00000003 // Mode - capture +#define TIMER_TNMR_TNTMR_PERIOD 0x00000002 // Mode - periodic +#define TIMER_TNMR_TNTMR_1_SHOT 0x00000001 // Mode - one shot + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_CTL register. +// +//***************************************************************************** +#define TIMER_CTL_TBPWML 0x00004000 // TimerB PWM output level invert +#define TIMER_CTL_TBOTE 0x00002000 // TimerB output trigger enable +#define TIMER_CTL_TBEVENT_MSK 0x00000C00 // TimerB event mode mask +#define TIMER_CTL_TBEVENT_BOTH 0x00000C00 // TimerB event mode - both edges +#define TIMER_CTL_TBEVENT_NEG 0x00000400 // TimerB event mode - neg edge +#define TIMER_CTL_TBEVENT_POS 0x00000000 // TimerB event mode - pos edge +#define TIMER_CTL_TBSTALL 0x00000200 // TimerB stall enable +#define TIMER_CTL_TBEN 0x00000100 // TimerB enable +#define TIMER_CTL_TAPWML 0x00000040 // TimerA PWM output level invert +#define TIMER_CTL_TAOTE 0x00000020 // TimerA output trigger enable +#define TIMER_CTL_RTCEN 0x00000010 // RTC counter enable +#define TIMER_CTL_TAEVENT_MSK 0x0000000C // TimerA event mode mask +#define TIMER_CTL_TAEVENT_BOTH 0x0000000C // TimerA event mode - both edges +#define TIMER_CTL_TAEVENT_NEG 0x00000004 // TimerA event mode - neg edge +#define TIMER_CTL_TAEVENT_POS 0x00000000 // TimerA event mode - pos edge +#define TIMER_CTL_TASTALL 0x00000002 // TimerA stall enable +#define TIMER_CTL_TAEN 0x00000001 // TimerA enable + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_IMR register. +// +//***************************************************************************** +#define TIMER_IMR_CBEIM 0x00000400 // CaptureB event interrupt mask +#define TIMER_IMR_CBMIM 0x00000200 // CaptureB match interrupt mask +#define TIMER_IMR_TBTOIM 0x00000100 // TimerB time out interrupt mask +#define TIMER_IMR_RTCIM 0x00000008 // RTC interrupt mask +#define TIMER_IMR_CAEIM 0x00000004 // CaptureA event interrupt mask +#define TIMER_IMR_CAMIM 0x00000002 // CaptureA match interrupt mask +#define TIMER_IMR_TATOIM 0x00000001 // TimerA time out interrupt mask + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_RIS register. +// +//***************************************************************************** +#define TIMER_RIS_CBERIS 0x00000400 // CaptureB event raw int status +#define TIMER_RIS_CBMRIS 0x00000200 // CaptureB match raw int status +#define TIMER_RIS_TBTORIS 0x00000100 // TimerB time out raw int status +#define TIMER_RIS_RTCRIS 0x00000008 // RTC raw int status +#define TIMER_RIS_CAERIS 0x00000004 // CaptureA event raw int status +#define TIMER_RIS_CAMRIS 0x00000002 // CaptureA match raw int status +#define TIMER_RIS_TATORIS 0x00000001 // TimerA time out raw int status + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_MIS register. +// +//***************************************************************************** +#define TIMER_RIS_CBEMIS 0x00000400 // CaptureB event masked int status +#define TIMER_RIS_CBMMIS 0x00000200 // CaptureB match masked int status +#define TIMER_RIS_TBTOMIS 0x00000100 // TimerB time out masked int stat +#define TIMER_RIS_RTCMIS 0x00000008 // RTC masked int status +#define TIMER_RIS_CAEMIS 0x00000004 // CaptureA event masked int status +#define TIMER_RIS_CAMMIS 0x00000002 // CaptureA match masked int status +#define TIMER_RIS_TATOMIS 0x00000001 // TimerA time out masked int stat + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_ICR register. +// +//***************************************************************************** +#define TIMER_ICR_CBECINT 0x00000400 // CaptureB event interrupt clear +#define TIMER_ICR_CBMCINT 0x00000200 // CaptureB match interrupt clear +#define TIMER_ICR_TBTOCINT 0x00000100 // TimerB time out interrupt clear +#define TIMER_ICR_RTCCINT 0x00000008 // RTC interrupt clear +#define TIMER_ICR_CAECINT 0x00000004 // CaptureA event interrupt clear +#define TIMER_ICR_CAMCINT 0x00000002 // CaptureA match interrupt clear +#define TIMER_ICR_TATOCINT 0x00000001 // TimerA time out interrupt clear + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_TAILR register. +// +//***************************************************************************** +#define TIMER_TAILR_TAILRH 0xFFFF0000 // TimerB load val in 32 bit mode +#define TIMER_TAILR_TAILRL 0x0000FFFF // TimerA interval load value + +//***************************************************************************** +// +// The following defines the bit fields in the TIMER_TBILR register. +// +//***************************************************************************** +#define TIMER_TBILR_TBILRL 0x0000FFFF // TimerB interval load value + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_TAMATCHR register. +// +//***************************************************************************** +#define TIMER_TAMATCHR_TAMRH 0xFFFF0000 // TimerB match val in 32 bit mode +#define TIMER_TAMATCHR_TAMRL 0x0000FFFF // TimerA match value + +//***************************************************************************** +// +// The following defines the bit fields in the TIMER_TBMATCHR register. +// +//***************************************************************************** +#define TIMER_TBMATCHR_TBMRL 0x0000FFFF // TimerB match load value + +//***************************************************************************** +// +// The following defines the bit fields in the TIMER_TnPR register. +// +//***************************************************************************** +#define TIMER_TNPR_TNPSR 0x000000FF // TimerN prescale value + +//***************************************************************************** +// +// The following defines the bit fields in the TIMER_TnPMR register. +// +//***************************************************************************** +#define TIMER_TNPMR_TNPSMR 0x000000FF // TimerN prescale match value + +//***************************************************************************** +// +// The following define the bit fields in the TIMER_TAR register. +// +//***************************************************************************** +#define TIMER_TAR_TARH 0xFFFF0000 // TimerB val in 32 bit mode +#define TIMER_TAR_TARL 0x0000FFFF // TimerA value + +//***************************************************************************** +// +// The following defines the bit fields in the TIMER_TBR register. +// +//***************************************************************************** +#define TIMER_TBR_TBRL 0x0000FFFF // TimerB value + +#endif // __HW_TIMER_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_types.h b/Demo/Common/drivers/LuminaryMicro/hw_types.h new file mode 100644 index 000000000..c31e2c94b --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_types.h @@ -0,0 +1,129 @@ +//***************************************************************************** +// +// hw_types.h - Common types and macros. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_TYPES_H__ +#define __HW_TYPES_H__ + +//***************************************************************************** +// +// Define a boolean type, and values for true and false. +// +//***************************************************************************** +typedef unsigned char tBoolean; + +#ifndef true +#define true 1 +#endif + +#ifndef false +#define false 0 +#endif + +//***************************************************************************** +// +// Macros for hardware access, both direct and via the bit-band region. +// +//***************************************************************************** +#define HWREG(x) \ + (*((volatile unsigned long *)(x))) +#define HWREGH(x) \ + (*((volatile unsigned short *)(x))) +#define HWREGB(x) \ + (*((volatile unsigned char *)(x))) +#define HWREGBITW(x, b) \ + HWREG(((unsigned long)(x) & 0xF0000000) | 0x02000000 | \ + (((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2)) +#define HWREGBITH(x, b) \ + HWREGH(((unsigned long)(x) & 0xF0000000) | 0x02000000 | \ + (((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2)) +#define HWREGBITB(x, b) \ + HWREGB(((unsigned long)(x) & 0xF0000000) | 0x02000000 | \ + (((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2)) + +//***************************************************************************** +// +// Helper Macros for determining silicon revisions, etc. +// +// These macros will be used by Driverlib at "run-time" to create necessary +// conditional code blocks that will allow a single version of the Driverlib +// "binary" code to support multiple(all) Stellaris silicon revisions. +// +// It is expected that these macros will be used inside of a standard 'C' +// conditional block of code, e.g. +// +// if(DEVICE_IS_SANDSTORM()) +// { +// do some Sandstorm specific code here. +// } +// +// By default, these macros will be defined as run-time checks of the +// appropriate register(s) to allow creation of run-time conditional code +// blocks for a common DriverLib across the entire Stellaris family. +// +// However, if code-space optimization is required, these macros can be "hard- +// coded" for a specific version of Stellaris silicon. Many compilers will +// then detect the "hard-coded" conditionals, and appropriately optimize the +// code blocks, eliminating any "unreachable" code. This would result in +// a smaller Driverlib, thus producing a smaller final application size, but +// at the cost of limiting the Driverlib binary to a specific Stellaris +// silicon revision. +// +//***************************************************************************** +#ifndef DEVICE_IS_SANDSTORM +#define DEVICE_IS_SANDSTORM \ + (((HWREG(SYSCTL_DID0) & SYSCTL_DID0_VER_MASK) == SYSCTL_DID0_VER_0) || \ + (((HWREG(SYSCTL_DID0) & SYSCTL_DID0_VER_MASK) == SYSCTL_DID0_VER_1) && \ + ((HWREG(SYSCTL_DID0) & SYSCTL_DID0_CLASS_MASK) == \ + SYSCTL_DID0_CLASS_SANDSTORM))) +#endif + +#ifndef DEVICE_IS_FURY +#define DEVICE_IS_FURY \ + (((HWREG(SYSCTL_DID0) & SYSCTL_DID0_VER_MASK) == SYSCTL_DID0_VER_1) && \ + ((HWREG(SYSCTL_DID0) & SYSCTL_DID0_CLASS_MASK) == \ + SYSCTL_DID0_CLASS_FURY)) +#endif + +#ifndef DEVICE_IS_REVA2 +#define DEVICE_IS_REVA2 \ + (((HWREG(SYSCTL_DID0) & SYSCTL_DID0_MAJ_MASK) == SYSCTL_DID0_MAJ_A) && \ + ((HWREG(SYSCTL_DID0) & SYSCTL_DID0_MIN_MASK) == SYSCTL_DID0_MIN_2)) +#endif + +#ifndef DEVICE_IS_REVC1 +#define DEVICE_IS_REVC1 \ + (((HWREG(SYSCTL_DID0) & SYSCTL_DID0_MAJ_MASK) == SYSCTL_DID0_MAJ_C) && \ + ((HWREG(SYSCTL_DID0) & SYSCTL_DID0_MIN_MASK) == SYSCTL_DID0_MIN_1)) +#endif + +#ifndef DEVICE_IS_REVC2 +#define DEVICE_IS_REVC2 \ + (((HWREG(SYSCTL_DID0) & SYSCTL_DID0_MAJ_MASK) == SYSCTL_DID0_MAJ_C) && \ + ((HWREG(SYSCTL_DID0) & SYSCTL_DID0_MIN_MASK) == SYSCTL_DID0_MIN_2)) +#endif + +#endif // __HW_TYPES_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_uart.h b/Demo/Common/drivers/LuminaryMicro/hw_uart.h new file mode 100644 index 000000000..de1127b73 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_uart.h @@ -0,0 +1,243 @@ +//***************************************************************************** +// +// hw_uart.h - Macros and defines used when accessing the UART hardware +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_UART_H__ +#define __HW_UART_H__ + +//***************************************************************************** +// +// UART Register Offsets. +// +//***************************************************************************** +#define UART_O_DR 0x00000000 // Data Register +#define UART_O_RSR 0x00000004 // Receive Status Register (read) +#define UART_O_ECR 0x00000004 // Error Clear Register (write) +#define UART_O_FR 0x00000018 // Flag Register (read only) +#define UART_O_IBRD 0x00000024 // Integer Baud Rate Divisor Reg +#define UART_O_FBRD 0x00000028 // Fractional Baud Rate Divisor Reg +#define UART_O_LCR_H 0x0000002C // Line Control Register, HIGH byte +#define UART_O_CTL 0x00000030 // Control Register +#define UART_O_IFLS 0x00000034 // Interrupt FIFO Level Select Reg +#define UART_O_IM 0x00000038 // Interrupt Mask Set/Clear Reg +#define UART_O_RIS 0x0000003C // Raw Interrupt Status Register +#define UART_O_MIS 0x00000040 // Masked Interrupt Status Register +#define UART_O_ICR 0x00000044 // Interrupt Clear Register +#define UART_O_PeriphID4 0x00000FD0 // +#define UART_O_PeriphID5 0x00000FD4 // +#define UART_O_PeriphID6 0x00000FD8 // +#define UART_O_PeriphID7 0x00000FDC // +#define UART_O_PeriphID0 0x00000FE0 // +#define UART_O_PeriphID1 0x00000FE4 // +#define UART_O_PeriphID2 0x00000FE8 // +#define UART_O_PeriphID3 0x00000FEC // +#define UART_O_PCellID0 0x00000FF0 // +#define UART_O_PCellID1 0x00000FF4 // +#define UART_O_PCellID2 0x00000FF8 // +#define UART_O_PCellID3 0x00000FFC // + +//***************************************************************************** +// +// Data Register bits +// +//***************************************************************************** +#define UART_DR_OE 0x00000800 // Overrun Error +#define UART_DR_BE 0x00000400 // Break Error +#define UART_DR_PE 0x00000200 // Parity Error +#define UART_DR_FE 0x00000100 // Framing Error +#define UART_DR_DATA_MASK 0x000000FF // UART data + +//***************************************************************************** +// +// Receive Status Register bits +// +//***************************************************************************** +#define UART_RSR_OE 0x00000008 // Overrun Error +#define UART_RSR_BE 0x00000004 // Break Error +#define UART_RSR_PE 0x00000002 // Parity Error +#define UART_RSR_FE 0x00000001 // Framing Error + +//***************************************************************************** +// +// Flag Register bits +// +//***************************************************************************** +#define UART_FR_TXFE 0x00000080 // TX FIFO Empty +#define UART_FR_RXFF 0x00000040 // RX FIFO Full +#define UART_FR_TXFF 0x00000020 // TX FIFO Full +#define UART_FR_RXFE 0x00000010 // RX FIFO Empty +#define UART_FR_BUSY 0x00000008 // UART Busy + +//***************************************************************************** +// +// Integer baud-rate divisor +// +//***************************************************************************** +#define UART_IBRD_DIVINT_MASK 0x0000FFFF // Integer baud-rate divisor + +//***************************************************************************** +// +// Fractional baud-rate divisor +// +//***************************************************************************** +#define UART_FBRD_DIVFRAC_MASK 0x0000003F // Fractional baud-rate divisor + +//***************************************************************************** +// +// Line Control Register High bits +// +//***************************************************************************** +#define UART_LCR_H_SPS 0x00000080 // Stick Parity Select +#define UART_LCR_H_WLEN 0x00000060 // Word length +#define UART_LCR_H_WLEN_8 0x00000060 // 8 bit data +#define UART_LCR_H_WLEN_7 0x00000040 // 7 bit data +#define UART_LCR_H_WLEN_6 0x00000020 // 6 bit data +#define UART_LCR_H_WLEN_5 0x00000000 // 5 bit data +#define UART_LCR_H_FEN 0x00000010 // Enable FIFO +#define UART_LCR_H_STP2 0x00000008 // Two Stop Bits Select +#define UART_LCR_H_EPS 0x00000004 // Even Parity Select +#define UART_LCR_H_PEN 0x00000002 // Parity Enable +#define UART_LCR_H_BRK 0x00000001 // Send Break + +//***************************************************************************** +// +// Control Register bits +// +//***************************************************************************** +#define UART_CTL_RXE 0x00000200 // Receive Enable +#define UART_CTL_TXE 0x00000100 // Transmit Enable +#define UART_CTL_LBE 0x00000080 // Loopback Enable +#define UART_CTL_SIRLP 0x00000004 // SIR (IrDA) Low Power Enable +#define UART_CTL_SIREN 0x00000002 // SIR (IrDA) Enable +#define UART_CTL_UARTEN 0x00000001 // UART Enable + +//***************************************************************************** +// +// Interrupt FIFO Level Select Register bits +// +//***************************************************************************** +#define UART_IFLS_RX_MASK 0x00000038 // RX FIFO level mask +#define UART_IFLS_RX1_8 0x00000000 // 1/8 Full +#define UART_IFLS_RX2_8 0x00000008 // 1/4 Full +#define UART_IFLS_RX4_8 0x00000010 // 1/2 Full +#define UART_IFLS_RX6_8 0x00000018 // 3/4 Full +#define UART_IFLS_RX7_8 0x00000020 // 7/8 Full +#define UART_IFLS_TX_MASK 0x00000007 // TX FIFO level mask +#define UART_IFLS_TX1_8 0x00000000 // 1/8 Full +#define UART_IFLS_TX2_8 0x00000001 // 1/4 Full +#define UART_IFLS_TX4_8 0x00000002 // 1/2 Full +#define UART_IFLS_TX6_8 0x00000003 // 3/4 Full +#define UART_IFLS_TX7_8 0x00000004 // 7/8 Full + +//***************************************************************************** +// +// Interrupt Mask Set/Clear Register bits +// +//***************************************************************************** +#define UART_IM_OEIM 0x00000400 // Overrun Error Interrupt Mask +#define UART_IM_BEIM 0x00000200 // Break Error Interrupt Mask +#define UART_IM_PEIM 0x00000100 // Parity Error Interrupt Mask +#define UART_IM_FEIM 0x00000080 // Framing Error Interrupt Mask +#define UART_IM_RTIM 0x00000040 // Receive Timeout Interrupt Mask +#define UART_IM_TXIM 0x00000020 // Transmit Interrupt Mask +#define UART_IM_RXIM 0x00000010 // Receive Interrupt Mask + +//***************************************************************************** +// +// Raw Interrupt Status Register +// +//***************************************************************************** +#define UART_RIS_OERIS 0x00000400 // Overrun Error Interrupt Status +#define UART_RIS_BERIS 0x00000200 // Break Error Interrupt Status +#define UART_RIS_PERIS 0x00000100 // Parity Error Interrupt Status +#define UART_RIS_FERIS 0x00000080 // Framing Error Interrupt Status +#define UART_RIS_RTRIS 0x00000040 // Receive Timeout Interrupt Status +#define UART_RIS_TXRIS 0x00000020 // Transmit Interrupt Status +#define UART_RIS_RXRIS 0x00000010 // Receive Interrupt Status + +//***************************************************************************** +// +// Masked Interrupt Status Register +// +//***************************************************************************** +#define UART_MIS_OEMIS 0x00000400 // Overrun Error Interrupt Status +#define UART_MIS_BEMIS 0x00000200 // Break Error Interrupt Status +#define UART_MIS_PEMIS 0x00000100 // Parity Error Interrupt Status +#define UART_MIS_FEMIS 0x00000080 // Framing Error Interrupt Status +#define UART_MIS_RTMIS 0x00000040 // Receive Timeout Interrupt Status +#define UART_MIS_TXMIS 0x00000020 // Transmit Interrupt Status +#define UART_MIS_RXMIS 0x00000010 // Receive Interrupt Status + +//***************************************************************************** +// +// Interrupt Clear Register bits +// +//***************************************************************************** +#define UART_ICR_OEIC 0x00000400 // Overrun Error Interrupt Clear +#define UART_ICR_BEIC 0x00000200 // Break Error Interrupt Clear +#define UART_ICR_PEIC 0x00000100 // Parity Error Interrupt Clear +#define UART_ICR_FEIC 0x00000080 // Framing Error Interrupt Clear +#define UART_ICR_RTIC 0x00000040 // Receive Timeout Interrupt Clear +#define UART_ICR_TXIC 0x00000020 // Transmit Interrupt Clear +#define UART_ICR_RXIC 0x00000010 // Receive Interrupt Clear + +#define UART_RSR_ANY (UART_RSR_OE | \ + UART_RSR_BE | \ + UART_RSR_PE | \ + UART_RSR_FE) + +//***************************************************************************** +// +// Reset Values for UART Registers. +// +//***************************************************************************** +#define UART_RV_DR 0x00000000 +#define UART_RV_RSR 0x00000000 +#define UART_RV_ECR 0x00000000 +#define UART_RV_FR 0x00000090 +#define UART_RV_IBRD 0x00000000 +#define UART_RV_FBRD 0x00000000 +#define UART_RV_LCR_H 0x00000000 +#define UART_RV_CTL 0x00000300 +#define UART_RV_IFLS 0x00000012 +#define UART_RV_IM 0x00000000 +#define UART_RV_RIS 0x00000000 +#define UART_RV_MIS 0x00000000 +#define UART_RV_ICR 0x00000000 +#define UART_RV_PeriphID4 0x00000000 +#define UART_RV_PeriphID5 0x00000000 +#define UART_RV_PeriphID6 0x00000000 +#define UART_RV_PeriphID7 0x00000000 +#define UART_RV_PeriphID0 0x00000011 +#define UART_RV_PeriphID1 0x00000000 +#define UART_RV_PeriphID2 0x00000018 +#define UART_RV_PeriphID3 0x00000001 +#define UART_RV_PCellID0 0x0000000D +#define UART_RV_PCellID1 0x000000F0 +#define UART_RV_PCellID2 0x00000005 +#define UART_RV_PCellID3 0x000000B1 + +#endif // __HW_UART_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/hw_watchdog.h b/Demo/Common/drivers/LuminaryMicro/hw_watchdog.h new file mode 100644 index 000000000..48843ed8c --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/hw_watchdog.h @@ -0,0 +1,116 @@ +//***************************************************************************** +// +// hw_watchdog.h - Macros used when accessing the Watchdog Timer hardware. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __HW_WATCHDOG_H__ +#define __HW_WATCHDOG_H__ + +//***************************************************************************** +// +// The following define the offsets of the Watchdog Timer registers. +// +//***************************************************************************** +#define WDT_O_LOAD 0x00000000 // Load register +#define WDT_O_VALUE 0x00000004 // Current value register +#define WDT_O_CTL 0x00000008 // Control register +#define WDT_O_ICR 0x0000000C // Interrupt clear register +#define WDT_O_RIS 0x00000010 // Raw interrupt status register +#define WDT_O_MIS 0x00000014 // Masked interrupt status register +#define WDT_O_TEST 0x00000418 // Test register +#define WDT_O_LOCK 0x00000C00 // Lock register +#define WDT_O_PeriphID4 0x00000FD0 // +#define WDT_O_PeriphID5 0x00000FD4 // +#define WDT_O_PeriphID6 0x00000FD8 // +#define WDT_O_PeriphID7 0x00000FDC // +#define WDT_O_PeriphID0 0x00000FE0 // +#define WDT_O_PeriphID1 0x00000FE4 // +#define WDT_O_PeriphID2 0x00000FE8 // +#define WDT_O_PeriphID3 0x00000FEC // +#define WDT_O_PCellID0 0x00000FF0 // +#define WDT_O_PCellID1 0x00000FF4 // +#define WDT_O_PCellID2 0x00000FF8 // +#define WDT_O_PCellID3 0x00000FFC // + +//***************************************************************************** +// +// The following define the bit fields in the WDT_CTL register. +// +//***************************************************************************** +#define WDT_CTL_RESEN 0x00000002 // Enable reset output +#define WDT_CTL_INTEN 0x00000001 // Enable the WDT counter and int + +//***************************************************************************** +// +// The following define the bit fields in the WDT_ISR, WDT_RIS, and WDT_MIS +// registers. +// +//***************************************************************************** +#define WDT_INT_TIMEOUT 0x00000001 // Watchdog timer expired + +//***************************************************************************** +// +// The following define the bit fields in the WDT_TEST register. +// +//***************************************************************************** +#define WDT_TEST_STALL 0x00000100 // Watchdog stall enable +#ifndef DEPRECATED +#define WDT_TEST_STALL_EN 0x00000100 // Watchdog stall enable +#endif + +//***************************************************************************** +// +// The following define the bit fields in the WDT_LOCK register. +// +//***************************************************************************** +#define WDT_LOCK_LOCKED 0x00000001 // Watchdog timer is locked +#define WDT_LOCK_UNLOCKED 0x00000000 // Watchdog timer is unlocked +#define WDT_LOCK_UNLOCK 0x1ACCE551 // Unlocks the watchdog timer + +//***************************************************************************** +// +// The following define the reset values for the WDT registers. +// +//***************************************************************************** +#define WDT_RV_LOAD 0xFFFFFFFF // Load register +#define WDT_RV_VALUE 0xFFFFFFFF // Current value register +#define WDT_RV_CTL 0x00000000 // Control register +#define WDT_RV_RIS 0x00000000 // Raw interrupt status register +#define WDT_RV_MIS 0x00000000 // Masked interrupt status register +#define WDT_RV_LOCK 0x00000000 // Lock register +#define WDT_RV_PeriphID4 0x00000000 // +#define WDT_RV_PeriphID5 0x00000000 // +#define WDT_RV_PeriphID6 0x00000000 // +#define WDT_RV_PeriphID7 0x00000000 // +#define WDT_RV_PeriphID0 0x00000005 // +#define WDT_RV_PeriphID1 0x00000018 // +#define WDT_RV_PeriphID2 0x00000018 // +#define WDT_RV_PeriphID3 0x00000001 // +#define WDT_RV_PCellID0 0x0000000D // +#define WDT_RV_PCellID1 0x000000F0 // +#define WDT_RV_PCellID2 0x00000005 // +#define WDT_RV_PCellID3 0x000000B1 // + +#endif // __HW_WATCHDOG_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/i2c.h b/Demo/Common/drivers/LuminaryMicro/i2c.h new file mode 100644 index 000000000..0268bd828 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/i2c.h @@ -0,0 +1,143 @@ +//***************************************************************************** +// +// i2c.h - Prototypes for the I2C Driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __I2C_H__ +#define __I2C_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Defines for the API. +// +//***************************************************************************** + +//***************************************************************************** +// +// Interrupt defines. +// +//***************************************************************************** +#define I2C_INT_MASTER 0x00000001 +#define I2C_INT_SLAVE 0x00000002 + +//***************************************************************************** +// +// I2C Master commands. +// +//***************************************************************************** +#define I2C_MASTER_CMD_SINGLE_SEND 0x00000007 +#define I2C_MASTER_CMD_SINGLE_RECEIVE 0x00000007 +#define I2C_MASTER_CMD_BURST_SEND_START 0x00000003 +#define I2C_MASTER_CMD_BURST_SEND_CONT 0x00000001 +#define I2C_MASTER_CMD_BURST_SEND_FINISH 0x00000005 +#define I2C_MASTER_CMD_BURST_SEND_ERROR_STOP 0x00000004 +#define I2C_MASTER_CMD_BURST_RECEIVE_START 0x0000000b +#define I2C_MASTER_CMD_BURST_RECEIVE_CONT 0x00000009 +#define I2C_MASTER_CMD_BURST_RECEIVE_FINISH 0x00000005 +#define I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP 0x00000005 + +//***************************************************************************** +// +// I2C Master error status. +// +//***************************************************************************** +#define I2C_MASTER_ERR_NONE 0 +#define I2C_MASTER_ERR_ADDR_ACK 0x00000004 +#define I2C_MASTER_ERR_DATA_ACK 0x00000008 +#define I2C_MASTER_ERR_ARB_LOST 0x00000010 + +//***************************************************************************** +// +// I2C Slave action requests +// +//***************************************************************************** +#define I2C_SLAVE_ACT_NONE 0 +#define I2C_SLAVE_ACT_RREQ 0x00000001 // Master has sent data +#define I2C_SLAVE_ACT_TREQ 0x00000002 // Master has requested data + +//***************************************************************************** +// +// Miscellaneous I2C driver definitions. +// +//***************************************************************************** +#define I2C_MASTER_MAX_RETRIES 1000 // Number of retries + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void I2CIntRegister(unsigned long ulBase, void(fnHandler)(void)); +extern void I2CIntUnregister(unsigned long ulBase); +extern tBoolean I2CMasterBusBusy(unsigned long ulBase); +extern tBoolean I2CMasterBusy(unsigned long ulBase); +extern void I2CMasterControl(unsigned long ulBase, unsigned long ulCmd); +extern unsigned long I2CMasterDataGet(unsigned long ulBase); +extern void I2CMasterDataPut(unsigned long ulBase, unsigned char ucData); +extern void I2CMasterDisable(unsigned long ulBase); +extern void I2CMasterEnable(unsigned long ulBase); +extern unsigned long I2CMasterErr(unsigned long ulBase); +extern void I2CMasterInitExpClk(unsigned long ulBase, unsigned long ulI2CClk, + tBoolean bFast); +extern void I2CMasterIntClear(unsigned long ulBase); +extern void I2CMasterIntDisable(unsigned long ulBase); +extern void I2CMasterIntEnable(unsigned long ulBase); +extern tBoolean I2CMasterIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void I2CMasterSlaveAddrSet(unsigned long ulBase, + unsigned char ucSlaveAddr, + tBoolean bReceive); +extern unsigned long I2CSlaveDataGet(unsigned long ulBase); +extern void I2CSlaveDataPut(unsigned long ulBase, unsigned char ucData); +extern void I2CSlaveDisable(unsigned long ulBase); +extern void I2CSlaveEnable(unsigned long ulBase); +extern void I2CSlaveInit(unsigned long ulBase, unsigned char ucSlaveAddr); +extern void I2CSlaveIntClear(unsigned long ulBase); +extern void I2CSlaveIntDisable(unsigned long ulBase); +extern void I2CSlaveIntEnable(unsigned long ulBase); +extern tBoolean I2CSlaveIntStatus(unsigned long ulBase, tBoolean bMasked); +extern unsigned long I2CSlaveStatus(unsigned long ulBase); + +//***************************************************************************** +// +// Several I2C APIs have been renamed, with the original function name being +// deprecated. These defines provide backward compatibility. +// +//***************************************************************************** +#ifndef DEPRECATED +#include "sysctl.h" +#define I2CMasterInit(a, b) \ + I2CMasterInitExpClk(a, SysCtlClockGet(), b) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // __I2C_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/interrupt.h b/Demo/Common/drivers/LuminaryMicro/interrupt.h new file mode 100644 index 000000000..fb0ca6e87 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/interrupt.h @@ -0,0 +1,57 @@ +//***************************************************************************** +// +// interrupt.h - Prototypes for the NVIC Interrupt Controller Driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __INTERRUPT_H__ +#define __INTERRUPT_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void IntMasterEnable(void); +extern void IntMasterDisable(void); +extern void IntRegister(unsigned long ulInterrupt, void (*pfnHandler)(void)); +extern void IntUnregister(unsigned long ulInterrupt); +extern void IntPriorityGroupingSet(unsigned long ulBits); +extern unsigned long IntPriorityGroupingGet(void); +extern void IntPrioritySet(unsigned long ulInterrupt, + unsigned char ucPriority); +extern long IntPriorityGet(unsigned long ulInterrupt); +extern void IntEnable(unsigned long ulInterrupt); +extern void IntDisable(unsigned long ulInterrupt); + +#ifdef __cplusplus +} +#endif + +#endif // __INTERRUPT_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/lmi_flash.h b/Demo/Common/drivers/LuminaryMicro/lmi_flash.h new file mode 100644 index 000000000..e53883fe9 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/lmi_flash.h @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// flash.h - Prototypes for the flash driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __FLASH_H__ +#define __FLASH_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to FlashProtectSet(), and returned by +// FlashProtectGet(). +// +//***************************************************************************** +typedef enum +{ + FlashReadWrite, // Flash can be read and written + FlashReadOnly, // Flash can only be read + FlashExecuteOnly // Flash can only be executed +} +tFlashProtection; + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern unsigned long FlashUsecGet(void); +extern void FlashUsecSet(unsigned long ulClocks); +extern long FlashErase(unsigned long ulAddress); +extern long FlashProgram(unsigned long *pulData, unsigned long ulAddress, + unsigned long ulCount); +extern tFlashProtection FlashProtectGet(unsigned long ulAddress); +extern long FlashProtectSet(unsigned long ulAddress, + tFlashProtection eProtect); +extern long FlashProtectSave(void); +extern long FlashUserGet(unsigned long *pulUser0, unsigned long *pulUser1); +extern long FlashUserSet(unsigned long ulUser0, unsigned long ulUser1); +extern long FlashUserSave(void); +extern void FlashIntRegister(void (*pfnHandler)(void)); +extern void FlashIntUnregister(void); +extern void FlashIntEnable(unsigned long ulIntFlags); +extern void FlashIntDisable(unsigned long ulIntFlags); +extern unsigned long FlashIntGetStatus(tBoolean bMasked); +extern void FlashIntClear(unsigned long ulIntFlags); + +#ifdef __cplusplus +} +#endif + +#endif // __FLASH_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/lmi_timer.h b/Demo/Common/drivers/LuminaryMicro/lmi_timer.h new file mode 100644 index 000000000..0a0d54512 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/lmi_timer.h @@ -0,0 +1,137 @@ +//***************************************************************************** +// +// timer.h - Prototypes for the timer module +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __TIMER_H__ +#define __TIMER_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to TimerConfigure as the ulConfig parameter. +// +//***************************************************************************** +#define TIMER_CFG_32_BIT_OS 0x00000001 // 32-bit one-shot timer +#define TIMER_CFG_32_BIT_PER 0x00000002 // 32-bit periodic timer +#define TIMER_CFG_32_RTC 0x01000000 // 32-bit RTC timer +#define TIMER_CFG_16_BIT_PAIR 0x04000000 // Two 16-bit timers +#define TIMER_CFG_A_ONE_SHOT 0x00000001 // Timer A one-shot timer +#define TIMER_CFG_A_PERIODIC 0x00000002 // Timer A periodic timer +#define TIMER_CFG_A_CAP_COUNT 0x00000003 // Timer A event counter +#define TIMER_CFG_A_CAP_TIME 0x00000007 // Timer A event timer +#define TIMER_CFG_A_PWM 0x0000000A // Timer A PWM output +#define TIMER_CFG_B_ONE_SHOT 0x00000100 // Timer B one-shot timer +#define TIMER_CFG_B_PERIODIC 0x00000200 // Timer B periodic timer +#define TIMER_CFG_B_CAP_COUNT 0x00000300 // Timer B event counter +#define TIMER_CFG_B_CAP_TIME 0x00000700 // Timer B event timer +#define TIMER_CFG_B_PWM 0x00000A00 // Timer B PWM output + +//***************************************************************************** +// +// Values that can be passed to TimerIntEnable, TimerIntDisable, and +// TimerIntClear as the ulIntFlags parameter, and returned from TimerIntStatus. +// +//***************************************************************************** +#define TIMER_CAPB_EVENT 0x00000400 // CaptureB event interrupt +#define TIMER_CAPB_MATCH 0x00000200 // CaptureB match interrupt +#define TIMER_TIMB_TIMEOUT 0x00000100 // TimerB time out interrupt +#define TIMER_RTC_MATCH 0x00000008 // RTC interrupt mask +#define TIMER_CAPA_EVENT 0x00000004 // CaptureA event interrupt +#define TIMER_CAPA_MATCH 0x00000002 // CaptureA match interrupt +#define TIMER_TIMA_TIMEOUT 0x00000001 // TimerA time out interrupt + +//***************************************************************************** +// +// Values that can be passed to TimerControlEvent as the ulEvent parameter. +// +//***************************************************************************** +#define TIMER_EVENT_POS_EDGE 0x00000000 // Count positive edges +#define TIMER_EVENT_NEG_EDGE 0x00000404 // Count negative edges +#define TIMER_EVENT_BOTH_EDGES 0x00000C0C // Count both edges + +//***************************************************************************** +// +// Values that can be passed to most of the timer APIs as the ulTimer +// parameter. +// +//***************************************************************************** +#define TIMER_A 0x000000ff // Timer A +#define TIMER_B 0x0000ff00 // Timer B +#define TIMER_BOTH 0x0000ffff // Timer Both + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void TimerEnable(unsigned long ulBase, unsigned long ulTimer); +extern void TimerDisable(unsigned long ulBase, unsigned long ulTimer); +extern void TimerConfigure(unsigned long ulBase, unsigned long ulConfig); +extern void TimerControlLevel(unsigned long ulBase, unsigned long ulTimer, + tBoolean bInvert); +extern void TimerControlTrigger(unsigned long ulBase, unsigned long ulTimer, + tBoolean bEnable); +extern void TimerControlEvent(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulEvent); +extern void TimerControlStall(unsigned long ulBase, unsigned long ulTimer, + tBoolean bStall); +extern void TimerRTCEnable(unsigned long ulBase); +extern void TimerRTCDisable(unsigned long ulBase); +extern void TimerPrescaleSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerPrescaleGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerPrescaleMatchSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerPrescaleMatchGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerLoadSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerLoadGet(unsigned long ulBase, unsigned long ulTimer); +extern unsigned long TimerValueGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerMatchSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerMatchGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerIntRegister(unsigned long ulBase, unsigned long ulTimer, + void (*pfnHandler)(void)); +extern void TimerIntUnregister(unsigned long ulBase, unsigned long ulTimer); +extern void TimerIntEnable(unsigned long ulBase, unsigned long ulIntFlags); +extern void TimerIntDisable(unsigned long ulBase, unsigned long ulIntFlags); +extern unsigned long TimerIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void TimerIntClear(unsigned long ulBase, unsigned long ulIntFlags); +extern void TimerQuiesce(unsigned long ulBase); + +#ifdef __cplusplus +} +#endif + +#endif // __TIMER_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/pwm.h b/Demo/Common/drivers/LuminaryMicro/pwm.h new file mode 100644 index 000000000..d3138d3dd --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/pwm.h @@ -0,0 +1,161 @@ +//***************************************************************************** +// +// pwm.h - API function protoypes for Pulse Width Modulation (PWM) ports +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __PWM_H__ +#define __PWM_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// The following defines are passed to PWMGenConfigure() as the ulConfig +// parameter and specify the configuration of the PWM generator. +// +//***************************************************************************** +#define PWM_GEN_MODE_DOWN 0x00000000 // Down count mode +#define PWM_GEN_MODE_UP_DOWN 0x00000002 // Up/Down count mode +#define PWM_GEN_MODE_SYNC 0x00000038 // Synchronous updates +#define PWM_GEN_MODE_NO_SYNC 0x00000000 // Immediate updates +#define PWM_GEN_MODE_DBG_RUN 0x00000004 // Continue running in debug mode +#define PWM_GEN_MODE_DBG_STOP 0x00000000 // Stop running in debug mode + +//***************************************************************************** +// +// Defines for enabling, disabling, and clearing PWM generator interrupts and +// triggers. +// +//***************************************************************************** +#define PWM_INT_CNT_ZERO 0x00000001 // Int if COUNT = 0 +#define PWM_INT_CNT_LOAD 0x00000002 // Int if COUNT = LOAD +#define PWM_INT_CNT_AU 0x00000004 // Int if COUNT = CMPA U +#define PWM_INT_CNT_AD 0x00000008 // Int if COUNT = CMPA D +#define PWM_INT_CNT_BU 0x00000010 // Int if COUNT = CMPA U +#define PWM_INT_CNT_BD 0x00000020 // Int if COUNT = CMPA D +#define PWM_TR_CNT_ZERO 0x00000100 // Trig if COUNT = 0 +#define PWM_TR_CNT_LOAD 0x00000200 // Trig if COUNT = LOAD +#define PWM_TR_CNT_AU 0x00000400 // Trig if COUNT = CMPA U +#define PWM_TR_CNT_AD 0x00000800 // Trig if COUNT = CMPA D +#define PWM_TR_CNT_BU 0x00001000 // Trig if COUNT = CMPA U +#define PWM_TR_CNT_BD 0x00002000 // Trig if COUNT = CMPA D + +//***************************************************************************** +// +// Defines for enabling, disabling, and clearing PWM interrupts. +// +//***************************************************************************** +#define PWM_INT_GEN_0 0x00000001 // Generator 0 interrupt +#define PWM_INT_GEN_1 0x00000002 // Generator 1 interrupt +#define PWM_INT_GEN_2 0x00000004 // Generator 2 interrupt +#define PWM_INT_FAULT 0x00010000 // Fault interrupt + +//***************************************************************************** +// +// Defines to identify the generators within a module. +// +//***************************************************************************** +#define PWM_GEN_0 0x00000040 // Offset address of Gen0 +#define PWM_GEN_1 0x00000080 // Offset address of Gen1 +#define PWM_GEN_2 0x000000C0 // Offset address of Gen2 + +#define PWM_GEN_0_BIT 0x00000001 // Bit-wise ID for Gen0 +#define PWM_GEN_1_BIT 0x00000002 // Bit-wise ID for Gen1 +#define PWM_GEN_2_BIT 0x00000004 // Bit-wise ID for Gen2 + +//***************************************************************************** +// +// Defines to identify the outputs within a module. +// +//***************************************************************************** +#define PWM_OUT_0 0x00000040 // Encoded offset address of PWM0 +#define PWM_OUT_1 0x00000041 // Encoded offset address of PWM1 +#define PWM_OUT_2 0x00000082 // Encoded offset address of PWM2 +#define PWM_OUT_3 0x00000083 // Encoded offset address of PWM3 +#define PWM_OUT_4 0x000000C4 // Encoded offset address of PWM4 +#define PWM_OUT_5 0x000000C5 // Encoded offset address of PWM5 + +#define PWM_OUT_0_BIT 0x00000001 // Bit-wise ID for PWM0 +#define PWM_OUT_1_BIT 0x00000002 // Bit-wise ID for PWM1 +#define PWM_OUT_2_BIT 0x00000004 // Bit-wise ID for PWM2 +#define PWM_OUT_3_BIT 0x00000008 // Bit-wise ID for PWM3 +#define PWM_OUT_4_BIT 0x00000010 // Bit-wise ID for PWM4 +#define PWM_OUT_5_BIT 0x00000020 // Bit-wise ID for PWM5 + +//***************************************************************************** +// +// API Function prototypes +// +//***************************************************************************** +extern void PWMGenConfigure(unsigned long ulBase, unsigned long ulGen, + unsigned long ulConfig); +extern void PWMGenPeriodSet(unsigned long ulBase, unsigned long ulGen, + unsigned long ulPeriod); +extern unsigned long PWMGenPeriodGet(unsigned long ulBase, + unsigned long ulGen); +extern void PWMGenEnable(unsigned long ulBase, unsigned long ulGen); +extern void PWMGenDisable(unsigned long ulBase, unsigned long ulGen); +extern void PWMPulseWidthSet(unsigned long ulBase, unsigned long ulPWMOut, + unsigned long ulWidth); +extern unsigned long PWMPulseWidthGet(unsigned long ulBase, + unsigned long ulPWMOut); +extern void PWMDeadBandEnable(unsigned long ulBase, unsigned long ulGen, + unsigned short usRise, unsigned short usFall); +extern void PWMDeadBandDisable(unsigned long ulBase, unsigned long ulGen); +extern void PWMSyncUpdate(unsigned long ulBase, unsigned long ulGenBits); +extern void PWMSyncTimeBase(unsigned long ulBase, unsigned long ulGenBits); +extern void PWMOutputState(unsigned long ulBase, unsigned long ulPWMOutBits, + tBoolean bEnable); +extern void PWMOutputInvert(unsigned long ulBase, unsigned long ulPWMOutBits, + tBoolean bInvert); +extern void PWMOutputFault(unsigned long ulBase, unsigned long ulPWMOutBits, + tBoolean bFaultKill); +extern void PWMGenIntRegister(unsigned long ulBase, unsigned long ulGen, + void (*pfnIntHandler)(void)); +extern void PWMGenIntUnregister(unsigned long ulBase, unsigned long ulGen); +extern void PWMFaultIntRegister(unsigned long ulBase, + void (*pfnIntHandler)(void)); +extern void PWMFaultIntUnregister(unsigned long ulBase); +extern void PWMGenIntTrigEnable(unsigned long ulBase, unsigned long ulGen, + unsigned long ulIntTrig); +extern void PWMGenIntTrigDisable(unsigned long ulBase, unsigned long ulGen, + unsigned long ulIntTrig); +extern unsigned long PWMGenIntStatus(unsigned long ulBase, unsigned long ulGen, + tBoolean bMasked); +extern void PWMGenIntClear(unsigned long ulBase, unsigned long ulGen, + unsigned long ulInts); +extern void PWMIntEnable(unsigned long ulBase, unsigned long ulGenFault); +extern void PWMIntDisable(unsigned long ulBase, unsigned long ulGenFault); +extern void PWMFaultIntClear(unsigned long ulBase); +extern unsigned long PWMIntStatus(unsigned long ulBase, tBoolean bMasked); + +#ifdef __cplusplus +} +#endif + +#endif // __PWM_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/qei.h b/Demo/Common/drivers/LuminaryMicro/qei.h new file mode 100644 index 000000000..587719aec --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/qei.h @@ -0,0 +1,104 @@ +//***************************************************************************** +// +// qei.h - Prototypes for the Quadrature Encoder Driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __QEI_H__ +#define __QEI_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to QEIConfigure as the ulConfig paramater. +// +//***************************************************************************** +#define QEI_CONFIG_CAPTURE_A 0x00000000 // Count on ChA edges only +#define QEI_CONFIG_CAPTURE_A_B 0x00000008 // Count on ChA and ChB edges +#define QEI_CONFIG_NO_RESET 0x00000000 // Do not reset on index pulse +#define QEI_CONFIG_RESET_IDX 0x00000010 // Reset position on index pulse +#define QEI_CONFIG_QUADRATURE 0x00000000 // ChA and ChB are quadrature +#define QEI_CONFIG_CLOCK_DIR 0x00000004 // ChA and ChB are clock and dir +#define QEI_CONFIG_NO_SWAP 0x00000000 // Do not swap ChA and ChB +#define QEI_CONFIG_SWAP 0x00000002 // Swap ChA and ChB + +//***************************************************************************** +// +// Values that can be passed to QEIVelocityConfigure as the ulPreDiv parameter. +// +//***************************************************************************** +#define QEI_VELDIV_1 0x00000000 // Predivide by 1 +#define QEI_VELDIV_2 0x00000040 // Predivide by 2 +#define QEI_VELDIV_4 0x00000080 // Predivide by 4 +#define QEI_VELDIV_8 0x000000C0 // Predivide by 8 +#define QEI_VELDIV_16 0x00000100 // Predivide by 16 +#define QEI_VELDIV_32 0x00000140 // Predivide by 32 +#define QEI_VELDIV_64 0x00000180 // Predivide by 64 +#define QEI_VELDIV_128 0x000001C0 // Predivide by 128 + +//***************************************************************************** +// +// Values that can be passed to QEIEnableInts, QEIDisableInts, and QEIClearInts +// as the ulIntFlags parameter, and returned by QEIGetIntStatus. +// +//***************************************************************************** +#define QEI_INTERROR 0x00000008 // Phase error detected +#define QEI_INTDIR 0x00000004 // Direction change +#define QEI_INTTIMER 0x00000002 // Velocity timer expired +#define QEI_INTINDEX 0x00000001 // Index pulse detected + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void QEIEnable(unsigned long ulBase); +extern void QEIDisable(unsigned long ulBase); +extern void QEIConfigure(unsigned long ulBase, unsigned long ulConfig, + unsigned long ulMaxPosition); +extern unsigned long QEIPositionGet(unsigned long ulBase); +extern void QEIPositionSet(unsigned long ulBase, unsigned long ulPosition); +extern long QEIDirectionGet(unsigned long ulBase); +extern tBoolean QEIErrorGet(unsigned long ulBase); +extern void QEIVelocityEnable(unsigned long ulBase); +extern void QEIVelocityDisable(unsigned long ulBase); +extern void QEIVelocityConfigure(unsigned long ulBase, unsigned long ulPreDiv, + unsigned long ulPeriod); +extern unsigned long QEIVelocityGet(unsigned long ulBase); +extern void QEIIntRegister(unsigned long ulBase, void (*pfnHandler)(void)); +extern void QEIIntUnregister(unsigned long ulBase); +extern void QEIIntEnable(unsigned long ulBase, unsigned long ulIntFlags); +extern void QEIIntDisable(unsigned long ulBase, unsigned long ulIntFlags); +extern unsigned long QEIIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void QEIIntClear(unsigned long ulBase, unsigned long ulIntFlags); + +#ifdef __cplusplus +} +#endif + +#endif // __QEI_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/rit128x96x4.h b/Demo/Common/drivers/LuminaryMicro/rit128x96x4.h new file mode 100644 index 000000000..eeec8e629 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/rit128x96x4.h @@ -0,0 +1,53 @@ +//***************************************************************************** +// +// rit128x96x4.h - Prototypes for the driver for the RITEK 128x96x4 graphical +// OLED display. +// +// Copyright (c) 2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __RIT128X96X4_H__ +#define __RIT128X96X4_H__ + +//***************************************************************************** +// +// Prototypes for the driver APIs. +// +//***************************************************************************** +extern void RIT128x96x4Clear(void); +extern void RIT128x96x4StringDraw(const char *pcStr, + unsigned long ulX, + unsigned long ulY, + unsigned char ucLevel); +extern void RIT128x96x4ImageDraw(const unsigned char *pucImage, + unsigned long ulX, + unsigned long ulY, + unsigned long ulWidth, + unsigned long ulHeight); +extern void RIT128x96x4Init(unsigned long ulFrequency); +extern void RIT128x96x4Enable(unsigned long ulFrequency); +extern void RIT128x96x4Disable(void); +extern void RIT128x96x4DisplayOn(void); +extern void RIT128x96x4DisplayOff(void); + +#endif // __RIT128X96X4_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/ssi.h b/Demo/Common/drivers/LuminaryMicro/ssi.h new file mode 100644 index 000000000..088a8bd43 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/ssi.h @@ -0,0 +1,106 @@ +//***************************************************************************** +// +// ssi.h - Prototypes for the Synchronous Serial Interface Driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __SSI_H__ +#define __SSI_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to SSIIntEnable, SSIIntDisable, and SSIIntClear +// as the ulIntFlags parameter, and returned by SSIIntStatus. +// +//***************************************************************************** +#define SSI_TXFF 0x00000008 // TX FIFO half empty or less +#define SSI_RXFF 0x00000004 // RX FIFO half full or less +#define SSI_RXTO 0x00000002 // RX timeout +#define SSI_RXOR 0x00000001 // RX overrun + +//***************************************************************************** +// +// Values that can be passed to SSIConfigSetExpClk. +// +//***************************************************************************** +#define SSI_FRF_MOTO_MODE_0 0x00000000 // Moto fmt, polarity 0, phase 0 +#define SSI_FRF_MOTO_MODE_1 0x00000002 // Moto fmt, polarity 0, phase 1 +#define SSI_FRF_MOTO_MODE_2 0x00000001 // Moto fmt, polarity 1, phase 0 +#define SSI_FRF_MOTO_MODE_3 0x00000003 // Moto fmt, polarity 1, phase 1 +#define SSI_FRF_TI 0x00000010 // TI frame format +#define SSI_FRF_NMW 0x00000020 // National MicroWire frame format + +#define SSI_MODE_MASTER 0x00000000 // SSI master +#define SSI_MODE_SLAVE 0x00000001 // SSI slave +#define SSI_MODE_SLAVE_OD 0x00000002 // SSI slave with output disabled + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void SSIConfigSetExpClk(unsigned long ulBase, unsigned long ulSSIClk, + unsigned long ulProtocol, unsigned long ulMode, + unsigned long ulBitRate, + unsigned long ulDataWidth); +extern void SSIDataGet(unsigned long ulBase, unsigned long *pulData); +extern long SSIDataGetNonBlocking(unsigned long ulBase, + unsigned long *pulData); +extern void SSIDataPut(unsigned long ulBase, unsigned long ulData); +extern long SSIDataPutNonBlocking(unsigned long ulBase, unsigned long ulData); +extern void SSIDisable(unsigned long ulBase); +extern void SSIEnable(unsigned long ulBase); +extern void SSIIntClear(unsigned long ulBase, unsigned long ulIntFlags); +extern void SSIIntDisable(unsigned long ulBase, unsigned long ulIntFlags); +extern void SSIIntEnable(unsigned long ulBase, unsigned long ulIntFlags); +extern void SSIIntRegister(unsigned long ulBase, void(*pfnHandler)(void)); +extern unsigned long SSIIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void SSIIntUnregister(unsigned long ulBase); + +//***************************************************************************** +// +// Several SSI APIs have been renamed, with the original function name being +// deprecated. These defines provide backward compatibility. +// +//***************************************************************************** +#ifndef DEPRECATED +#include "sysctl.h" +#define SSIConfig(a, b, c, d, e) \ + SSIConfigSetExpClk(a, SysCtlClockGet(), b, c, d, e) +#define SSIDataNonBlockingGet(a, b) \ + SSIDataGetNonBlocking(a, b) +#define SSIDataNonBlockingPut(a, b) \ + SSIDataPutNonBlocking(a, b) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // __SSI_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/sysctl.h b/Demo/Common/drivers/LuminaryMicro/sysctl.h new file mode 100644 index 000000000..1ca8bcc6d --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/sysctl.h @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// sysctl.h - Prototypes for the system control driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __SYSCTL_H__ +#define __SYSCTL_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// The following are values that can be passed to the +// SysCtlPeripheralPresent(), SysCtlPeripheralEnable(), +// SysCtlPeripheralDisable(), and SysCtlPeripheralReset() APIs as the +// ulPeripheral parameter. The peripherals in the fourth group (upper nibble +// is 3) can only be used with the SysCtlPeripheralPresent() API. +// +//***************************************************************************** +#define SYSCTL_PERIPH_PWM 0x00100010 // PWM +#define SYSCTL_PERIPH_ADC 0x00100001 // ADC +#define SYSCTL_PERIPH_HIBERNATE 0x00000040 // Hibernation module +#define SYSCTL_PERIPH_WDOG 0x00000008 // Watchdog +#define SYSCTL_PERIPH_CAN0 0x00100100 // CAN 0 +#define SYSCTL_PERIPH_CAN1 0x00100200 // CAN 1 +#define SYSCTL_PERIPH_CAN2 0x00100400 // CAN 2 +#define SYSCTL_PERIPH_UART0 0x10000001 // UART 0 +#define SYSCTL_PERIPH_UART1 0x10000002 // UART 1 +#define SYSCTL_PERIPH_UART2 0x10000004 // UART 2 +#define SYSCTL_PERIPH_SSI 0x10000010 // SSI +#define SYSCTL_PERIPH_SSI0 0x10000010 // SSI 0 +#define SYSCTL_PERIPH_SSI1 0x10000020 // SSI 1 +#define SYSCTL_PERIPH_QEI 0x10000100 // QEI +#define SYSCTL_PERIPH_QEI0 0x10000100 // QEI 0 +#define SYSCTL_PERIPH_QEI1 0x10000200 // QEI 1 +#define SYSCTL_PERIPH_I2C 0x10001000 // I2C +#define SYSCTL_PERIPH_I2C0 0x10001000 // I2C 0 +#define SYSCTL_PERIPH_I2C1 0x10004000 // I2C 1 +#define SYSCTL_PERIPH_TIMER0 0x10100001 // Timer 0 +#define SYSCTL_PERIPH_TIMER1 0x10100002 // Timer 1 +#define SYSCTL_PERIPH_TIMER2 0x10100004 // Timer 2 +#define SYSCTL_PERIPH_TIMER3 0x10100008 // Timer 3 +#define SYSCTL_PERIPH_COMP0 0x10100100 // Analog comparator 0 +#define SYSCTL_PERIPH_COMP1 0x10100200 // Analog comparator 1 +#define SYSCTL_PERIPH_COMP2 0x10100400 // Analog comparator 2 +#define SYSCTL_PERIPH_GPIOA 0x20000001 // GPIO A +#define SYSCTL_PERIPH_GPIOB 0x20000002 // GPIO B +#define SYSCTL_PERIPH_GPIOC 0x20000004 // GPIO C +#define SYSCTL_PERIPH_GPIOD 0x20000008 // GPIO D +#define SYSCTL_PERIPH_GPIOE 0x20000010 // GPIO E +#define SYSCTL_PERIPH_GPIOF 0x20000020 // GPIO F +#define SYSCTL_PERIPH_GPIOG 0x20000040 // GPIO G +#define SYSCTL_PERIPH_GPIOH 0x20000080 // GPIO H +#define SYSCTL_PERIPH_ETH 0x20105000 // ETH +#define SYSCTL_PERIPH_MPU 0x30000080 // Cortex M3 MPU +#define SYSCTL_PERIPH_TEMP 0x30000020 // Temperature sensor +#define SYSCTL_PERIPH_PLL 0x30000010 // PLL + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlPinPresent() API +// as the ulPin parameter. +// +//***************************************************************************** +#define SYSCTL_PIN_PWM0 0x00000001 // PWM0 pin +#define SYSCTL_PIN_PWM1 0x00000002 // PWM1 pin +#define SYSCTL_PIN_PWM2 0x00000004 // PWM2 pin +#define SYSCTL_PIN_PWM3 0x00000008 // PWM3 pin +#define SYSCTL_PIN_PWM4 0x00000010 // PWM4 pin +#define SYSCTL_PIN_PWM5 0x00000020 // PWM5 pin +#define SYSCTL_PIN_C0MINUS 0x00000040 // C0- pin +#define SYSCTL_PIN_C0PLUS 0x00000080 // C0+ pin +#define SYSCTL_PIN_C0O 0x00000100 // C0o pin +#define SYSCTL_PIN_C1MINUS 0x00000200 // C1- pin +#define SYSCTL_PIN_C1PLUS 0x00000400 // C1+ pin +#define SYSCTL_PIN_C1O 0x00000800 // C1o pin +#define SYSCTL_PIN_C2MINUS 0x00001000 // C2- pin +#define SYSCTL_PIN_C2PLUS 0x00002000 // C2+ pin +#define SYSCTL_PIN_C2O 0x00004000 // C2o pin +#define SYSCTL_PIN_MC_FAULT0 0x00008000 // MC0 Fault pin +#define SYSCTL_PIN_ADC0 0x00010000 // ADC0 pin +#define SYSCTL_PIN_ADC1 0x00020000 // ADC1 pin +#define SYSCTL_PIN_ADC2 0x00040000 // ADC2 pin +#define SYSCTL_PIN_ADC3 0x00080000 // ADC3 pin +#define SYSCTL_PIN_ADC4 0x00100000 // ADC4 pin +#define SYSCTL_PIN_ADC5 0x00200000 // ADC5 pin +#define SYSCTL_PIN_ADC6 0x00400000 // ADC6 pin +#define SYSCTL_PIN_ADC7 0x00800000 // ADC7 pin +#define SYSCTL_PIN_CCP0 0x01000000 // CCP0 pin +#define SYSCTL_PIN_CCP1 0x02000000 // CCP1 pin +#define SYSCTL_PIN_CCP2 0x04000000 // CCP2 pin +#define SYSCTL_PIN_CCP3 0x08000000 // CCP3 pin +#define SYSCTL_PIN_CCP4 0x10000000 // CCP4 pin +#define SYSCTL_PIN_CCP5 0x20000000 // CCP5 pin +#define SYSCTL_PIN_32KHZ 0x80000000 // 32kHz pin + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlLDOSet() API as +// the ulVoltage value, or returned by the SysCtlLDOGet() API. +// +//***************************************************************************** +#define SYSCTL_LDO_2_25V 0x00000005 // LDO output of 2.25V +#define SYSCTL_LDO_2_30V 0x00000004 // LDO output of 2.30V +#define SYSCTL_LDO_2_35V 0x00000003 // LDO output of 2.35V +#define SYSCTL_LDO_2_40V 0x00000002 // LDO output of 2.40V +#define SYSCTL_LDO_2_45V 0x00000001 // LDO output of 2.45V +#define SYSCTL_LDO_2_50V 0x00000000 // LDO output of 2.50V +#define SYSCTL_LDO_2_55V 0x0000001f // LDO output of 2.55V +#define SYSCTL_LDO_2_60V 0x0000001e // LDO output of 2.60V +#define SYSCTL_LDO_2_65V 0x0000001d // LDO output of 2.65V +#define SYSCTL_LDO_2_70V 0x0000001c // LDO output of 2.70V +#define SYSCTL_LDO_2_75V 0x0000001b // LDO output of 2.75V + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlLDOConfigSet() API. +// +//***************************************************************************** +#define SYSCTL_LDOCFG_ARST 0x00000001 // Allow LDO failure to reset +#define SYSCTL_LDOCFG_NORST 0x00000000 // Do not reset on LDO failure + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlIntEnable(), +// SysCtlIntDisable(), and SysCtlIntClear() APIs, or returned in the bit mask +// by the SysCtlIntStatus() API. +// +//***************************************************************************** +#define SYSCTL_INT_PLL_LOCK 0x00000040 // PLL lock interrupt +#define SYSCTL_INT_CUR_LIMIT 0x00000020 // Current limit interrupt +#define SYSCTL_INT_IOSC_FAIL 0x00000010 // Internal oscillator failure int +#define SYSCTL_INT_MOSC_FAIL 0x00000008 // Main oscillator failure int +#define SYSCTL_INT_POR 0x00000004 // Power on reset interrupt +#define SYSCTL_INT_BOR 0x00000002 // Brown out interrupt +#define SYSCTL_INT_PLL_FAIL 0x00000001 // PLL failure interrupt + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlResetCauseClear() +// API or returned by the SysCtlResetCauseGet() API. +// +//***************************************************************************** +#define SYSCTL_CAUSE_LDO 0x00000020 // LDO power not OK reset +#define SYSCTL_CAUSE_SW 0x00000010 // Software reset +#define SYSCTL_CAUSE_WDOG 0x00000008 // Watchdog reset +#define SYSCTL_CAUSE_BOR 0x00000004 // Brown-out reset +#define SYSCTL_CAUSE_POR 0x00000002 // Power on reset +#define SYSCTL_CAUSE_EXT 0x00000001 // External reset + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlBrownOutConfigSet() +// API as the ulConfig parameter. +// +//***************************************************************************** +#define SYSCTL_BOR_RESET 0x00000002 // Reset instead of interrupting +#define SYSCTL_BOR_RESAMPLE 0x00000001 // Resample BOR before asserting + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlPWMClockSet() API +// as the ulConfig parameter, and can be returned by the SysCtlPWMClockGet() +// API. +// +//***************************************************************************** +#define SYSCTL_PWMDIV_1 0x00000000 // PWM clock is processor clock /1 +#define SYSCTL_PWMDIV_2 0x00100000 // PWM clock is processor clock /2 +#define SYSCTL_PWMDIV_4 0x00120000 // PWM clock is processor clock /4 +#define SYSCTL_PWMDIV_8 0x00140000 // PWM clock is processor clock /8 +#define SYSCTL_PWMDIV_16 0x00160000 // PWM clock is processor clock /16 +#define SYSCTL_PWMDIV_32 0x00180000 // PWM clock is processor clock /32 +#define SYSCTL_PWMDIV_64 0x001A0000 // PWM clock is processor clock /64 + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlADCSpeedSet() API +// as the ulSpeed parameter, and can be returned by the SyCtlADCSpeedGet() +// API. +// +//***************************************************************************** +#define SYSCTL_ADCSPEED_1MSPS 0x00000300 // 1,000,000 samples per second +#define SYSCTL_ADCSPEED_500KSPS 0x00000200 // 500,000 samples per second +#define SYSCTL_ADCSPEED_250KSPS 0x00000100 // 250,000 samples per second +#define SYSCTL_ADCSPEED_125KSPS 0x00000000 // 125,000 samples per second + +//***************************************************************************** +// +// The following are values that can be passed to the SysCtlClockSet() API as +// the ulConfig parameter. +// +//***************************************************************************** +#define SYSCTL_SYSDIV_1 0x07800000 // Processor clock is osc/pll /1 +#define SYSCTL_SYSDIV_2 0x00C00000 // Processor clock is osc/pll /2 +#define SYSCTL_SYSDIV_3 0x01400000 // Processor clock is osc/pll /3 +#define SYSCTL_SYSDIV_4 0x01C00000 // Processor clock is osc/pll /4 +#define SYSCTL_SYSDIV_5 0x02400000 // Processor clock is osc/pll /5 +#define SYSCTL_SYSDIV_6 0x02C00000 // Processor clock is osc/pll /6 +#define SYSCTL_SYSDIV_7 0x03400000 // Processor clock is osc/pll /7 +#define SYSCTL_SYSDIV_8 0x03C00000 // Processor clock is osc/pll /8 +#define SYSCTL_SYSDIV_9 0x04400000 // Processor clock is osc/pll /9 +#define SYSCTL_SYSDIV_10 0x04C00000 // Processor clock is osc/pll /10 +#define SYSCTL_SYSDIV_11 0x05400000 // Processor clock is osc/pll /11 +#define SYSCTL_SYSDIV_12 0x05C00000 // Processor clock is osc/pll /12 +#define SYSCTL_SYSDIV_13 0x06400000 // Processor clock is osc/pll /13 +#define SYSCTL_SYSDIV_14 0x06C00000 // Processor clock is osc/pll /14 +#define SYSCTL_SYSDIV_15 0x07400000 // Processor clock is osc/pll /15 +#define SYSCTL_SYSDIV_16 0x07C00000 // Processor clock is osc/pll /16 +#define SYSCTL_USE_PLL 0x00000000 // System clock is the PLL clock +#define SYSCTL_USE_OSC 0x00003800 // System clock is the osc clock +#define SYSCTL_XTAL_1MHZ 0x00000000 // External crystal is 1MHz +#define SYSCTL_XTAL_1_84MHZ 0x00000040 // External crystal is 1.8432MHz +#define SYSCTL_XTAL_2MHZ 0x00000080 // External crystal is 2MHz +#define SYSCTL_XTAL_2_45MHZ 0x000000C0 // External crystal is 2.4576MHz +#define SYSCTL_XTAL_3_57MHZ 0x00000100 // External crystal is 3.579545MHz +#define SYSCTL_XTAL_3_68MHZ 0x00000140 // External crystal is 3.6864MHz +#define SYSCTL_XTAL_4MHZ 0x00000180 // External crystal is 4MHz +#define SYSCTL_XTAL_4_09MHZ 0x000001C0 // External crystal is 4.096MHz +#define SYSCTL_XTAL_4_91MHZ 0x00000200 // External crystal is 4.9152MHz +#define SYSCTL_XTAL_5MHZ 0x00000240 // External crystal is 5MHz +#define SYSCTL_XTAL_5_12MHZ 0x00000280 // External crystal is 5.12MHz +#define SYSCTL_XTAL_6MHZ 0x000002C0 // External crystal is 6MHz +#define SYSCTL_XTAL_6_14MHZ 0x00000300 // External crystal is 6.144MHz +#define SYSCTL_XTAL_7_37MHZ 0x00000340 // External crystal is 7.3728MHz +#define SYSCTL_XTAL_8MHZ 0x00000380 // External crystal is 8MHz +#define SYSCTL_XTAL_8_19MHZ 0x000003C0 // External crystal is 8.192MHz +#define SYSCTL_OSC_MAIN 0x00000000 // Oscillator source is main osc +#define SYSCTL_OSC_INT 0x00000010 // Oscillator source is int. osc +#define SYSCTL_OSC_INT4 0x00000020 // Oscillator source is int. osc /4 +#define SYSCTL_INT_OSC_DIS 0x00000002 // Disable internal oscillator +#define SYSCTL_MAIN_OSC_DIS 0x00000001 // Disable main oscillator + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern unsigned long SysCtlSRAMSizeGet(void); +extern unsigned long SysCtlFlashSizeGet(void); +extern tBoolean SysCtlPinPresent(unsigned long ulPin); +extern tBoolean SysCtlPeripheralPresent(unsigned long ulPeripheral); +extern void SysCtlPeripheralReset(unsigned long ulPeripheral); +extern void SysCtlPeripheralEnable(unsigned long ulPeripheral); +extern void SysCtlPeripheralDisable(unsigned long ulPeripheral); +extern void SysCtlPeripheralSleepEnable(unsigned long ulPeripheral); +extern void SysCtlPeripheralSleepDisable(unsigned long ulPeripheral); +extern void SysCtlPeripheralDeepSleepEnable(unsigned long ulPeripheral); +extern void SysCtlPeripheralDeepSleepDisable(unsigned long ulPeripheral); +extern void SysCtlPeripheralClockGating(tBoolean bEnable); +extern void SysCtlIntRegister(void (*pfnHandler)(void)); +extern void SysCtlIntUnregister(void); +extern void SysCtlIntEnable(unsigned long ulInts); +extern void SysCtlIntDisable(unsigned long ulInts); +extern void SysCtlIntClear(unsigned long ulInts); +extern unsigned long SysCtlIntStatus(tBoolean bMasked); +extern void SysCtlLDOSet(unsigned long ulVoltage); +extern unsigned long SysCtlLDOGet(void); +extern void SysCtlLDOConfigSet(unsigned long ulConfig); +extern void SysCtlReset(void); +extern void SysCtlSleep(void); +extern void SysCtlDeepSleep(void); +extern unsigned long SysCtlResetCauseGet(void); +extern void SysCtlResetCauseClear(unsigned long ulCauses); +extern void SysCtlBrownOutConfigSet(unsigned long ulConfig, + unsigned long ulDelay); +extern void SysCtlClockSet(unsigned long ulConfig); +extern unsigned long SysCtlClockGet(void); +extern void SysCtlPWMClockSet(unsigned long ulConfig); +extern unsigned long SysCtlPWMClockGet(void); +extern void SysCtlADCSpeedSet(unsigned long ulSpeed); +extern unsigned long SysCtlADCSpeedGet(void); +extern void SysCtlIOSCVerificationSet(tBoolean bEnable); +extern void SysCtlMOSCVerificationSet(tBoolean bEnable); +extern void SysCtlPLLVerificationSet(tBoolean bEnable); +extern void SysCtlClkVerificationClear(void); + +#ifdef __cplusplus +} +#endif + +#endif // __SYSCTL_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/systick.h b/Demo/Common/drivers/LuminaryMicro/systick.h new file mode 100644 index 000000000..c94c70b89 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/systick.h @@ -0,0 +1,55 @@ +//***************************************************************************** +// +// systick.h - Prototypes for the SysTick driver. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __SYSTICK_H__ +#define __SYSTICK_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void SysTickEnable(void); +extern void SysTickDisable(void); +extern void SysTickIntRegister(void (*pfnHandler)(void)); +extern void SysTickIntUnregister(void); +extern void SysTickIntEnable(void); +extern void SysTickIntDisable(void); +extern void SysTickPeriodSet(unsigned long ulPeriod); +extern unsigned long SysTickPeriodGet(void); +extern unsigned long SysTickValueGet(void); + +#ifdef __cplusplus +} +#endif + +#endif // __SYSTICK_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/timer.h b/Demo/Common/drivers/LuminaryMicro/timer.h new file mode 100644 index 000000000..0a0d54512 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/timer.h @@ -0,0 +1,137 @@ +//***************************************************************************** +// +// timer.h - Prototypes for the timer module +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __TIMER_H__ +#define __TIMER_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to TimerConfigure as the ulConfig parameter. +// +//***************************************************************************** +#define TIMER_CFG_32_BIT_OS 0x00000001 // 32-bit one-shot timer +#define TIMER_CFG_32_BIT_PER 0x00000002 // 32-bit periodic timer +#define TIMER_CFG_32_RTC 0x01000000 // 32-bit RTC timer +#define TIMER_CFG_16_BIT_PAIR 0x04000000 // Two 16-bit timers +#define TIMER_CFG_A_ONE_SHOT 0x00000001 // Timer A one-shot timer +#define TIMER_CFG_A_PERIODIC 0x00000002 // Timer A periodic timer +#define TIMER_CFG_A_CAP_COUNT 0x00000003 // Timer A event counter +#define TIMER_CFG_A_CAP_TIME 0x00000007 // Timer A event timer +#define TIMER_CFG_A_PWM 0x0000000A // Timer A PWM output +#define TIMER_CFG_B_ONE_SHOT 0x00000100 // Timer B one-shot timer +#define TIMER_CFG_B_PERIODIC 0x00000200 // Timer B periodic timer +#define TIMER_CFG_B_CAP_COUNT 0x00000300 // Timer B event counter +#define TIMER_CFG_B_CAP_TIME 0x00000700 // Timer B event timer +#define TIMER_CFG_B_PWM 0x00000A00 // Timer B PWM output + +//***************************************************************************** +// +// Values that can be passed to TimerIntEnable, TimerIntDisable, and +// TimerIntClear as the ulIntFlags parameter, and returned from TimerIntStatus. +// +//***************************************************************************** +#define TIMER_CAPB_EVENT 0x00000400 // CaptureB event interrupt +#define TIMER_CAPB_MATCH 0x00000200 // CaptureB match interrupt +#define TIMER_TIMB_TIMEOUT 0x00000100 // TimerB time out interrupt +#define TIMER_RTC_MATCH 0x00000008 // RTC interrupt mask +#define TIMER_CAPA_EVENT 0x00000004 // CaptureA event interrupt +#define TIMER_CAPA_MATCH 0x00000002 // CaptureA match interrupt +#define TIMER_TIMA_TIMEOUT 0x00000001 // TimerA time out interrupt + +//***************************************************************************** +// +// Values that can be passed to TimerControlEvent as the ulEvent parameter. +// +//***************************************************************************** +#define TIMER_EVENT_POS_EDGE 0x00000000 // Count positive edges +#define TIMER_EVENT_NEG_EDGE 0x00000404 // Count negative edges +#define TIMER_EVENT_BOTH_EDGES 0x00000C0C // Count both edges + +//***************************************************************************** +// +// Values that can be passed to most of the timer APIs as the ulTimer +// parameter. +// +//***************************************************************************** +#define TIMER_A 0x000000ff // Timer A +#define TIMER_B 0x0000ff00 // Timer B +#define TIMER_BOTH 0x0000ffff // Timer Both + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void TimerEnable(unsigned long ulBase, unsigned long ulTimer); +extern void TimerDisable(unsigned long ulBase, unsigned long ulTimer); +extern void TimerConfigure(unsigned long ulBase, unsigned long ulConfig); +extern void TimerControlLevel(unsigned long ulBase, unsigned long ulTimer, + tBoolean bInvert); +extern void TimerControlTrigger(unsigned long ulBase, unsigned long ulTimer, + tBoolean bEnable); +extern void TimerControlEvent(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulEvent); +extern void TimerControlStall(unsigned long ulBase, unsigned long ulTimer, + tBoolean bStall); +extern void TimerRTCEnable(unsigned long ulBase); +extern void TimerRTCDisable(unsigned long ulBase); +extern void TimerPrescaleSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerPrescaleGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerPrescaleMatchSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerPrescaleMatchGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerLoadSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerLoadGet(unsigned long ulBase, unsigned long ulTimer); +extern unsigned long TimerValueGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerMatchSet(unsigned long ulBase, unsigned long ulTimer, + unsigned long ulValue); +extern unsigned long TimerMatchGet(unsigned long ulBase, + unsigned long ulTimer); +extern void TimerIntRegister(unsigned long ulBase, unsigned long ulTimer, + void (*pfnHandler)(void)); +extern void TimerIntUnregister(unsigned long ulBase, unsigned long ulTimer); +extern void TimerIntEnable(unsigned long ulBase, unsigned long ulIntFlags); +extern void TimerIntDisable(unsigned long ulBase, unsigned long ulIntFlags); +extern unsigned long TimerIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void TimerIntClear(unsigned long ulBase, unsigned long ulIntFlags); +extern void TimerQuiesce(unsigned long ulBase); + +#ifdef __cplusplus +} +#endif + +#endif // __TIMER_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/uart.h b/Demo/Common/drivers/LuminaryMicro/uart.h new file mode 100644 index 000000000..b8d2fea25 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/uart.h @@ -0,0 +1,152 @@ +//***************************************************************************** +// +// uart.h - Defines and Macros for the UART. +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __UART_H__ +#define __UART_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Values that can be passed to UARTIntEnable, UARTIntDisable, and UARTIntClear +// as the ulIntFlags parameter, and returned from UARTIntStatus. +// +//***************************************************************************** +#define UART_INT_OE 0x400 // Overrun Error Interrupt Mask +#define UART_INT_BE 0x200 // Break Error Interrupt Mask +#define UART_INT_PE 0x100 // Parity Error Interrupt Mask +#define UART_INT_FE 0x080 // Framing Error Interrupt Mask +#define UART_INT_RT 0x040 // Receive Timeout Interrupt Mask +#define UART_INT_TX 0x020 // Transmit Interrupt Mask +#define UART_INT_RX 0x010 // Receive Interrupt Mask + +//***************************************************************************** +// +// Values that can be passed to UARTConfigSetExpClk as the ulConfig parameter +// and returned by UARTConfigGetExpClk in the pulConfig parameter. +// Additionally, the UART_CONFIG_PAR_* subset can be passed to +// UARTParityModeSet as the ulParity parameter, and are returned by +// UARTParityModeGet. +// +//***************************************************************************** +#define UART_CONFIG_WLEN_8 0x00000060 // 8 bit data +#define UART_CONFIG_WLEN_7 0x00000040 // 7 bit data +#define UART_CONFIG_WLEN_6 0x00000020 // 6 bit data +#define UART_CONFIG_WLEN_5 0x00000000 // 5 bit data +#define UART_CONFIG_STOP_ONE 0x00000000 // One stop bit +#define UART_CONFIG_STOP_TWO 0x00000008 // Two stop bits +#define UART_CONFIG_PAR_NONE 0x00000000 // No parity +#define UART_CONFIG_PAR_EVEN 0x00000006 // Even parity +#define UART_CONFIG_PAR_ODD 0x00000002 // Odd parity +#define UART_CONFIG_PAR_ONE 0x00000086 // Parity bit is one +#define UART_CONFIG_PAR_ZERO 0x00000082 // Parity bit is zero + +//***************************************************************************** +// +// Values that can be passed to UARTFIFOLevelSet as the ulTxLevel parameter and +// returned by UARTFIFOLevelGet in the pulTxLevel. +// +//***************************************************************************** +#define UART_FIFO_TX1_8 0x00000000 // Transmit interrupt at 1/8 Full +#define UART_FIFO_TX2_8 0x00000001 // Transmit interrupt at 1/4 Full +#define UART_FIFO_TX4_8 0x00000002 // Transmit interrupt at 1/2 Full +#define UART_FIFO_TX6_8 0x00000003 // Transmit interrupt at 3/4 Full +#define UART_FIFO_TX7_8 0x00000004 // Transmit interrupt at 7/8 Full + +//***************************************************************************** +// +// Values that can be passed to UARTFIFOLevelSet as the ulRxLevel parameter and +// returned by UARTFIFOLevelGet in the pulRxLevel. +// +//***************************************************************************** +#define UART_FIFO_RX1_8 0x00000000 // Receive interrupt at 1/8 Full +#define UART_FIFO_RX2_8 0x00000008 // Receive interrupt at 1/4 Full +#define UART_FIFO_RX4_8 0x00000010 // Receive interrupt at 1/2 Full +#define UART_FIFO_RX6_8 0x00000018 // Receive interrupt at 3/4 Full +#define UART_FIFO_RX7_8 0x00000020 // Receive interrupt at 7/8 Full + +//***************************************************************************** +// +// API Function prototypes +// +//***************************************************************************** +extern void UARTParityModeSet(unsigned long ulBase, unsigned long ulParity); +extern unsigned long UARTParityModeGet(unsigned long ulBase); +extern void UARTFIFOLevelSet(unsigned long ulBase, unsigned long ulTxLevel, + unsigned long ulRxLevel); +extern void UARTFIFOLevelGet(unsigned long ulBase, unsigned long *pulTxLevel, + unsigned long *pulRxLevel); +extern void UARTConfigSetExpClk(unsigned long ulBase, unsigned long ulUARTClk, + unsigned long ulBaud, unsigned long ulConfig); +extern void UARTConfigGetExpClk(unsigned long ulBase, unsigned long ulUARTClk, + unsigned long *pulBaud, + unsigned long *pulConfig); +extern void UARTEnable(unsigned long ulBase); +extern void UARTDisable(unsigned long ulBase); +extern void UARTEnableSIR(unsigned long ulBase, tBoolean bLowPower); +extern void UARTDisableSIR(unsigned long ulBase); +extern tBoolean UARTCharsAvail(unsigned long ulBase); +extern tBoolean UARTSpaceAvail(unsigned long ulBase); +extern long UARTCharGetNonBlocking(unsigned long ulBase); +extern long UARTCharGet(unsigned long ulBase); +extern tBoolean UARTCharPutNonBlocking(unsigned long ulBase, + unsigned char ucData); +extern void UARTCharPut(unsigned long ulBase, unsigned char ucData); +extern void UARTBreakCtl(unsigned long ulBase, tBoolean bBreakState); +extern void UARTIntRegister(unsigned long ulBase, void(*pfnHandler)(void)); +extern void UARTIntUnregister(unsigned long ulBase); +extern void UARTIntEnable(unsigned long ulBase, unsigned long ulIntFlags); +extern void UARTIntDisable(unsigned long ulBase, unsigned long ulIntFlags); +extern unsigned long UARTIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void UARTIntClear(unsigned long ulBase, unsigned long ulIntFlags); + +//***************************************************************************** +// +// Several UART APIs have been renamed, with the original function name being +// deprecated. These defines provide backward compatibility. +// +//***************************************************************************** +#ifndef DEPRECATED +#include "sysctl.h" +#define UARTConfigSet(a, b, c) \ + UARTConfigSetExpClk(a, SysCtlClockGet(), b, c) +#define UARTConfigGet(a, b, c) \ + UARTConfigGetExpClk(a, SysCtlClockGet(), b, c) +#define UARTCharNonBlockingGet(a) \ + UARTCharGetNonBlocking(a) +#define UARTCharNonBlockingPut(a, b) \ + UARTCharPutNonBlocking(a, b) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // __UART_H__ diff --git a/Demo/Common/drivers/LuminaryMicro/ustdlib.c b/Demo/Common/drivers/LuminaryMicro/ustdlib.c new file mode 100644 index 000000000..e68b143fa --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/ustdlib.c @@ -0,0 +1,670 @@ +//***************************************************************************** +// +// ustdlib.c - Simple standard library functions. +// +// Copyright (c) 2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +//***************************************************************************** + +#include +#include +#include "debug.h" + +//***************************************************************************** +// +//! \addtogroup utilities_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// A mapping from an integer between 0 and 15 to its ASCII character +// equivalent. +// +//***************************************************************************** +static const char * const g_pcHex = "0123456789abcdef"; + +//***************************************************************************** +// +//! A simple vsnprintf function supporting \%c, \%d, \%s, \%u, \%x, and \%X. +//! +//! \param pcBuf points to the buffer where the converted string is stored. +//! \param ulSize is the size of the buffer. +//! \param pcString is the format string. +//! \param vaArgP is the list of optional arguments, which depend on the +//! contents of the format string. +//! +//! This function is very similar to the C library vsnprintf() +//! function. Only the following formatting characters are supported: +//! +//! - \%c to print a character +//! - \%d to print a decimal value +//! - \%s to print a string +//! - \%u to print an unsigned decimal value +//! - \%x to print a hexadecimal value using lower case letters +//! - \%X to print a hexadecimal value using lower case letters (not upper case +//! letters as would typically be used) +//! - \%\% to print out a \% character +//! +//! For \%d, \%u, \%x, and \%X, an optional number may reside between the \% +//! and the format character, which specifies the minimum number of characters +//! to use for that value; if preceeded by a 0 then the extra characters will +//! be filled with zeros instead of spaces. For example, ``\%8d'' will use +//! eight characters to print the decimal value with spaces added to reach +//! eight; ``\%08d'' will use eight characters as well but will add zeros +//! instead of spaces. +//! +//! The type of the arguments after \b pcString must match the requirements of +//! the format string. For example, if an integer was passed where a string +//! was expected, an error of some kind will most likely occur. +//! +//! The \b ulSize parameter limits the number of characters that will be +//! stored in the buffer pointed to by \b pcBuf to prevent the possibility +//! of a buffer overflow. The buffer size should be large enough to hold +//! the expected converted output string, including the null termination +//! character. +//! +//! The function will return the number of characters that would be +//! converted as if there were no limit on the buffer size. Therefore +//! it is possible for the function to return a count that is greater than +//! the specified buffer size. If this happens, it means that the output +//! was truncated. +//! +//! \return the number of characters that were to be stored, not including +//! the NULL termination character, regardless of space in the buffer. +// +//***************************************************************************** +int +uvsnprintf(char *pcBuf, unsigned long ulSize, const char *pcString, + va_list vaArgP) +{ + unsigned long ulIdx, ulValue, ulCount, ulBase; + char *pcStr, cFill; + int iConvertCount = 0; + + // + // Check the arguments. + // + ASSERT(pcString != 0); + ASSERT(pcBuf != 0); + ASSERT(ulSize != 0); + + // + // Adjust buffer size limit to allow one space for null termination. + // + if(ulSize) + { + ulSize--; + } + + // + // Initialize the count of characters converted. + // + iConvertCount = 0; + + // + // Loop while there are more characters in the format string. + // + while(*pcString) + { + // + // Find the first non-% character, or the end of the string. + // + for(ulIdx = 0; (pcString[ulIdx] != '%') && (pcString[ulIdx] != '\0'); + ulIdx++) + { + } + + // + // Write this portion of the string to the output buffer. If + // there are more characters to write than there is space in the + // buffer, then only write as much as will fit in the buffer. + // + if(ulIdx > ulSize) + { + strncpy(pcBuf, pcString, ulSize); + pcBuf += ulSize; + ulSize = 0; + } + else + { + strncpy(pcBuf, pcString, ulIdx); + pcBuf += ulIdx; + ulSize -= ulIdx; + } + + // + // Update the conversion count. This will be the number of + // characters that should have been written, even if there was + // not room in the buffer. + // + iConvertCount += ulIdx; + + // + // Skip the portion of the format string that was written. + // + pcString += ulIdx; + + // + // See if the next character is a %. + // + if(*pcString == '%') + { + // + // Skip the %. + // + pcString++; + + // + // Set the digit count to zero, and the fill character to space + // (i.e. to the defaults). + // + ulCount = 0; + cFill = ' '; + + // + // It may be necessary to get back here to process more characters. + // Goto's aren't pretty, but effective. I feel extremely dirty for + // using not one but two of the beasts. + // +again: + + // + // Determine how to handle the next character. + // + switch(*pcString++) + { + // + // Handle the digit characters. + // + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + // + // If this is a zero, and it is the first digit, then the + // fill character is a zero instead of a space. + // + if((pcString[-1] == '0') && (ulCount == 0)) + { + cFill = '0'; + } + + // + // Update the digit count. + // + ulCount *= 10; + ulCount += pcString[-1] - '0'; + + // + // Get the next character. + // + goto again; + } + + // + // Handle the %c command. + // + case 'c': + { + // + // Get the value from the varargs. + // + ulValue = va_arg(vaArgP, unsigned long); + + // + // Copy the character to the output buffer, if + // there is room. Update the buffer size remaining. + // + if(ulSize != 0) + { + *pcBuf++ = (char)ulValue; + ulSize--; + } + + // + // Update the conversion count. + // + iConvertCount++; + + // + // This command has been handled. + // + break; + } + + // + // Handle the %d command. + // + case 'd': + { + // + // Get the value from the varargs. + // + ulValue = va_arg(vaArgP, unsigned long); + + // + // If the value is negative, make it positive and stick a + // minus sign in the beginning of the buffer. + // + if((long)ulValue < 0) + { + ulValue = -(long)ulValue; + + if(ulSize != 0) + { + *pcBuf++ = '-'; + ulSize--; + } + + // + // Update the conversion count. + // + iConvertCount++; + } + + // + // Set the base to 10. + // + ulBase = 10; + + // + // Convert the value to ASCII. + // + goto convert; + } + + // + // Handle the %s command. + // + case 's': + { + // + // Get the string pointer from the varargs. + // + pcStr = va_arg(vaArgP, char *); + + // + // Determine the length of the string. + // + for(ulIdx = 0; pcStr[ulIdx] != '\0'; ulIdx++) + { + } + + // + // Copy the string to the output buffer. Only copy + // as much as will fit in the buffer. Update the + // output buffer pointer and the space remaining. + // + if(ulIdx > ulSize) + { + strncpy(pcBuf, pcStr, ulSize); + pcBuf += ulSize; + ulSize = 0; + } + else + { + strncpy(pcBuf, pcStr, ulIdx); + pcBuf += ulIdx; + ulSize -= ulIdx; + } + + // + // Update the conversion count. This will be the number of + // characters that should have been written, even if there + // was not room in the buffer. + // + iConvertCount += ulIdx; + + // + // + // This command has been handled. + // + break; + } + + // + // Handle the %u command. + // + case 'u': + { + // + // Get the value from the varargs. + // + ulValue = va_arg(vaArgP, unsigned long); + + // + // Set the base to 10. + // + ulBase = 10; + + // + // Convert the value to ASCII. + // + goto convert; + } + + // + // Handle the %x and %X commands. Note that they are treated + // identically; i.e. %X will use lower case letters for a-f + // instead of the upper case letters is should use. + // + case 'x': + case 'X': + { + // + // Get the value from the varargs. + // + ulValue = va_arg(vaArgP, unsigned long); + + // + // Set the base to 16. + // + ulBase = 16; + + // + // Determine the number of digits in the string version of + // the value. + // +convert: + for(ulIdx = 1; + (((ulIdx * ulBase) <= ulValue) && + (((ulIdx * ulBase) / ulBase) == ulIdx)); + ulIdx *= ulBase, ulCount--) + { + } + + // + // Provide additional padding at the beginning of the + // string conversion if needed. + // + if((ulCount > 1) && (ulCount < 16)) + { + for(ulCount--; ulCount; ulCount--) + { + // + // Copy the character to the output buffer if + // there is room. + // + if(ulSize != 0) + { + *pcBuf++ = cFill; + ulSize--; + } + + // + // Update the conversion count. + // + iConvertCount++; + } + } + + // + // Convert the value into a string. + // + for(; ulIdx; ulIdx /= ulBase) + { + // + // Copy the character to the output buffer if + // there is room. + // + if(ulSize != 0) + { + *pcBuf++ = g_pcHex[(ulValue / ulIdx) % ulBase]; + ulSize--; + } + + // + // Update the conversion count. + // + iConvertCount++; + } + + // + // This command has been handled. + // + break; + } + + // + // Handle the %% command. + // + case '%': + { + // + // Simply write a single %. + // + if(ulSize != 0) + { + *pcBuf++ = pcString[-1]; + ulSize--; + } + + // + // Update the conversion count. + // + iConvertCount++; + + // + // This command has been handled. + // + break; + } + + // + // Handle all other commands. + // + default: + { + // + // Indicate an error. + // + if(ulSize >= 5) + { + strncpy(pcBuf, "ERROR", 5); + pcBuf += 5; + ulSize -= 5; + } + else + { + strncpy(pcBuf, "ERROR", ulSize); + pcBuf += ulSize; + ulSize = 0; + } + + // + // Update the conversion count. + // + iConvertCount += 5; + + // + // This command has been handled. + // + break; + } + } + } + } + + // + // Null terminate the string in the buffer. + // + *pcBuf = 0; + return(iConvertCount); +} + +//***************************************************************************** +// +//! A simple sprintf function supporting \%c, \%d, \%s, \%u, \%x, and \%X. +//! +//! \param pcBuf is the buffer where the converted string is stored. +//! \param pcString is the format string. +//! \param ... are the optional arguments, which depend on the contents of the +//! format string. +//! +//! This function is very similar to the C library sprintf() function. +//! Only the following formatting characters are supported: +//! +//! - \%c to print a character +//! - \%d to print a decimal value +//! - \%s to print a string +//! - \%u to print an unsigned decimal value +//! - \%x to print a hexadecimal value using lower case letters +//! - \%X to print a hexadecimal value using lower case letters (not upper case +//! letters as would typically be used) +//! - \%\% to print out a \% character +//! +//! For \%d, \%u, \%x, and \%X, an optional number may reside between the \% +//! and the format character, which specifies the minimum number of characters +//! to use for that value; if preceeded by a 0 then the extra characters will +//! be filled with zeros instead of spaces. For example, ``\%8d'' will use +//! eight characters to print the decimal value with spaces added to reach +//! eight; ``\%08d'' will use eight characters as well but will add zeros +//! instead of spaces. +//! +//! The type of the arguments after \b pcString must match the requirements of +//! the format string. For example, if an integer was passed where a string +//! was expected, an error of some kind will most likely occur. +//! +//! The caller must ensure that the buffer pcBuf is large enough to hold the +//! entire converted string, including the null termination character. +//! +//! \return The count of characters that were written to the output buffer, +//! not including the NULL termination character. +// +//***************************************************************************** +int +usprintf(char *pcBuf, const char *pcString, ...) +{ + va_list vaArgP; + int iRet; + + // + // Start the varargs processing. + // + va_start(vaArgP, pcString); + + // + // Call vsnprintf to perform the conversion. Use a + // large number for the buffer size. + // + iRet = uvsnprintf(pcBuf, 0xffff, pcString, vaArgP); + + // + // End the varargs processing. + // + va_end(vaArgP); + + // + // Return the conversion count. + // + return(iRet); +} + +//***************************************************************************** +// +//! A simple snprintf function supporting \%c, \%d, \%s, \%u, \%x, and \%X. +//! +//! \param pcBuf is the buffer where the converted string is stored. +//! \param ulSize is the size of the buffer. +//! \param pcString is the format string. +//! \param ... are the optional arguments, which depend on the contents of the +//! format string. +//! +//! This function is very similar to the C library sprintf() function. +//! Only the following formatting characters are supported: +//! +//! - \%c to print a character +//! - \%d to print a decimal value +//! - \%s to print a string +//! - \%u to print an unsigned decimal value +//! - \%x to print a hexadecimal value using lower case letters +//! - \%X to print a hexadecimal value using lower case letters (not upper case +//! letters as would typically be used) +//! - \%\% to print out a \% character +//! +//! For \%d, \%u, \%x, and \%X, an optional number may reside between the \% +//! and the format character, which specifies the minimum number of characters +//! to use for that value; if preceeded by a 0 then the extra characters will +//! be filled with zeros instead of spaces. For example, ``\%8d'' will use +//! eight characters to print the decimal value with spaces added to reach +//! eight; ``\%08d'' will use eight characters as well but will add zeros +//! instead of spaces. +//! +//! The type of the arguments after \b pcString must match the requirements of +//! the format string. For example, if an integer was passed where a string +//! was expected, an error of some kind will most likely occur. +//! +//! The function will copy at most \b ulSize - 1 characters into the +//! buffer \b pcBuf. One space is reserved in the buffer for the null +//! termination character. +//! +//! The function will return the number of characters that would be +//! converted as if there were no limit on the buffer size. Therefore +//! it is possible for the function to return a count that is greater than +//! the specified buffer size. If this happens, it means that the output +//! was truncated. +//! +//! \return the number of characters that were to be stored, not including +//! the NULL termination character, regardless of space in the buffer. +// +//***************************************************************************** +int +usnprintf(char *pcBuf, unsigned long ulSize, const char *pcString, ...) +{ +int iRet; + + va_list vaArgP; + + // + // Start the varargs processing. + // + va_start(vaArgP, pcString); + + // + // Call vsnprintf to perform the conversion. + // + iRet = uvsnprintf(pcBuf, ulSize, pcString, vaArgP); + + // + // End the varargs processing. + // + va_end(vaArgP); + + // + // Return the conversion count. + // + return(iRet); +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/Demo/Common/drivers/LuminaryMicro/watchdog.h b/Demo/Common/drivers/LuminaryMicro/watchdog.h new file mode 100644 index 000000000..f5e227285 --- /dev/null +++ b/Demo/Common/drivers/LuminaryMicro/watchdog.h @@ -0,0 +1,63 @@ +//***************************************************************************** +// +// watchdog.h - Prototypes for the Watchdog Timer API +// +// Copyright (c) 2005-2007 Luminary Micro, Inc. All rights reserved. +// +// Software License Agreement +// +// Luminary Micro, Inc. (LMI) is supplying this software for use solely and +// exclusively on LMI's microcontroller products. +// +// The software is owned by LMI and/or its suppliers, and is protected under +// applicable copyright laws. All rights are reserved. Any use in violation +// of the foregoing restrictions may subject the user to criminal sanctions +// under applicable laws, as well as to civil liability for the breach of the +// terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR +// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 1582 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +#ifndef __WATCHDOG_H__ +#define __WATCHDOG_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern tBoolean WatchdogRunning(unsigned long ulBase); +extern void WatchdogEnable(unsigned long ulBase); +extern void WatchdogResetEnable(unsigned long ulBase); +extern void WatchdogResetDisable(unsigned long ulBase); +extern void WatchdogLock(unsigned long ulBase); +extern void WatchdogUnlock(unsigned long ulBase); +extern tBoolean WatchdogLockState(unsigned long ulBase); +extern void WatchdogReloadSet(unsigned long ulBase, unsigned long ulLoadVal); +extern unsigned long WatchdogReloadGet(unsigned long ulBase); +extern unsigned long WatchdogValueGet(unsigned long ulBase); +extern void WatchdogIntRegister(unsigned long ulBase, void(*pfnHandler)(void)); +extern void WatchdogIntUnregister(unsigned long ulBase); +extern void WatchdogIntEnable(unsigned long ulBase); +extern unsigned long WatchdogIntStatus(unsigned long ulBase, tBoolean bMasked); +extern void WatchdogIntClear(unsigned long ulBase); +extern void WatchdogStallEnable(unsigned long ulBase); +extern void WatchdogStallDisable(unsigned long ulBase); + +#ifdef __cplusplus +} +#endif + +#endif // __WATCHDOG_H__ diff --git a/Demo/Common/drivers/OpenOCD/license.txt b/Demo/Common/drivers/OpenOCD/license.txt new file mode 100644 index 000000000..807ca86a6 --- /dev/null +++ b/Demo/Common/drivers/OpenOCD/license.txt @@ -0,0 +1,6 @@ +OpenOCD is open source software that is covered by the GNU General Public +License (GPL). + +Instructions on obtaining/downloading the source code along with the relevant +Copyright information can be obtained from: http://openocd.berlios.de/web/ + diff --git a/Demo/Common/drivers/OpenOCD/openocd-pp.exe b/Demo/Common/drivers/OpenOCD/openocd-pp.exe new file mode 100644 index 0000000000000000000000000000000000000000..be21612131f4b323fcba164ed7faf7e046d89a1f GIT binary patch literal 1759869 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Ν*3!Yb7Wy?@rSV2ldB>X z>y3G?nF)oalO?%o(%i{wm;AkL18Y;7zAadNLdTTsS&hZ}e09>N<<8z;3P?#HLA&BU zy~%0m`|G@4(-XVitC*|osXCdnq8bkD2dC|=$Fi#v6bpJ9p{J$!c;8>uf*r~jk4zl} z+VA4LiZ0nb+msrLbC)fCKMJ<~$Lvtj(~3qU_lioW(zB^(U7tRY$zLDnmHlW-`YaZ4 zM`=rTeq;8GxjGrSV^7Y6wu2YLqbDCs$ms)|70$Bx7=NkoPk=Q?#kXWnFO!z<9$*%X zL_LQYn2xA6OmrL$G&^K;tFI6Klzz{SXb{>q};HvJ%6r27+r=xz`yStGXx0A zjo96nJuN9Rgt*?wnwv#)-0|i>0C+jy%aBX2;V6LePo2bJ5ohp~Gda1N?rj^{ST4dt zzfU}kIUVQ%0XkP1el+L-D=g$4aOpersdUq-z{(v%g}r`-v3}jaYi$Uj=3zv@cti96 zh)oNFIUy&<)OfV`hq6Bm`~dmMZBKF$Vs@@BH0A{D4`n|GI?Vr+pJf+qgl6)<%#Ohx zm^AqdjZ6Oa#nOEU<@0ZGw$7icD@cPY^Exid*Y8ImI(QyG-kvA1g!UP%)z$J|a12Jx z;)TR9x2@wU-fsnG6|>)xSB zE*_=H=w&*d${*s6hd9i-Pf?pIb*GhZ6G%-tfpqS&c>eRP)CyLxr$)%rl)H5YXm8j7 z+D|%Y9VNX+?G8R&8^<)x9H`QdQ+nSPVRU}R_m>Cs^q%gETk`pTj?NKTt!vXLM|*IP z2M100{&1a1zrA!{+_y0SEaWH>Tp7m&=ctFP{%WJo62+hBh|!RLv*AxAd0MGfW8otQ zQBIk?2|qE6?efaFF7z|tab?_v(itPk2M%-L3;t|SBiri_c)0Hiw6x*@VKz|TjDR=X zMf*~b#X;R2V2sj~dvu2Z_?ABa0YR0h=GRm}qO_KG?D5cHc+dXVDZbJghL%@!s3=yh zhE`^7aYazc5u-?T9rVGc*h*EI3+U5?u%@dg2*5`Gu&_T(_$B*Kr)0SWA<+qQHRD^- z-d>a}e5qV0*G(a{RB9x5iQlU-6FkL=r@PYZx3n2t2Br>Gm(-O9c9SbuGaPHcv58g) zb$yZshGumcG#CDh%G`Q{E$-Q(1DDE3M4mpEVJ8pu>vVXjXcNw&fjv3%Ad??UAAY7; zFq$$I2=K)-Khtg&xKC^AiYtT#7ENje?=76Z&0!wRv#kqbZ|$Dh#J8CH)|ksV4B`Eh zWra>Q>fJg=vDt?On?djTaEQNhJeBD$*$1dVt%V^lIL-&aVt;vC0~RB9W{vlGYC##0 zFa=)sX7b9jxh7V7N2!UaL!1Q6?Khq~#f9@+)eu4gj*gGyXP`T%X=1j+%h&E6!pJ)# zlAqDIuM+2nGguwcf9=oPB1-m>5h}~nXD@kOzt|m@Y~=xEmO+zYYn&R(&y2OI?Ci#D z`2O=TE$1ZHG-d4WGXP@*L*6%M1M|%AO#&?2?&W8i3eU{M!g@YGvym*J{LCi()C}ck zHtQiXvn9EDQZoL0Q*w0Q=nw5o9ESsMzG~w-03pS2aI6vtb{&?ErB~CehxyR{>fDS* zccH!d$JM5imGi^PeV~Cj2E^9YIn^-t#mg{fF5t@fCLio-fJ@-E3f$3s7yTSKk`I)u zq)i)Vg!)?_pJ6eT-Z@XcJ$j3F``Kt)hvewyJa zqYLm3UQWIFX@|8wF@wbdw-F`C4>P<_aV4Ic|2)uz{f*NTf5w6s*wZki1Qp2j}1OStm!JEUfk&(>rJ#$tm-{R+KviUTsEXTfc{ z7zQ2XedKa#TX3gz$p-&gxqSRSax#3mY<)gHplAQCyG;B+ZuQ8=*SfT!R(?6 zin0Tb{)=6S_xm1I{6LCuI3Je}s!-xY@Hp^22(j}i{}MqP=E@uMuF1zAQQk`2ZTKWH zR}TnJzTh(amB!>L&Ph7W% z*WfKD1ehWUruIV@?WBcc)WSqspeC~fFP-M(mS3@ICYn?guOTgNq5&oMRIR35SD)rH?G_pwZhQH z0Oqy^A4gP~=D7sCC+G#9Z3+>5<@wm)t%>+WBeIzHrSHlWFh?f4>REq*zAIh?2l++8uu9z?357#A(ehy+OhaTuY0egrr43I1q?bdRWHZWA zTyd~o#M<<43!r#^m;sCk6enxcV(#W0koz~kS7qjTKOjdiTh5?B}W25@Xie%$_(Jg{3PW-ILjey

<=b8hr{S-JmC3#zf>w=#>m7Eh?@xK#&yR>aH| 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

Jwd6?QjprFw%O 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

+j5+M)a5nl>>`+h#^9UkE0Q$T4-IUvxqiONFDO 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 QL0DtPQ!;b>pnIzS2hv!SnE(I) literal 0 HcmV?d00001 diff --git a/Demo/Common/drivers/OpenOCD/openocd_ftdi.exe b/Demo/Common/drivers/OpenOCD/openocd_ftdi.exe new file mode 100644 index 0000000000000000000000000000000000000000..52fe9f70368dcc44947170b50f30d519319301af GIT binary patch literal 1806893 zcmeEvdwdkt`S&JSV8O**YqY728f#RvsKla$iW&$DR6$V);sr$OwG~B45UXHtv&uLu zrqy`2f>%`9(yBO{XjllcplA^<#d}oLSravig{Ucczu)Ja*_qvhOZ$7@-(N2u&CJd@ z=Q+>qJm)#jbLPyrv+H~XKA+Ez|GT<;J_}d=E0@1J|5JnFJr8Wy)Aw}Wmk+Y?#=d;e z#7i%mSu*45D=)eF{OKjXIsb|)uBU=y)9)UlkeITx5$OHFZIf{?ET2-t$7Tl;q`Ej^bb*oo?)CDtVvgLRR zeM4{FcKcUDc$X=7!W;0&7eKWqvg?<#-ps1=FF?_Af9UJ;wWIuxxc)u69@^$hy_r>4 zFZA^Tejqp>*O6J0U>}g^|Nr;D$$?7alW1EYy19L^Z^I~GELoMe{;fINL(fLGACheE z>bls7$dCRfL0|aet?AoS{?fW|xzGOF@x6TOn(MOvRa(Bfh);kTBTM~eBw+YU?N6r{ z_|}yrn=h`bTzotFF+M?0eataMv31q?Q<|rAeOMQN`cTqcX;CMPPbN)>wv_-a`={u| zew2S+omt>Bn#+<6zhDm|OT*T9pn;p9HAX!NlqHRcrG@O+C@!^^U4{m@2JThYX>Y5m zy;fb9%~sbT`|I*+)zyL)vR&Q&>N+ORFTa<)r^;s^)k}W2qkSydfPv<#>KnhP!`N`n z)G5ti566}@9ylc~(5N<@%|}P^*H|D2oQ!q+km`94v#UoS;SOQ^U zX_!RWd!jxuyZCCf^RZ)N4QOV)8L>y%gJz%N9Qi_?l2JIGtLDiqKFW)F|5>natMi^ z9X|Dx*w!09jIIurCC{09-jrtCS=2B25g)N<>yvd(fAKlru*+hzI$%yIY^|u7^UaT{ zC!wpM1vgv|B~1{1JhBCPqcnN6^bwlB5YI!)E4P>h=D46)SYJL3v=+`QHwujFOZ_r1 zg+}Okp)|SSVSsbc4O&2_iz?vU1nif8*~=GQU9542F0*T^2s~Wz8&V4?H4eoutCwPH z5FG``1A8WhOY35^^-xKEg5%`qytX#BkCmfKJcQSFe3i^nE=-$Qi9bXZ>Tng1e-WCB8 zk?@MMfrL3DU=a^v<(5aQA5)wZyj$;yFUNCQvuUUoYD$u^_L0Cz#An1wu_^SM^}O%9 zVUHN8uRfRvnfnuS7f0ZCKH37mTQ6h7`&l*iPAFCf|3U$XZ4AYh@RtBZ&DfLpwK%zv z^H?bMF_^b_nf|ekKNjg9f8`H$N3OLV+skLwC~5kk^hRN+{mV-VeDhXQU|JEtuCjGy zTWPatzwJBF$Pgi=XTeC+2!nm0+F~F{Y6QBgf9U3Rw1_3IeIso`3}DiO=+XXaa4%o_ zJ&%=HuJ8z335Z}e2&c7_zN&6=~_?g4LnU~HiVnVp~i#B z9ZsmQoEU`x`->|Ilm?JziY4Stu@?3LKR}6+q1ygX6s50?fZ#Lk=desq^>p?gzypRy z5{2w5OA=M%*gI2d8h`~I{i5$g5e+@)0f?Np5KkK40`iWRvX%@xnhdfN9?(%oO>hiiOel8W+ z#Jf;!J$l!y0H6Bf8JQH1SmFwBQVM(n22BVGgJKg<-4y9#KB-*+c9}Avk$KH1!-!g3 z2;Fc@6#=C3l>>I((J)a1zRPel@d$cr5EBJgr77=^Fi~R3;bOu(QBr>U<6f5;;~GB>NZL~#ma}P7~y?9Hj0d;9dstW-awqg zaXYjDqlD$5<@b-qh1R<{UeRY|M*+=DoJ$?bZ;fhOTuM0hoBvYCMbU?L0%$?Gpg09B z(uF|U8P#M!Ls%glwBlK~I_sL_xKhKs*2 z`ulM={@kw_;m)CJE`=L?dOtNpE$zmp(cqcOZ<3NbA zSxak-NIYvYFNnwZ6m^42)|~&(#oP)tnDniZ_Y07>cIQOi#ii+OU|iy8B9D1k`%l}Z zfW1HKo8v@TV-$&SSp!C}v~`m;+j$^Sg4WcE`}ly~pgc%(3~XN;stusqrgbQj(UiE0 z9MVH7{UGVP|6E|M>_*u;#{C!K7yPx2M*LFVy;HW%h)pJK^_TPa#&YACY5aNr4E~K* zNzrWl4b{#?SK4~Wut!r^4|nimo)<_Q1<5b+xy()nVBU%5nZT>*!wi}?d(Z@sfHDj) z0e}yreRet4UFrA1TDbUTzR3JLha*+w%? zTW!>n&qj>AS2I{#SQ8^}xyB*$72p{8uI8{9dCpRDy(~H0h$+VZ9w?S2n>epg1vQ(Y zgXt2ev_(6fUI|^3~?xH7fB=ru}KDq_K#SSb54@7Lyj{c$AvtTnEYN5n?eGhR# zV#Wt0`qhy;d`8i7B1VpmWSJkitjU-YgB@&5AiKC3l^qa2$@nW}{(!O^%Z8$VQJRa>k1`Vivw*YBq z6yvk@QJDG{)03gT97N%6R;vps4SP!qP%3?--$E4#1o&8*`?{NSKVYAUET|jA2QWCX z+>Xv3m{;|)(DLE=q2;F+OwnHd@Vu2R;_~B4cYj0k6mu{9&8#nV`%2Y*uh4QdKO;{y zN4>hxvp<^BLwzjoE5p*|0rO8UFgC2Ti{|I?5}rRiFSLBk{NV^AGM-@Ug{!PY<14@s z#xsC#=vj;~jq_gfPe;o`eC;9M%8tPNyeZ8WOQWX`mHLZ^fqgI?pTJ7B_N^QGYE?h8 zeC&u=vijSy4gVEJt#yu6+o&L_8)HE0!NLWWAN%XGhvMuIgba;e0 zxhVEd)d8*jvoy@?9iLHTmKRAW`adqZrU?BPvwt7^?`<@LTA1Ym#3YRC{6<9}9qjIxZz1fJg7#(-7+}``}H!oXb!`C#vKYZ0?-^kqtv$E~* zl+ls*CTe%A>^N}c_q`8aWk&40Rr9u&j|lnZ9vQzW`FwkqQ4x-h$TKQ}sfr?!Zbk}? z3PjZq@lhcyr9Z}mpfNMt`gSIstwY)7{!|xx9V?q4S%nJXQXh+^P?PdY2 zMA!HM^1Rx1<*VAY?x8Cbs|sJ+x91i3R2kr0=BZ!dk9PR433QdlYN17Sj+R}B9|_Sb zx{jw&!8qWL;lu#DLjKvy&I3#$R-Mq@2J3XcB~HJ^=r_8$gmDpwd=}$>i0~1FSwTff z9#T$#etQchMHn|)%t42j`|O$c-MZL;7jFGn>5GORZoNtU-XXk)&^|pC13)Y4j`e$7 zz^o3M`-pz8t15|YtlH1z&(MD6h(Og(;%5hpRT#7FuKFtZ4ZYf5{So4aSVzx0xEG9d z>j&DLc*gSpW6HOTI8F%|b2?+|jOq?^PPn>{IUxv;A#(~Wg~?}~M%$ET`ZEp_P6htf zQpJ3~SrMelevWQpNn=gbMR<^~p;`@k{0AEEVpVty;Ao-s7u8Ny5&#HC#b^H;o))ZHMOVHr2OV^R#?)W|`l1GENmo>f&8jG%tPn+c7dlBFO4iRp zeg@Yr$DVL3!wd?)WnA~j?;`TMXh-}mbojm3&wApwRZtHesGxLlqoctHOT4av$n^RTjle#MYW!JvO`?0Ono85pf@>4YZXTqYW zi1hxXN+bYDl>kA6AZzJzI^)|MXG84f%%Y*Mh8Em_0<$7KG}1Q5KlIhPGtG)Z8s)t) zG`O6c%i>e~7VXovv>9nL#%*5tomiX~FWX3SWRBZ>_^ZZ?m#yQE!z(xEtyGn#Z#E;F zvyIbtVw_6j^RkRnow0>M(u*M@mnzz%Q^LlU*3Co+62+j~Le)DOGk@zpa`ju{|HWX@ z)=03xoLm};ag7Z#vp?i-&gAS7g!T_T#UHBOMv~4cgvt064I1`_te_9kWT|;=kr8RP z4uO`MR~1t;6Gx&jqf{_BVepl@C{h}H4r~u*vB{;aVOYiZDTM%QjBC$J9li$8+m5de zhHiWjy`cf^uf65KUcOX$A#Sm%VW#VNbZk`k&1*|yUDdx!RdC7z$abSBRUwlVBIOt+ zKLINoo2>_eH5Qnya8%185kNR-g@8OU=LoiMI~#@%3|Tonn4kU%j00AWru%R(fRh&i z8_W$rL4v68d0=Ki2i?1sHhudbm>!hXbJrPz()66sJN-dxf$A^pc6^NPIKwS_AM|dm zN3UtFyS($e@d@VGLURiH7Coyzz#LuzcjXX}P54mAR0Wf&$QbfpbTwwJbDa4a<{*Qt zMl=&%^I$x92f$kYmNS3DAJO@vIRW#$($;>M*NiRpu?KMIR2^i_ETrqrM9~Nkg5Kc@ zyh{%5jT)^R>r$h|Hbpaeqg?n9;U^Qy)cU2oLH^|_ZM=M9)W}_0`_C4 zz$PMupTywi^jC9&uK0{%y(e#MU+2_K)Qyu`h0;O8^IA&i-|Lx;b*d8^7nSzmx`*{{ z4>YCwtLoOWigHBps20}SsG(8?P&I*Gh=HLJq+gz_5l^%!II0VWjFGAnAQYgDvR9yb zbT#Otc(p%kh3}yKjJC<7H6_f+syc{y%T@UA6zrgN3-zw5v=oi8N}`KAtfc>ROVA9N6~5f5?$Htr??|m{Bq3W+qhx8dea};VCoUtSrO`WkTIg z#%0njDj3lcm>nZ~h#86Ecm(xuJCrJUJRd#<~nu12h?1`ElvdJN1NSfD)Dw_N5b zHDv%gx{~4G0DNsiH-Hq|j_GXx2|lFeLG<+)#@*;OB5e@Xd7K?W4ej_2|#?`Zk}@9a=WM z1E}~Ev1<~|@CweD0`FX*Ilv(xHcH8Nd}w(A`_@Pcot+MyUpRCgltm})ekIV!5vOvy z)?i*ILCUkGRvfCSvK(;eFN?IkJ;2KB$EZ~5mC;{C9M>t_&B4iU|2ws{D9gnXI#>kS z9pdaorvqu|Wqe9IF0!*|`j=4W-ZDniFi>n#IVftvUE!26xyFl@L$I} z1b^cY{M;8LSlMsT+Q>mcp1=@r?}wM*!W=whyn^M0)+qFu&_p8)3{*0n9ni?~g9j3Y zozd&W6Cz>RE)$#|*%n%^23$rFPj-j}FppJGvpN@}c?(2ZDp#bosbYuJ?8k*D%x_UXv#U%_{2j7K`2IG&e zHWm|s<4i8r)hDA^ssn!FdQ~@UwG%ss_2m22x_XVO;UFXR$oI$HUWj{zuD*=W>Dd-q zuj95s*U#m9p{~9uQ(g0YTBRoTJHmJP{t5P*^C#u|sOzIU1Gg+#X2kWL>>(N`~)q+0l(|H80-}*VPxHIK%h1RNb)E z0w7s@|Nca!1n;UE4l;|*)5vUddm%C}>FS+?uK50od&u`mQa_jP_vz~8sH3WDzArmV z!~YFRGJKz|s)Kbi_?Y^x0SB#n)Dth?Pt?$tpeUgslJ9Tn#yNZssp|Hf3-Tyk`-YqH zx~*Rvd*_Lt{wR9FAcSS|s?N(qBH^T{8LDgiWOyZKs&Hjm1?v$3e3>D!8kI$Fi9l>g z&;qZC)*J)Mx=`Kt?O|yqmIQqDVm3PdbB0oMz|$;{8K&tI(9?J_TATDlWb2V={MVXJ z@(*SfKz;VvSd`%&-es4)XBe@2wJ>w$FRqu%wo06QPJsIWRp_<4qV+WTD`v$Yq<@m! z*oYxzRt&_iMe0`=+aB3{V3g3(_g<+ZYwKAUU5W)O+%S;POld)F;8vk6mfh?3#IoCu zx})H^cMNTx)87~!aND46z$zhRl8J^~xfcOC)+v%@k^I9D?lXih1z#BxZ)o8?m?b5r z2~k9F)A(CJNKC{ZGrz$P_ZhQ8AgPSTJNWI{`P77N!v6a$1JJ3)|9{*ES+}o+> zr+%8_+RQoaso`VU$~-VNJiy>!YIu;pQ^QqcXSf8yQo|)Rks8i)3CctPQ^QNtuR-cE zSY3vw%P_fAjFF39^Ypsv#=!YA|w$U7Tu1@TrNz&73o53sc~6#F-RDQ1xe=~u8i z?rgY&_4;}0A=pla3SQ~gq|PGN5x#0z)gx6MdT!~zqK>0%OHp$Ll@e%$n;r&Jl@qRF z3F30w_rrBdGj-9~u$_P`D~Y9Zeb&#ytc zrz^?%@@efwrN2OS8$+bf8iJa{&eCWGt#wYFbxxfbsN<4>R~*#(1$H6*23+}wT-!bZDv@@EuYZcVvJseW2={pTpyAZm>VYQK z#v>5Q3&sA-#{e=yvYoF03d)QTLD!^ou2>3;6H1I|e55oEW1LNM8`e7w8LQQsaAkaU zu2|02O2AZ;yR z#V<%9X#EIc#El9F-#F4WQO8MV;e?HvTC&o}k?elDVaCAej_eZvq%|S3?sLDEb*8&x z(5iK9xA}sZi4wCq%*kTz=q#(=o78+4P@*gQkf~;)x$3;EI-?{}`Z_CBz|!lP&7pjv zgT)|q6SPjs#oeA?;Zi;ftTTHzlJJByfn{$P%_cPM)M{a)9{dj3qX41xIa!Z8sU1a7 zL1^KV5U6b4(axwTM3riy&TUadVXGeNCCj*B$(hs?Y2WoBX+$4U0ijIIeN;L9a zDJ(W;1rszlokn&0mPe}&?=-91SKNoHiN1JBy}Aq6R7DB?!XorRkwfdk#G$!Q~8#ub1dkVX!XdAJE%x_Qu=s(G$~tAyZ0czgW;q4hb;M@`{B z!3B{9RaiY;$p(yMs!27_`hpYx)%gK&pAdmRB*z{^uN#zK)pxP~e9V=}>b;cH@Of0{ z2oQf!iD|eX*M97fdJ4K0d{0m}K`W;5&FHs%Ayz)9FJ4a(c<$uODie3I?k8soO_Q3g z2MFl%z{bmPgGrkF7DAk*2&e-bST&y=222%ewI6vOW(jE@4Ej)v`*O{52E&fT-Z3iM zlxk@DQxRrV;YQIqExZ@EWm|Q^iwfjZubV-IkUKF)_ExTh+^YQqli`e~R2i9DtZr!m z7-1`NTOr#MF#WxwYh=}mN!zL+cRP>C-+lY10i~3owUcRn~ZC2VtCj>*c z&IGH>bNq~Va~ocC^+0X*_<{%b$qXDctZ(S%TYxi?)7}wn2LLG*X(Ku2%)v$q3A$s= zsX;8VfAG!4iwjG9H3P>FeP1Q1$W> zr7YD8aZUQZtZ^16kkaF$UytV=G-6W#NfGrmp7(NfZ4g97Q8psY;oh@!j6`4&#VHSy3@)KF!Jw(%% z>v68QhIN4eJWhzFrHmWkPS7>oEEDtH6m8ddf8si{a8_bu20U6=4LkS?jEA{{@~iJd zl#s74$M3g6BDg6Iq%;n!iF}4MF91-QXeO(ujmLl;zkx{f@XYKlIdf9H+J;RW2KSqk zCf)+P!KHllm2K_2^Drco<$Hz{4A$1b(!2Nk_O@{%b!!Q`WRr{0m+Ho~=T%qH_J?Yp z1`NB`2YL^nKOWh{kuz92v4=)BUB4cCCx%Aey?!;2X;@2;P!)S`fOIAVdB_RuR@Gt9 zIvKc-KkkGu;dmO3VcMv{C`C5YI1;_gV)P_mFTqy^cmRaiM}iV;eZcZBRLgW(W4q#_ zzqM~-k3~R5iNcN{nC(KRW8to^wZA0rrf(7_k6MDg(42gLK-l^TLD9oIvm4&`{tCRr zJBUZ>-t7I*mF6Ox)~XXvcoo`OReHikT&jm!V-zTfmVY(KodowLZG%f2e#>$)a3cyY zuFE)JRt*YTUy$|m02)o^Ca{c@C3V#p=rk7uHNY>CR9yrb9>9&_u#O^=n-B`DozMPg zDDcc)X+fVm%_3Q8t=K{!vNEkI>6A^iD#NnN5cS)i9-ZM?DR_2-V%E`F%vyyyz#T&FvOnGKcl32i z2iJx+rONRi{ z%EH*jxd(EE-c$ilVkq$D@CFc>k9M-*fCCR+Lf81h)-^yy z6pFCy2yk+g?=tk7%a17?ocXBb+|gwp`g)JdXi`)LtuHhmT=O>(eiN7xKDFuu)1%Vx zuLW0xVu7N<6?qTs{C15m@>Zr<6HZ|^CATts>hnV`p9F@msq2g^7?mpKsa{Eb4y@rE z8oLlGAh9Z}!VKBJuP6EwUW0DP8xOH}<_?SgfcfGHs4LcI+?g(NR_n9c@4>VbLOr3T z^89GWrJ>ppVEhgHMmsJD)$-k!d8^r*HviF%YeKaHbDs)*2u8G?6n&oW5WsJ<7O5 zH-+Xuh1SuQ4&&{^S4F??gLkutyC6Ph=q5FbnSyymUg~&x10)px06lDNM&;k)M!^ID zcjL$0`_)f>^5}S_Bw11+dadx&eUib&ldp6n7p+^|$NY6kkO>SYSy>XjA8!d?!IS~R`!l?Mb zTd1g1K0O$&nplreY+oR5`5uh;(t8Q7sT85*{{5%}RvDh-CXoI&-Pa-Nmm{yfheKYi zz{Q%0g4R#6uel+2$8eT~m)GzPCCZUD47()Jpn2uyLMT9x zCD^a-j=Luyy&I-t+*L1`U)j#hD3Bo%y=cgVowBA36=?4ZQ#N*BX$7EahHkynQGlwm zGQua$2Mz$Gd;y%}SG`pTIe4}QocanR;>nhahs~84Z3PY_scfVAVuwKMt-{6DNANWC z>?(pFUC80sCkqTgQz<`l1v*dA+91-xrtV~@b`4oh-Aq$f4P-u{r}-|rlH^F-<-|Kw z{BvI0fw)W)=jw$& zx{1eZr?bu3ot=ixvH&vfsI~w-Pl3x2p}kdxV-c`1V%(^g{+eq%#_l=+(Tx-@#IMGI z4~ek|S`AqF6FJ%*y;QQt!sDWv>-qI%M7F@f^pB{s6IDZ}>~AQ`!j5VJ{l$714xua$ za9)aDAy9yIFNsMhFk+pZT#{I|*#M^jV2-O=NBfA`M=244V4`u)egi_Q;Et^`Qp(nd zx3~z8x20t5w5Hm>q@Ze#hNsyBIMjNdngpmNkdGP(qF?&0QlR%CTx*8wzM#g(_|hbi zz8Bf?*w)r6z22Xr6} z1zsi8Z38YYZwxE&9sYjxAKWKfuw07Ae5wsvJNW$+_?hzDtb85Pgbm#Qis@Sgtk1F; z-1Rf3E-4%SwcnRsAPP7Z;*|#5vm3mE2I?zt7S>-_2su&}JL3e)7PdoCB5h&-8`(dXC$MggI!P+&GFGCcnbU^A7i|&B zMWN0csz&J|G(BNG*bu7yfVW~wYLmEa7)#7()z7D4ndOPs3V|4!V!huOfpJ9J*v##> zqbMB@3kpl|J78Vmu;9#tP`kL)e&8$k&9e&A&!THAc*53AsG&kg*943d(g5|z(DL^5 zA?RDUKrosCLfS$A;4?7YTA-nGqTE^nxi$bQuxVVz0%#;WuJmF)n-fU9#b+vZk>;5g zUil;R!+D9KZ%Uy^g}LV*0(YPGDPxo*KNnOONNh9=_sxmiXX5QTzasin4MfAV*cTJ7 zsMKlZC&n)((R>|(PenF^jhG^MY7=*o-};8!_(Qic>hm;rLmk$CG>*j4g?I>6;^VF`UXg~YE5Vldl)Gf;U?hSF>ZbkIr*RO-$!kf*5`qKDU}(KJZoza#&yuIPOyHXJmBw65a^022M0<~Sr!ua4+>9;Rv7p&3jVnqLB<3(Q1HfndBl% zpq*GzWs{9*&cO{-EJ;P4qsF8nNp;E5*b*u0L1SSI$)i-HMYY?^i@Wtro&w#U3>lp)uW6Mf9NG-+Ew31RJrVt1s8e zacVW>v1w8D2w&?1u`a6|H`TqYI`G+uY-(MAM@igQe`8HkkJ7WCWNN;GJ!F0WUL6;L zX89O%GLrr17z?UsvmZAB%Qww8%^5-i;aStbY=lN(a9PPw$x%=(&YONaqziR>X)G03 z_ziX+q9rJox)t;^xuZ2Pd(`Yvc*GSPJp%M-uTgcih1VD;^W(Q4cM5eQqL}Grfi7Iv zpfTe#1pkS3?JHRbgMxnT<{ohMjq!~^MZZ02XI&hw3wvZiuzO2kC+NpH6^dYute4<7 zoI;t>K=5eaXpTw2#&QaKBKTfi*dxJnQD|Sb3c7MszoLJI)A2W?AyJDvFQ+;DDT4wEq&WpwifmG zb(DVGcgwt&eBTaGZ9c*&IfUw%5n+L2NncxyYr`zo|jRg^|Jh#hr^J#U{nkuXQ9D_pvTntEbobtx_mgwQ;|aS!chpn zHWdlW50EvdGZhI6??7hTl=MEREAfP$?J4aHB|%MuD3oCpYg%WEW%1ju;S?&WgIeJR z71A1Ed$}&`30wPa6lUAgqdoT2S+{F>dTr}8G^9;=mHqONFqrdUV=v=;=4yb@Ye$>9?O^ zAzbU9e<<&Y^{h7wb*0|Al1G1B3NF)?K5S8typ=L5pphCEXF8HKi!&V^rVG6-r2-M{ zhr*m-4j5FnRSs2?xaQi!z#mj~TpwC2FvZ@0ca7;`BnV51tVzI%G6n5rEa!OA%+olj zMbd3fp@(@HoMy2QlU$eGhCLAszbn0kxdTA9uqWvD4#6Ftb$llC2WdJEg_(Kq=|kxS zIQp77T15OE1QVl4*#`XD$><0hLU5$d7;|QE9N~Jb5n$kGwxJ|@x1qcb59~RRR#!ir z@(G^e*`$$XpV&sT+;5C3s_qZp!`*de_Tg(M5Cz>7Ag5a%{FK`g?bsB1w7d-+{{-JV zp)mmtCm{@wdtM&+{)ux`yMH@i;5#Lp&qO zkQHz=8N*Esl8R63M-TJ5&WJLWT9%A$OjQK@xJ^}D+K!h;Qx%u{F5+c|?-E|Bl5&~t zyNtiCUxtejWl+m7lhUgA%lE&0|6;uG@a6ld3fWVbsu+wC)E<_Pi}4hLSE=5Q`5yD7 zMg>?>bubT3+w>-4(2%z)>`6~D5{=vt-yet7GGNl|zjdp2w6|I&KEwTJ^rQ>9`FBod z8Q;?R7MuKrf=>e|;cNK6~Ri;jl7M z_!#XwT$qO6p&M$V>zWr@gIG$df4sWM*!aEC)jI1gXl(BJmh;-EDgX0${^BPY3akMv z#`6;;xEk^6(V=WhOGRo~qK<2g%jvB~WWI#=7jY$$icsSbaJw%an~6q7WT_NV`B6y4 zM`1E9N5Sf&&og0Y5`aq7ZCt3&xKNF8(Q($*CGu;ndbpk!BeFpUle444I=BiOA(5`W z-{(1TPe~5M@1ITlXxHBFfYHb}UCst-hLUA*b?be|4;-}d$(6vr6 zA0hmWZB*)|)Gk!p1;|jH4T$IRkf%zdDeh|mqFs&rBib~BH*+3F&N;F+E=LK=@Ww2v z6*3jk8mP5Ys~RmTVDE;;iK=O-?o{2NP>zr%;SFdlboOK4@o+x2a!@cjVvWf-<2gDv z0VkG)`4-tm$rab>k)sDp`Ulu6Wf?wuK=OQfndX*1ub#D7bTN({IKCFsl@z!VOW26%?cB6V4&3__3N*gJr8vnQ{Y zpnZ>H8OdV>+E$k~b!q2?BiUj6dw2DaEGUBGJa095q!K9J{g)E200$SK)a9T~q1^gt zj#4*)W!?CA_qXI@4FF)Xvhw_5G@Fu5QAV?#7Dp?2sJ0U|LkmB~UxYwIwS6&+GV6Pz z@;(Ry5v$6iQgTF1m`qiwjo8T!)cRp|pPQ@6wxHR%-h(~;50(6?J2SjafIRM&^4m)n zlh@>?lbZ>}1_<%D*UTE>OBdrF`Iu?AM~WtlixIg!-5XDpTBB?b%hFam6pLk_Q{~|op;?z~(RLO?IIggNt zOAA8BLUlJN8Iqo76{r}}Q2H78NI|M)LBPJxfgx)Shb6L1!oCXt_S@GwRlFb+`}6|Q zp5#=?f+9USP=4W5*)f!`QzZ+EP8BI!zR-d9EON4OdC{qo1tklY$56#SW(m_qcyYai zPOB&1jH9i&#AoQ;lQI&sKqW+oQ+0@`PvV~5tkF1jj^z#xf#tP%NiPt~zD}Vb?oVG!$mKa-hg(Dv0imp`7MGQBihUV(w`7 zTE2l!6++?SD5GUAG6B?4aWky98h#GZzzI%_!h)&CeAwApODZs!LzJdJD<76|A)d&G z2aH%rH#%~%VmC6n&w7d_Qa>14j=UHNa&u#6XXxb3b6DY>SmK33xKT zV&PDUV|5qv7p1GZ0I1CfS%EmlQvDDODi_rxK#dY8P4a z9bK8BZi3cnR4?|QyCA>Or}e}ue?o=yd7 z3Sh6u*kQE+57Khet`v$2 z(T;C4ws1tQcIeR4T(B10H=XU0<4|c>) zB9zQKkHQ4v9-9}siL58?IXrlEukb0WY2Kw>=?{Ar-}m8lTUMmQ)S0c`k;!ELbrTe z&-}n%x6h%xVx?Yea}{~VEO{8UvIOnKTM|!jX2AZNZ!s~*q##a5V~URzH~1c#SaT;T zapw2<3JeCU-+GAM-v%rNfAQFfkcQQd8q^k~fs_s~4 zw&IXRLfzA;+Kn5T#NJD+%8oU(q?2oNz3L@Sm2Oa2S=b&!m7OQ~KHdW?e>cAQqJm4$xxI_GKoCdwAxudQqSO`0>m{naOk zzvCt`4D~U(ajJ5n<#xywrmbNnVZdl<+hngo<;=%VTz^n+rQ!OIlDoVP=FMMaj%}i|Z+*O|Qf*myFfnMd9=y6;ZHV^X~cJDw~xt4$2W^=gc#h1Nc z^dp<(bf&py=}ZP+EUW>to$4H!1MyBR4xI|csMe^$Hy+J7nCMquYB`9j~nI*W5wAsi78KRrhMRh3o-|rvG0x=PRySckmfa zFy0ZxY&qV}_l=5f?=!c-eT$DgTKjySFI@x~CKj;)<{N$T!+~hvR_(N2L9sf>=6!iv zvUV^Um2Ew~x-b+!9Jh<5XTA&60wTfEcQH3yWA4w#djC5|lx%tbJA3}iazEbKtD4>w z!N%|wv-oA!#A}9cfrnU*`k!6#I=XBs0WeNtpv6hG*M0_7!BnZ>IeeSy7kQ-bgJ4y+ zI4$g{QABXTB|tD8WdV8$zFdo*`i|Sw`o1Swk6VnlNk|XTO3{OZ&po3UFMS2q#MnMB zKGnY_b`kD;r6*jaKf75P@6_)Gn`+W)>DT&2q3UD%CCcQN}Y>+8r;v9Ht!NI>eoin{Yw ztNBHR@VS2#_MohbA|(M?BBe&fpPvW;tcgv)UkaB}Jp=c&$iqt4#7^gPbmAt{?OXC> z4~PhTD!!lup(jM>3`WJ@g3vv$;c1~?44xRW4S`$3)){kZ8vxkJ5UK-rw8YQF^SI!n z4(6eRd0Y>#+1}Ct-@6VT2lfdot+u3Vmz#rpbmu)%%ZrE$d@&#HKHyV4Otx* znll+*Eq!tofH`U7!Z{n4Y?XlLL+I<(Cu?^jx2V;?G3XpLjwpLyM^O^KlRtOtALWUy z50n~YO2y-gFyb02Df-q3b-ws@7^xH=w=9UT{x%=N!jX0&EQW(x{+St}c&B%mS}r!e z2~pwb5*3QhvHW%%A6PW1YjJJ@q!<@DY=m{LrzHMkF;Z+4=WJX7F%{9`(`JAZGI|Gd@I0j(vFGouMO_@P zG!gm%y2yS8DIvSX6zc%bf?Hy9t6YFroH$|le1G6eM3~rA)Nnubq99wfZ12`;plU^D zF=F#Wxa?L&9@%*6$9(?{-Qt)ObE>!~=iq!3W7W!!{CTTPe|^bxoN75CAZio$BQ0<&CBB2W`{35a&0Tb;nFz}f$^KGxw^-uDTd`k09_i#O3miMA zhgN)v8%$u>$x)@cBbb!+;oe5}k?ra-uRz;aBPeVCt}w`{a5gHKQI;l1SHml+ zUWqAv0%Wln)xe8Pg{d3PDYWVwrZ_Cn9J3$9ddiGW1~h0ThWa4!p-7DEyY?8jP2Ym$ z1vgU*@lGIo3-0tL5n}%I`$tiEQBHsejBlj|po{IaZzqfuH|6`{6&xrSAK!98@Wp#r zip+wOp4oo^QS|!KF*4osLCsJZGI`(qlf(}TYPP87kOhFz1dU{cByLebxTPzE zL%mgngFO{Q6d4G*LcYks<(JwvqG)XtPQY&!WR@U-X}=aDzrIbdc3|FX#l@UG#vENd?0bX}bHqo{J71{u+rR(FbsUZY6zw>;@yaRbOMZhW zX2ze0s`o?Trs_`*7V-!dxU5XaIi_tkzdRVEh?w4H@EC5Ac6b7p@?4whA4h-ipm@s^^-c%P~KEtjD(XFeq7ZY^V=aJ8Z@AOIULO$ithEVXnzR-10G+6Tf*ybT8l3M(ki3Tn zRY@18NX`3&%6kd(U}z3Q#B1p9K^f+6;QWjn?3~T8%lpIojLxwOLb1c>hoTO+r1GxV z{Xi@!8R!K&A)bf71{)$9XZ89|?GnMaZLS%ESEbB4nM)AsIRo#i1n`ZYXme@whCzAN zKT7jk5120P}`VK1=vjnrtKS?04|!yj4c;k8iK$G~qa z;SD&4HI@txN9|8RTRf92u26weWB!F06j)KzUCJxmGQ7SlJ*%lD=m2rvxa!Tg+o-_a z=)-}P8WqGZUj}3ykGxU2;=8EUiV}Aw5U+Y6{0SKGRQXu8O_h&SmvUZ!hF%g~dZT0j z^jN`}O!%VG_;8v>BWB)zpakgTP=1r)-Z`(?$oK!e@7K8R4;A7qc8mli{BZob@rb|2 zXPzre10ZN2fgKNEsR9}_YuSV4zJ^7M%6-O7YH4W5bj65l5!WcG3eL+2)Cx7mc>&`N zu2fSM{%H@C;}X~q7=cSL*`Js2B6(O?0)VMe(lUF`y%W#n_~rS?g}@JMJ-ip~FU4_# zK6~0jJOZjc+J&!}aLv~9ODSigR0hIC*`-UQGmL|aKki^;@Ji4qtGSq*I2$)5EF)V;&wEXFlV8)f)JRc;y?vT zcGo|YX|Psn*fPq(*0g5T*a|FlVQ+LQPkW) z8_<@`taCh&XFHYa)&TOQF68T(=aEpK>9;+ymqj zoXVTBA=f;sac=iO4x@6^`2dkKKU$p#ONkR=mpp)T-joS>W;TsJ4#iJZ9b^sui}1sV zN*k{-IK*b!B3Wl;D(J6S-LwcJGgf}3g!gO5_e0fpaEOypE8)lr9FxNBLhUeQ@z{l^ z1#XAqv1#fq7>}K+?gEH-s5`t*4}TUmzi`F5>`bOe8oTs#PD+F`5jC4I;wZX+`fe=r zT=J{-n}}zb^{ioRIOO}UaH${3AJT~RIb{HfJx=Ao#Y>FG#Ju9V2sk~Of6IB=+rmpQb(bZX0Ev|ldVP`9V7(@~rj5RE zoh+=a1rAf|$wyAC(?9WdbdP`4hk-twYe7*8#YiG17Hp z%^1LmmEzV}PbmDG_6qg=vT=JJUZ1XKGtjg0qy74Bh*#n)uqBEhIwP3V*uy_JWw7uP zm4(G^jA?*M%V8iJo=S0&+_OF84plO4@YU6QVhJB~SN4G@(ahT+wLfP+)HeyNll|Kv zQetY4e-#??I|SOy$oj;?5T993(v5ul#+P z>;|8Y`=`UW1}d?ude9-_L0NqBnJ_LRAB#GGLchHPEZr5`pGNC0&v2S23g*Mt!xWnH zWH>Q(ICT7g(5+8k2a+167@pe{6SQ+kwuo=XuK#^+w{bdSKx}Jh;dvaV?{J*nKM#gvw>#Q`K`JE~9{e69yCU=^_6TF( zj#6sivX?PFU#j+wPm;Wo@hQWwhw(}3oxvMWddBg&;%<&l^4E-0Yw}+4j!!yA&66tyk@ zwb>QN3whXV*7&4idB-Oik{O?Wm+>ic@UYURA`B?RzQv5X0arVTXgYJ%`4pw|{ti~3 zvdAe|$0^;J8hhQvp*I;_;IIO&=pc;`AKO)!Ij6xgX&?r#=lFYW4>x4>FkrgG_8F_c z9$|d}E>yWFoto8PpxdCzX&_{}4ffA!Fi15J&2zE`IW)9AN}{u980>a~96~M)jncrO zcZgdzLxYRWtyy)4xpgz>yLEq)RkwWCm><&}^O0^3z`QJ}yiPfePA|-?a;Of}9iN4F zjQo$)bnFSLjKQiXeKO*ENSjFh5}C_)5jNGDv<@z$`Z5H3-8u!&@pbQCLtmGbcj)Wh zQ%_%a3?ho~?`l88j3mCU_OH9Syol$W0(H?v;58*wYE^E<%&%%Dl4zEsO+NVIT;jP{DAmM>w>fnzLTSXHj))ajJT1{pJUn zqKs3e9eKa~Lkbw|OAIQPGGY}QLICw6@t0{6GsZjPdx`k2{HX8{Sdq@Y8*mx|d`XqN zaU4ltx$un4?DMT8=p?+T`eBqi;gcArx+65p3gj$^idaAl3bgLpT z4bpc-;J?5}w07qsz|mggekAbND=9FNHt+KqmN@x#%oximjQr@TVDyJRbH9!X`O~7Q zK$LFUcDQL}UD)ISbE=}&4nM$((L3kGjhGF0CDjuZ+QJFp3DicSqxQFoQI@Yn&(HTb z?0DNL8Kg`8?vx}^vMWZdN1i#GQ4Fg=-Td~~IE>p4UI9i$mT`|~c=B@OJ^W z(u&9u850-}c!M5#Dy|BI|A+Mgx(8woa}mp^MXrMXLLufV_#j8Y(_qrB$okj2imZAn zc$Qk)`;n|;r;{w`tZmc}qgKYs@fY?A&INz=q~Ch==ZqAN!oR$fK_x>-mVQrHcqkqW zf|6$hdax3;tKapG*!u1Uefwn5C%WzUc)wZ=`YJD{ev>ljH#1f{)Nj`5uHR&a!~=Jr z-#zf+!56#pB3GzW-|?tK7CQsrT>N z1_k+92fMStOh;1pjk9rCJnM^ z=;nfEH5iiB!w}c$Q!Z#$-C$PTZZ2q6-Ija3yy@8m&1&#hX^@3^cNdh-V3rFym|Ehb z608|Y#Sv^kDoLiF>oIq|@B&=Wr{IFZ|BUKc98BN!&~De=S9wxxhI5m=y&#LGUz1elYPh;5zw1s445e+!c+ z@A5tWnK(hEI)xWewqn60=?~T#A!(pOR^w#42D^$?5ZrGch+qaB)VXHmyEH`&*AoZ0 zj_GSK%PD)!6{WbZoWW1)j#oU=La-j7-(#(c6zY@qK^M~$vKYz9cL9hMt=lx6c0Pcm z_eDoQHrV=}6VE1paUgfM?`eK~{_gO%KYTgzcl}QJdowo4bmMPm;j?I@-*d`vPd;1o z&-o6Iu|Oc??f5JrLN0uJpnAFU7Lh9$#q!0{Y7^3uUTMhE_9hmAFO476_o=+Xnj@W6o#kl2 z21f(l*bdKhqmr&1gzS-U5yH8UFg|~tE8Nc<;T{4M({}@g5-$EC)4YjufJYU+b!u;e zN0t5^YUjTH@a1`cz_$-N&@>#c{FV^Zy9js*p-uR;AKV)#@lU|N443Rj0MU850b8_C z7EQ`N8T)t7@o2qLye8tFZ#X3DFt|BE&c-v@^)AQr{ctnDit}VFmon?<4rBm10BGb$ zif43Sqb5(9=fsAMB{Dwv8Su>Rn_oVS-5lQY%Ycwe+q!4-eXWms$4gK6KQ(oC@P7}U zMK=BoVu-kY1pZUe)qjEioju^65G#VHqTP45@ZU0Jckti88~%-gKb&Ub|EJ~u75;}k z+nxWJyp{cH0BwET`94sh1mhI>H-4`Maft;oYTXwf3b|0n#`yV>+i2bG}~V-Hy($*Cb2WEcZh-q1wMl)Bo~gHNPJV8O$k)byZK$K_6t` z8wdUkQw_#Jq6jw)3)wICR&e(nhJ@k?_FnNxp*4Y(IRTvrk1gx8EN-SjTVE6A5s4Vv z=S+fh?$ECi>CfM!$D<XU_M0-5sJ~C!4^nh%%LB4rD$MCW$g&Xj7e?!AO-3bb59! z+FSqaR#dwd6)fldV|7-=25&8Ouoipt0{XM6QkGOZPgEh05GyOcUKRUuPil~PL3-NCC4=*JvX?Ko9iWe`3qS z*|IVi+gNpsS=oWKp;6fZ+3XQ1#0KM!e!ws4R5+C9=20$&q5)IL2`yST?sPw~^iP9< z{*GdQiF1i5_cKd>FXnmsd(q!hf7I6<_Q&mBB|U5%#?mvhZ5Zf-3skZv!DRb5q9BEd zDICvVIOACjy_A)qdf5&D;}APNQ?| z2$ub%IRA&*fD|zvVh6B(xUWc_n?cj}!j5M1lUvJiK0Ty{Gw~}t+oNX$%$sCqvf3j8 zh361**dkIjyXNBDtEu>rRy=(L^kJ4NKP$ha`u}>@Io(lmuBrZ{U2;H zeOl=UTvHk2da8V24i@vPhw0G0HuYA~-?3gBs&paT#JRy*sG6$}WmZ8e_krVu`kWQ) zb%5fIU$uYEyS^BmtpcOC0Tk?|yNDg68UIWyP*5#n{PyZ0SerJRQu!!j6OY@5!-m~> zZP=_g44=nP_7YnwW%HH_x~{;MXMDmL#bVYRi{-q&8>T8}gHrngF%j+n8;n4eRIm>| z0cR&Sv%Z|)RE&34cYnWT?8Lf?pkbt2w=+4X)+ zYcj1PK5Hgnf?e;|-1Ok?@7Kf;3BV3&9-lcLtK9f?nf;njTe^ph0A@@LSS{&ul=g?)x(*Vvr`})e7v$Y~UbWaRMH3Okt&yIa11*1}=IU#szVJ?)x(vF*W8a zK^#LsfDJPg)S!iQyA#TB!@Wwv*_%Hz;djMttSCX zJc_JMnzWi?_Jj7qN5v`Ei)p;3{swl`u5~cj${T!S6|h8=?ekb2Kdc{6lGytxq2Jk- zxZzDmmFXA_`xsprzF&!|8Mf;Fi8|EgaePA1YW}f%Iglr#AaP4JWNGDryy+2z1|Z+w z4f4ty$WQ9Z)_OwTnhkmUrfi(&x{!TOE9qKNhd3Y2Cmx(ncOVZzLE-{c-{FR|Qk)=D z>{3*A_c|g`=)NBi?J@q=d>Vwf%k}z{4z71Yv3oHlvg2=;D}2OET(SgaD|=6{ioc0+ zWXFaYXK|27{OvLofAfBSHxqxmoz>_idgE_b;w2uqZB>ZAShp)~1tj){DZ)x>gzUE- z>xNDDs9P!Ck-@z6jQ!*ps2ypc)_6iKpEdVE<8}xCaa(ta|5S99qX@f$|D8SH-yrgw2$R%z zxA5PBHS4bRIgXHYcKjwG{HM)g`~#!tzrg=6Y~?^R_ZuRB)hPI5lD2;hpl9YBmHwBBZkwP zoU`>A$68PVD47HH=Su`@84@>mb{GD_;$kz&%|_&Dlpx)KMNNFle0<*`9=QqU$SWZ8w4hgd4h^3X3g#=d z;tkkm09cRtI(X8~c~vJq1Eylcf2}aca-(U#eCoNg;63SHC@gd&5nK+(Tb)<6>^-=c z@ZKAKiDz_owKcVWgvw4z$31gM?0XU3VhkLXb8yeJi;Ifo$TxV>^Z|?jf#;H2>W>naT zVO{+PL>Qj00t9_p%52=mpC?Gvol~oiODSQmv2*z}xqBzxsH0MpNt=(>Xnwuw1(^gP zV$K3N<%VSQl$#2F{Qk+f_nwnN0<+J)$rxL2reXJvyulQYo{-x64^F+|*r18`tHX;5 z2Sa%)!)? z;3w8VU$C15uK+guU8xS$hM5YjWcXERacW_ErCwC4S~yLRtX20xId_|aUW!Zd67oxG z2URn_J?qvyObXOB9fa`4ujIUG?0`jSmL|f6#Ge@t$ZKNo-Eka~_)=OgflNF`fv$;R zp#-IbYvn_b3^-wWN|dl?th+=DMV;-Bkfw7qb~!eFlP{TM)F(htn1f(q=IEa!f`Y~~ z(*T|tyVZC`&R1F&e}+98ajG)l$EZpw-JFHt(HWi%r3A}c1(4PVm7_my0cr; zBT&}b-1zkWA@2R->ne)>|C{Ev1PtB)0U{PCTCn&o+8}C63#Ltz77!>u3cQg5Dj+Iq z-;nUTrRC<*UJticp@0fn6%iE`1;f+-E)5= ztv}x1KfXL3H0PePJ3Bi&J3BKwJIe<{pyLCARnqRjkHV)%)H+hNa^YV`eE0|-^8dro zwO2x{4s|I!S`dqem*Z>O+6_xoiRgLs7>J|D!up>4b66(f!PG7%?XhaIC!ETM&KZJO zN_Y^i8u)>YL&wRkYIWGGQqCb)l!%^0(dTJ1|2Z{v(TJwF60?vPwCMjSWCyB>Gi1o{ zEZM)Cz1@srml4HgAJ~Tj*?HA)!cDrd8EeDE|i{TQrqtCj(D1G7fw+&d!eV);Me<+_Lk%{09#ub+0 zR3X&~>GG>Ebjm*p%k2ccsh#y5t*YYZN%Tj>!ZrQ<(4nE%EjdalOjYaUJ9xb1dee3! z%u$N3!4ke-H#pl1>5mG1HTRsmzsPmhoyQoK?SLRVf1wQmI!SA7x|9J zx8#ACt1YS$;lk|^ zyFPRWV#x9xjiN}L@2F(Ua@VPjs=_%!!f#Q256=zHF4K{XzkKe-FiYc4{!LYQevJJW z_~bJ3v~MXOzVnnt@jVK)MbEfRbcQ&ddw;#%mXkO^(col{z-|r!TwUpPyT!?g3SX~+ zJ$-s3_=hfd7EQ$XulqYBe($lva}%9{;hBGwneHMna&dlMjbF{k{brw($fpf5(uq6Y zV*JW;5*6syZ=dX^uT`MiFZoo0YN0O&f-3KsHtGKDg}D~f;VaZiyEMfm{v?FWzqP+x z;$J!Jhll;&@(E37xBcCE{_J9Zw~$Y$kTJ#NPcq)V9jCo9*3a}$8Ed4oc_NZ*_r?X{ z{oPNgK)kh{;&$0kpm+ay+UgyaPbj<> zAQY+z_i+!^;Q{K7BvQ=F(fhw)dMeUvD0&VkEwlu7SfKj@(PveE$4F zO3svhr1envjhLB(bd>M%31SNkbG#}E+XQRcdzcDv3^)nS#sYWF(KyqCZo9cpjY|ds$l}Sj`uYdr^P> zJtwzYf73h3uX8%&h!W@gJO1rAKd}@4cKAv>^L`i4Jmuyn&ODcAr?8TI{}zPDPWNxW zxl8|cI~skW!z-UvUDX{Zl-61c%66PB?Bf7txw6@<{xF}<=sJ#~CHuGQv}N9c9ngT5 zi>dDLhNcJk0q_1M&DL(euU@$gH$f} zyDCZ&^Q<0+rOdfBF8t?m&>N_0pojF{5UGlq;=;?f0lB)^$a?jskP}S$&JvLAJ%!6AYyFk z>-R~5I&9<1X&wF&FlSj-YUO$JEOW>@t=+Gk&gAU3FPqB0Sp5E4`|@P@7hA{fu`ldH z4ASXcoC9HF?g863O=WU0YkJ|NQ7t+L(tewIFikE`$A8afNAv>em`t_ZLN$6K{sX5EaP)G;lu5Hft%IdvHON#?vor4*WV2&JDjeS;Qhs4%$Zyl_P7yB<{x3I zc0S9m`~y5eO59p1OO*PP>Ww?AP`a%==3yJ$Wb|P$%?Hx$n)-zSje`P>gTgM_|1N1~ zFs>FwZ{T@ze&@P@Wz6pqfAT9I1do3a|Nl9ZG!|ov{}=Msx$iS&VrTKN_>QU} zG&r7XN-V)>?cyoZ8&5l{mDy6Q)S)C1t?%K?Nvw~4Tn3LjX_DO+iTy}mGdGq$Hk~)% zm7B6X)pna!wAL`FG`-GNr`74z7-kQpmfpy>-Zv|Cfbox~Ns#pfb06|LzT&L3wSi>V z7f^jowz;W$0M=29dxY4Wds0t6TAt+dL8Bz2eAy@vK-&;%<<*SNHH9{_-U8d8sYgJU z(_m3&_g3AUcjo22EwPt~w@ojos=OkpoQ589IJe7YYE9VS9>_DQ25Bh#oO?q)re&iN zmIu*J4wu-Ai?^<%aBkib@Bf}Zc5Ty=#M-7CMy+ki?6#KcAl5de`TzO~nj1~g=pToJ zb@Mp&AZRv0eVO!<8>F3?`fP-<<){!k==@=Uvo@>hBqvl(=>zU0|+hDz)vJhWLB+&0UoiWZ{+-WZs-H0kv*gmx()4>e^ z)6M{&di2NkUvY(R$~C1i>vB!kli3_~)Q$EoHm|p;W?$2w0g&Dk53?3fh^AgdJs4Zj zCq5usr}c9nOkQVkggH9YKqf7ue{Jr*OX6<`)SV z{oMvGL_s@sHltpdlVn%!Gn5{syQyl{+I1dddi(8|-v++MTWJ24lC^es1c}(R!4@<^ z`b{DMu>huK+J=R@K&$LhiTKJ9?W@IChAgt`%g0&ue#a&^@-F*;Hb(p%CU(Whh5WY5 z2(&HYZ#5}rpu%3;-9Q7Id)%Lu?vJq#J8uqC4qTpEHFN)prOEvr zmch)gvf1#}8B?q?*S#>5Qy&@ye=R4sd8XSH#tgpmH}1j9%*KV20^9h?KEbkIzrK4M zIEX>%9$Ugy(P-R;!HLz`iga)CgzSmct($_3$RZLScT%!^vyYxrJrUmT1Yu41UH4EO zvQIorMovWWqCB96qJ97w|96SIN~XX9-IK~?bB^_y0m?u#%CYzu$Kt%?0P~OpW)+pA zHFyrnIbjA~SkHxUElbP;lJlGqeZZ2w*i?x5{z|@hzPG()cQa15Npm2Zv&%kKi0gIB zj#eS9aImpW4iki>vn*J2uL(k%Glh9_JD}oi>7}Y}Q%5t#rj9yOke&be^pO1YLe?gT z77o^c=)@Bd5d{~&mKJ@9R(&1y_j-QC$(`YB`|zs+5q(&YwyqcX*YkFCE{kdO2I5hC ztBG2_o&-MXgA{vs;}0LVqy)T~V(%Be1A0xd@Pg}3NUh3Alw}`Hzgm$QO0DS0Y-l-{ zhs+h~ykGfF7z=7w@xrao+j=X)$65MXMkyVWx)`5@=P?of8BXii7PH&XaCT$f)kN*+ zKdx%H5lChA_vt1OPC)2=P1knncbWv3D$;@~qP?)Is2{WJ5%kY14iCLg7{I@0}{3tL8mMNb-=mdaZNsEJKAA4->N7HXDj z7HXF3#s6}-R*%Gd8;;*8^G&%G9*gs_c+Ltx#y}Jn&+vo%0!npAP^M-YOBJ zO!_GN3u*(qPYH4vS=QQoM8IASG5FKUAB3;Sgz)_me=62yzUaP*UIm73ICwZici{o` z5)i)P(h|?zZaFnYB(vTHO606nL~hR76}wx@h}@iuk0HuWjJ|Rls29R2Z}-F7bSEFp z|LmnGmPO8xMR~{>x_0B45H9E+rL6Cd8W#e9)*uVwx#NQ-m;~iPmDe@rZ=zIs2+mo_ zLu%ESrA9)}EA>4UZyOtXUaHC&_wgzj?Nb9YZ)%*{RI}jJ^w6l5DGNiQc3aPp^i`63 z45ax7!4q(xPFMh4)qHQgmGoEi*@2r%YAmEi>cO6Y_0j3?H8uFS#cMRuKJFp>O3Yem z_fQ?)?ODrnREJ4FS&iw%Mb`T0tYo6=9;$SzUi&XpCw6+Wo6ChVrS~!74+zZ3R{>_3Vu%+fbe@n6_h z=TXMlRt4F8Gl=ihzVa%BSx~Wk?>Ol z)YXvr;q7M^4(n~J3-(0n4WZ^@TOBIfYQ0ejEVE0^wpuRRYG-EAUtpQ8A;)Glwz`I! zJ@*xs*!`|6GTWmwOYB}Se0GZ8`WeVt?y+GsMU`u9{H23?+y3v zX-cI3n4&W^;X8PK;w|gfUg((VKUr|26Tt3vk!19Zh30z8ZsIhv?Z>eHR?LeqPuvz< zIhIwRHv9uCQy0S#E&LmFmkmD<=Ex4h5oKrU^sHp+$>;@!0W7P-ck?MX z?^bIrIZ^OvD5*8exR1J zt!v5^jeizlCe#&j3T0r3MD)&g2&*;qn?Y)v0b2=JN#58W!`)Wx`Vu6+A(GT@Y&4Px z4!wHiD^Rv+xkShl#2PPcy45SLF&CFM_MJT#Xp$P<6Mgg`t-Ch@)(b}M6`7%)znXQ} zD|qpKKdCZq)t>*g5;3=5&9O(lfJFYp~9(I3l1v`MszedYnf~jBcN6JOv&s(FRk~5`LN-$VCV)J8zde_7BAB>TY8&iMc zak^-C&5>*4@VRpTmfNrPYwut(A*0i-Xq-PbxA62~@l2^z&HuCX_fKpm0;R2nfezZf zB@vmO`K>wWrom)mx{p--yDi*g;BpI(qWt{0{C(nsncr%m@T9ol^T8Pt>xViMw3?ey zw|I3OQ61dj)%)@&;);e6i(jyRAEoBY#3veOV8}Ha5I!P>ow$rca1G{zlqqgN%b?CB@1S+fSjB#cUoQhc z&HoR9U`V4c=Y{Zc6~^T*94RXVkM{-tKp|J~H$27j!|8MBt>*xinfECK6E3vR^N08g zyg!%Oi)UN(;tGGe6GuXp@H>@>K*>}KW{p$|VK?kuEzS{LNxX|R_@+&Jk!F;8UeF0x@&r=z|p6!In?ZYOhUZWOSk08;&L<< zDCO~@wmy6u$&QkvGnrC!=8w&0o@9?KmD!ETG3xX}@mE4Jm)Qh+2+wGU zguCrS6fEjbL0e9rNhbPGZW90x)yjO#a{l3*z%d)_uN@U=X->Z}YT=&8*+j|SZiUlt zRPe^BFE`tp%z9op-UP5V@z!5i{^Gc+Zj|D`fp39f#sWW^Czb7KJ$A^xEPhzuh3R!; zgB4b`ZH4fp$UB0ER#@qwmW{5Q0;^JO3J^_qnYNO%KLdNx&0x3Om9;?w@rkXvSEmk; zQPni;#NC1wB4A%bEw2*6!P>lQWJI6MHttG$jH64=V)HcHSQ8kkooYS!=;4p#l7A2+ z&9xs)rGYU)&Jf>!@f+$$_Uz?9JLv=WoYe~caCHCLtMC@!}HV^!q zYFf$LKSm*^gd=mhE~Rd#0f^OYspe5D)yAVGyK^+d_n%!p6sLgC9~(4I^01kWJ?9%z zwc#x>c3+OM>q!pBZZXYJJH4Icao+$pHZ9LiZ?9~5uVb)Vq;yI%e%GHFw#EtkVmW17 z+*`rwPIx!qyL=lpoxh! z;x!HcK+B82h>uG8q0`D^w4<(9Y4o~69Yf^(AQF8TM_x>Ek5n?6gpSY4h>?rdRHN^w zRH}KBMzRp@Fl;>^ao-oh-~v{hp-ZA-fs9ic^NwpvI3v z^v6rVu4z!{v-qX2oHQzxxd8H&`R7PB!}mm&MrEMtqUFu$x8Hf)@mgWeGl%6vB+wDP z$Lp`VHn-x{;>EeSWKWu`pcSos08&e;zp$r7UK2P$^;W8JRa)~#F*($-4bbkc;q^+hU+8oF^%mV~wWHvsS11CGXZ zPRsZLpUddM{foZmM;accTw6B&(r%McKB-_0bASdjueYZDCij~d+JWBNwd|p_2paf2 zOYl5*`K=!TQiL<0*H@*M$+P6Ko=Qb1mumYOnEQ9{vv&ul+7{~Ftg5bY`s)Vl8fzfF zKfsfZ=tZf~;EdBY#&>!-zMuN5wdujE5g72DSc-4ic<2J;iiJemW;A7fEaiK#FP;2*@yu@V{TW?z`4_1(vGZxf5R}Eb zPyjQ!NvTE>v-~SxLafZKN?$ErXNz3ZRkVqIc@!&L)7HMGNN8CK-ui7)TY|ZfSnw=U zC4bZ8I{i`o-6^v}J6WYGdQz);nqS{^NMHKxnuVR2p_YS&nj&sx9JBCy!Mv@K`i-=h zUNg~aSIly8hRaW~{V$?)B=XKvOJm0u*fM%n-^evQ;ZhAG2l~$dr-AHY@^^%+?e#fMW3q~S7hY7g(l z1HRIMR;k#F(wfB?T%B5W6f-yW9{KK0tj(ad=Z;_NtwQufpUe%^^Ehb+YMBNx27Hh zaaU+mNuj-~C`6Fk(6&b^2fi7zl?h-!%r#w~XP8HB;Dw(XmFSR~oj;0ys0l6!dlrASDEMVF{yn@dMi zv-2EUZdaj>m8w@_Xys?~-R6t4N1fIp;XQwBYh&=OHMHKL9%MEz{4WL~n3K%S7$Pz{ zb!#tr)|;Z3``+974(=D^B=!xeBf`ZSt;`jtf*HZSBPwWkC+_Zsw@9v47kT~|=ozM8 zWB&mp`{IuD)(Kj=$alA3NB8cE2q2-*oUxkEWFFYR~t!Gffcx2{fojq#tn+QmoOiNWr}M|^Er*x4XBwvw6(^&{*x zNlwW^Sk>O$!aFw!iM#OX)GwZ84vkY?TzSe%2imGJcS}4y@AbB2coj<@r)bvqH5e20 zHB^g|ww@3@n_X8-q=Y<6Ts3%<_~|`-`OA;EzD>LA$}z7t9EZ(JG;)sk1~CT z$gUFgFsjXP9W95JDlLEkhWi%1X=`p_id>B|E^VhNrO(RWX~QF~ny3+DEZAloF-F6o zI-lSX0LwP@(|a5D9q}-}0X{oyuu6vUyL#z{Q3E`D7;7Qgu7)wywvEc+bak^hY|l$& z9X6DY*}Hy|rfzWC-J8-5xJUjPH<2KKBfgx3{W;AAk*_DWeow4p2^ z-`)OQZEl{D2s?Q@+?^Lqa1diT{4RLH54hE5W@;`f|E(sc+^tuRm7jWk;XpMTU5nRl zXFQD9&Bl*2fGYQFDq~bSu{t=Vmh)QgO}|;u^4av8qgqY?9q(?`(fX3~VO}71{RWBB z`Jlu~3;9=0LaaE~97|-u#qxBZ$1q%|fPHrvZEEzQyEpY#@FelEbv?0HXLDUAx$BW3#x= zMn;lqmW|BaILb6K7_6zxr5d$q?1$jb)b{?28m$3s$MO2I%hoo%Rv9c4!BD!}?&WW= zOmyW}=2iWof|HAO;Bd4OUrDUofMJqa)$|&G;ZBrle}?3XymzB+%PFO~TV4Q*mc6+< zpX3#^;on49y9OpGnD}qSi_Grv0BKb`<9w!8jHkt2#``m1Xil3lH1G9jKEI;kbT=ja+Bb4qv)P#%``TH4h9!BMLgM2*j zs$I0oUS~M~Xi-&=QW0GR7&FQ8o5VDG7LytA1pi4A+j;17r)4&`j4h8}CBO~6=$*kQ z>N1;KUroEi$y(i*7*V%|;}dlQTZ;ZP4{sdXaWeO&&rV;3zBM0xO9B;ND$uS8POD-j z&rDyFOs3jy*Zb3I+!@jeQwzbmLj!Cp;XZ8ZNxBZrIjXNwi+#~cO|vjt%Tz};b zbd1EI8)Kwn*yG^C4V$PoAh%ykIEjX?FZw~~ydT1ibZj@Ai)i@TPH;;CEq@*ZQ`Y9i zzRmT_1hpw9%pXUoxJ_?8*Mz>^>hPz-2P}G=WbSUT>Zob@m&woV&VE*+6E7rC!zKkM zRHMAUn^P2!m6fBIU}We9DY64*(#u@DKtum@DJEUdxyF4=#|@4a#jwd4F(#b-Vc{-4 zA4k3w5}8!lDY987W?pwO-4JNAU_mft{h7R>{6uIJdpNGfeU?@0&%h0I7Ccmd5>kfX)@& zeBbt64NvprHz9rMIgIwbvs-_XzD{iUl0m5n_On?EmO`vLG`5uKu^SUWs1BVvDfM8w z-+eE>j`m?40Z~=VpUF`AX$3~SNpxxccN!vEnl1*BkxNq#spRwTrfvyIVkWy_d#phQ zqUONOaaU~*#rH7TaXf%KjqgfS`{*+Oc1+d{TaZy{crV4^G+OKqy$sUQl`SJ%IX@KT z$K;*K4-EwJqjo3q<7Xy6YKO@WuP>l+&aD-Tnb%0V1DayPY*cx~i8}z2?wPICVmnca z_3I1zmX=6=K&0X0_8qqrm{p49hV(~TF9K-vo{1XIZzeT7xZSml*;IWRy_KO*P%O|@ zx6aFN-o#jrm=6>ZzBQT{^Qz5>P%BKauTi=&J+Pac($i4oo0%c3H@1%xspD-bw=M6m zo?%#L*Mjg%?_2gC+N? zeZ2%#=x~HM7g-V&}OGt!6MZj13yJ z(xUMqix42_66wb(v~)%90|CYr*+IK5hrXYe&RY>lK*(G1xMt~J zm<_fpp)`xPq6udey-Lp>SO_TZ2G7LY_C4{iNTur127!#6&Le+G@CNL0u=(l zQo@5&+j|TI>v<|ecDNYY(b89(Pw}sCzHei^S*=mC8z zTYp{ZV&~QBIZ~rAG7NmMD2_3?6g;f1YwM=C?yhSzxEi%KC}9IlXc)Sni5W1RI~+F3 zlvOxGcHQ2 zUguCL!71a%Max{wW*2~u-0)3RnQeUy6DUDE(KX_9I{EYwL;%foyOn)2CfVXAl@Iw) zz5Q+JGZq}6PIuf9_xu*$iql_F;XpVU?KoXVYeYoij0u9{?bb(VxcyTaKgLc?wmku1 z>h;3hl5%n9Z)bTJIo->8eISlQwd1+A>p}oDZP9!=NNY=?-Ecfos1X*|b&rsBtWaCf zvo#}QvYcq>;#k}Q0@i{5LRPrb^>HItktkDh=vs*2>p2cxC+PIY&4yzfJqr7P(cezf z%pNR3cgSoebLZdRuc;RW%Wb}GOttL+bjBbwB1w!v{PQ+K5F=8t%O~jFI0#q2t<$E+ zE+^pMaH5qozBd)=deSPpNu?EkSY+5ku2QWd3+oE1pt4 z7nTw1j~jM{USaMob2YrgvY9CUMnah6GAoo-B<8l~PtoMC@n6H_D4SQC<9T(S$FY1~ z-KnZhY-Lde<>w*5sW883vNrsy15qLgKILIW7h3f#YTWbId;iW7o@brpofF{VxZJXe z#LkDX(C2Ruvypuy|2l>d&t)1msQX8LTV=8}$Rj;yi zjC~Dk)!2-cXviD$xpZD(WQzPQ@Z<%nSF0|3UTWwgq)&z424UR6O zC%uo(ngc>dvJ5f+l2PVJ*Ps=}`d%X{y_ZT(hdvzqO3yp6^p69I_iwsYAIKAUmz_Hp zJyYxU22UK6?NXIp{E$AdcmCC0;1FmiKeSKhWSvMxw>}~Y$b}49E&aH7Dkf}$3DEE1 z$AZ%4Rki>xXAn4{38Pjk}*2=WPr}wia93U za_IoH%8heC3eqAT+Jkn9gvX#U**TuNrFdLE0*?tJ@K|+HysC=~Gk;;-FJMuoZ+Ovi zGv2NdqlTA9xS7VM>;wjWYTZ%mRdHS#T@F? zZwng7i$0VdNt#&wsoWVtOD|9(%P;0%V3bnjD=hvP=SEM zVkG+TU;)90{!9T#@e1og1W_*8W5FGTa(h|1Vl2e)=pYx-G0Y!U#C0RCiE>;C=pdeA z=iwZl2Ypb-eq{(R1=3E!bzG2^A~^~upKB$HDDN_SW3E`Q$puzPeVY5QB*b8R5T%$e zBJd}*V(sh_?l3S(&03!4W-&7 zhJohXK;FjP8;fMP>g=|foV~oadX|>^spLw(n=C4Qb#Jr>SNo-3sK}--5a_hDtn5wB zrfl6q-ecQNky=GgSc3@fYc$ms`a{(( zt9X92#%FGoS9(=pbN1`@#qQsLV3bl9J;5wbC3HlV*gJjA-e(m$L}6=$5lIYu-GSvX zG4KP7YfHn3tWWoh7v@{Fg@cL#CK}xn2ZQMrY1%MBUtht;#a}R8yjrA|vK<{hgFKnb zXa%Kq**FkqT{693_)VR0tcmHO`*7yY!b2cgI|1O%f7P`P$X!K=efq2 z5tPTVZIORAyFUHLibPk9UTy}Jp0!6LqQQO>=C3dv-2rON!p+ZU5+c-%yg&?E8480a8+^7+Rc-L){0w2v9~4$eMv#RT7Mc0=y$BnOh(b<3@N%HEh!(aT@V8r;|WhQOW7 zYJjYG{_y8gng8ai;}{#wE<0j`>23Q+_A1>o2_m_jUL>kv+}Ib_l6W>%E8R0kIF+YqoX>Z+H&uLAvIBNQ3=A+S8#E zJA}R(5=1!6m}GOVKrM%yQYXXLf*x>IZ}A$<^Z0bzDV6zg$P}@5&W1{~jyolbLDio8 zCC%6XYS8k{MIn^4TN2_O!`iSVmPrL!aiy0P>SOfonHUdW#~h(A^aw13S#&2uQihiQ z?4VPmHe4|R@VUc^2=zjHYL5^Q7V(U zKFkpntM@k}a7r3~fJ)}t#~oho+%Nb;KjmtWMKm_k)iYpJhc67bHa#VxpH9aPDqHV% zPJeF%4dKlyL24XG?c7;h^shYbsyP1&b!)-`R#6#N&c|8sC)R?Q_iq|X^_z`^K-h(I z<@z;IFW1tfN>H+LYJS5B!gMQ@&K+lWVY}y-VUJ2=ciCPx3a|Ls+y=t9} z^)Aqle)%!tg9=*d&Ih?L$?EX8m9*79hq4jTE%(4viKRfnBg$8xF7h$#`nOT>6el z$##!%vg3zfJaV7(W1#PRJeSgt#cv=V{r+Sjp6P^1gfwwmY^_M}l?n5MA zVfT=Gnq?1R6Z;in_5ISgTdI#y5G4_nCrldn4VPgEx!{^feT{D6!-W1JM=sd)BeRdr z^0nS`a?7c)oo6QYRsAp>wZG~IB^(cLb&qC<8J?OhIUU3O9lI4TtiIrw;@VJGnS|K} zekT0pwolj4jOe7hx17DaE2|dwEtOWqvfyp}b)AgD7Fo*PQ0HwS&)$977z+No z+UWh;-ajUT-<)TlhVThyR|iYf?tdls(DdPBmHQ%Qed-GaGxHM) zl!%M35RgNF5gA{!DG{8wCHSiCX(cV-CE9@TS`-3?gmY?Y_5!AW#J_>T>4rh;#U-u( z_GxQS?et)EeEe~o+U@9nSKeYM0!4Jsqk(rp(O;>GQJxUrD294q*W znY5v(13L#zynfq8_y9Bc@ms~{KNH|gZ(LW z$0R|#Lj|&S;}JEkeI`lb$D>rIEkm8us^l}IL`iQ?rIwIq18+>`#`UZk#Kh%PF_#fq zVl+*}=vAnWm^e4c2@^9mvUfD_s9?K;V41+mPnlKKa&#;N?}Ydr55=Pz`B5$3X*hZc zI!7Ttkkg|L%fPxUE9+coRFEOzTD1HJTjbHIUxE+ZFFmzd1J5R!;|WGk7uPig(rbELyN3h0m08?PdB~ z`YoOQ5Ht)SjILC}k?%6Gt9>dM&hHf^G@ z^e5P@TLT-cF#cPW+<;zFi0gu*G&jTXjtJWMgjR{@w2w;TSiDB$vf$q#Giu;lVtMOK3HOz7znoZqw{c2kv}f#i%$JR4z*qSIzJW0(=28m0W%Fhzem{A{fhV=>o&OT!K9eQEUKh5ubE9rQhpPH3nv*$B) z(I&hY>Y9m2$Zb17#>5W&%bz9i*VX2~M;~C|LlcVnQ6rH0GY>+o--^JlLcz$MK8EWO_?HuX{n>NIR5=y)^f64{Zco6PV<@ItK*X;hm*%0 zG9AtHJ=1M+N3%YkNPJJNb2hObx3cYVyH4b6#)mhQQ5pst#3hi$JM~UGK_E&chL6p61jM$>T<>eF69e@%jw84_kzL!@IM%HArmZ_(yNlc)ty{Z4 zM9Wr|Gd`JKHC!g2`xlYv#Q6 z2Occ3!QXbtIcMuXGP=Z?UpgCYxSEanMe$^MAMczfxWG ze$f35LjJas?v2{o{a{b#qHNHwC&+!@{XBHd=Q{N4O%L%%Yn_ktx4Y*681=qq^>xmH zJl?d0$Lv{SIi0bnb~;-Db<6Ef&GP;EN;tQe=W7R4B(j|op?Js)7;0a61mDur^m`GE z-!V8*zhw_O@}w`}QMhVLhrjp9otO=d(!V!N=HGbwXjG3b8P&GQkdyl%w{}l2zHRxa zUd%3eahP75T=HUHy*Q)zf)I8jF$^IV%D>DrgS{9^K z+jju08#884jPK6~laE>NVyDV+hq5KP2D2GmeR(+EeXI%lgfA{$71?w97fXjo!>J09=#L#-UkSj1jZ)wQ%}O>nxAopy%-DM|9BZOcaT@K zPy~BFobA5XgbDXh9bQ;Y&mu=nLO+Y^29+J6C&pu}LBbccMIfIaPS)sE6rZ?u=SmuD zSBo82sUYSd1hU&Bc1lm>BbCB%64&{`m$|vyWwqw!{+&PMQ@Y(0OuLaK?ryY?b(E`% z;2L)$%V^0KuuMizABNsx2dZ@bCCzXMy9h|V~w?bMhBo; z#%q%yeAZFUB8_i<4?1l5q*crx9ULuDCL+1R%pB6Lk-yO$BdCh*I|x@~nYYOFLq2y{ zpVZNh0es*)!}+ZcFHbKNZO*(sY!}FPeN&W5WtNFi)PYIPO;hZH)Dr;w?vN4PaLs~z zrf1=Q?Ew3(BoZ00uDCm!%DR21l{BnW!AClY75u(COvN)zm z@81P=uORMW7?ZF*Rd*i{6I3UYU!(zhdr0wZD+!pl0KMo>Ab~+2WJST%b}YKBKr zGq01B!^ibn!6=^}5LR8v*Bi{pg^SRRw-U78L@)k|_D+oO_MK83X(62d@IR?_-miVF z)+spZe>Rh8*-|ajrD?Us0 zs$U{3*1Dang0MIWd3BrPh#%5Fn>ndv=xZ#vM0u!RCf6Zv4Ks*Y_x#q%#8OlAZ1!Lk zq*h%oy$?25pk{U94&dQoJ>SPehNv)2N`T{sWOU74*5lNwMFxo5zVvyTMpmM5>wzQ2 zgANr&EqZ+C-_MHc-^2HTZ=(nm<1cn1k8WAx<@TVH+r;3}_M}@Kb?z=wX917Hc)2e7 z{A+i$9>=Kpq3KcarTW)Nlv0)rul9&}mfdqC`a6nK!65JH`9S~&e$aWF0HBe10FNu* zbkpF#vR$mF_vm{$KM$ABh5b|w@r`6uK~$Eriq8Nr?iNRnv*1i#DN{wup@@(UTVSA= zhR)-46z$@@_Iuu*x4uoq9h^cck<16EkEymp^`*Sysf^?wj0h8&{%`&=X@v`qwjo#x zCE8{Duw^g#zC{+&OzKc(RO%~>d2%DtDO17ICkXT-R9&2W%TA>bSXT!($-)S21=!d+ zIT#-oDzjj+pSv5Qzw;oVRNBoQPTuPmwbE~j0!eoY8_ZyhvhLy>YeLfnKuhfaM z_u#)gkM*!6uc7^0gi>dp|I8B$-5=#|a`Y9j{7Olfd4u`e_>275($ybRSd?AO+b#so zQ1(7`D*p?9(<3K;BQk3=Z29e zZu>hDVztg@K{hV4Y3QOOUh3J|d|h;t__K8(eF)N845dme=PxSrI0iZz`m@^A7mAR| zD7a70ea&_Jn@D{{EYR0nqaV1thej+wttwv_HoXe6$&cXs z-!)d`0nk^(d>KSJ! zI@PE{bxHxh@e*bnI^J!r<7GQp%jqwaDL1jyX>)k~m73XRl-t3)!UApo&EhW#w@C@{ z|Hd7F)=}{G=gfsET1h1y_^J~cd(n(39TRq;bc_OTca2K9&=^Za=kE*d6`Sf*?*H=F zbS-m_<{mbWxKAeFRx4XalF?64>cs{3Q^DpJd32Zq7P6F#zJv>0Df)fk^X+F%{PPt1 zX{N7Mq8aWd+T{@?`dBa~wW@Yg>cN?tl8scfO&nW1_M!NcbCcIS7hGPO+19#*kI`>1 zP|CVEoLAo7Z&(56jPCHEIC$p9C-d5mwal$jKn8x}m+|C-pdt4zJdDqRlUd-1A8fd4=A4Qv5P5Ja{2E-&utG z*iInd78l-B4te=!Jml>qkUt+6o^t_^t2S6Kh4TmWI1J}wRT!c15hi$g%{U1Hd@7~? zVGqj>I}YI*G?4J;k{l8G@JQ~y9x=qEza;wMXWk^E|H)#p^3{HFJV&4Oe*IE=-+nv@ zbe<x=0kz?m9GXe^s&E);qiHlAr{a25T&ldj9n2D1+ZyXUPA!*!LHnMG z^Hz2Y3I!i-70m#R^a*uU;VrJQn(!L;P#s<=The=d2%&Ce5pn(mf1X*g0Q-PtcH!*cyi2SKt&CgzNRJTkbM;Z`@*GQT z6`*7?dXIbGt`}iS70_A)Bf4!7H4r?+eXtvsG`m-)eU^`B(rP7gOebHi1NBir(VgOH z=MsHA)I=AN>xe`U`1A{v*$sQ1kN3fZEsU`EQT>u^)N*tH-CSSv=kKcigJt#k71w_T ztV`y2fX7k{4yGy(Q~lf z^8*XGveH*Y-2})&pKT3wY!^4P?olqR7@er-N{ln+tqOOQO^4GTmB9F@cI@t3T= zfRv(C#WnhhK}k^Q!Rv^qP{{rG;J+tSY$7COpk4=#UL{(jIheVJ({yI;Av(tj=m4$- z4835+_~7^n73-!9UiT|Na1P*<$z1by8HYs5_9KFsQC6=)iqGJo=QcX-`sBWj0EB=o3&u2wkY zLQ&5Y%vG4jxZAxV0TtoF^HzpNZ>F??{8SrrLbtIGw}(yxDv4p3#KH6lC=Vt1^)jnl z4nm~dJ*s8w-N}{-9F7oyJpk?LCqAKDZTa>(-)u#ce~)Jd6D5o1;ro*vHf|==8o-`3 z(D1LEIr_tnC9dq?T$`I>(8AP=J_Pzfa~;taSG)4{IEVa?v{biLjIQfhi zX`ken&-`6w^n~`&(lnITHX=W~VHr-0x%DwVZfkn20Y6o$t%*VdXO|S45Eq+Cv7Ci0 zR)t6TmjmD3S;+%RN>27AP4>l2$1u&c#(HA*?^tM0JaJJN&w-$jp*n&-mUc(C4Bvav9%R?FwqOkxhmQ5_tA6f?KY zZcn?WD$z3A<#N(_4e}+K=|DuFbLp4maw5;#3va{YCFz_Biip~qedX>`W=u$ZWeJeH zL=W$VvR#3vbLSkmpxqP*AG@w~F}j(3-vS^iN*;7RL7jH1C=Fy56&;iLtp-Swj6Old zfnV+f=_C;H%}kiyer^)Zo?fLG)MOQJHAi8+D(w>(jQ3%?=RZJEpRdXG6F5e_O@3r< zVMPPr01||oUL9O5!r9F&!Hh|I{1E_^`)xX$oXTjq4-O{8s4Ynsf>S4?-%O;Iy`@IC zi$3X|n&yBbMX9zw^KQzk*S!)`DY212I{gDmHQ`I5nf~Edb@)EI-YHqiucFoyowpBs zc`f;ehLh71Fglh3JkztG=+#YZI4ws_0olcqd2?{;R^>#^8scrUcr!cI_J;5;_lJ34 z;bEn?8Cr_hD97kmSR%u!LxU-=rk3psd^D6?b4B(w(R2oxEioE{2W>}JB|@q-ur3gO`G`fVC8uv>n5_=n(npVNRY~ZyIB&=#Ut7k}7r28$8 zjh9p8UQ$`xC4=X!&dv)S1%>)%RPRND`O8^)3;A1Jez%?FXF9E#Oh~)P&-6j|xH+;m zEI*Um-{gM4NuCrt6^CcJ(XI}E!7{C0736yqVTDkepgx7W^(cUE!`&4v7sQO>>6MJm z`;m)D*Cs}K`z@)=LwxG|5|G;kzT+W*W@>vuBNb3}i!CjrCH5Rc9IHd<28dOPP@-_y zDH*->L$%RzKzjSFskXhTu7=w3l+kqjK7R?th6hx0&Lh|epQ8fnqB~$2Ri9(OqC3x% zM&vfBDQO`w4U`8mFqlkWwC^i@gnlV*8BOQ{?>exkYyb433jorOZTm9*0&dkbgg zD_X`-?6HAv52&|&5S%-n=AZByiJ91w!)zINcR1k*?B`a!7tK|Q2Rp4r{~=NdpWm`4 zZgcsq25t;5pjugtaEXIaHPF|2GauUps$;QUmdu@jADREo_QSDX*+x*pY^fY^QqoIW zXEAH(!GZYn`14t%rN6xGtl1egB7+TI$62k@!mt-~u^BYo`%@77D zn7+DdsO9Le@=3ZnmVZRLaI^aCIXh-*n;e=-r_xYyvmiJ~Yp_LD%$aO!utY(2Fx^u- z%dNjF_&w##;`%$8R=V|%5nl~==^tx&4GnkxQmvN>!siL={-^727X`q{cJnMKcX@c8 znlb1d4xU>**bC1e4%ve_lc&6yTJ{+|o>-lmRUxZ>IyVG!xM!ZCuGA1XC7k7?I}Nh$iFPu{@vCgZ{G ztJX6A)l5NFFWHY3#joQ$jIsRHh4r=Fei-V)%S$O}#CzJ)jdHQk6n%dW!d6d$;l00V z*ZE6N;J$}ly*4lmnLt!Cg!*dvg_jD$^}Q zX(#03A~V$zMJn0(RFt6%fDwnIe2VV4>}LQ6L$KhrjiyKS>$}HMlZMUSj3E=WV32<( zCmEV=Uvx0nQ<0=m(dpR2fRJmYDwUaKKen3xg&hREWfF@V@e*P`B1Hq|oV2kh(tV!Y zPF;ckj3;@;byZX@uFooR+mCUu!zAHjBj|durz@0aRL~7%L9^6FZB?ZQ=mcdHCwa7_ z9|L^-e)Xq7!=Vv`JIxcWxN@Jm8^a3e1ZxZftG^3h=C6PE9`aS@-=*$& zrRCkfV=W;}#{`~fnTs3 zm&cu3+ay=nv9X#|f~eXV-u zj4s@)5U>BH55;S%yDsCBVm|W5X|Y~ophN)#HWHw8TFzUlJUZR zuLx1p#|rThTHU##g;VHPT;d!r*u8dG=B>SnBh^8faZKjpY+s6x`JPxBk zY{S-s!hqM+;nl-Ol-B82BHEqS<(`|vt+^zEyS^%1fgsC&fq$?^J8V0qEXhFl5n6B? zB)BRV#S-UMte#12i@SICC^c}7g!$Q&_Eew24k~@jHJY!#;1!D={h}5aC4Cq=^K{h_ zpKvZ@^FTH8x0y^}>9_a3j)OJMp;#%^HgEp@rYe0!*bbdJfier9tzU1aKDs#Xpy6<< zqd%`4ucd)}eJq4)QmM?-l=#1av%9V zyZ+`clm_X^c8-OtcyGj+=W{UhF&ZqacgttfMX;y%p$V!Pdnn9b8TFqARi63{X`W9mZ zQ(-WP!KPM2eHxGG8gQx={t_u6V3DHEb?o=v9@0)?Dzlqaa$82-qhpmt8W3yk>z~It z-dN{+r1Xit!jHBab_u5v02$qRg5lBj3n8pz%`GWjYps_2d5MdHgT`^)%Nadh)CG-o zo|*Yo8~WEZ;dSnNb@=@e%iw*mh8pUGiu|qb>GFk>(UsptDQ_I-ym$_J=Z^&7T61RA zGO%VgN>;~n=mNl%3_XBfIElr1I>WIumBSK74}Ojk92)*tNm-ZT8B@1~?nL+it(n1S zyNsIg>+drX`A>-#nrhm|K{Gt8vA&CNDP?C3z*;uu^AjjuSfAH8N|li8h7lxN^mb8# zC!#zdI;z|CN`>-+=+nnCHIT1DI6iZvy7GoB>+0 z+x+3r&cqNWfZK_%@E`bY#955I{ji1v&0ZPwV1 z!rr0WDGv!;)1YIgYVwh9TaEPlmg^F?Nf9=GU4gq-GJNUFnrGLh=uL- zNDbiB^Y~u6_>M;)^fgq0m%#Gy{3Ne(4;%m* zuGvK&d82H#KvL^&2AUE^KLlgs+VeoG4NszOyEH~&(IJqfqg+D;U9JeOoCn^HY?W#_ za92@3GWlxpGdO-vw1af5wVb8XPMYm~x*d8Ftq?cB0`>;?^Ysumus;b{TK2Y)DHA)o z=d(vQESj9;vQH|uwb48^*|mIQ)D?4%OSLJC#G@6S3(noMJyE(k>5ua&$gIW72KkcF zVW3WVa36}EdAQPUL2PLXe+{D!ETW0lUtqLBf$CgRTcSn`v(s@6cQAnUJ^3@JtBVp- zZCCJQRr51=QZZGw7#`|>M1+j~0gb72hzfv&hd%J*l6a&4Kj{UIHQ`k;|NIG>3G2eh zN87d)>Gh+B{xf>L`RV@yy)MLf+BLoYz567U#>93F>>yUrKAo3;5T(;E1F^n34L_^I z{(KYrPccrpZ}n*88S&YtF!gZ8GCOT*deJVQ=n*uc!`~Z7%W&w&suPK0-pfC!HUe2? zwb!=qhM&wSDNMD_<>Jk|L}w{WxX1~#W%csYIr_>!6vQEwvnovXyKp?Q3d+Ztl{D0} zm0ZCM+2)z?4Vv7OGE-mo!MAUV8f)ZJ|c1O z(7`ld-uy2KDC$r0HVKtRUe|@8pE;p$%q6BO;@>NX-ko{fZAO=roM-0tSP?_PV7&8s|TF-zyZBSHKn=IjS7^W zvgx`_bl2%no!k-AA2d%W!Cw6gELNsA+%%%Q2l?(s74%Vk$~A4Vcxaoo;5P+Lg5yo? zat8HAW3$bZv(3|_n+H7cJ&V$jZEgt8PypD0Z1{JK1BE#Lu%#x)SNu8O z{kg#XQD~?|)T#H^NV_@r5-yBr9(R6Db;b`~KOLu8jm4@m-{$3)P^LKlblynkH|;3H zf*tiz@cV%n&3{k|NhPPR&p_Gcavqq_YZo(YQhdn@B;7fLtL?kHI#=eBnRjNcy4Co4 z=rJrbfrf;7c);&bFpuIN{}z zzP^7`CcDEsx%upIVbiuM-lI;v``RklWDN0@h%tJ4nx{Up-T_5$V~0a9rgM;*?E=_w9$$6PXeQxs zV{l<;jsZzh&i3~)SRTI+3L}QV$aG=p8-=EC8q@}S;Xu@w_TvE9q0imppTTjWMg-1V znK3w-$jDKelTxIPM#llE(222yPV8Omgmzllwbo;q5@|y2@kUY1qe&6f~Zr984QO zyY{%THajM0w1M7!AN<8SH^|?C8)BL)0ARZa1J+d?0_X;-xXGQ2oU2X?<``IMTL-5ulqLy@2Q?)}3HYy)7{wA^{q2HrVkQmSnX%$hrko8`GL z$)?FzFo-@c>N_+j`cGlJI55-IW<9Lu)jZ_GIT0SVauoe zq_~f&eo~AonH0~`t!~eQHR0o~x7DEzd8*r5G@>{D0zcVA{LL?z2V&h}^PnqOwg81!GP9E=0Rmg1C=x*odZ=IUJ9}RNv4ZXF3zaw1-$n! z;%%(oSY-Y7HPo|drkT~H@$NL3rCyZRw-$%_$G|GLzsmT3TJF+mG5^B4x?j}zMgHzQ`p+OJ&Qx0(tfbmHO25dgX341qJv@`v z1YUF22qQpH$!brXAgK z=CsqWLqz@sXia^)2|LjGiSwX}1H!A+VXaAprcU-vxjt%C--?ia>V|5tbMO!?Org18 z-^2^eiB#9jQ5AR3Z22Z{kLGRsJK(ntW%}RFNao$N(s!TMk5!ptO5dIA-W^-|PJk9Y z{4xHWl*%YfmrC+CPWxc$hJ*F@!>J|v^B0b>Zsq7!w=`AttxKa-=wQr!5#cN`VIWZ= z{{p1dd`hj#mGo{^Z=nOLC_uXOU@CVuhkxJdMRsZG&`8SpRCXyOP@$Q5@ZCo;hXT?KGNT-=7THCI~fFonrzc@Qmy!RY6Xjs9dV9WmnwEGbU;7=J%^BeKRy{ ziM|=Gd&gG?Rv<9o6gyPc3G6 zfi&)_((Zp*V_=ojeWP6Qz@Us8yT|mbVNU;stVu!}>En>=V_>A6owYv=tt;}k(lo(l zskYBR$n^GPs_kSDOK%@d{5x-QnGN(;&4(`t7g(qik5S+;>W(KUlJ0}uRF-x}-LX-X z@Rw9E2u)RqC(!FO1DQwql3KMwReajl%x~@462Dq&mije&%Gg}yalUlC_Hng+B&u1L&TOwpKR@J{ zH+B6Nke&{bb_creMj!Mh#8!t&O}NTEREKszP1LdVLKEy~e_{n&%1X3&jb^VI{vG50 zz{#Y{OCYCJZun?E^utOxbA>+R-$*_9s&TORSInAtqBp9UGMH-Hij07o?AZ_F+6HJo z!?ASzjGoZ$GRIVe;fFsH&V%n@!de^EGSA!-7FEuB&Fj zudli;^zsqM-j=&6C3{a(2TitgpF@wjG`O7~P)|UthcZr%v|FEKi%OkE-9@0=UXJIE z=z%}74^mM8)_JYS1BeBHknnF8;0|pW#u{tPR|RTa3J6nw@=7b}Fzr^gE``_2897P7 zaC3*DC%&w|fmLPa&5HIH+`^*K)K5c40U#Qs-puXKoj91iex*kwu%~u?2QOKm8o}s6 zj7f>j45BW*VDP9^<}nstZhG$TkW%8jlTVWp^qU6gx$L}Wl_BF&iU&>4F1j+whUXL1 z2&rz$`p2jDn>0aFz^`J2h_RjKsbiOXApr2;-MDYa_)sMM-cD!tH}Ug1+!^Or=` z$EVr|;R$+B z?NRTFby^1CU}lG(87JS#fGZ>pEMUr&YUwLV|>7BZ^> zD0_Nca#6Q+Kh?%rL{)qz6;pA=J>!bi!z$L+Wj|h5U8wspSN8zwzB{h_uDEWU)%CP& zDmLxuiB}eqk`pJjWE`4fasNs}bZ)<2ll&;9+SZB&C-w(lUCBdg)ePD^-rDTthqb8( zYqOV;!;(5-Z0seYdwYZ8J~4`W#VFPoig{%W{a0mP(u|+?Z0f<&Cg$H_E3{NNbZ*yd zmkjCWp<@A55r4;WBs!X#Y``Tu=;W)-=wNnT{&e~soKlx3hdqC*^EcbyS`&HUgy+2Y z7EHiZhi5yu#nmhpZO=R#%O&LtYd?pY9jXO5bNV=0Y<&VN>Q z8~6@>#rDE4s_t=oGk;cDJmZ|Cu7#gdon0s8@SGZa>tp+13iyK^Rh2a^{zaV@U(amHpY{%(M>|iUp@~E4_}>qYUe=w%E_~!wdU|wtubaAu!N{$ z)alq5_J_fBH$O2NNBfDb9sZF(4ygRsz^v5-a|C*1%X~~KW`F-HEm|nGRMxIzR<%HVQ z4fkkPHgYh%=I{;FO)WWIFK{h0h->o={BYZnI790+sboPaWdZ8IUcMKtlPX$kVAG1$ zx{67Mx7McG&J>ISv*o)bU1C)J!MCuwpD80Q=xldAEnGB}-(9G(5XJkc1b)e*yLjs* zRm=g|qh?sj9+mQ4v`4>t2aA=djk(MgQ@mu4N{eOqs)C2D^pd5TG}EMJB%?VP!csFn zYxbzV%N|wTo!g^tB;hOBqq0V$BWW+lsTSL!B>O8fN1b7eTf{Bu*^Ep##CB$@{hj)N zVVH6D=tO8xut&`vc2=pe!fB97L>I4hHyIz|B+fCk)6~e8rDfV z&c6lq87|V$0Al&(b6z9zV+*Mp<>IJL`TzmtT}$rdSsXp-$;4bNx;Luzu$c*Y8Ys9r_B6kevWR zk)fF@b>%}zuQts>D@klRO)C%DL=4A(YmOZ@pIXdD+TBQkoUtY7sim3|`YVt*tmOU?hVN@baDR;g?w zXO+qkqlmu<-C~vcGE742Ie9r0_i^E+EelKKrWPa!%fE47fYl zj)(yg?7jQZ&L%Yk8STJ_;YzMfch`(!Y89+$2o}KI^MwMi0#UE~G3GygLHX>lJ-FUKc7 z9BK{r=%wl#a3PQg%XT@J2#{Xrw-EKF@i~^eLv#EvAXfr}IQ|zeGEEHBTgiGSp&n0A z5J80fBf`k+!cmE-Xy@O;I45?#@VltOq+0V3^DS>0Y)n+U5cmLDV>M=PVw^z8GO@PT zkRBLHZAcO-=aH?n)kIys24aE$*P~?v<&BHc2Ce|vh9$1qo8o339V~#-A&>qOX0w7R z4#LPdr~v@WI3Pc-w;{`1-36Ww4Nqbkx&#n0?!mAw1wy*w09~<}!)HIuN(ur`;(P_` zDq`~dq8{pujV9{8E<_c>@}d;De?l!-o8QpuYN8JEsa_?qfa!HDggRIxlMSlTIfRc| zhTvKijC7}VuY;CkBB!qu0XqXOq_bDoBhhjO4g2#Oet$j{rx|-hI^q?=aPbNVLGaz1 zn4lc~b^kQOAHy4avKoF4sbPQFzB-kyWsUqcP3aW311PraEPGi@^~53CpTi3x`4DAO zb#E)aFujdnZ>u!3=}Dx!)EU@T{#JDFsRk%}FdoZ|U{E@rMnS zg+I)4-2dX0Nm0b)s!08WMAlmw;#cED-r!wyH+l08SYt}urCWXTZ$n>9{*@0gbiRn8 z73fRE(2Mc_F|hdJdbQvk&BJO3Jiz=` z(11wKO_g#KilIkhJh-HNV|lTXJds%iyx$I!3gKj^P*a2~XAvy^5SCTr(XA$4?vS~J z0?M~&!P8o^CvROCm-xKJ84A^LbY{B3CSL>ZJ%fAA8t3LVIpZ{}YR{0Gx26|F=W*|J zNZ_sM6{-C%jH=h>Ycd{OBJXa{#{m{@G~-}aM|!Yn+oiTyb&4aLFZ?B5ODG7}M3 zXpXwx2j7FtOyfO9Cz2ZnaMCT|^nDRJpK>CR|EK=n~37Eurm@nSwxQ<9Ibc>&U5yTpf7FqMq-6)6j zQ{Wo8BoWNVBaq1dga&d>)X4c%bS66*QFk6%v~I^Czm7btqP@QGbbya&xzY+8fcQ0^ z>-yb5>n&MbMrcoxY=fNUSZDw)-f zfo3wR*ULkGaGY$1F{T4EIyf<1->O2qPyLTnhK&95=O-(3>!@{rvW86`h$d^wbPe;j4Ro1k%pRhchH4ndL9iJmzh zCL1`6)?x-ipjR*PTv`K&nteSmIfc0%yP`#}7ZR(R*U0Yc+tFY8K7 z^7@w023S)f{O}ZYU!>M~;{Qf}l*E17%kb6#s8vc`Q1HWvfwM?izYW8Ubfya=|O#h{X4F%P21K>x@lj!q{3FK2@Q zqRx}-4SK8iH7~|g$FIfC1d$kDJ05cmoKj41agu#pnLU}auo9+TEg$Hc!d#>bA%~lp z_c+90={d8HvoIk#FoQyseotO#jNgl6Pv|Ci0zE~eaX6z1ZlAIt72cpXQc;i!hr$I} z=pR!BS7TA0;sY^A$wxC@ML2(n!`Ivwd1EqT)DeDKhK-ZJzWOm1oO@uWa^V-qA*!_s ztK4Ia$@5y3c?6fSw6MQ%Pn*ZWt(MS9)bl}wpxe3SIUsTRoOS8^dxvmA&k>{y?8*8L z`vI0jKuUc->Vk4fjV2~f%|3uGiXc7=0+R?7$?&tY=^hyMw@VH90Np)tWR3)dXy1qR zF1ahZ0F!pszQ{)F)X;EuF@pVYO(j#b!=%|x^@vnr1XWv=qb!WS`y8}LbJxnZE>^4i zvPclgJjWw!90D^hjRnswo>aQE{;A|#_V(^wm@o7Lr{{N?zACDC<}X3qab@bf>cV+I zNRJS_eL@9{6VVjn9I}2AIUJegNT|*z3^di$7JQWm3aSHq3qr@k-1;s0hVWu)0zh)L z{N)FW#2z7O%}QGV@lgxCjwYR_HM$Uz^me56sQ-;M!W-F`JRcjJkQtVn8QQ&(jt9QH z9jO=mmb*!YwOJ1Lg!? z9JmBGx8TpmA|hK64H<9}r&IduH~vDqgVl7%@^+wmSjeeI|L3fRl}UfT9J zdsmZq#Y#@6|wC?UmN??1T0_?(AHJhC=N<);f~=zVlLX zN#k4WhZt4bD$VWe3Nm1$`v{l)s)C0OuarRe-FlGj6oBh7pWRk367kq(jKdr^ZZFuK z9$fNY+io;Nm+KmIB5?YBPwfb;@3A(SuMd5&ehDECPo}uXXuXCy(2&-&N`lU8rDX(> zYjpu}CdkiafrLxqbqci`CvWNGE3dkXinlhv|6t&@3-(-rZ<= z&QI}-Rp`ffhW&S7#`Msx1CfLM*M$!DQb)L;6sk+(!I{I+z)c%<^U!+N&hG&q43RTh zVwTrk-=Ydw?q(UnFBK_0_FROVl}02fL_KpNc4LIE&%HmH$>BJ5VB&g@qCkS^=p{w{b7nB7z8EV&iSzEbiOosEBe_P_LX`|=2Imlt<#@O zVWoey{Rhp4C~GMB=oOX0i>>lXsHU^5YB!QGovJl+8=sZV}JJ}_u2-T)om868m>JU>GpTX~2k9vD15TFqXd zhCj8g9EpX(;`WklI2O1VSw!l0YBsS>7z*88(hlqClgM^Cgq&>4S#Rk6fS%-GtVb%& z;F!$*hE+x{uS|MN2f_>so(be4ThVKW_0y3^UXt1C-$N-YCUQJ^?k^2A>5OHwoUnjs z|BS3vko?}{XX)mCo%1GO=`F|0uoN&m`E2uTERJY6VRN5KQ>&TTcszvJ(^d*5k;^Zw zLW%x8<4{`}Uy=NLQC|Tc1Hiw@uEy)+G0gvozk{RfpDFgDAa5DZXH08$xbzt?dv^X$ z6lq()B2cd^ax06}@56kEsb-(0wgumzAiu}JP|1h0-!T|c70#J|b@o~|tuHksqjpgT zZ)i}{>frppK)$2Hn1fG}d7vQX-vrqX!=<_S1GER(u0`3SwHODdCu*4Vj#=wZ@B=1e zXqG3>!tvCyqM&;Mrc}Ia49U$C3tjmKXj-+^GEc0Fi{@Pr=pE=?Uofxq*50@Fh9L;) zirqGU1nNtjcQEIhJoIYLLQ1~Rapq1kVvH;Dg|DUyp<*yCfew!Fa4#Rflt(d}7z`Mi z<8~uv&9}P4su&Oro|i|f{yu!Ln9$D`zKoB(WDF{BfWp)BTD;&`)F39Bnh;0oTOolE zC+g|BKz}Pqf8%R7zNN}3cpYQ^G%`?+-;gm(z8#LjbxubaWr+TEK-b%iZ_Wgqb49*Q zyn^2n3HiFL_jA{HCaOlzZs6u3qz9|FRAC%r138#RR8tBd^s_XwK z1ZrTq5L|D~JxiB$qLid4B^aQM2NV)R*4=sOK;N?!#aZv1<8Xl(U}jx8+^eJ%pur25 zJ&j$nF@cCS#51~81r^2aRv1BvQ%U8_p=e?`48^(y_*Fwel0L0pKaST*=5hupav##) z?&dcciuAWi0LbQU<~JFN^f&sz`E4w|Iorl_CPtvgJ(5(aWt!bDD z%#o~?Kr^v6f()-zIjMPw73rN@**6?KL9tM>a#F(w0e0-H9i&gu(YGe6BAD%1z6Wo^ zc0m36VqD^krZBW&+8}u62%H?wyWq6s zJ>39D@+2mL=vkeb;juw*=N##D01CPimE8@G?%Qj>jv{2$G^1UEe%0`#0|$(KZRiV& z4Z_Ie{setRq)^b*UuBK*;JCetZh-znB2YJXOtKRB`@&={ET(&Oj_8-7C>EvtaKQLw zdmqVjDoO}nY*%!m_3KIAWF4VM1rmXp^f#dpZmj=MPa#v<_Nn?F=RR;&yh{Ad8aA<8 z>F*dlh^YnXw6Mo_Y2XCi0J`BMPg5v>1|^|tLZ5X)L6?0b{*7t=_cRlXR1J)$Y(qOo zu_jMBN~A-}QuG;P$>uZI7etW}K*_sO_FO-vSp~s)-iN8eCF$C>U@)O`EdKWhD9(Xa6uN&q|&C&N1%3k|yjcE#C=NDMy2%yP7X3sB)SHhhH zSWU{2_Hjj6)(T88F??a}-(i1j0VgE zo{AFAN63v4A1*hCL-~*s$gs+<0FvTwR|^Gr>>$ZWb#gOWQ>4sPCq66%lN+*-H`3cp zNV1SO0(|eCxyT#wy%k@&Lw*O~A@Zy6y&L3>guh1`?hbh)NNzw0XD^gLkOx8(_e4H% z80_1Hl>~Rn?vaX;8S>;LSagc#H&R+F^L))&XiDFY-EBT$$do^zgjH1li}E`Zv^PSE zz(uIiBxZ8E0Y-%CeAU0dh4R$)ebJx=tgmtj$x|$es!oc@n9q_FfNZ^u- zR2FZoHVs+EvDkJgrsON{)-WKXrk3g0p4WvQy#Ruu2Yvgw^f2cgWtKB#L=p2n_WR%F zd+Y}#m7VXA^oTu5Xn=Yv0d46=>L6$Vlo3y&GxcwIu4am-WV=~UU@e3AFl;4ci2ICu zk0QL8$6Cr$Z_%^dhfSpNJ*J3qksb{j4!#_v^XXrWyjhhgZy5h25Wp&Cf)}Kt8bp(H zGg*Vm!ng2Yv{fCc=m*=CvL?naBjBg?g{jn)*$L5gveR=7Oxn@xdYDXfgfiPY)PyzfyfH{8QM^Qp_;HB>nBOJWuP@P z`NKOXaxz*rBH$%_$c5Gjj=%6*4zy|$f_ zPxF^VGecEr8JN}`XJR>om#BsOH@8TP7MpAS2mX~Nz=29Ww5%dWn6@C`oxK<$;q}Ca z;32z1ag5()&!B+U{ug_Py@H#-CEuEIB_M2FxTAb9?n}u>XW@20k6)6UKf#m9R@nQ4 z&CyG{>eb2dq_7lr4@UICx1-|~V_07K5&~oiT0eK?&R}m!tD`BcF2K;j zeK28t*6&>UXNP+tA zqoZYa=D8{ye?1%)Uzf}&C~_#$xSiQc&=r)1 z%|pmh>{OEfiix^*?$*FZR?;5h=Vo~ia2POav_7=(_fZ6GNHjAEad0~4dvT6G80&hm zr$od>-Or&x>Tr0woXt1E&4qSxKnX5<^z8iMHVUug(X?OP_c0BY`=0XBgExK3_U}UR zP|8h&^-!jNKsg8ChltLAzpKz1hZD&3732j^%<;--HzvEAaVv)I{ZW{fWDLa}n7@Px z=bUJ1tZqks^ZMtouaM#$6*i3Xy{HVZv~A;zN2bfp|UfQGwvjY9Mo{YeGbyqJZ2LQh)+oy17bq^EciV@@IS%EdLA)Vwzh1=68Tf3Vg$s z&YcKZGv!%{L+Kog))I8V+b^Jrmd_QP{kEYznOK96T7Nl1RZAl2JEkFefK)_t>1y^T zXejXvrlsjoAk>pLqg+CDsFuEa{*;1HxQ-@^a|6^@;xE(+gfP1obJa-Va=?6zXnj)Gn66+0CLw> zjGN8KoNXw@Dbt&vtBk=nfHj;8AkU$vjtm`G;%k_6gaTWjg{11d^jgCCAsi^cCNyIp z0_gve0kjhTfW;`ax6lhk#a7e+|57~J?gV@j1MrV<;K!US{D&CWK9s{l#^UFcmEdIM z_lv6CG60Jb(eNa2DxMH}Oj^Rk=&YSeW89KrvE$hkxAZq-tR{XlU@Vz*+qV zsGbLGKP`VimIABtnU(3$DztCQWF5flwa0V;e$Vd-yvMpqX2cX2 zPl&=DA<<9k*k0bJR>9)p>owPL0HOukh`*j}mG?-+CozxG&73aHFoJ3w>bs>re4)5Q z)ZHE#e+OgEb%$TT!icPsdD^9T6&Q;ZM&9A|Ei3}dnDGhhX>ROxY_8~nUQdM{$NVmI z6*}PeHT)e&(945&x5&HGaYhaAL=-4$3;Y?r7r!O#)FcDv`RQ@9S9amYle!Gp82AlzzK|Jf8L@%t4Le3FF_{EqZR*5|Alc4GcsHo&}Uiu$c z087z6UQn;am{2e!AeB!;M1t{Y&}>+OO3K~xv9dxiQ(g84=(ROvg{0)j5REz}uG^W2 znp)xpRw}Vf1e<|OUOQ%b;#dU=VYA(PamKN0g9p(Yxt80T&e3QPpab(xXYDnN<@AUx z)mDkhtpuXw8~}i9&TJA@QU~KesT39B%Yo14E;VZ zKc^r(Gl%5<3Vj7ieM2J$xJK?JWi=AbS8VF$-^y-|O!oHDBdLc&>;wHrA zCYQ&G0XJ52TB~b~ejgeE4GQc9KobvsdzO0e+K*_fFJ+`^u5@-U1MNq_jRUuzmenSm zdHuP}p*s(tpt9I6bv)Vv#Xglhm6?`%W(DG>Mh%qsh>Y@mb@`#Hyjp%bm#D(Y<(j+f zRe)02x`4Umf6$u(oK7ytZCb?61%NY?D2Y*M6Ab_|m+ejF;=4E(U+1ew(me6x)h6*@ zdVQ2WA3Uwvx=f6(I>(y9t@Y?tePF}n)t{JHfo3`1IlP;Gjp03KSlWon9?>J=;={oI z9rZ;g%TUJ4v|pQ^8H}ECrsMnur17=z%!yh_n{*%S8QV1(pF?6PN z*7_3@p)s23V$0cDhLd8#=SrR~i!!sWE9AFtaJ(M6 z4${4+ahT$mB9i}q#}IvBzhBGE>5E3Zo~rdX(Opt0Pz?yB8hYr0@{Wa zhHg&NgPJBieBpmnaX?<|@3|6Ygj>aMFJB`uMZN}ZhZ+&K!;HUa&*n;i1DrAbXjv(w z{;DQ9!9I4M7JjLkzwc7>(C<)_cV{F%!9OY=Lfh?7ftQJHhHq#l7>LX2+M-Bcnf(*f z<`4K#w-j*5i8rci%@NK@v>6YqAdL|P#{d9d_+s=N4=mw3ndz|6h2B=(3M;UT$2SW4 zICoD2Vwi7V-hf|a_hs72m}i)ujGy7wW_#6_JI;uQ4*O@fggb*%I|D01vsUz+{X45> z8J0v8RjDP>uxx?U_+*}|@4F~avJI0@PZ3By3+Pbt!alfnEXMULo@?YoW)EJ=@1l2y_3XlVkicWFZ=j!4!!V56F@|EBAmD)mY> zcd159wIuZ|^ns17SxXQBD3@|rb<3=p71k9zkK+7FxAZEks4lAmA`k@T`+ecPkZ(YQ zXBZ5F{YY26PpX1B1&Z|AA`LpYfvP|qf3X5fJ8NfT0kMZIfD9w0C6O9AZ7E!E6efeg z|Ez1BD7Ct&F!K&i;%vYTSAtcCPj$&d68a7g8Sk^qIz3?2`%9bj-?n@g+i^i+8u#B%1Bb)Kb6y6!qVFfmK z(gI?X>cMNjtQ(HhEsNAFr5SDn#T;~i`pOM-7hOdd=R4M*RjP*m@C#{?p(}tS7)`7M z;f4UH1@_eji&SUtbiv{jVi8z`M)A|cpJeahp-#W=?!9;>TYX54kcTd3 z_F`%T1m|@68t5k)5?JbMxC#%lAU_(7g$`g9ej*+Ky9o8W(adl(=(kfif0m20q3`Kv zo|rB?k<)3yBDzkn8-lhta=^Wb-j#CzN=awZC;m!M2J&Vtzk>fTdzEDV0&0`&K7qel z-gHA5Pv~%7{TjO%)yYa)GOC5laqz=MDxV`?N4|=y!>8Ln6zd*wT|z&61$z{0diFSV zc%3bzM(Hq*ui;EQi?(VTjQ-7v+l)<)*18_Of|!_!P+m%NIbU6iKVa)0x!!jFQ&|+D z_uoyiAM_S;45h~4Pxn%3mTdN|UN10XodKl^ML}#*3Jzj1O-vF5M|^g&gb>!ksW3V* zjs5=*xU2B7z&=LmN5hl*t+xHWk8s890o_J z_(&OVM!nJ0jxS`RC-94_vo~<&h!M~%7C^hg5$X~{rJ**i*J3)^YL*y6Qg=Oh4LBS6 zpZ!AUqCutmfdHTp6Tny>tce=8qedjKG;sw-x^4yT%|6{1{saz?#QAjT)T{{I>hUM{ zQB^=c+)Lq^*a+v6arU(H1%u?MQfd~cj-@lMI@nnQOYjspSSVzZg&@|(L(8Pbs2C+k zV~i0k9-I%!MfKbjdVt1s8K8^w0Hv%|Gg;?BppmaQO5h*RK5N;y8y+tZ#1q=}t^%6l zMSw4zi5hAlnHsLNOFQvDRQo;J4ge3u?C65+18`*N&jk;_06FA?xI3-uR@S8=CSu#r zOpbp`gi@w|%SK)0-+G&>`{^^;V%mR@6`z3q$Tv>#2VB!*dzo}K;kI(L^Dg)tQA&h8 zi<02Z;#D)l^r2|8 zF#TOcRF>)XaC#@VzljAnVd}GPDa82%+^^!5xhUg{HQA5eK!>*!Cf^qb@Z$RI3WC38 z&`0}oxZ{m$;IOLcu!idZ4T|Hm1+z>si`TwCmxZ0@qfj)rb7AuZ)k^?Z8u%LiAdg(1 zG+f8W8eDDe3m@bd7UBMC%qad|p@09nAD|((K)F;XK!s{w_&xlfQ0M(C2?==st}&T; zkTc3Bq)r--p?6Modm;Nm2#3098iip|P**QU5i$>*gFVM9Aei44@j1W;;9-Z<7k(Uq zj$nnZ2HUB~ewkb7PuQ{L$FhNsK3w*n&Fo20=5QCvJib5}Ti;pQBvBc#1E{@_av(!W z8fknG?l%DwKs@{qXcX8-3i499>`Str>(cv^U3&i^dIvT*1;Zwt-@GaouK@oBsyDAv zHT*GRpd=C?lT{zfe{4zh&ig6tK_^UpA`X(vuM5KQE(i}b5UECggO9UP=4OgFrC8vJC5 z$!LiE-ZK!#7e?X_F;g>qs~A_|NIj1daAhSPRFyO=$ACGFjDC<5)B%>66h!ynD;0Ep zU&Lq#8frzhYBNJt0XNZkA$I{hNtmC6ppcx?1rMP*; zQct6l^4jYU#xeIGKBOIU>NJLN%+2AqFWCaeMtw736Tif_RJQPg{`ViN|BI!>#2@L|DT?SaFJ~O@<9A4))7iM|JH-ke9zfCtd zs5T7_kMLWu`eqF5DtF2LEL*nsgEI9@i0QTL1_b>j>WUepnuHva*CX*dCSY<5)VJ64 zw}JSk$3T5Jpg){MI8t<0-%OnB*L9?`T-HVZBlrdOiI~Fh@hNX_M##$#p*M0uUQS8B zGBoLxeq~7U`IV`P2E+H#uMBoCr(YSQTGFo!$Sc#Y1jB#_r%V&~;%z#AYY`&Y;(-p( z-euifO=h=dBY=G>D1sAvR48Z5V*wuJ-tP?Q-tQ9;2ukWpW)EKjMGj>A6jIda;|#8J zJCEYJW6rIkaF?KzFar33iBiQWe@i|H5%QAz03bo~ zHPH7|*M$W^_?V|4gN_?Qy7HZLU!0S{S0whGc&%|j3h`1<4wn?E zxQa;4GUs=fqsbhXDZI$op`q`v@{S^_%#8(?$Ohm1A}~N`mY)Y)kg@d=j~o#W&04CC zCi}u}en0H<&Hp7HqJb5Wf6;M@wU$7QcdqTb2s783SOUXh|JgL>q`qoj?L~Y?vxE&R zy}WJ!15|0BB;Bb}7~l zES0m~NKs%L6b5#)v=6uIK0#4vhMP$g)n)-fUfh$h*^-xbcAR21LFzs*z^!o zA>e?EyEyc-7+10QX;L_sYYCs4e%waIOv~iA6r?-Qt@HL7bS_bbp8$B%J2L-){qBQ@ zEtmaP{Ac##ts6P^MH=x-p-6MbAuUA6e2ViV?Ct7;cgcZR64Hr5RSu^Ig~3dTrYVvSn09?3&3oAN)6c;i(ZzdO_kl(&d^Pc@qmN2CtJv=+j zg@3Ko_xpkWQm*}YU@6EBv%f%l;<*#ZHS;obj2tSI$8g1>2PBh_-kMBrpXK(38YXSJ z6Gq3Ng!24fi`4{p05?Xrmu$lWPpXEu22aFeUeGUsIK%Ho8rE^?ihHBCnR}z(l==

yg8l^-E?W%iR(& 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⪚wt;4=)wAk@vZJa|Pianxz${IQQ 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 * tcp_input() -> * tcp_process() -> tcp_receive() (-> application). - * + * */ /* @@ -165,7 +165,7 @@ tcp_input(struct pbuf *p, struct netif *inp) for an active connection. */ prev = NULL; - + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); @@ -226,7 +226,7 @@ tcp_input(struct pbuf *p, struct netif *inp) /* put this listening pcb at the head of the listening list */ tcp_listen_pcbs.listen_pcbs = lpcb; } - + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n")); tcp_listen_input(lpcb); pbuf_free(p); @@ -288,12 +288,12 @@ tcp_input(struct pbuf *p, struct netif *inp) if (pcb->acked > 0) { TCP_EVENT_SENT(pcb, pcb->acked, err); } - + if (recv_data != NULL) { /* Notify application that data has been received. */ TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); } - + /* If a FIN segment was received, we call the callback function with a NULL buffer to indicate EOF. */ if (recv_flags & TF_GOT_FIN) { @@ -318,7 +318,7 @@ tcp_input(struct pbuf *p, struct netif *inp) tcp_debug_print_state(pcb->state); #endif /* TCP_DEBUG */ #endif /* TCP_INPUT_DEBUG */ - + } else { /* If no matching PCB was found, send a TCP RST (reset) to the @@ -492,7 +492,7 @@ tcp_process(struct tcp_pcb *pcb) pcb->snd_wnd = tcphdr->wnd; pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ pcb->state = ESTABLISHED; - pcb->cwnd = pcb->mss; + pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss); --pcb->snd_queuelen; LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen)); rseg = pcb->unacked; @@ -519,6 +519,7 @@ tcp_process(struct tcp_pcb *pcb) !(flags & TCP_RST)) { /* expected ACK number? */ if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) { + u16_t old_cwnd; pcb->state = ESTABLISHED; LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); #if LWIP_CALLBACK_API @@ -532,10 +533,11 @@ tcp_process(struct tcp_pcb *pcb) tcp_abort(pcb); return ERR_ABRT; } + old_cwnd = pcb->cwnd; /* If there was any data contained within this ACK, * we'd better pass it on to the application as well. */ tcp_receive(pcb); - pcb->cwnd = pcb->mss; + pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss); } /* incorrect ACK number */ else { @@ -620,7 +622,7 @@ tcp_process(struct tcp_pcb *pcb) * If the incoming segment constitutes an ACK for a segment that was used for RTT * estimation, the RTT is estimated here as well. * - * @return 1 if + * @return 1 if */ static u8_t @@ -698,7 +700,7 @@ tcp_receive(struct tcp_pcb *pcb) TCP_SEQ_LEQ(ackno, pcb->snd_max)) { */ if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_max)){ /* We come here when the ACK acknowledges new data. */ - + /* Reset the "IN Fast Retransmit" flag, since we are no longer in fast retransmit. Also reset the congestion window to the slow start threshold. */ @@ -871,7 +873,7 @@ tcp_receive(struct tcp_pcb *pcb) we do not want to discard the full contents of the pbuf up to the new starting point of the data since we have to keep the TCP header which is present in the first pbuf in the chain. - + What is done is really quite a nasty hack: the first pbuf in the pbuf chain is pointed to by inseg.p. Since we need to be able to deallocate the whole pbuf, we cannot change this @@ -881,11 +883,11 @@ tcp_receive(struct tcp_pcb *pcb) inseg.data pointer to point to the right place. This way, the ->p pointer will still point to the first pbuf, but the ->p->payload pointer will point to data in another pbuf. - + After we are done with adjusting the pbuf pointers we must adjust the ->data pointer in the seg and the segment length.*/ - + off = pcb->rcv_nxt - seqno; p = inseg.p; LWIP_ASSERT("inseg.p != NULL", inseg.p); @@ -914,7 +916,7 @@ tcp_receive(struct tcp_pcb *pcb) if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ /* the whole segment is < rcv_nxt */ /* must be a duplicate of a packet that has already been correctly handled */ - + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); tcp_ack_now(pcb); } @@ -927,7 +929,7 @@ tcp_receive(struct tcp_pcb *pcb) TCP_SEQ_LT(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd - 1)){ if (pcb->rcv_nxt == seqno) { - accepted_inseq = 1; + accepted_inseq = 1; /* The incoming segment is the next in sequence. We check if we have to trim the end of the segment and update rcv_nxt and pass the data to the application. */ @@ -1008,7 +1010,7 @@ tcp_receive(struct tcp_pcb *pcb) recv_flags = TF_GOT_FIN; if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ pcb->state = CLOSE_WAIT; - } + } } @@ -1088,7 +1090,7 @@ tcp_receive(struct tcp_pcb *pcb) } break; } - } else + } else /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ if(TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno+1, next->tcphdr->seqno-1)){ diff --git a/Demo/Common/ethernet/uIP/uip-1.0/uip/uip.c b/Demo/Common/ethernet/uIP/uip-1.0/uip/uip.c index e5854e994..803ec5654 100644 --- a/Demo/Common/ethernet/uIP/uip-1.0/uip/uip.c +++ b/Demo/Common/ethernet/uIP/uip-1.0/uip/uip.c @@ -1163,7 +1163,7 @@ uip_process(u8_t flag) uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr); - uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN]; #if UIP_UDP_CHECKSUMS /* Calculate UDP checksum. */ diff --git a/Demo/Common/include/BlockQ.h b/Demo/Common/include/BlockQ.h index 07ef54915..90b2ab328 100644 --- a/Demo/Common/include/BlockQ.h +++ b/Demo/Common/include/BlockQ.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/GenQTest.h b/Demo/Common/include/GenQTest.h index 8adbb7b13..f6e1ce823 100644 --- a/Demo/Common/include/GenQTest.h +++ b/Demo/Common/include/GenQTest.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/PollQ.h b/Demo/Common/include/PollQ.h index db7c5598a..619a1438f 100644 --- a/Demo/Common/include/PollQ.h +++ b/Demo/Common/include/PollQ.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/QPeek.h b/Demo/Common/include/QPeek.h index 37e4a0e36..65a00b5d1 100644 --- a/Demo/Common/include/QPeek.h +++ b/Demo/Common/include/QPeek.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/blocktim.h b/Demo/Common/include/blocktim.h index a91811132..84321f675 100644 --- a/Demo/Common/include/blocktim.h +++ b/Demo/Common/include/blocktim.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/comtest.h b/Demo/Common/include/comtest.h index d4e8a55f4..acecd157b 100644 --- a/Demo/Common/include/comtest.h +++ b/Demo/Common/include/comtest.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/comtest2.h b/Demo/Common/include/comtest2.h index fc4ed411f..e23a95318 100644 --- a/Demo/Common/include/comtest2.h +++ b/Demo/Common/include/comtest2.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/crflash.h b/Demo/Common/include/crflash.h index 32e961dda..b9f6dd963 100644 --- a/Demo/Common/include/crflash.h +++ b/Demo/Common/include/crflash.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/crhook.h b/Demo/Common/include/crhook.h index bf3ac039a..ab1f81c3c 100644 --- a/Demo/Common/include/crhook.h +++ b/Demo/Common/include/crhook.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/death.h b/Demo/Common/include/death.h index 857b10524..6b9657c8b 100644 --- a/Demo/Common/include/death.h +++ b/Demo/Common/include/death.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/dynamic.h b/Demo/Common/include/dynamic.h index 51d744dd3..944fcf6e1 100644 --- a/Demo/Common/include/dynamic.h +++ b/Demo/Common/include/dynamic.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/fileIO.h b/Demo/Common/include/fileIO.h index 3629b1caf..916c65db1 100644 --- a/Demo/Common/include/fileIO.h +++ b/Demo/Common/include/fileIO.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/flash.h b/Demo/Common/include/flash.h index 4219c08b0..f2776d1e2 100644 --- a/Demo/Common/include/flash.h +++ b/Demo/Common/include/flash.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/flop.h b/Demo/Common/include/flop.h index 9aec76fc2..82ab146bd 100644 --- a/Demo/Common/include/flop.h +++ b/Demo/Common/include/flop.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/integer.h b/Demo/Common/include/integer.h index ceec5663d..a87c826d6 100644 --- a/Demo/Common/include/integer.h +++ b/Demo/Common/include/integer.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/mevents.h b/Demo/Common/include/mevents.h index adad8b240..b313519f3 100644 --- a/Demo/Common/include/mevents.h +++ b/Demo/Common/include/mevents.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/partest.h b/Demo/Common/include/partest.h index 4c651c695..274cb65a9 100644 --- a/Demo/Common/include/partest.h +++ b/Demo/Common/include/partest.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/print.h b/Demo/Common/include/print.h index 0f5b4bef0..9b86b5731 100644 --- a/Demo/Common/include/print.h +++ b/Demo/Common/include/print.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/semtest.h b/Demo/Common/include/semtest.h index 51a2792d4..fc997db6f 100644 --- a/Demo/Common/include/semtest.h +++ b/Demo/Common/include/semtest.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Common/include/serial.h b/Demo/Common/include/serial.h index 7b162acaf..ff42aa9b3 100644 --- a/Demo/Common/include/serial.h +++ b/Demo/Common/include/serial.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Cygnal/FreeRTOSConfig.h b/Demo/Cygnal/FreeRTOSConfig.h index f5ab93d08..ba8c26252 100644 --- a/Demo/Cygnal/FreeRTOSConfig.h +++ b/Demo/Cygnal/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Cygnal/Makefile b/Demo/Cygnal/Makefile index 46c2378c7..a1dbebfbf 100644 --- a/Demo/Cygnal/Makefile +++ b/Demo/Cygnal/Makefile @@ -1,4 +1,4 @@ -# FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. +# FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. # # This file is part of the FreeRTOS.org distribution. # diff --git a/Demo/Cygnal/ParTest/ParTest.c b/Demo/Cygnal/ParTest/ParTest.c index 90dbb115c..9cc437c33 100644 --- a/Demo/Cygnal/ParTest/ParTest.c +++ b/Demo/Cygnal/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Cygnal/main.c b/Demo/Cygnal/main.c index a8356aaee..73843b946 100644 --- a/Demo/Cygnal/main.c +++ b/Demo/Cygnal/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Cygnal/serial/serial.c b/Demo/Cygnal/serial/serial.c index c0634eef4..b3f6cdc12 100644 --- a/Demo/Cygnal/serial/serial.c +++ b/Demo/Cygnal/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Flshlite/FRConfig.h b/Demo/Flshlite/FRConfig.h index c4cbf923b..19340ff1c 100644 --- a/Demo/Flshlite/FRConfig.h +++ b/Demo/Flshlite/FRConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Flshlite/FileIO/fileIO.c b/Demo/Flshlite/FileIO/fileIO.c index dc24e60ea..7626d9f8e 100644 --- a/Demo/Flshlite/FileIO/fileIO.c +++ b/Demo/Flshlite/FileIO/fileIO.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Flshlite/FreeRTOSConfig.h b/Demo/Flshlite/FreeRTOSConfig.h index 0d582eb16..d8b92ba6a 100644 --- a/Demo/Flshlite/FreeRTOSConfig.h +++ b/Demo/Flshlite/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Flshlite/ParTest/ParTest.c b/Demo/Flshlite/ParTest/ParTest.c index 08bb6ecb4..3e8c811cc 100644 --- a/Demo/Flshlite/ParTest/ParTest.c +++ b/Demo/Flshlite/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Flshlite/main.c b/Demo/Flshlite/main.c index d3da49001..487e680e8 100644 --- a/Demo/Flshlite/main.c +++ b/Demo/Flshlite/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/Flshlite/serial/serial.c b/Demo/Flshlite/serial/serial.c index 1af148024..dc86bfc9b 100644 --- a/Demo/Flshlite/serial/serial.c +++ b/Demo/Flshlite/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/H8S/RTOSDemo/FreeRTOSConfig.h b/Demo/H8S/RTOSDemo/FreeRTOSConfig.h index f6fd84686..2d1b271a0 100644 --- a/Demo/H8S/RTOSDemo/FreeRTOSConfig.h +++ b/Demo/H8S/RTOSDemo/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/H8S/RTOSDemo/ParTest/ParTest.c b/Demo/H8S/RTOSDemo/ParTest/ParTest.c index 0b00ca26b..b03f8bae7 100644 --- a/Demo/H8S/RTOSDemo/ParTest/ParTest.c +++ b/Demo/H8S/RTOSDemo/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/H8S/RTOSDemo/main.c b/Demo/H8S/RTOSDemo/main.c index d5b695965..a69c3681d 100644 --- a/Demo/H8S/RTOSDemo/main.c +++ b/Demo/H8S/RTOSDemo/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/H8S/RTOSDemo/serial/serial.c b/Demo/H8S/RTOSDemo/serial/serial.c index ddc80e5bd..cd8638577 100644 --- a/Demo/H8S/RTOSDemo/serial/serial.c +++ b/Demo/H8S/RTOSDemo/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_banked/FreeRTOSConfig.h b/Demo/HCS12_CodeWarrior_banked/FreeRTOSConfig.h index ccdc47593..5f2b95c80 100644 --- a/Demo/HCS12_CodeWarrior_banked/FreeRTOSConfig.h +++ b/Demo/HCS12_CodeWarrior_banked/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_banked/ParTest/ParTest.c b/Demo/HCS12_CodeWarrior_banked/ParTest/ParTest.c index 752b8fa36..45d877cad 100644 --- a/Demo/HCS12_CodeWarrior_banked/ParTest/ParTest.c +++ b/Demo/HCS12_CodeWarrior_banked/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_banked/main.c b/Demo/HCS12_CodeWarrior_banked/main.c index 78dcd5a70..b7d1dd0a0 100644 --- a/Demo/HCS12_CodeWarrior_banked/main.c +++ b/Demo/HCS12_CodeWarrior_banked/main.c @@ -1,6 +1,6 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_banked/serial/serial.c b/Demo/HCS12_CodeWarrior_banked/serial/serial.c index cb9405fe4..d04f48771 100644 --- a/Demo/HCS12_CodeWarrior_banked/serial/serial.c +++ b/Demo/HCS12_CodeWarrior_banked/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_small/FreeRTOSConfig.h b/Demo/HCS12_CodeWarrior_small/FreeRTOSConfig.h index 2a4ce02c1..cfc0b7c4a 100644 --- a/Demo/HCS12_CodeWarrior_small/FreeRTOSConfig.h +++ b/Demo/HCS12_CodeWarrior_small/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_small/ParTest/ParTest.c b/Demo/HCS12_CodeWarrior_small/ParTest/ParTest.c index 752b8fa36..45d877cad 100644 --- a/Demo/HCS12_CodeWarrior_small/ParTest/ParTest.c +++ b/Demo/HCS12_CodeWarrior_small/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_small/main.c b/Demo/HCS12_CodeWarrior_small/main.c index 79c7d1171..d9a558181 100644 --- a/Demo/HCS12_CodeWarrior_small/main.c +++ b/Demo/HCS12_CodeWarrior_small/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_CodeWarrior_small/serial/serial.c b/Demo/HCS12_CodeWarrior_small/serial/serial.c index 937e4bee1..fdfbf3a89 100644 --- a/Demo/HCS12_CodeWarrior_small/serial/serial.c +++ b/Demo/HCS12_CodeWarrior_small/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_GCC_banked/FreeRTOSConfig.h b/Demo/HCS12_GCC_banked/FreeRTOSConfig.h index e25ced9bd..50872a8a9 100644 --- a/Demo/HCS12_GCC_banked/FreeRTOSConfig.h +++ b/Demo/HCS12_GCC_banked/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_GCC_banked/ParTest.c b/Demo/HCS12_GCC_banked/ParTest.c index 241220ef5..c04fb493d 100644 --- a/Demo/HCS12_GCC_banked/ParTest.c +++ b/Demo/HCS12_GCC_banked/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_GCC_banked/main.c b/Demo/HCS12_GCC_banked/main.c index 7ace08dd2..f02dc2b01 100644 --- a/Demo/HCS12_GCC_banked/main.c +++ b/Demo/HCS12_GCC_banked/main.c @@ -1,6 +1,6 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/HCS12_GCC_banked/startup.c b/Demo/HCS12_GCC_banked/startup.c index e750a989e..5fb00949e 100644 --- a/Demo/HCS12_GCC_banked/startup.c +++ b/Demo/HCS12_GCC_banked/startup.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/MicroBlaze/FreeRTOSConfig.h b/Demo/MicroBlaze/FreeRTOSConfig.h index 463ab2ded..c29cd8a67 100644 --- a/Demo/MicroBlaze/FreeRTOSConfig.h +++ b/Demo/MicroBlaze/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/MicroBlaze/ParTest/ParTest.c b/Demo/MicroBlaze/ParTest/ParTest.c index 1b69e5bfe..251935f87 100644 --- a/Demo/MicroBlaze/ParTest/ParTest.c +++ b/Demo/MicroBlaze/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/MicroBlaze/main.c b/Demo/MicroBlaze/main.c index 3810d994f..00fa07192 100644 --- a/Demo/MicroBlaze/main.c +++ b/Demo/MicroBlaze/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/MicroBlaze/serial/serial.c b/Demo/MicroBlaze/serial/serial.c index 879dc9365..ac776e983 100644 --- a/Demo/MicroBlaze/serial/serial.c +++ b/Demo/MicroBlaze/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PC/FRConfig.h b/Demo/PC/FRConfig.h index 882699a5e..a3d48277c 100644 --- a/Demo/PC/FRConfig.h +++ b/Demo/PC/FRConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PC/FileIO/fileIO.c b/Demo/PC/FileIO/fileIO.c index f5a90596b..cdcee8286 100644 --- a/Demo/PC/FileIO/fileIO.c +++ b/Demo/PC/FileIO/fileIO.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PC/FreeRTOSConfig.h b/Demo/PC/FreeRTOSConfig.h index 97eb232d3..864f05183 100644 --- a/Demo/PC/FreeRTOSConfig.h +++ b/Demo/PC/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PC/ParTest/ParTest.c b/Demo/PC/ParTest/ParTest.c index 28788984f..ea0b2ca53 100644 --- a/Demo/PC/ParTest/ParTest.c +++ b/Demo/PC/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PC/main.c b/Demo/PC/main.c index dfac727b7..7155609cd 100644 --- a/Demo/PC/main.c +++ b/Demo/PC/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PC/serial/serial.c b/Demo/PC/serial/serial.c index b8625d724..8c481c72a 100644 --- a/Demo/PC/serial/serial.c +++ b/Demo/PC/serial/serial.c @@ -5,7 +5,7 @@ http://dzcomm.sourceforge.net - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_MPLAB/FreeRTOSConfig.h b/Demo/PIC18_MPLAB/FreeRTOSConfig.h index 3f6669e11..9ac2ddd49 100644 --- a/Demo/PIC18_MPLAB/FreeRTOSConfig.h +++ b/Demo/PIC18_MPLAB/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_MPLAB/ParTest/ParTest.c b/Demo/PIC18_MPLAB/ParTest/ParTest.c index c64b08466..d48ccbbcd 100644 --- a/Demo/PIC18_MPLAB/ParTest/ParTest.c +++ b/Demo/PIC18_MPLAB/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_MPLAB/main1.c b/Demo/PIC18_MPLAB/main1.c index 67f3ccfdf..282147d2a 100644 --- a/Demo/PIC18_MPLAB/main1.c +++ b/Demo/PIC18_MPLAB/main1.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_MPLAB/main2.c b/Demo/PIC18_MPLAB/main2.c index 730c68cbe..04c69bd3f 100644 --- a/Demo/PIC18_MPLAB/main2.c +++ b/Demo/PIC18_MPLAB/main2.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_MPLAB/main3.c b/Demo/PIC18_MPLAB/main3.c index 287905e3e..d7c37e10f 100644 --- a/Demo/PIC18_MPLAB/main3.c +++ b/Demo/PIC18_MPLAB/main3.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_MPLAB/serial/serial.c b/Demo/PIC18_MPLAB/serial/serial.c index 149935b63..218dcea1f 100644 --- a/Demo/PIC18_MPLAB/serial/serial.c +++ b/Demo/PIC18_MPLAB/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo1/FreeRTOSConfig.h b/Demo/PIC18_WizC/Demo1/FreeRTOSConfig.h index 8d4da2316..aea0be780 100644 --- a/Demo/PIC18_WizC/Demo1/FreeRTOSConfig.h +++ b/Demo/PIC18_WizC/Demo1/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo1/WIZCmake.h b/Demo/PIC18_WizC/Demo1/WIZCmake.h index 73fce2663..4b860096c 100644 --- a/Demo/PIC18_WizC/Demo1/WIZCmake.h +++ b/Demo/PIC18_WizC/Demo1/WIZCmake.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo1/fuses.c b/Demo/PIC18_WizC/Demo1/fuses.c index b11c5728a..98a481fd6 100644 --- a/Demo/PIC18_WizC/Demo1/fuses.c +++ b/Demo/PIC18_WizC/Demo1/fuses.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo1/interrupt.c b/Demo/PIC18_WizC/Demo1/interrupt.c index 7e7bdd422..0cd55eed3 100644 --- a/Demo/PIC18_WizC/Demo1/interrupt.c +++ b/Demo/PIC18_WizC/Demo1/interrupt.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo1/main.c b/Demo/PIC18_WizC/Demo1/main.c index 7b3c672d0..e330ca5cf 100644 --- a/Demo/PIC18_WizC/Demo1/main.c +++ b/Demo/PIC18_WizC/Demo1/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo2/FreeRTOSConfig.h b/Demo/PIC18_WizC/Demo2/FreeRTOSConfig.h index 27e03ecec..7c1032267 100644 --- a/Demo/PIC18_WizC/Demo2/FreeRTOSConfig.h +++ b/Demo/PIC18_WizC/Demo2/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo2/WIZCmake.h b/Demo/PIC18_WizC/Demo2/WIZCmake.h index 95ff08075..6708296af 100644 --- a/Demo/PIC18_WizC/Demo2/WIZCmake.h +++ b/Demo/PIC18_WizC/Demo2/WIZCmake.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo2/fuses.c b/Demo/PIC18_WizC/Demo2/fuses.c index b11c5728a..98a481fd6 100644 --- a/Demo/PIC18_WizC/Demo2/fuses.c +++ b/Demo/PIC18_WizC/Demo2/fuses.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo2/interrupt.c b/Demo/PIC18_WizC/Demo2/interrupt.c index 0d041217b..883817252 100644 --- a/Demo/PIC18_WizC/Demo2/interrupt.c +++ b/Demo/PIC18_WizC/Demo2/interrupt.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo2/main.c b/Demo/PIC18_WizC/Demo2/main.c index 59209a0ca..af9e1856c 100644 --- a/Demo/PIC18_WizC/Demo2/main.c +++ b/Demo/PIC18_WizC/Demo2/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo3/FreeRTOSConfig.h b/Demo/PIC18_WizC/Demo3/FreeRTOSConfig.h index ae5444597..23d95060f 100644 --- a/Demo/PIC18_WizC/Demo3/FreeRTOSConfig.h +++ b/Demo/PIC18_WizC/Demo3/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo3/WIZCmake.h b/Demo/PIC18_WizC/Demo3/WIZCmake.h index 95ff08075..6708296af 100644 --- a/Demo/PIC18_WizC/Demo3/WIZCmake.h +++ b/Demo/PIC18_WizC/Demo3/WIZCmake.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo3/fuses.c b/Demo/PIC18_WizC/Demo3/fuses.c index b11c5728a..98a481fd6 100644 --- a/Demo/PIC18_WizC/Demo3/fuses.c +++ b/Demo/PIC18_WizC/Demo3/fuses.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo3/interrupt.c b/Demo/PIC18_WizC/Demo3/interrupt.c index 0d041217b..883817252 100644 --- a/Demo/PIC18_WizC/Demo3/interrupt.c +++ b/Demo/PIC18_WizC/Demo3/interrupt.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo3/main.c b/Demo/PIC18_WizC/Demo3/main.c index cd83baec6..9bb3d1900 100644 --- a/Demo/PIC18_WizC/Demo3/main.c +++ b/Demo/PIC18_WizC/Demo3/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo4/FreeRTOSConfig.h b/Demo/PIC18_WizC/Demo4/FreeRTOSConfig.h index e05eef205..1cdf1882b 100644 --- a/Demo/PIC18_WizC/Demo4/FreeRTOSConfig.h +++ b/Demo/PIC18_WizC/Demo4/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo4/WIZCmake.h b/Demo/PIC18_WizC/Demo4/WIZCmake.h index 95ff08075..6708296af 100644 --- a/Demo/PIC18_WizC/Demo4/WIZCmake.h +++ b/Demo/PIC18_WizC/Demo4/WIZCmake.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo4/fuses.c b/Demo/PIC18_WizC/Demo4/fuses.c index b11c5728a..98a481fd6 100644 --- a/Demo/PIC18_WizC/Demo4/fuses.c +++ b/Demo/PIC18_WizC/Demo4/fuses.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo4/interrupt.c b/Demo/PIC18_WizC/Demo4/interrupt.c index 0d041217b..883817252 100644 --- a/Demo/PIC18_WizC/Demo4/interrupt.c +++ b/Demo/PIC18_WizC/Demo4/interrupt.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo4/main.c b/Demo/PIC18_WizC/Demo4/main.c index 107379a24..1ac60e967 100644 --- a/Demo/PIC18_WizC/Demo4/main.c +++ b/Demo/PIC18_WizC/Demo4/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo5/FreeRTOSConfig.h b/Demo/PIC18_WizC/Demo5/FreeRTOSConfig.h index 052a37acb..ccde6d1f5 100644 --- a/Demo/PIC18_WizC/Demo5/FreeRTOSConfig.h +++ b/Demo/PIC18_WizC/Demo5/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo5/WIZCmake.h b/Demo/PIC18_WizC/Demo5/WIZCmake.h index 95ff08075..6708296af 100644 --- a/Demo/PIC18_WizC/Demo5/WIZCmake.h +++ b/Demo/PIC18_WizC/Demo5/WIZCmake.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo5/fuses.c b/Demo/PIC18_WizC/Demo5/fuses.c index b11c5728a..98a481fd6 100644 --- a/Demo/PIC18_WizC/Demo5/fuses.c +++ b/Demo/PIC18_WizC/Demo5/fuses.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo5/interrupt.c b/Demo/PIC18_WizC/Demo5/interrupt.c index 0d041217b..883817252 100644 --- a/Demo/PIC18_WizC/Demo5/interrupt.c +++ b/Demo/PIC18_WizC/Demo5/interrupt.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo5/main.c b/Demo/PIC18_WizC/Demo5/main.c index d317c0479..b7565f7a8 100644 --- a/Demo/PIC18_WizC/Demo5/main.c +++ b/Demo/PIC18_WizC/Demo5/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo6/FreeRTOSConfig.h b/Demo/PIC18_WizC/Demo6/FreeRTOSConfig.h index f82e12815..4f277c194 100644 --- a/Demo/PIC18_WizC/Demo6/FreeRTOSConfig.h +++ b/Demo/PIC18_WizC/Demo6/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo6/WIZCmake.h b/Demo/PIC18_WizC/Demo6/WIZCmake.h index 95ff08075..6708296af 100644 --- a/Demo/PIC18_WizC/Demo6/WIZCmake.h +++ b/Demo/PIC18_WizC/Demo6/WIZCmake.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo6/fuses.c b/Demo/PIC18_WizC/Demo6/fuses.c index b11c5728a..98a481fd6 100644 --- a/Demo/PIC18_WizC/Demo6/fuses.c +++ b/Demo/PIC18_WizC/Demo6/fuses.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo6/interrupt.c b/Demo/PIC18_WizC/Demo6/interrupt.c index 0d041217b..883817252 100644 --- a/Demo/PIC18_WizC/Demo6/interrupt.c +++ b/Demo/PIC18_WizC/Demo6/interrupt.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo6/main.c b/Demo/PIC18_WizC/Demo6/main.c index b6777a3c0..053683c16 100644 --- a/Demo/PIC18_WizC/Demo6/main.c +++ b/Demo/PIC18_WizC/Demo6/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo7/FreeRTOSConfig.h b/Demo/PIC18_WizC/Demo7/FreeRTOSConfig.h index 88a5a0c59..199d4d625 100644 --- a/Demo/PIC18_WizC/Demo7/FreeRTOSConfig.h +++ b/Demo/PIC18_WizC/Demo7/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo7/WIZCmake.h b/Demo/PIC18_WizC/Demo7/WIZCmake.h index 95ff08075..6708296af 100644 --- a/Demo/PIC18_WizC/Demo7/WIZCmake.h +++ b/Demo/PIC18_WizC/Demo7/WIZCmake.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo7/fuses.c b/Demo/PIC18_WizC/Demo7/fuses.c index b11c5728a..98a481fd6 100644 --- a/Demo/PIC18_WizC/Demo7/fuses.c +++ b/Demo/PIC18_WizC/Demo7/fuses.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo7/interrupt.c b/Demo/PIC18_WizC/Demo7/interrupt.c index 0d041217b..883817252 100644 --- a/Demo/PIC18_WizC/Demo7/interrupt.c +++ b/Demo/PIC18_WizC/Demo7/interrupt.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/Demo7/main.c b/Demo/PIC18_WizC/Demo7/main.c index 32f8c8c68..4d0573890 100644 --- a/Demo/PIC18_WizC/Demo7/main.c +++ b/Demo/PIC18_WizC/Demo7/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/ParTest/ParTest.c b/Demo/PIC18_WizC/ParTest/ParTest.c index e93c40d66..bc20679c3 100644 --- a/Demo/PIC18_WizC/ParTest/ParTest.c +++ b/Demo/PIC18_WizC/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/serial/isrSerialRx.c b/Demo/PIC18_WizC/serial/isrSerialRx.c index cec6e6555..cf63e5193 100644 --- a/Demo/PIC18_WizC/serial/isrSerialRx.c +++ b/Demo/PIC18_WizC/serial/isrSerialRx.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/serial/isrSerialTx.c b/Demo/PIC18_WizC/serial/isrSerialTx.c index f32098d4b..e0c75ec2a 100644 --- a/Demo/PIC18_WizC/serial/isrSerialTx.c +++ b/Demo/PIC18_WizC/serial/isrSerialTx.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC18_WizC/serial/serial.c b/Demo/PIC18_WizC/serial/serial.c index 2b2671b6c..502248da1 100644 --- a/Demo/PIC18_WizC/serial/serial.c +++ b/Demo/PIC18_WizC/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/FreeRTOSConfig.h b/Demo/PIC24_MPLAB/FreeRTOSConfig.h index 1434007f6..43f5ce268 100644 --- a/Demo/PIC24_MPLAB/FreeRTOSConfig.h +++ b/Demo/PIC24_MPLAB/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/ParTest/ParTest.c b/Demo/PIC24_MPLAB/ParTest/ParTest.c index 1e76f4dd2..01df18b93 100644 --- a/Demo/PIC24_MPLAB/ParTest/ParTest.c +++ b/Demo/PIC24_MPLAB/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/lcd.c b/Demo/PIC24_MPLAB/lcd.c index 2885fbfd3..8d0309702 100644 --- a/Demo/PIC24_MPLAB/lcd.c +++ b/Demo/PIC24_MPLAB/lcd.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/lcd.h b/Demo/PIC24_MPLAB/lcd.h index 50ef9daf6..becebb1a4 100644 --- a/Demo/PIC24_MPLAB/lcd.h +++ b/Demo/PIC24_MPLAB/lcd.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/main.c b/Demo/PIC24_MPLAB/main.c index 2b5fda792..4e995ca7d 100644 --- a/Demo/PIC24_MPLAB/main.c +++ b/Demo/PIC24_MPLAB/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/serial/serial.c b/Demo/PIC24_MPLAB/serial/serial.c index 0f1a8d1a4..e9d9901c9 100644 --- a/Demo/PIC24_MPLAB/serial/serial.c +++ b/Demo/PIC24_MPLAB/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/timertest.c b/Demo/PIC24_MPLAB/timertest.c index cca0eb3ff..ea2016b28 100644 --- a/Demo/PIC24_MPLAB/timertest.c +++ b/Demo/PIC24_MPLAB/timertest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/PIC24_MPLAB/timertest.h b/Demo/PIC24_MPLAB/timertest.h index 45da86959..10f1913e4 100644 --- a/Demo/PIC24_MPLAB/timertest.h +++ b/Demo/PIC24_MPLAB/timertest.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/FreeRTOSConfig.h b/Demo/WizNET_DEMO_GCC_ARM7/FreeRTOSConfig.h index e13d6013b..b51ba1da4 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/FreeRTOSConfig.h +++ b/Demo/WizNET_DEMO_GCC_ARM7/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.c b/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.c index 4a8fd9375..69bbbf2ee 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.c +++ b/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.h b/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.h index 88f394d50..77d442590 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.h +++ b/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/Makefile b/Demo/WizNET_DEMO_GCC_ARM7/Makefile index c2884f6fb..c5ffc150b 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/Makefile +++ b/Demo/WizNET_DEMO_GCC_ARM7/Makefile @@ -1,4 +1,4 @@ -# FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. +# FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. # # This file is part of the FreeRTOS.org distribution. # diff --git a/Demo/WizNET_DEMO_GCC_ARM7/TCP.c b/Demo/WizNET_DEMO_GCC_ARM7/TCP.c index 290f8ab62..c1639b079 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/TCP.c +++ b/Demo/WizNET_DEMO_GCC_ARM7/TCP.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/TCP.h b/Demo/WizNET_DEMO_GCC_ARM7/TCP.h index 23239550c..2aa7bf30a 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/TCP.h +++ b/Demo/WizNET_DEMO_GCC_ARM7/TCP.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/TCPISR.c b/Demo/WizNET_DEMO_GCC_ARM7/TCPISR.c index 4bba80fb2..4779a8add 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/TCPISR.c +++ b/Demo/WizNET_DEMO_GCC_ARM7/TCPISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/html_pages.h b/Demo/WizNET_DEMO_GCC_ARM7/html_pages.h index 7fc159f4a..38919c04a 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/html_pages.h +++ b/Demo/WizNET_DEMO_GCC_ARM7/html_pages.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/i2c.c b/Demo/WizNET_DEMO_GCC_ARM7/i2c.c index 690325f22..19cd69da0 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/i2c.c +++ b/Demo/WizNET_DEMO_GCC_ARM7/i2c.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/i2c.h b/Demo/WizNET_DEMO_GCC_ARM7/i2c.h index 3ef3699da..3b6492fef 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/i2c.h +++ b/Demo/WizNET_DEMO_GCC_ARM7/i2c.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/i2cISR.c b/Demo/WizNET_DEMO_GCC_ARM7/i2cISR.c index 96f31b1ad..e0a97497a 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/i2cISR.c +++ b/Demo/WizNET_DEMO_GCC_ARM7/i2cISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_GCC_ARM7/main.c b/Demo/WizNET_DEMO_GCC_ARM7/main.c index 1a513d1d4..6daafd56b 100644 --- a/Demo/WizNET_DEMO_GCC_ARM7/main.c +++ b/Demo/WizNET_DEMO_GCC_ARM7/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h b/Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h index da186932f..6ddf854f9 100644 --- a/Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h +++ b/Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_TERN_186/HTTPTask.c b/Demo/WizNET_DEMO_TERN_186/HTTPTask.c index 1cfbc7f84..92085ddb6 100644 --- a/Demo/WizNET_DEMO_TERN_186/HTTPTask.c +++ b/Demo/WizNET_DEMO_TERN_186/HTTPTask.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_TERN_186/HTTPTask.h b/Demo/WizNET_DEMO_TERN_186/HTTPTask.h index ff7da18c3..77655a7c8 100644 --- a/Demo/WizNET_DEMO_TERN_186/HTTPTask.h +++ b/Demo/WizNET_DEMO_TERN_186/HTTPTask.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_TERN_186/main.c b/Demo/WizNET_DEMO_TERN_186/main.c index 6cee79d95..2d02507d9 100644 --- a/Demo/WizNET_DEMO_TERN_186/main.c +++ b/Demo/WizNET_DEMO_TERN_186/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/WizNET_DEMO_TERN_186/serial/serial.c b/Demo/WizNET_DEMO_TERN_186/serial/serial.c index a16e5568a..73caa02b5 100644 --- a/Demo/WizNET_DEMO_TERN_186/serial/serial.c +++ b/Demo/WizNET_DEMO_TERN_186/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/FreeRTOSConfig.h b/Demo/dsPIC_MPLAB/FreeRTOSConfig.h index dd74cb62b..3f333adb9 100644 --- a/Demo/dsPIC_MPLAB/FreeRTOSConfig.h +++ b/Demo/dsPIC_MPLAB/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/ParTest/ParTest.c b/Demo/dsPIC_MPLAB/ParTest/ParTest.c index d20eabb6b..6b2dbee19 100644 --- a/Demo/dsPIC_MPLAB/ParTest/ParTest.c +++ b/Demo/dsPIC_MPLAB/ParTest/ParTest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/lcd.c b/Demo/dsPIC_MPLAB/lcd.c index 4cdbee3c4..edaac0187 100644 --- a/Demo/dsPIC_MPLAB/lcd.c +++ b/Demo/dsPIC_MPLAB/lcd.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/lcd.h b/Demo/dsPIC_MPLAB/lcd.h index 50ef9daf6..becebb1a4 100644 --- a/Demo/dsPIC_MPLAB/lcd.h +++ b/Demo/dsPIC_MPLAB/lcd.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/main.c b/Demo/dsPIC_MPLAB/main.c index 2b5fda792..4e995ca7d 100644 --- a/Demo/dsPIC_MPLAB/main.c +++ b/Demo/dsPIC_MPLAB/main.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/serial/serial.c b/Demo/dsPIC_MPLAB/serial/serial.c index ecbdd23f7..47f7f6eff 100644 --- a/Demo/dsPIC_MPLAB/serial/serial.c +++ b/Demo/dsPIC_MPLAB/serial/serial.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/timertest.c b/Demo/dsPIC_MPLAB/timertest.c index cca0eb3ff..ea2016b28 100644 --- a/Demo/dsPIC_MPLAB/timertest.c +++ b/Demo/dsPIC_MPLAB/timertest.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/dsPIC_MPLAB/timertest.h b/Demo/dsPIC_MPLAB/timertest.h index 45da86959..10f1913e4 100644 --- a/Demo/dsPIC_MPLAB/timertest.h +++ b/Demo/dsPIC_MPLAB/timertest.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/Makefile b/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/Makefile index 55ee8bc9a..6f51ddb10 100644 --- a/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/Makefile +++ b/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/Makefile @@ -69,7 +69,6 @@ LastWord = $(if $(1),$(word $(words $(1)),$(1))) MAKE = make MAKECFG = config.mk TGTTYPE = $(suffix $(TARGET)) -TGTFILE = $(PART)-$(TARGET) RM = rm -Rf @@ -99,14 +98,14 @@ LOADLIBES = LDLIBS = $(LIBS:%=-l%) OBJDUMP = avr32-objdump -LSS = $(TGTFILE:$(TGTTYPE)=.lss) +LSS = $(TARGET:$(TGTTYPE)=.lss) NM = avr32-nm -SYM = $(TGTFILE:$(TGTTYPE)=.sym) +SYM = $(TARGET:$(TGTTYPE)=.sym) OBJCOPY = avr32-objcopy -HEX = $(TGTFILE:$(TGTTYPE)=.hex) -BIN = $(TGTFILE:$(TGTTYPE)=.bin) +HEX = $(TARGET:$(TGTTYPE)=.hex) +BIN = $(TARGET:$(TGTTYPE)=.bin) SIZE = avr32-size @@ -142,7 +141,7 @@ MSG_GETTING_CPU_INFO = Getting CPU information. MSG_HALTING = Stopping CPU execution. MSG_ERASING_CHIP = Performing a JTAG Chip Erase command. MSG_ERASING = Performing a flash chip erase. -MSG_PROGRAMMING = Programming MCU memory from \`$(TGTFILE)\'. +MSG_PROGRAMMING = Programming MCU memory from \`$(TARGET)\'. MSG_SECURING_FLASH = Protecting chip by setting security bit. MSG_RESETTING = Resetting MCU. MSG_DEBUGGING = Opening debug connection with MCU. @@ -182,7 +181,7 @@ clean: -$(VERBOSE_CMD)$(RM) $(HEX) -$(VERBOSE_CMD)$(RM) $(SYM) -$(VERBOSE_CMD)$(RM) $(LSS) - -$(VERBOSE_CMD)$(RM) $(TGTFILE) + -$(VERBOSE_CMD)$(RM) $(TARGET) -$(VERBOSE_CMD)$(RM) $(OBJFILES) -$(VERBOSE_CMD)$(RM) $(ASFILES) -$(VERBOSE_CMD)$(RM) $(CPPFILES) @@ -215,12 +214,12 @@ objfiles: $(OBJFILES) ifeq ($(TGTTYPE),.a) # Archive: create A output file from object files. .PHONY: a -a: $(TGTFILE) +a: $(TARGET) else ifeq ($(TGTTYPE),.elf) # Link: create ELF output file from object files. .PHONY: elf -elf: $(TGTFILE) +elf: $(TARGET) endif endif @@ -246,7 +245,7 @@ endif # Display target size information. .PHONY: sizes -sizes: $(TGTFILE) +sizes: $(TARGET) @echo @echo ifeq ($(TGTTYPE),.a) @@ -334,7 +333,7 @@ endif program: all @echo @echo $(MSG_PROGRAMMING) - $(VERBOSE_CMD)$(PROGRAM) program $(FLASH:%=-f%) $(PROG_CLOCK:%=-c%) -e -v -R $(if $(findstring run,$(MAKECMDGOALS)),-r) $(TGTFILE) + $(VERBOSE_CMD)$(PROGRAM) program $(FLASH:%=-f%) $(PROG_CLOCK:%=-c%) -e -v -R $(if $(findstring run,$(MAKECMDGOALS)),-r) $(TARGET) ifneq ($(call LastWord,$(filter cpuinfo chiperase program secureflash debug readregs,$(MAKECMDGOALS))),program) @$(SLEEP) $(SLEEPUSB) else @@ -430,7 +429,7 @@ endif program: all @echo @echo $(MSG_PROGRAMMING) - $(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck loadbuffer $(TGTFILE) program verify $(if $(findstring run,$(MAKECMDGOALS)),$(if $(findstring secureflash,$(MAKECMDGOALS)),,start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0)) + $(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck loadbuffer $(TARGET) program verify $(if $(findstring run,$(MAKECMDGOALS)),$(if $(findstring secureflash,$(MAKECMDGOALS)),,start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0)) ifeq ($(call LastWord,$(filter program secureflash debug,$(MAKECMDGOALS))),program) @echo endif @@ -528,7 +527,7 @@ $(CPPFILES) $(ASFILES) $(OBJFILES): Makefile $(MAKECFG) ifeq ($(TGTTYPE),.elf) # Files resulting from linking depend on linker script. -$(TGTFILE): $(LINKER_SCRIPT) +$(TARGET): $(LINKER_SCRIPT) endif # Preprocess: create preprocessed files from C source files. @@ -574,16 +573,16 @@ endif .PRECIOUS: $(OBJFILES) ifeq ($(TGTTYPE),.a) # Archive: create A output file from object files. -.SECONDARY: $(TGTFILE) -$(TGTFILE): $(OBJFILES) +.SECONDARY: $(TARGET) +$(TARGET): $(OBJFILES) @echo $(MSG_ARCHIVING) $(VERBOSE_CMD)$(AR) $(ARFLAGS) $@ $(filter %.o,$+) $(VERBOSE_NL) else ifeq ($(TGTTYPE),.elf) # Link: create ELF output file from object files. -.SECONDARY: $(TGTFILE) -$(TGTFILE): $(OBJFILES) +.SECONDARY: $(TARGET) +$(TARGET): $(OBJFILES) @echo $(MSG_LINKING) $(VERBOSE_CMD)$(CC) $(LDFLAGS) $(filter %.o,$+) $(LOADLIBES) $(LDLIBS) -o $@ $(VERBOSE_NL) @@ -591,13 +590,13 @@ endif endif # Create extended listing from target output file. -$(LSS): $(TGTFILE) +$(LSS): $(TARGET) @echo $(MSG_EXTENDED_LISTING) $(VERBOSE_CMD)$(OBJDUMP) -h -S $< > $@ $(VERBOSE_NL) # Create symbol table from target output file. -$(SYM): $(TGTFILE) +$(SYM): $(TARGET) @echo $(MSG_SYMBOL_TABLE) $(VERBOSE_CMD)$(NM) -n $< > $@ $(VERBOSE_NL) @@ -605,13 +604,13 @@ $(SYM): $(TGTFILE) ifeq ($(TGTTYPE),.elf) # Create Intel HEX image from ELF output file. -$(HEX): $(TGTFILE) +$(HEX): $(TARGET) @echo $(MSG_IHEX_IMAGE) $(VERBOSE_CMD)$(OBJCOPY) -O ihex $< $@ $(VERBOSE_NL) # Create binary image from ELF output file. -$(BIN): $(TGTFILE) +$(BIN): $(TARGET) @echo $(MSG_BINARY_IMAGE) $(VERBOSE_CMD)$(OBJCOPY) -O binary $< $@ $(VERBOSE_NL) diff --git a/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/config.mk b/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/config.mk index bdc3331c0..4712cdf6b 100644 --- a/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/config.mk +++ b/Demo/lwIP_AVR32_UC3/AT32UC3A/GCC/config.mk @@ -68,7 +68,7 @@ PLATFORM_INC_PATH = \ $(BRDS_PATH)/ # Target name: {*.a|*.elf} -TARGET = lwipdemo.elf +TARGET = $(PART)-lwipdemo.elf # Definitions: [-D name[=definition]...] [-U name...] # Things that might be added to DEFS: diff --git a/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/Debug/Obj/lwipdemo.pbd b/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/Debug/Obj/lwipdemo.pbd new file mode 100644 index 000000000..eae6bf4bd --- /dev/null +++ b/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/Debug/Obj/lwipdemo.pbd @@ -0,0 +1,49 @@ +This is an internal working file generated by the Source Browser. +20:24 19s +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\BasicSMTP.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\BasicTFTP.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\BasicWEB.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\ParTest.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\api_lib.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\api_msg.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\err.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\etharp.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\ethernet.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\ethernetif.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\flash.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\flashc.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\gpio.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\heap_3.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\icmp.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\inet.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\intc.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\ip.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\ip_addr.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\ip_frag.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\led.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\list.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\macb.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\main.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\mem.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\memp.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\netif.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\pbuf.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\pm.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\port.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\queue.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\raw.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\read.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\serial.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\sockets.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\stats.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\sys.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\sys_arch.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tasks.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tc.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tcp.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tcp_in.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tcp_out.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tcpip.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\udp.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\usart.pbi +C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\lwIP_AVR32_UC3\AT32UC3A\IAR\Debug\Obj\write.pbi diff --git a/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.dep b/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.dep new file mode 100644 index 000000000..dcb8fe4f8 --- /dev/null +++ b/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.dep @@ -0,0 +1,1165 @@ + + + + 2 + 3234014960 + + Debug + + $PROJ_DIR$\Debug\Obj\main.pbi + $PROJ_DIR$\Debug\Obj\tcp_in.pbi + $PROJ_DIR$\Debug\Obj\netif.r82 + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\portmacro.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\mem.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\netif.h + $PROJ_DIR$\Debug\Obj\api_msg.pbi + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\tcpip.h + $PROJ_DIR$\..\..\..\Common\include\partest.h + $PROJ_DIR$\..\..\..\..\Source\include\queue.h + $PROJ_DIR$\..\..\UTILS\PREPROCESSOR\mrepeat.h + $PROJ_DIR$\..\..\DRIVERS\PM\pm.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\raw.h + $TOOLKIT_DIR$\inc\stdlib.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\ipv4\lwip\ip_frag.h + $PROJ_DIR$\..\..\..\..\Source\include\FreeRTOS.h + $TOOLKIT_DIR$\inc\avr32\io.h + $TOOLKIT_DIR$\inc\intrinsics.h + $PROJ_DIR$\..\..\UTILS\compiler.h + $PROJ_DIR$\..\..\DRIVERS\USART\usart.h + $TOOLKIT_DIR$\inc\stdio.h + $PROJ_DIR$\..\..\DRIVERS\MACB\macb.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\memp.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\api_msg.h + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\lwipopts.h + $PROJ_DIR$\..\..\..\..\Source\include\portable.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\pbuf.h + $PROJ_DIR$\..\..\UTILS\PREPROCESSOR\preprocessor.h + $PROJ_DIR$\..\..\DRIVERS\TC\tc.h + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\arch\cpu.h + $PROJ_DIR$\..\..\UTILS\PREPROCESSOR\stringz.h + $TOOLKIT_DIR$\inc\DLib_Defaults.h + $PROJ_DIR$\Debug\Obj\flashc.r82 + $TOOLKIT_DIR$\inc\DLib_Product.h + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\arch\sys_arch.h + $PROJ_DIR$\..\..\NETWORK\BasicTFTP\BasicTFTP.h + $PROJ_DIR$\..\..\..\Common\include\serial.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\err.h + $PROJ_DIR$\..\..\..\..\Source\include\projdefs.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\tcp.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\debug.h + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\arch\perf.h + $PROJ_DIR$\..\..\NETWORK\ethernet.h + $PROJ_DIR$\..\..\..\..\Source\include\croutine.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\ipv4\lwip\icmp.h + $TOOLKIT_DIR$\inc\DLib_Threads.h + $PROJ_DIR$\..\..\BOARDS\EVK1100\led.h + $TOOLKIT_DIR$\inc\xencoding_limits.h + $PROJ_DIR$\..\..\BOARDS\board.h + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\arch\cc.h + $PROJ_DIR$\..\..\DRIVERS\FLASHC\flashc.h + $PROJ_DIR$\Debug\Obj\tc.r82 + $TOOLKIT_DIR$\inc\string.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\def.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\udp.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\snmp.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\arch.h + $PROJ_DIR$\..\..\DRIVERS\GPIO\gpio.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\ipv4\lwip\inet.h + $PROJ_DIR$\..\..\..\Common\include\flash.h + $PROJ_DIR$\..\..\BOARDS\EVK1100\evk1100.h + $TOOLKIT_DIR$\inc\yvals.h + $TOOLKIT_DIR$\inc\ysizet.h + $PROJ_DIR$\Debug\Obj\write.r82 + $PROJ_DIR$\..\..\..\..\Source\include\semphr.h + $TOOLKIT_DIR$\inc\ycheck.h + $TOOLKIT_DIR$\inc\yfuns.h + $PROJ_DIR$\Debug\Obj\lwipdemo.pbd + $PROJ_DIR$\Debug\Obj\err.r82 + $PROJ_DIR$\Debug\Obj\api_msg.r82 + $PROJ_DIR$\Debug\Obj\inet.r82 + $PROJ_DIR$\..\..\conf_eth.h + $PROJ_DIR$\Debug\Obj\memp.r82 + $PROJ_DIR$\..\..\..\..\Source\include\list.h + $PROJ_DIR$\Debug\Obj\sys.r82 + $PROJ_DIR$\Debug\Obj\pbuf.r82 + $PROJ_DIR$\Debug\Obj\etharp.pbi + $PROJ_DIR$\Debug\Obj\etharp.r82 + $PROJ_DIR$\Debug\Obj\sys_arch.r82 + $PROJ_DIR$\Debug\Obj\sockets.r82 + $PROJ_DIR$\Debug\Obj\tcp.r82 + $PROJ_DIR$\Debug\Obj\tcp_in.r82 + $PROJ_DIR$\Debug\Obj\tcp_out.r82 + $PROJ_DIR$\Debug\Obj\stats.r82 + $PROJ_DIR$\Debug\Obj\tcpip.r82 + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\exception.s82 + $PROJ_DIR$\..\..\..\..\Source\queue.c + $PROJ_DIR$\..\..\NETWORK\BasicTFTP\BasicTFTP.c + $PROJ_DIR$\Debug\Obj\tcp_out.pbi + $PROJ_DIR$\Debug\Obj\queue.r82 + $PROJ_DIR$\..\..\SERIAL\serial.c + $PROJ_DIR$\Debug\Obj\flash.pbi + $PROJ_DIR$\Debug\Obj\memp.pbi + $PROJ_DIR$\Debug\Exe\lwipdemo.d82 + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\memp.c + $PROJ_DIR$\..\..\DRIVERS\USART\usart.c + $PROJ_DIR$\..\..\..\..\Source\portable\MemMang\heap_3.c + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\write.c + $PROJ_DIR$\..\..\DRIVERS\GPIO\gpio.c + $PROJ_DIR$\..\..\BOARDS\EVK1100\led.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\tcp_in.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\ip.c + $PROJ_DIR$\Debug\Obj\sys.pbi + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\raw.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\inet.c + $PROJ_DIR$\..\..\..\..\Source\list.c + $PROJ_DIR$\Debug\Obj\BasicTFTP.pbi + $PROJ_DIR$\Debug\Obj\BasicWEB.pbi + $PROJ_DIR$\Debug\Obj\macb.r82 + $PROJ_DIR$\Debug\Obj\intc.r82 + $PROJ_DIR$\..\..\DRIVERS\PM\pm.c + $PROJ_DIR$\..\..\DRIVERS\INTC\intc.c + $PROJ_DIR$\..\..\DRIVERS\MACB\macb.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\tcp.c + $PROJ_DIR$\..\..\NETWORK\ethernet.c + $PROJ_DIR$\..\..\DRIVERS\FLASHC\flashc.c + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\ethernetif.c + $PROJ_DIR$\..\..\NETWORK\BasicWEB\BasicWEB.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\tcpip.c + $PROJ_DIR$\Debug\Obj\read.r82 + $PROJ_DIR$\..\..\FreeRTOSConfig.h + $PROJ_DIR$\Debug\Obj\gpio.r82 + $PROJ_DIR$\..\..\PARTEST\ParTest.c + $PROJ_DIR$\..\..\DRIVERS\TC\tc.c + $PROJ_DIR$\Debug\Obj\led.r82 + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\pbuf.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\stats.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\mem.c + $PROJ_DIR$\..\..\main.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\netif.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\ipv4\lwip\ip_addr.h + $PROJ_DIR$\Debug\Obj\BasicSMTP.pbi + $PROJ_DIR$\Debug\Obj\tcpip.pbi + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\stats.h + $PROJ_DIR$\Debug\Obj\mem.pbi + $PROJ_DIR$\Debug\Obj\ethernet.pbi + $PROJ_DIR$\Debug\Obj\ip.r82 + $PROJ_DIR$\Debug\Obj\list.pbi + $PROJ_DIR$\Debug\Obj\usart.pbi + $PROJ_DIR$\Debug\Obj\macb.pbi + $PROJ_DIR$\Debug\Obj\pm.pbi + $PROJ_DIR$\Debug\Obj\flashc.pbi + $PROJ_DIR$\Debug\Obj\read.pbi + $PROJ_DIR$\Debug\Obj\trampoline.r82 + $PROJ_DIR$\Debug\Obj\err.pbi + $PROJ_DIR$\Debug\Obj\tc.pbi + $PROJ_DIR$\Debug\Obj\led.pbi + $PROJ_DIR$\Debug\Obj\exception.r82 + $PROJ_DIR$\Debug\Obj\serial.r82 + $PROJ_DIR$\Debug\Obj\ParTest.r82 + $PROJ_DIR$\Debug\Obj\main.r82 + $PROJ_DIR$\Debug\Obj\ethernet.r82 + $PROJ_DIR$\Debug\Obj\BasicWEB.r82 + $PROJ_DIR$\Debug\Obj\BasicTFTP.r82 + $PROJ_DIR$\Debug\Obj\BasicSMTP.r82 + $PROJ_DIR$\Debug\Obj\heap_3.pbi + $PROJ_DIR$\..\..\..\..\Source\include\task.h + $PROJ_DIR$\Debug\Obj\flash.r82 + $PROJ_DIR$\Debug\Obj\tcp.pbi + $PROJ_DIR$\Debug\Obj\sockets.pbi + $PROJ_DIR$\Debug\Obj\pbuf.pbi + $PROJ_DIR$\Debug\Obj\raw.pbi + $PROJ_DIR$\Debug\Obj\ip.pbi + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\lwip\opt.h + $PROJ_DIR$\Debug\Obj\queue.pbi + $PROJ_DIR$\Debug\Obj\intc.pbi + $PROJ_DIR$\Debug\Obj\write.pbi + $PROJ_DIR$\Debug\Obj\tasks.pbi + $PROJ_DIR$\Debug\Obj\port.pbi + $PROJ_DIR$\Debug\Obj\udp.r82 + $PROJ_DIR$\..\..\..\..\Source\tasks.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\icmp.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\api_msg.c + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\read.c + $PROJ_DIR$\..\..\SERVICES\USB\CLASS\DFU\EXAMPLES\ISP\BOOT\trampoline.s82 + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\sockets.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\sys.c + $PROJ_DIR$\..\..\..\Common\Minimal\flash.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\netif\etharp.c + $PROJ_DIR$\Debug\Obj\gpio.pbi + $PROJ_DIR$\Debug\Obj\ip_frag.r82 + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\tcp_out.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\api_lib.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\udp.c + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\port.c + $PROJ_DIR$\..\..\NETWORK\BasicSMTP\BasicSMTP.c + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\sys_arch.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\err.c + $PROJ_DIR$\Debug\Obj\api_lib.pbi + $PROJ_DIR$\Debug\Obj\raw.r82 + $PROJ_DIR$\Debug\Obj\sys_arch.pbi + $PROJ_DIR$\Debug\Obj\icmp.pbi + $PROJ_DIR$\Debug\Obj\tasks.r82 + $PROJ_DIR$\Debug\Obj\serial.pbi + $PROJ_DIR$\Debug\Obj\inet.pbi + $PROJ_DIR$\Debug\Obj\api_lib.r82 + $PROJ_DIR$\Debug\Obj\ip_frag.pbi + $PROJ_DIR$\Debug\Obj\netif.pbi + $PROJ_DIR$\Debug\Obj\ip_addr.pbi + $PROJ_DIR$\Debug\Obj\udp.pbi + $PROJ_DIR$\Debug\Obj\stats.pbi + $PROJ_DIR$\Debug\Obj\ethernetif.pbi + $PROJ_DIR$\Debug\Obj\mem.r82 + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\netif\loopif.h + $PROJ_DIR$\Debug\Obj\icmp.r82 + $PROJ_DIR$\Debug\Obj\ethernetif.r82 + $PROJ_DIR$\Debug\Obj\ip_addr.r82 + $TOOLKIT_DIR$\inc\stddef.h + $PROJ_DIR$\Debug\Obj\ParTest.pbi + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\sys.h + $PROJ_DIR$\Debug\Obj\list.r82 + $PROJ_DIR$\..\..\UTILS\PREPROCESSOR\tpaste.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\ipv4\lwip\ip.h + $PROJ_DIR$\Debug\Obj\usart.r82 + $PROJ_DIR$\Debug\Obj\heap_3.r82 + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\netif\etharp.h + $PROJ_DIR$\Debug\Obj\port.r82 + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\api.h + $PROJ_DIR$\Debug\Obj\pm.r82 + $PROJ_DIR$\..\..\DRIVERS\INTC\intc.h + $PROJ_DIR$\..\..\NETWORK\BasicWEB\BasicWEB.h + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\IAR\errno.h + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\include\lwip\sockets.h + + + [ROOT_NODE] + + + XLINK + 93 + + + + + $PROJ_DIR$\Debug\Obj\lwipdemo.pbd + + + BILINK + 132 107 108 210 190 6 145 76 136 203 91 142 180 156 193 196 166 163 200 198 147 138 140 0 135 92 199 161 141 169 165 162 143 195 160 202 103 192 168 146 159 1 88 133 201 139 167 + + + + + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\exception.s82 + + + AAVR32 + 148 + + + + + $PROJ_DIR$\..\..\..\..\Source\queue.c + + + ICCAVR32 + 89 + + + BICOMP + 165 + + + + + BICOMP + 13 65 61 31 33 47 45 62 52 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 43 + + + + + $PROJ_DIR$\..\..\NETWORK\BasicTFTP\BasicTFTP.c + + + ICCAVR32 + 154 + + + BICOMP + 107 + + + + + BICOMP + 52 65 61 31 33 47 45 62 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 8 35 219 164 24 71 40 49 29 26 211 34 9 64 214 56 53 131 37 12 58 54 39 4 44 5 7 23 22 134 205 224 + + + + + $PROJ_DIR$\..\..\SERIAL\serial.c + + + ICCAVR32 + 149 + + + BICOMP + 195 + + + + + BICOMP + 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 9 157 73 36 57 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\ip_addr.c + + + ICCAVR32 + 208 + + + BICOMP + 200 + + + + + BICOMP + 131 56 49 29 58 164 24 71 40 26 5 37 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\memp.c + + + ICCAVR32 + 72 + + + BICOMP + 92 + + + + + BICOMP + 164 24 71 40 49 29 22 26 54 56 58 131 214 53 37 12 39 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 4 44 5 219 23 7 134 + + + + + $PROJ_DIR$\..\..\DRIVERS\USART\usart.c + + + ICCAVR32 + 215 + + + BICOMP + 139 + + + + + BICOMP + 19 16 18 17 27 213 30 10 + + + + + $PROJ_DIR$\..\..\..\..\Source\portable\MemMang\heap_3.c + + + ICCAVR32 + 216 + + + BICOMP + 156 + + + + + BICOMP + 13 65 61 31 33 47 45 62 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 + + + + + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\write.c + + + ICCAVR32 + 63 + + + BICOMP + 167 + + + + + BICOMP + 66 62 65 61 31 33 47 45 16 19 18 17 27 213 30 10 + + + + + $PROJ_DIR$\..\..\DRIVERS\GPIO\gpio.c + + + ICCAVR32 + 122 + + + BICOMP + 180 + + + + + BICOMP + 57 16 + + + + + $PROJ_DIR$\..\..\BOARDS\EVK1100\led.c + + + ICCAVR32 + 125 + + + BICOMP + 147 + + + + + BICOMP + 16 27 213 30 10 18 17 60 46 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\tcp_in.c + + + ICCAVR32 + 81 + + + BICOMP + 1 + + + + + BICOMP + 53 49 29 164 24 71 40 131 56 5 37 58 26 4 22 39 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 214 44 134 41 55 54 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\ip.c + + + ICCAVR32 + 137 + + + BICOMP + 163 + + + + + BICOMP + 164 24 71 40 49 29 53 4 56 214 26 131 37 14 5 58 44 12 54 39 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 134 22 41 55 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\raw.c + + + ICCAVR32 + 191 + + + BICOMP + 162 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 53 22 58 56 26 131 5 37 12 214 134 4 41 55 54 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\inet.c + + + ICCAVR32 + 70 + + + BICOMP + 196 + + + + + BICOMP + 164 24 71 40 49 29 56 53 58 26 131 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 + + + + + $PROJ_DIR$\..\..\..\..\Source\list.c + + + ICCAVR32 + 212 + + + BICOMP + 138 + + + + + BICOMP + 13 65 61 31 33 47 45 62 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 73 + + + + + $PROJ_DIR$\..\..\DRIVERS\PM\pm.c + + + ICCAVR32 + 220 + + + BICOMP + 141 + + + + + BICOMP + 11 16 18 17 27 213 30 10 + + + + + $PROJ_DIR$\..\..\DRIVERS\INTC\intc.c + + + ICCAVR32 + 110 + + + BICOMP + 166 + + + + + BICOMP + 16 18 17 27 213 30 10 221 + + + + + $PROJ_DIR$\..\..\DRIVERS\MACB\macb.c + + + ICCAVR32 + 109 + + + BICOMP + 140 + + + + + BICOMP + 20 65 61 31 33 47 45 62 52 16 15 209 38 121 48 60 18 17 27 213 30 10 25 3 221 157 73 64 9 21 34 71 57 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\tcp.c + + + ICCAVR32 + 80 + + + BICOMP + 159 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 53 4 56 22 55 5 37 131 58 26 54 214 39 211 34 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 44 + + + + + $PROJ_DIR$\..\..\NETWORK\ethernet.c + + + ICCAVR32 + 152 + + + BICOMP + 136 + + + + + BICOMP + 52 65 61 31 33 47 45 62 71 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 8 36 42 21 34 9 64 57 222 35 211 49 29 164 24 40 219 26 214 56 53 131 37 12 58 54 39 4 44 5 7 23 22 134 205 + + + + + $PROJ_DIR$\..\..\DRIVERS\FLASHC\flashc.c + + + ICCAVR32 + 32 + + + BICOMP + 142 + + + + + BICOMP + 16 209 65 61 31 33 47 45 62 18 17 27 213 30 10 50 + + + + + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\ethernetif.c + + + ICCAVR32 + 207 + + + BICOMP + 203 + + + + + BICOMP + 164 24 71 40 49 29 53 4 56 26 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 134 22 217 131 5 37 58 214 21 + + + + + $PROJ_DIR$\..\..\NETWORK\BasicWEB\BasicWEB.c + + + ICCAVR32 + 153 + + + BICOMP + 108 + + + + + BICOMP + 20 65 61 31 33 47 45 62 52 71 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 64 9 8 36 219 164 24 40 49 29 26 211 34 214 56 53 131 37 12 58 54 39 4 44 5 7 23 22 134 205 42 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\tcpip.c + + + ICCAVR32 + 84 + + + BICOMP + 133 + + + + + BICOMP + 164 24 71 40 49 29 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 22 26 214 56 53 131 37 14 5 58 54 39 4 44 7 23 219 12 + + + + + $PROJ_DIR$\..\..\PARTEST\ParTest.c + + + ICCAVR32 + 150 + + + BICOMP + 210 + + + + + BICOMP + 16 15 209 65 61 31 33 47 45 62 38 121 48 60 18 17 27 213 30 10 25 3 221 157 73 8 + + + + + $PROJ_DIR$\..\..\DRIVERS\TC\tc.c + + + ICCAVR32 + 51 + + + BICOMP + 146 + + + + + BICOMP + 16 18 17 27 213 30 10 28 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\pbuf.c + + + ICCAVR32 + 75 + + + BICOMP + 161 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 134 4 56 22 53 26 211 34 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 41 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\stats.c + + + ICCAVR32 + 83 + + + BICOMP + 202 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 53 134 4 56 22 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\mem.c + + + ICCAVR32 + 204 + + + BICOMP + 135 + + + + + BICOMP + 52 65 61 31 33 47 45 62 56 49 29 164 24 71 40 53 4 211 34 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 134 22 + + + + + $PROJ_DIR$\..\..\main.c + + + ICCAVR32 + 151 + + + BICOMP + 0 + + + + + BICOMP + 13 65 61 31 33 47 45 62 52 11 16 18 17 27 213 30 10 50 209 15 38 121 48 60 25 3 221 157 73 8 36 42 217 26 49 29 131 56 5 164 24 71 40 37 58 214 53 59 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\netif.c + + + ICCAVR32 + 2 + + + BICOMP + 199 + + + + + BICOMP + 164 24 71 40 49 29 53 131 56 5 37 58 26 39 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 4 214 44 55 54 + + + + + $PROJ_DIR$\..\..\..\..\Source\tasks.c + + + ICCAVR32 + 194 + + + BICOMP + 168 + + + + + BICOMP + 20 65 61 31 33 47 45 62 13 52 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\icmp.c + + + ICCAVR32 + 206 + + + BICOMP + 193 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 44 56 26 131 5 37 58 214 53 134 4 22 55 54 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\api_msg.c + + + ICCAVR32 + 69 + + + BICOMP + 6 + + + + + BICOMP + 164 24 71 40 49 29 56 23 26 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 214 53 131 37 54 58 39 4 44 5 219 12 22 7 + + + + + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\read.c + + + ICCAVR32 + 120 + + + BICOMP + 143 + + + + + BICOMP + 66 62 65 61 31 33 47 45 16 19 18 17 27 213 30 10 + + + + + $PROJ_DIR$\..\..\SERVICES\USB\CLASS\DFU\EXAMPLES\ISP\BOOT\trampoline.s82 + + + AAVR32 + 144 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\sockets.c + + + ICCAVR32 + 79 + + + BICOMP + 160 + + + + + BICOMP + 52 65 61 31 33 47 45 62 223 164 24 71 40 49 29 219 26 211 34 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 214 56 53 131 37 12 58 54 39 4 44 5 224 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\sys.c + + + ICCAVR32 + 74 + + + BICOMP + 103 + + + + + BICOMP + 211 49 29 164 24 71 40 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 53 22 + + + + + $PROJ_DIR$\..\..\..\Common\Minimal\flash.c + + + ICCAVR32 + 158 + + + BICOMP + 91 + + + + + BICOMP + 13 65 61 31 33 47 45 62 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 8 59 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\netif\etharp.c + + + ICCAVR32 + 77 + + + BICOMP + 76 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 58 56 26 131 217 5 37 214 53 134 4 22 55 54 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\tcp_out.c + + + ICCAVR32 + 82 + + + BICOMP + 88 + + + + + BICOMP + 52 65 61 31 33 47 45 62 53 49 29 164 24 71 40 4 56 22 211 34 15 209 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 131 5 37 58 26 39 214 44 134 55 54 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\api_lib.c + + + ICCAVR32 + 197 + + + BICOMP + 190 + + + + + BICOMP + 164 24 71 40 49 29 219 26 211 34 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 9 64 214 56 53 131 37 12 58 54 39 4 44 5 23 22 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\udp.c + + + ICCAVR32 + 170 + + + BICOMP + 201 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 53 22 58 56 26 131 5 37 54 214 44 134 4 41 55 + + + + + $PROJ_DIR$\..\..\..\..\Source\portable\IAR\AVR32_UC3\port.c + + + ICCAVR32 + 218 + + + BICOMP + 169 + + + + + BICOMP + 15 209 65 61 31 33 47 45 62 38 121 48 16 60 18 17 27 213 30 10 25 3 221 157 73 57 28 + + + + + $PROJ_DIR$\..\..\NETWORK\BasicSMTP\BasicSMTP.c + + + ICCAVR32 + 155 + + + BICOMP + 132 + + + + + $PROJ_DIR$\..\..\NETWORK\lwip-port\AT32UC3A\sys_arch.c + + + ICCAVR32 + 78 + + + BICOMP + 192 + + + + + BICOMP + 71 222 3 16 221 18 17 27 213 30 10 35 40 49 29 53 211 164 24 34 15 209 65 61 31 33 47 45 62 38 121 48 60 25 157 73 9 64 4 56 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\core\ipv4\ip_frag.c + + + ICCAVR32 + 181 + + + BICOMP + 198 + + + + + BICOMP + 52 65 61 31 33 47 45 62 164 24 71 40 49 29 214 56 53 26 131 37 14 5 58 55 54 134 4 22 + + + + + $PROJ_DIR$\..\..\..\Common\ethernet\lwIP\api\err.c + + + ICCAVR32 + 68 + + + BICOMP + 145 + + + + + BICOMP + 37 164 24 71 40 49 29 + + + + + [MULTI_TOOL] + XLINK + + + + + diff --git a/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.ewp b/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.ewp index e6f90dd08..4d6b3435d 100644 --- a/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.ewp +++ b/Demo/lwIP_AVR32_UC3/AT32UC3A/IAR/lwipdemo.ewp @@ -200,7 +200,7 @@

unsigned portBASE_TYPE uxQueueMessagesWaiting( xQueueHandle xQueue );
+ *
unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );
* * Return the number of messages stored in a queue. * @@ -730,7 +730,7 @@ signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, void * const pvB * \page uxQueueMessagesWaiting uxQueueMessagesWaiting * \ingroup QueueManagement */ -unsigned portBASE_TYPE uxQueueMessagesWaiting( xQueueHandle xQueue ); +unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue ); /** * queue. h @@ -1153,7 +1153,7 @@ signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle pxQueue, const void * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR * \ingroup QueueManagement */ -signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ); +signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, const void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ); /* diff --git a/Source/include/semphr.h b/Source/include/semphr.h index 18bbb444d..446b0a5a0 100644 --- a/Source/include/semphr.h +++ b/Source/include/semphr.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/include/task.h b/Source/include/task.h index 6535fc8b3..26acbfd8c 100644 --- a/Source/include/task.h +++ b/Source/include/task.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/list.c b/Source/list.c index 67610fe3f..e675535e9 100644 --- a/Source/list.c +++ b/Source/list.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/BCC/16BitDOS/Flsh186/port.c b/Source/portable/BCC/16BitDOS/Flsh186/port.c index 1de35857d..511020ad3 100644 --- a/Source/portable/BCC/16BitDOS/Flsh186/port.c +++ b/Source/portable/BCC/16BitDOS/Flsh186/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/BCC/16BitDOS/Flsh186/prtmacro.h b/Source/portable/BCC/16BitDOS/Flsh186/prtmacro.h index ee3c95a24..f09ea5414 100644 --- a/Source/portable/BCC/16BitDOS/Flsh186/prtmacro.h +++ b/Source/portable/BCC/16BitDOS/Flsh186/prtmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/BCC/16BitDOS/PC/port.c b/Source/portable/BCC/16BitDOS/PC/port.c index 34f692307..d49b6b1cf 100644 --- a/Source/portable/BCC/16BitDOS/PC/port.c +++ b/Source/portable/BCC/16BitDOS/PC/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/BCC/16BitDOS/PC/prtmacro.h b/Source/portable/BCC/16BitDOS/PC/prtmacro.h index baa0715bc..9c962aa91 100644 --- a/Source/portable/BCC/16BitDOS/PC/prtmacro.h +++ b/Source/portable/BCC/16BitDOS/PC/prtmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/BCC/16BitDOS/common/portasm.h b/Source/portable/BCC/16BitDOS/common/portasm.h index 6581198cb..fdc9acef2 100644 --- a/Source/portable/BCC/16BitDOS/common/portasm.h +++ b/Source/portable/BCC/16BitDOS/common/portasm.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/BCC/16BitDOS/common/portcomn.c b/Source/portable/BCC/16BitDOS/common/portcomn.c index 08c3cfe1d..dd7adc3ac 100644 --- a/Source/portable/BCC/16BitDOS/common/portcomn.c +++ b/Source/portable/BCC/16BitDOS/common/portcomn.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/CodeWarrior/HCS12/port.c b/Source/portable/CodeWarrior/HCS12/port.c index ec978ccbc..07a49ed11 100644 --- a/Source/portable/CodeWarrior/HCS12/port.c +++ b/Source/portable/CodeWarrior/HCS12/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/CodeWarrior/HCS12/portmacro.h b/Source/portable/CodeWarrior/HCS12/portmacro.h index 2b702c5ee..afb901527 100644 --- a/Source/portable/CodeWarrior/HCS12/portmacro.h +++ b/Source/portable/CodeWarrior/HCS12/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_AT91FR40008/port.c b/Source/portable/GCC/ARM7_AT91FR40008/port.c index 29a0f3762..11792ad94 100644 --- a/Source/portable/GCC/ARM7_AT91FR40008/port.c +++ b/Source/portable/GCC/ARM7_AT91FR40008/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_AT91FR40008/portISR.c b/Source/portable/GCC/ARM7_AT91FR40008/portISR.c index 2e2f01443..60f9d6e0c 100644 --- a/Source/portable/GCC/ARM7_AT91FR40008/portISR.c +++ b/Source/portable/GCC/ARM7_AT91FR40008/portISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_AT91FR40008/portmacro.h b/Source/portable/GCC/ARM7_AT91FR40008/portmacro.h index ff2b8dc16..03870c443 100644 --- a/Source/portable/GCC/ARM7_AT91FR40008/portmacro.h +++ b/Source/portable/GCC/ARM7_AT91FR40008/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_AT91SAM7S/port.c b/Source/portable/GCC/ARM7_AT91SAM7S/port.c index c945f130e..6c2c9dbec 100644 --- a/Source/portable/GCC/ARM7_AT91SAM7S/port.c +++ b/Source/portable/GCC/ARM7_AT91SAM7S/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_AT91SAM7S/portISR.c b/Source/portable/GCC/ARM7_AT91SAM7S/portISR.c index d575864bc..e5582cc19 100644 --- a/Source/portable/GCC/ARM7_AT91SAM7S/portISR.c +++ b/Source/portable/GCC/ARM7_AT91SAM7S/portISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h b/Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h index e9257d61c..53fc77d0c 100644 --- a/Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h +++ b/Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_LPC2000/port.c b/Source/portable/GCC/ARM7_LPC2000/port.c index 817c7ef77..844bed489 100644 --- a/Source/portable/GCC/ARM7_LPC2000/port.c +++ b/Source/portable/GCC/ARM7_LPC2000/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_LPC2000/portISR.c b/Source/portable/GCC/ARM7_LPC2000/portISR.c index e0f1e7335..fe2316a38 100644 --- a/Source/portable/GCC/ARM7_LPC2000/portISR.c +++ b/Source/portable/GCC/ARM7_LPC2000/portISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_LPC2000/portmacro.h b/Source/portable/GCC/ARM7_LPC2000/portmacro.h index e9257d61c..53fc77d0c 100644 --- a/Source/portable/GCC/ARM7_LPC2000/portmacro.h +++ b/Source/portable/GCC/ARM7_LPC2000/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM7_LPC23xx/port.c b/Source/portable/GCC/ARM7_LPC23xx/port.c index d9a843e0d..46cac787a 100644 --- a/Source/portable/GCC/ARM7_LPC23xx/port.c +++ b/Source/portable/GCC/ARM7_LPC23xx/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -98,7 +98,7 @@ portSTACK_TYPE *pxOriginalTOS; *pxTopOfStack = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE; pxTopOfStack--; - *pxTopOfStack = ( portSTACK_TYPE ) 0xaaaaaaaa; /* R14 */ + *pxTopOfStack = ( portSTACK_TYPE ) 0x00000000; /* R14 */ pxTopOfStack--; *pxTopOfStack = ( portSTACK_TYPE ) pxOriginalTOS; /* Stack used when task starts goes in R13. */ pxTopOfStack--; @@ -223,7 +223,7 @@ unsigned portLONG ulCompareMatch; } #endif - VICVectPriority4 = 1; + VICVectCntl4 = 1; /* Start the timer - interrupts are disabled when this function is called so it is okay to do this here. */ diff --git a/Source/portable/GCC/ARM7_LPC23xx/portISR.c b/Source/portable/GCC/ARM7_LPC23xx/portISR.c index 9a743ba07..d534df8d1 100644 --- a/Source/portable/GCC/ARM7_LPC23xx/portISR.c +++ b/Source/portable/GCC/ARM7_LPC23xx/portISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -108,9 +108,6 @@ void vPortYieldProcessor( void ) void vNonPreemptiveTick( void ) __attribute__ ((interrupt ("IRQ"))); void vNonPreemptiveTick( void ) { - - FIO2SET |= (1<<0); - vTaskIncrementTick(); T0IR = 2; VICVectAddr = portCLEAR_VIC_INTERRUPT; @@ -133,7 +130,7 @@ void vPortYieldProcessor( void ) /* Ready for the next interrupt. */ T0IR = 2; - VICAddress = portCLEAR_VIC_INTERRUPT; + VICVectAddr = portCLEAR_VIC_INTERRUPT; /* Restore the context of the new task. */ portRESTORE_CONTEXT(); diff --git a/Source/portable/GCC/ARM7_LPC23xx/portmacro.h b/Source/portable/GCC/ARM7_LPC23xx/portmacro.h index 281f6cea4..c068fcb77 100644 --- a/Source/portable/GCC/ARM7_LPC23xx/portmacro.h +++ b/Source/portable/GCC/ARM7_LPC23xx/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ARM_CM3/port.c b/Source/portable/GCC/ARM_CM3/port.c index 59ba1122a..c7ce3b826 100644 --- a/Source/portable/GCC/ARM_CM3/port.c +++ b/Source/portable/GCC/ARM_CM3/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -38,6 +38,11 @@ + Reduced the code used to setup the initial stack frame. + The kernel no longer has to install or handle the fault interrupt. + + Change from V4.4.0: + + + Introduced usage of configKERNEL_INTERRUPT_PRIORITY macro to set the + interrupt priority used by the kernel. */ @@ -49,23 +54,32 @@ #include "FreeRTOS.h" #include "task.h" +/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is +defined. The value should also ensure backward compatibility. +FreeRTOS.org versions prior to V4.4.0 did not include this definition. */ +#ifndef configKERNEL_INTERRUPT_PRIORITY + #define configKERNEL_INTERRUPT_PRIORITY 255 +#endif + /* Constants required to manipulate the NVIC. */ #define portNVIC_SYSTICK_CTRL ( ( volatile unsigned portLONG *) 0xe000e010 ) #define portNVIC_SYSTICK_LOAD ( ( volatile unsigned portLONG *) 0xe000e014 ) #define portNVIC_INT_CTRL ( ( volatile unsigned portLONG *) 0xe000ed04 ) #define portNVIC_SYSPRI2 ( ( volatile unsigned portLONG *) 0xe000ed20 ) -#define portNVIC_SYSPRI1 ( ( volatile unsigned portLONG *) 0xe000ed1c ) #define portNVIC_SYSTICK_CLK 0x00000004 #define portNVIC_SYSTICK_INT 0x00000002 #define portNVIC_SYSTICK_ENABLE 0x00000001 #define portNVIC_PENDSVSET 0x10000000 -#define portNVIC_PENDSV_PRI 0x00ff0000 -#define portNVIC_SVCALL_PRI 0xff000000 -#define portNVIC_SYSTICK_PRI 0xff000000 +#define portNVIC_PENDSV_PRI ( ( ( unsigned portLONG ) configKERNEL_INTERRUPT_PRIORITY ) << 16 ) +#define portNVIC_SYSTICK_PRI ( ( ( unsigned portLONG ) configKERNEL_INTERRUPT_PRIORITY ) << 24 ) /* Constants required to set up the initial stack. */ #define portINITIAL_XPSR ( 0x01000000 ) +/* The priority used by the kernel is assigned to a variable to make access +from inline assembler easier. */ +const unsigned portLONG ulKernelPriority = configKERNEL_INTERRUPT_PRIORITY; + /* Each task maintains its own interrupt status in the critical nesting variable. */ unsigned portBASE_TYPE uxCriticalNesting = 0xaaaaaaaa; @@ -100,7 +114,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxTopOfStack--; *pxTopOfStack = ( portSTACK_TYPE ) pxCode; /* PC */ pxTopOfStack--; - *pxTopOfStack = 0xfffffffd; /* LR */ + *pxTopOfStack = 0; /* LR */ pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ *pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R0 */ pxTopOfStack -= 9; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ @@ -129,7 +143,7 @@ void prvSetMSP( unsigned long ulValue ) */ portBASE_TYPE xPortStartScheduler( void ) { - /* Make PendSV, CallSV and SysTick the lowest priority interrupts. */ + /* Make PendSV, CallSV and SysTick the same priroity as the kernel. */ *(portNVIC_SYSPRI2) |= portNVIC_PENDSV_PRI; *(portNVIC_SYSPRI2) |= portNVIC_SYSTICK_PRI; @@ -193,33 +207,26 @@ void xPortPendSVHandler( void ) " mrs r0, psp \n" " cbz r0, no_save \n" " \n" /* Save the context into the TCB. */ - " sub r0, #0x20 \n" - " stm r0, {r4-r11} \n" - " nop \n" + " stmdb r0!, {r4-r11} \n" " sub r0, #0x04 \n" " ldr r1, uxCriticalNestingConst \n" + " ldr r2, pxCurrentTCBConst \n" " ldr r1, [r1] \n" - " stm r0, {r1} \n" - " ldr r1, pxCurrentTCBConst \n" - " ldr r1, [r1] \n" - " str r0, [r1] \n" + " ldr r2, [r2] \n" + " str r1, [r0] \n" + " str r0, [r2] \n" " \n" "no_save:\n" - " ldr r0, vTaskSwitchContextConst \n" /* Find the task to execute. */ " push {r14} \n" - " cpsid i \n" - " blx r0 \n" - " cpsie i \n" + " bl vPortSwitchContext \n" " pop {r14} \n" " \n" /* Restore the context. */ " ldr r1, pxCurrentTCBConst \n" " ldr r1, [r1] \n" " ldr r0, [r1] \n" - " ldm r0, {r1, r4-r11} \n" - " nop \n" + " ldmia r0!, {r1, r4-r11} \n" " ldr r2, uxCriticalNestingConst \n" " str r1, [r2] \n" - " add r0, #0x24 \n" " msr psp, r0 \n" " orr r14, #0xd \n" " \n" /* Exit with interrupts in the state required by the task. */ @@ -227,11 +234,12 @@ void xPortPendSVHandler( void ) " bx r14 \n" " \n" "sv_disable_interrupts: \n" - " cpsid i \n" + " ldr r1, =ulKernelPriority \n" + " ldr r1, [r1] \n" + " msr basepri, r1 \n" " bx r14 \n" " \n" " .align 2 \n" - "vTaskSwitchContextConst: .word vTaskSwitchContext \n" "pxCurrentTCBConst: .word pxCurrentTCB \n" "uxCriticalNestingConst: .word uxCriticalNesting \n" ); @@ -246,11 +254,8 @@ void xPortSysTickHandler( void ) /* Call the scheduler tick function. */ __asm volatile ( - " ldr r0, vTaskIncrementTickConst \n" " push {r14} \n" - " cpsid i \n" - " blx r0 \n" - " cpsie i \n" + " bl vPortIncrementTick \n" " pop {r14}" ); @@ -259,8 +264,7 @@ void xPortSysTickHandler( void ) __asm volatile ( " push {r14} \n" - " ldr r0, vPortYieldFromISRConst2 \n" - " blx r0 \n" + " bl vPortYieldFromISR \n" " pop {r14}" ); #endif @@ -277,12 +281,12 @@ void xPortSysTickHandler( void ) __asm volatile ( "tick_disable_interrupts: \n" - " cpsid i \n" + " ldr r1, =ulKernelPriority \n" + " ldr r1, [r1] \n" + " msr basepri, r1 \n" " bx r14 \n" " \n" " .align 2 \n" - "vPortYieldFromISRConst2: .word vPortYieldFromISR\n" - "vTaskIncrementTickConst: .word vTaskIncrementTick\n" "uxCriticalNestingConst2: .word uxCriticalNesting" ); } @@ -298,5 +302,22 @@ void prvSetupTimerInterrupt( void ) *(portNVIC_SYSTICK_LOAD) = configCPU_CLOCK_HZ / configTICK_RATE_HZ; *(portNVIC_SYSTICK_CTRL) = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE; } +/*-----------------------------------------------------------*/ + +void vPortSwitchContext( void ) +{ + vPortSetInterruptMask(); + vTaskSwitchContext(); + vPortClearInterruptMask(); +} +/*-----------------------------------------------------------*/ + +void vPortIncrementTick( void ) +{ + vPortSetInterruptMask(); + vTaskIncrementTick(); + vPortClearInterruptMask(); +} +/*-----------------------------------------------------------*/ diff --git a/Source/portable/GCC/ARM_CM3/portmacro.h b/Source/portable/GCC/ARM_CM3/portmacro.h index 10de80e10..d4f236407 100644 --- a/Source/portable/GCC/ARM_CM3/portmacro.h +++ b/Source/portable/GCC/ARM_CM3/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -33,6 +33,12 @@ *************************************************************************** */ +/* + Change from V4.4.0: + + + Introduced usage of configKERNEL_INTERRUPT_PRIORITY macro to set the + interrupt priority used by the kernel. +*/ #ifndef PORTMACRO_H #define PORTMACRO_H @@ -83,12 +89,35 @@ extern void vPortYieldFromISR( void ); /* Critical section management. */ -extern void vPortEnableInterrupts( void ); +#define vPortSetInterruptMask() \ + __asm volatile \ + ( \ + " push { r0 } \n" \ + " ldr r0, =ulKernelPriority \n" \ + " ldr r0, [r0] \n" \ + " msr basepri, r0 \n" \ + " pop { r0 } " \ + ) + +/*-----------------------------------------------------------*/ + +#define vPortClearInterruptMask() \ + __asm volatile \ + ( \ + " push { r0 } \n" \ + " mov r0, #0 \n" \ + " msr basepri, r0 \n" \ + " pop { r0 } " \ + ) + +/*-----------------------------------------------------------*/ + + extern void vPortEnterCritical( void ); extern void vPortExitCritical( void ); -#define portDISABLE_INTERRUPTS() __asm volatile( "cpsid i" ) -#define portENABLE_INTERRUPTS() __asm volatile( "cpsie i" ) +#define portDISABLE_INTERRUPTS() vPortSetInterruptMask(); +#define portENABLE_INTERRUPTS() vPortClearInterruptMask(); #define portENTER_CRITICAL() vPortEnterCritical() #define portEXIT_CRITICAL() vPortExitCritical() /*-----------------------------------------------------------*/ diff --git a/Source/portable/GCC/ATMega323/port.c b/Source/portable/GCC/ATMega323/port.c index a2bb2b6f4..daf057149 100644 --- a/Source/portable/GCC/ATMega323/port.c +++ b/Source/portable/GCC/ATMega323/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/ATMega323/portmacro.h b/Source/portable/GCC/ATMega323/portmacro.h index 37d4415da..822964f21 100644 --- a/Source/portable/GCC/ATMega323/portmacro.h +++ b/Source/portable/GCC/ATMega323/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/AVR32_UC3/port.c b/Source/portable/GCC/AVR32_UC3/port.c index fed014884..c9f9ccb04 100644 --- a/Source/portable/GCC/AVR32_UC3/port.c +++ b/Source/portable/GCC/AVR32_UC3/port.c @@ -13,7 +13,7 @@ *****************************************************************************/ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -75,6 +75,8 @@ volatile unsigned portLONG ulCriticalNesting = 9999UL; #if( configTICK_USE_TC==0 ) static void prvScheduleNextTick( void ); +#else + static void prvClearTcInt( void ); #endif /* Setup the timer to generate the tick interrupts. */ @@ -203,7 +205,7 @@ __attribute__((__naked__)) static void vTick( void ) #if( configTICK_USE_TC==1 ) /* Clear the interrupt flag. */ - AVR32_TC.channel[configTICK_TC_CHANNEL].sr; + prvClearTcInt(); #else /* Schedule the COUNT&COMPARE match interrupt in (configCPU_CLOCK_HZ/configTICK_RATE_HZ) clock cycles from now. */ @@ -234,7 +236,7 @@ __attribute__((__naked__)) void SCALLYield( void ) different optimisation levels. The interrupt flags can therefore not always be saved to the stack. Instead the critical section nesting level is stored in a variable, which is then saved as part of the stack context. */ -void vPortEnterCritical( void ) +__attribute__((__noinline__)) void vPortEnterCritical( void ) { /* Disable interrupts */ portDISABLE_INTERRUPTS(); @@ -246,7 +248,7 @@ void vPortEnterCritical( void ) } /*-----------------------------------------------------------*/ -void vPortExitCritical( void ) +__attribute__((__noinline__)) void vPortExitCritical( void ) { if(ulCriticalNesting > portNO_CRITICAL_NESTING) { @@ -334,7 +336,7 @@ clock cycles from now. */ Set_system_register(AVR32_COMPARE, lCycles); } - static void prvScheduleNextTick(void) + __attribute__((__noinline__)) static void prvScheduleNextTick(void) { unsigned long lCycles, lCount; @@ -353,6 +355,11 @@ clock cycles from now. */ } Set_system_register(AVR32_COMPARE, lCycles); } +#else + __attribute__((__noinline__)) static void prvClearTcInt(void) + { + AVR32_TC.channel[configTICK_TC_CHANNEL].sr; + } #endif /*-----------------------------------------------------------*/ diff --git a/Source/portable/GCC/AVR32_UC3/portmacro.h b/Source/portable/GCC/AVR32_UC3/portmacro.h index 062074f4f..9e7bab927 100644 --- a/Source/portable/GCC/AVR32_UC3/portmacro.h +++ b/Source/portable/GCC/AVR32_UC3/portmacro.h @@ -13,7 +13,7 @@ *****************************************************************************/ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/H8S2329/port.c b/Source/portable/GCC/H8S2329/port.c index bd4a1cc04..56f95d704 100644 --- a/Source/portable/GCC/H8S2329/port.c +++ b/Source/portable/GCC/H8S2329/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/H8S2329/portmacro.h b/Source/portable/GCC/H8S2329/portmacro.h index ab956431b..fa17bbf0f 100644 --- a/Source/portable/GCC/H8S2329/portmacro.h +++ b/Source/portable/GCC/H8S2329/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/HCS12/port.c b/Source/portable/GCC/HCS12/port.c index e61e9f52a..1f7e833ae 100644 --- a/Source/portable/GCC/HCS12/port.c +++ b/Source/portable/GCC/HCS12/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/HCS12/portmacro.h b/Source/portable/GCC/HCS12/portmacro.h index 56a37414e..c583dabe6 100644 --- a/Source/portable/GCC/HCS12/portmacro.h +++ b/Source/portable/GCC/HCS12/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/MSP430F449/port.c b/Source/portable/GCC/MSP430F449/port.c index 594be3443..fb64ee6e3 100644 --- a/Source/portable/GCC/MSP430F449/port.c +++ b/Source/portable/GCC/MSP430F449/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/MSP430F449/portmacro.h b/Source/portable/GCC/MSP430F449/portmacro.h index e521192e2..f7cfc83fe 100644 --- a/Source/portable/GCC/MSP430F449/portmacro.h +++ b/Source/portable/GCC/MSP430F449/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/MicroBlaze/port.c b/Source/portable/GCC/MicroBlaze/port.c index 42170178d..b75dcd7a4 100644 --- a/Source/portable/GCC/MicroBlaze/port.c +++ b/Source/portable/GCC/MicroBlaze/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/MicroBlaze/portmacro.h b/Source/portable/GCC/MicroBlaze/portmacro.h index edea6d6ac..bfdc8d73e 100644 --- a/Source/portable/GCC/MicroBlaze/portmacro.h +++ b/Source/portable/GCC/MicroBlaze/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/STR75x/port.c b/Source/portable/GCC/STR75x/port.c index c1c056f28..d3215fcfe 100644 --- a/Source/portable/GCC/STR75x/port.c +++ b/Source/portable/GCC/STR75x/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/STR75x/portISR.c b/Source/portable/GCC/STR75x/portISR.c index 02f5fb827..b7698bdba 100644 --- a/Source/portable/GCC/STR75x/portISR.c +++ b/Source/portable/GCC/STR75x/portISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/GCC/STR75x/portmacro.h b/Source/portable/GCC/STR75x/portmacro.h index f044e2011..a86ce4288 100644 --- a/Source/portable/GCC/STR75x/portmacro.h +++ b/Source/portable/GCC/STR75x/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/ARM_CM3/port.c b/Source/portable/IAR/ARM_CM3/port.c index 0c81f993f..b20bc2095 100644 --- a/Source/portable/IAR/ARM_CM3/port.c +++ b/Source/portable/IAR/ARM_CM3/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -65,7 +65,7 @@ #define portINITIAL_XPSR ( 0x01000000 ) /* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is -defined. The value zero should also ensure backward compatibility. +defined. The value 255 should also ensure backward compatibility. FreeRTOS.org versions prior to V4.3.0 did not include this definition. */ #ifndef configKERNEL_INTERRUPT_PRIORITY #define configKERNEL_INTERRUPT_PRIORITY 255 diff --git a/Source/portable/IAR/ARM_CM3/portasm.s b/Source/portable/IAR/ARM_CM3/portasm.s index 35edcf159..7a3621489 100644 --- a/Source/portable/IAR/ARM_CM3/portasm.s +++ b/Source/portable/IAR/ARM_CM3/portasm.s @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -42,8 +42,8 @@ #include -/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is -defined. The value zero should also ensure backward compatibility. +/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is +defined. The value zero should also ensure backward compatibility. FreeRTOS.org versions prior to V4.3.0 did not include this definition. */ #ifndef configKERNEL_INTERRUPT_PRIORITY #define configKERNEL_INTERRUPT_PRIORITY 0 @@ -79,60 +79,53 @@ vSetMSP /*-----------------------------------------------------------*/ xPortPendSVHandler: - mrs r0, psp - cbz r0, no_save - /* Save the context into the TCB. */ - sub r0, r0, #0x20 - stm r0, {r4-r11} - nop - sub r0, r0, #0x04 + mrs r0, psp + cbz r0, no_save + /* Save the context into the TCB. */ + stmdb r0!, {r4-r11} + sub r0, r0, #0x04 ldr r1, =uxCriticalNesting - ldr r1, [r1] - str R1, [r0, #0x00] - ldr r1, =pxCurrentTCB - ldr r1, [r1] - str r0, [r1] + ldr r2, =pxCurrentTCB + ldr r1, [r1] + ldr r2, [r2] + str r1, [r0] + str r0, [r2] + no_save: - ldr r0, =vPortSwitchContext - push {r14} - blx r0 - pop {r14} - - /* Restore the context. */ + push {r14} + bl vPortSwitchContext + pop {r14} + /* Restore the context. */ ldr r1, =pxCurrentTCB - ldr r1, [r1] - ldr r0, [r1] - ldm r0, {r1, r4-r11} - nop + ldr r1, [r1] + ldr r0, [r1] + ldmia r0!, {r1, r4-r11} ldr r2, =uxCriticalNesting - str r1, [r2] - add r0, r0, #0x24 - msr psp, r0 - orr r14, r14, #0xd - /* Exit with interrupts in the state required by the task. */ - cbnz r1, sv_disable_interrupts - bx r14 - -sv_disable_interrupts: + str r1, [r2] + msr psp, r0 + orr r14, r14, #0xd + /* Exit with interrupts in the state required by the task. */ + cbnz r1, sv_disable_interrupts + bx r14 + +sv_disable_interrupts: mov r1, #configKERNEL_INTERRUPT_PRIORITY msr basepri, R1 + bx r14 - bx r14 /*-----------------------------------------------------------*/ xPortSysTickHandler: /* Call the scheduler tick function. */ - ldr r0, =vPortIncrementTick push {r14} - blx r0 + bl vPortIncrementTick pop {r14} /* If using preemption, also force a context switch. */ #if configUSE_PREEMPTION == 1 push {r14} - ldr r0, =vPortYieldFromISR - blx r0 + bl vPortYieldFromISR pop {r14} #endif diff --git a/Source/portable/IAR/ARM_CM3/portmacro.h b/Source/portable/IAR/ARM_CM3/portmacro.h index 1e0f5946d..fe4617fc4 100644 --- a/Source/portable/IAR/ARM_CM3/portmacro.h +++ b/Source/portable/IAR/ARM_CM3/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -90,7 +90,6 @@ extern void vPortYieldFromISR( void ); /* Critical section management. */ -extern void vPortEnableInterrupts( void ); extern void vPortEnterCritical( void ); extern void vPortExitCritical( void ); extern void vPortSetInterruptMask( void ); diff --git a/Source/portable/IAR/ATMega323/port.c b/Source/portable/IAR/ATMega323/port.c index fbd390767..5286b648d 100644 --- a/Source/portable/IAR/ATMega323/port.c +++ b/Source/portable/IAR/ATMega323/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/ATMega323/portmacro.h b/Source/portable/IAR/ATMega323/portmacro.h index 50e916190..78d360555 100644 --- a/Source/portable/IAR/ATMega323/portmacro.h +++ b/Source/portable/IAR/ATMega323/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/ATMega323/portmacro.s90 b/Source/portable/IAR/ATMega323/portmacro.s90 index d173c68cc..7b070a246 100644 --- a/Source/portable/IAR/ATMega323/portmacro.s90 +++ b/Source/portable/IAR/ATMega323/portmacro.s90 @@ -1,4 +1,4 @@ -; FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. +; FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. ; ; This file is part of the FreeRTOS.org distribution. ; diff --git a/Source/portable/IAR/AVR32_UC3/exception.s82 b/Source/portable/IAR/AVR32_UC3/exception.s82 index 4346bd728..2df712c40 100644 --- a/Source/portable/IAR/AVR32_UC3/exception.s82 +++ b/Source/portable/IAR/AVR32_UC3/exception.s82 @@ -70,107 +70,107 @@ _evba: ORG 0x000 // Unrecoverable Exception. _handle_Unrecoverable_Exception: - rjmp _handle_Unrecoverable_Exception + rjmp $ ORG 0x004 // TLB Multiple Hit: UNUSED IN AVR32UC. _handle_TLB_Multiple_Hit: - rjmp _handle_TLB_Multiple_Hit + rjmp $ ORG 0x008 // Bus Error Data Fetch. _handle_Bus_Error_Data_Fetch: - rjmp _handle_Bus_Error_Data_Fetch + rjmp $ ORG 0x00C // Bus Error Instruction Fetch. _handle_Bus_Error_Instruction_Fetch: - rjmp _handle_Bus_Error_Instruction_Fetch + rjmp $ ORG 0x010 // NMI. _handle_NMI: - rjmp _handle_NMI + rjmp $ ORG 0x014 // Instruction Address. _handle_Instruction_Address: - rjmp _handle_Instruction_Address + rjmp $ ORG 0x018 // ITLB Protection. _handle_ITLB_Protection: - rjmp _handle_ITLB_Protection + rjmp $ ORG 0x01C // Breakpoint. _handle_Breakpoint: - rjmp _handle_Breakpoint + rjmp $ ORG 0x020 // Illegal Opcode. _handle_Illegal_Opcode: - rjmp _handle_Illegal_Opcode + rjmp $ ORG 0x024 // Unimplemented Instruction. _handle_Unimplemented_Instruction: - rjmp _handle_Unimplemented_Instruction + rjmp $ ORG 0x028 // Privilege Violation. _handle_Privilege_Violation: - rjmp _handle_Privilege_Violation + rjmp $ ORG 0x02C // Floating-Point: UNUSED IN AVR32UC. _handle_Floating_Point: - rjmp _handle_Floating_Point + rjmp $ ORG 0x030 // Coprocessor Absent: UNUSED IN AVR32UC. _handle_Coprocessor_Absent: - rjmp _handle_Coprocessor_Absent + rjmp $ ORG 0x034 // Data Address (Read). _handle_Data_Address_Read: - rjmp _handle_Data_Address_Read + rjmp $ ORG 0x038 // Data Address (Write). _handle_Data_Address_Write: - rjmp _handle_Data_Address_Write + rjmp $ ORG 0x03C // DTLB Protection (Read). _handle_DTLB_Protection_Read: - rjmp _handle_DTLB_Protection_Read + rjmp $ ORG 0x040 // DTLB Protection (Write). _handle_DTLB_Protection_Write: - rjmp _handle_DTLB_Protection_Write + rjmp $ ORG 0x044 // DTLB Modified: UNUSED IN AVR32UC. _handle_DTLB_Modified: - rjmp _handle_DTLB_Modified + rjmp $ ORG 0x050 // ITLB Miss: UNUSED IN AVR32UC. _handle_ITLB_Miss: - rjmp _handle_ITLB_Miss + rjmp $ ORG 0x060 // DTLB Miss (Read): UNUSED IN AVR32UC. _handle_DTLB_Miss_Read: - rjmp _handle_DTLB_Miss_Read + rjmp $ ORG 0x070 // DTLB Miss (Write): UNUSED IN AVR32UC. _handle_DTLB_Miss_Write: - rjmp _handle_DTLB_Miss_Write + rjmp $ ORG 0x100 // Supervisor Call. diff --git a/Source/portable/IAR/AVR32_UC3/port.c b/Source/portable/IAR/AVR32_UC3/port.c index 770d61f3d..8ccbdf265 100644 --- a/Source/portable/IAR/AVR32_UC3/port.c +++ b/Source/portable/IAR/AVR32_UC3/port.c @@ -13,7 +13,7 @@ *****************************************************************************/ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -76,6 +76,8 @@ volatile unsigned portLONG ulCriticalNesting = 9999UL; #if( configTICK_USE_TC==0 ) static void prvScheduleNextTick( void ); +#else + static void prvClearTcInt( void ); #endif /* Setup the timer to generate the tick interrupts. */ @@ -169,7 +171,7 @@ static void vTick( void ) #if( configTICK_USE_TC==1 ) /* Clear the interrupt flag. */ - AVR32_TC.channel[configTICK_TC_CHANNEL].sr; + prvClearTcInt(); #else /* Schedule the COUNT&COMPARE match interrupt in (configCPU_CLOCK_HZ/configTICK_RATE_HZ) clock cycles from now. */ @@ -201,6 +203,7 @@ void SCALLYield( void ) different optimisation levels. The interrupt flags can therefore not always be saved to the stack. Instead the critical section nesting level is stored in a variable, which is then saved as part of the stack context. */ +#pragma optimize = no_inline void vPortEnterCritical( void ) { /* Disable interrupts */ @@ -213,6 +216,7 @@ void vPortEnterCritical( void ) } /*-----------------------------------------------------------*/ +#pragma optimize = no_inline void vPortExitCritical( void ) { if(ulCriticalNesting > portNO_CRITICAL_NESTING) @@ -301,6 +305,7 @@ clock cycles from now. */ Set_system_register(AVR32_COMPARE, lCycles); } + #pragma optimize = no_inline static void prvScheduleNextTick(void) { unsigned long lCycles, lCount; @@ -320,6 +325,12 @@ clock cycles from now. */ } Set_system_register(AVR32_COMPARE, lCycles); } +#else + #pragma optimize = no_inline + static void prvClearTcInt(void) + { + AVR32_TC.channel[configTICK_TC_CHANNEL].sr; + } #endif /*-----------------------------------------------------------*/ diff --git a/Source/portable/IAR/AVR32_UC3/portmacro.h b/Source/portable/IAR/AVR32_UC3/portmacro.h index d60b84614..6847fd9ce 100644 --- a/Source/portable/IAR/AVR32_UC3/portmacro.h +++ b/Source/portable/IAR/AVR32_UC3/portmacro.h @@ -13,7 +13,7 @@ *****************************************************************************/ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/AtmelSAM7S64/port.c b/Source/portable/IAR/AtmelSAM7S64/port.c index fd83fd0a3..5afd07b76 100644 --- a/Source/portable/IAR/AtmelSAM7S64/port.c +++ b/Source/portable/IAR/AtmelSAM7S64/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/AtmelSAM7S64/portmacro.h b/Source/portable/IAR/AtmelSAM7S64/portmacro.h index 332288d8a..9dad6b874 100644 --- a/Source/portable/IAR/AtmelSAM7S64/portmacro.h +++ b/Source/portable/IAR/AtmelSAM7S64/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/LPC2000/port.c b/Source/portable/IAR/LPC2000/port.c index e6d717fe5..44a16d30b 100644 --- a/Source/portable/IAR/LPC2000/port.c +++ b/Source/portable/IAR/LPC2000/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/LPC2000/portmacro.h b/Source/portable/IAR/LPC2000/portmacro.h index 332288d8a..9dad6b874 100644 --- a/Source/portable/IAR/LPC2000/portmacro.h +++ b/Source/portable/IAR/LPC2000/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/STR71x/port.c b/Source/portable/IAR/STR71x/port.c index c55add2f8..749105c06 100644 --- a/Source/portable/IAR/STR71x/port.c +++ b/Source/portable/IAR/STR71x/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/STR71x/portmacro.h b/Source/portable/IAR/STR71x/portmacro.h index 7c6732201..f0cf9c9e0 100644 --- a/Source/portable/IAR/STR71x/portmacro.h +++ b/Source/portable/IAR/STR71x/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/STR75x/ISR_Support.h b/Source/portable/IAR/STR75x/ISR_Support.h index f56cb479b..56b70f5ef 100644 --- a/Source/portable/IAR/STR75x/ISR_Support.h +++ b/Source/portable/IAR/STR75x/ISR_Support.h @@ -1,4 +1,4 @@ -; FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. +; FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. ; ; This file is part of the FreeRTOS.org distribution. ; diff --git a/Source/portable/IAR/STR75x/port.c b/Source/portable/IAR/STR75x/port.c index bdeeafdcd..601b4af46 100644 --- a/Source/portable/IAR/STR75x/port.c +++ b/Source/portable/IAR/STR75x/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/STR75x/portasm.s79 b/Source/portable/IAR/STR75x/portasm.s79 index 216985bcd..b94877c93 100644 --- a/Source/portable/IAR/STR75x/portasm.s79 +++ b/Source/portable/IAR/STR75x/portasm.s79 @@ -1,4 +1,4 @@ -; FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. +; FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. ; ; This file is part of the FreeRTOS.org distribution. ; diff --git a/Source/portable/IAR/STR75x/portmacro.h b/Source/portable/IAR/STR75x/portmacro.h index 5b40cf50f..0c418ddb7 100644 --- a/Source/portable/IAR/STR75x/portmacro.h +++ b/Source/portable/IAR/STR75x/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/IAR/STR91x/ISR_Support.h b/Source/portable/IAR/STR91x/ISR_Support.h index 066f5a55a..6a3fd5750 100644 --- a/Source/portable/IAR/STR91x/ISR_Support.h +++ b/Source/portable/IAR/STR91x/ISR_Support.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS distribution. diff --git a/Source/portable/IAR/STR91x/port.c b/Source/portable/IAR/STR91x/port.c index c1e9858a8..ac8a3e2a2 100644 --- a/Source/portable/IAR/STR91x/port.c +++ b/Source/portable/IAR/STR91x/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS distribution. @@ -34,7 +34,7 @@ */ /*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ST STR91x ARM7 + * Implementation of functions defined in portable.h for the ST STR91x ARM9 * port. *----------------------------------------------------------*/ @@ -43,22 +43,54 @@ /* Standard includes. */ #include +#include /* Scheduler includes. */ #include "FreeRTOS.h" #include "task.h" +#ifndef configUSE_WATCHDOG_TICK + #error configUSE_WATCHDOG_TICK must be set to either 1 or 0 in FreeRTOSConfig.h to use either the Watchdog or timer 2 to generate the tick interrupt respectively. +#endif + /* Constants required to setup the initial stack. */ #ifndef _RUN_TASK_IN_ARM_MODE_ #define portINITIAL_SPSR ( ( portSTACK_TYPE ) 0x3f ) /* System mode, THUMB mode, interrupts enabled. */ #else #define portINITIAL_SPSR ( ( portSTACK_TYPE ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */ #endif + #define portINSTRUCTION_SIZE ( ( portSTACK_TYPE ) 4 ) /* Constants required to handle critical sections. */ #define portNO_CRITICAL_NESTING ( ( unsigned portLONG ) 0 ) +#ifndef abs + #define abs(x) ((x)>0 ? (x) : -(x)) +#endif + +/** + * Toggle a led using the following algorithm: + * if ( GPIO_ReadBit(GPIO9, GPIO_Pin_2) ) + * { + * GPIO_WriteBit( GPIO9, GPIO_Pin_2, Bit_RESET ); + * } + * else + * { + * GPIO_WriteBit( GPIO9, GPIO_Pin_2, Bit_RESET ); + * } + * + */ +#define TOGGLE_LED(port,pin) \ + if ( ((((port)->DR[(pin)<<2])) & (pin)) != Bit_RESET ) \ + { \ + (port)->DR[(pin) <<2] = 0x00; \ + } \ + else \ + { \ + (port)->DR[(pin) <<2] = (pin); \ + } + /*-----------------------------------------------------------*/ @@ -73,12 +105,16 @@ unsigned portLONG ulCriticalNesting = ( unsigned portLONG ) 9999; /* Tick interrupt routines for cooperative and preemptive operation respectively. The preemptive version is not defined as __irq as it is called from an asm wrapper function. */ -__arm __irq void vPortNonPreemptiveTick( void ); void WDG_IRQHandler( void ); /* VIC interrupt default handler. */ static void prvDefaultHandler( void ); +#if configUSE_WATCHDOG_TICK == 0 + /* Used to update the OCR timer register */ + static u16 s_nPulseLength; +#endif + /*-----------------------------------------------------------*/ /* @@ -174,90 +210,189 @@ void vPortEndScheduler( void ) /* This function is called from an asm wrapper, so does not require the __irq keyword. */ -void WDG_IRQHandler( void ) -{ - /* Increment the tick counter. */ - vTaskIncrementTick(); - - #if configUSE_PREEMPTION == 1 - /* The new tick value might unblock a task. Ensure the highest task that - is ready to execute is the task that will execute when the tick ISR - exits. */ - vTaskSwitchContext(); - #endif - - /* Clear the interrupt in the watchdog. */ - WDG->SR &= ~0x0001; -} -/*-----------------------------------------------------------*/ - -#ifndef abs - #define abs(x) ((x)>0 ? (x) : -(x)) -#endif - -static void prvFindFactors(u32 n, u16 *a, u32 *b) -{ - /* This function is copied from the ST STR7 library and is - copyright STMicroelectronics. Reproduced with permission. */ - - u32 b0; - u16 a0; - long err, err_min=n; +#if configUSE_WATCHDOG_TICK == 1 - *a = a0 = ((n-1)/65536ul) + 1; - *b = b0 = n / *a; - - for (; *a <= 256; (*a)++) + static void prvFindFactors(u32 n, u16 *a, u32 *b) { - *b = n / *a; - err = (long)*a * (long)*b - (long)n; - if (abs(err) > (*a / 2)) + /* This function is copied from the ST STR7 library and is + copyright STMicroelectronics. Reproduced with permission. */ + + u32 b0; + u16 a0; + long err, err_min=n; + + *a = a0 = ((n-1)/65536ul) + 1; + *b = b0 = n / *a; + + for (; *a <= 256; (*a)++) { - (*b)++; + *b = n / *a; err = (long)*a * (long)*b - (long)n; + if (abs(err) > (*a / 2)) + { + (*b)++; + err = (long)*a * (long)*b - (long)n; + } + if (abs(err) < abs(err_min)) + { + err_min = err; + a0 = *a; + b0 = *b; + if (err == 0) break; + } } - if (abs(err) < abs(err_min)) + + *a = a0; + *b = b0; + } + /*-----------------------------------------------------------*/ + + static void prvSetupTimerInterrupt( void ) + { + WDG_InitTypeDef xWdg; + unsigned portSHORT a; + unsigned portLONG n = configCPU_PERIPH_HZ / configTICK_RATE_HZ, b; + + /* Configure the watchdog as a free running timer that generates a + periodic interrupt. */ + + SCU_APBPeriphClockConfig( __WDG, ENABLE ); + WDG_DeInit(); + WDG_StructInit(&xWdg); + prvFindFactors( n, &a, &b ); + xWdg.WDG_Prescaler = a - 1; + xWdg.WDG_Preload = b - 1; + WDG_Init( &xWdg ); + WDG_ITConfig(ENABLE); + + /* Configure the VIC for the WDG interrupt. */ + VIC_Config( WDG_ITLine, VIC_IRQ, 10 ); + VIC_ITCmd( WDG_ITLine, ENABLE ); + + /* Install the default handlers for both VIC's. */ + VIC0->DVAR = ( unsigned portLONG ) prvDefaultHandler; + VIC1->DVAR = ( unsigned portLONG ) prvDefaultHandler; + + WDG_Cmd(ENABLE); + } + /*-----------------------------------------------------------*/ + + void WDG_IRQHandler( void ) + { { - err_min = err; - a0 = *a; - b0 = *b; - if (err == 0) break; + /* Increment the tick counter. */ + vTaskIncrementTick(); + + #if configUSE_PREEMPTION == 1 + { + /* The new tick value might unblock a task. Ensure the highest task that + is ready to execute is the task that will execute when the tick ISR + exits. */ + vTaskSwitchContext(); + } + #endif /* configUSE_PREEMPTION. */ + + /* Clear the interrupt in the watchdog. */ + WDG->SR &= ~0x0001; } } - *a = a0; - *b = b0; -} -/*-----------------------------------------------------------*/ +#else -static void prvSetupTimerInterrupt( void ) -{ -WDG_InitTypeDef xWdg; -unsigned portSHORT a; -unsigned portLONG n = configCPU_PERIPH_HZ / configTICK_RATE_HZ, b; - - /* Configure the watchdog as a free running timer that generates a - periodic interrupt. */ - - SCU_APBPeriphClockConfig( __WDG, ENABLE ); - WDG_DeInit(); - WDG_StructInit(&xWdg); - prvFindFactors( n, &a, &b ); - xWdg.WDG_Prescaler = a - 1; - xWdg.WDG_Preload = b - 1; - WDG_Init( &xWdg ); - WDG_ITConfig(ENABLE); + static void prvFindFactors(u32 n, u8 *a, u16 *b) + { + /* This function is copied from the ST STR7 library and is + copyright STMicroelectronics. Reproduced with permission. */ - /* Configure the VIC for the WDG interrupt. */ - VIC_Config( WDG_ITLine, VIC_IRQ, 10 ); - VIC_ITCmd( WDG_ITLine, ENABLE ); + u16 b0; + u8 a0; + long err, err_min=n; - /* Install the default handlers for both VIC's. */ - VIC0->DVAR = ( unsigned portLONG ) prvDefaultHandler; - VIC1->DVAR = ( unsigned portLONG ) prvDefaultHandler; - WDG_Cmd(ENABLE); -} + *a = a0 = ((n-1)/256) + 1; + *b = b0 = n / *a; + + for (; *a <= 256; (*a)++) + { + *b = n / *a; + err = (long)*a * (long)*b - (long)n; + if (abs(err) > (*a / 2)) + { + (*b)++; + err = (long)*a * (long)*b - (long)n; + } + if (abs(err) < abs(err_min)) + { + err_min = err; + a0 = *a; + b0 = *b; + if (err == 0) break; + } + } + + *a = a0; + *b = b0; + } + /*-----------------------------------------------------------*/ + + static void prvSetupTimerInterrupt( void ) + { + unsigned portCHAR a; + unsigned portSHORT b; + unsigned portLONG n = configCPU_PERIPH_HZ / configTICK_RATE_HZ; + + TIM_InitTypeDef timer; + + SCU_APBPeriphClockConfig( __TIM23, ENABLE ); + TIM_DeInit(TIM2); + TIM_StructInit(&timer); + prvFindFactors( n, &a, &b ); + + timer.TIM_Mode = TIM_OCM_CHANNEL_1; + timer.TIM_OC1_Modes = TIM_TIMING; + timer.TIM_Clock_Source = TIM_CLK_APB; + timer.TIM_Clock_Edge = TIM_CLK_EDGE_RISING; + timer.TIM_Prescaler = a-1; + timer.TIM_Pulse_Level_1 = TIM_HIGH; + timer.TIM_Pulse_Length_1 = s_nPulseLength = b-1; + + TIM_Init (TIM2, &timer); + TIM_ITConfig(TIM2, TIM_IT_OC1, ENABLE); + /* Configure the VIC for the WDG interrupt. */ + VIC_Config( TIM2_ITLine, VIC_IRQ, 10 ); + VIC_ITCmd( TIM2_ITLine, ENABLE ); + + /* Install the default handlers for both VIC's. */ + VIC0->DVAR = ( unsigned portLONG ) prvDefaultHandler; + VIC1->DVAR = ( unsigned portLONG ) prvDefaultHandler; + + TIM_CounterCmd(TIM2, TIM_CLEAR); + TIM_CounterCmd(TIM2, TIM_START); + } + /*-----------------------------------------------------------*/ + + void TIM2_IRQHandler( void ) + { + /* Reset the timer counter to avioid overflow. */ + TIM2->OC1R += s_nPulseLength; + + /* Increment the tick counter. */ + vTaskIncrementTick(); + + #if configUSE_PREEMPTION == 1 + { + /* The new tick value might unblock a task. Ensure the highest task that + is ready to execute is the task that will execute when the tick ISR + exits. */ + vTaskSwitchContext(); + } + #endif + + /* Clear the interrupt in the watchdog. */ + TIM2->SR &= ~TIM_FLAG_OC1; + } + +#endif /* USE_WATCHDOG_TICK */ /*-----------------------------------------------------------*/ diff --git a/Source/portable/IAR/STR91x/portasm.s79 b/Source/portable/IAR/STR91x/portasm.s79 index aa39c7103..6975ff87f 100644 --- a/Source/portable/IAR/STR91x/portasm.s79 +++ b/Source/portable/IAR/STR91x/portasm.s79 @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS distribution. diff --git a/Source/portable/IAR/STR91x/portmacro.h b/Source/portable/IAR/STR91x/portmacro.h index eaa15bde3..f94778d31 100644 --- a/Source/portable/IAR/STR91x/portmacro.h +++ b/Source/portable/IAR/STR91x/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS distribution. diff --git a/Source/portable/Keil/ARM7/port.c b/Source/portable/Keil/ARM7/port.c index c781d9726..074ca3e08 100644 --- a/Source/portable/Keil/ARM7/port.c +++ b/Source/portable/Keil/ARM7/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Keil/ARM7/portISR.c b/Source/portable/Keil/ARM7/portISR.c index 06a7b3017..92fddf2ea 100644 --- a/Source/portable/Keil/ARM7/portISR.c +++ b/Source/portable/Keil/ARM7/portISR.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Keil/ARM7/portmacro.h b/Source/portable/Keil/ARM7/portmacro.h index 9a01c1986..325054ab0 100644 --- a/Source/portable/Keil/ARM7/portmacro.h +++ b/Source/portable/Keil/ARM7/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/MPLAB/PIC18F/port.c b/Source/portable/MPLAB/PIC18F/port.c index 219d42c65..3785a4e52 100644 --- a/Source/portable/MPLAB/PIC18F/port.c +++ b/Source/portable/MPLAB/PIC18F/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/MPLAB/PIC18F/portmacro.h b/Source/portable/MPLAB/PIC18F/portmacro.h index 9335347fa..005babba8 100644 --- a/Source/portable/MPLAB/PIC18F/portmacro.h +++ b/Source/portable/MPLAB/PIC18F/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/MPLAB/PIC24_dsPIC/port.c b/Source/portable/MPLAB/PIC24_dsPIC/port.c index 1e86c071d..0b08d93d9 100644 --- a/Source/portable/MPLAB/PIC24_dsPIC/port.c +++ b/Source/portable/MPLAB/PIC24_dsPIC/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/MPLAB/PIC24_dsPIC/portmacro.h b/Source/portable/MPLAB/PIC24_dsPIC/portmacro.h index 1d4286e23..1f6dab634 100644 --- a/Source/portable/MPLAB/PIC24_dsPIC/portmacro.h +++ b/Source/portable/MPLAB/PIC24_dsPIC/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/MemMang/heap_1.c b/Source/portable/MemMang/heap_1.c index dac6098b2..ea8cac5a6 100644 --- a/Source/portable/MemMang/heap_1.c +++ b/Source/portable/MemMang/heap_1.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/MemMang/heap_2.c b/Source/portable/MemMang/heap_2.c index 80cc5d8e1..fe94b0c23 100644 --- a/Source/portable/MemMang/heap_2.c +++ b/Source/portable/MemMang/heap_2.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/MemMang/heap_3.c b/Source/portable/MemMang/heap_3.c index 182532c98..62706f434 100644 --- a/Source/portable/MemMang/heap_3.c +++ b/Source/portable/MemMang/heap_3.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Paradigm/Tern_EE/large_untested/port.c b/Source/portable/Paradigm/Tern_EE/large_untested/port.c index cfe5e7c56..ee330f22b 100644 --- a/Source/portable/Paradigm/Tern_EE/large_untested/port.c +++ b/Source/portable/Paradigm/Tern_EE/large_untested/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Paradigm/Tern_EE/large_untested/portasm.h b/Source/portable/Paradigm/Tern_EE/large_untested/portasm.h index 1fbcc85b4..ca6d5b865 100644 --- a/Source/portable/Paradigm/Tern_EE/large_untested/portasm.h +++ b/Source/portable/Paradigm/Tern_EE/large_untested/portasm.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Paradigm/Tern_EE/large_untested/portmacro.h b/Source/portable/Paradigm/Tern_EE/large_untested/portmacro.h index d94f06d2b..e778dddb3 100644 --- a/Source/portable/Paradigm/Tern_EE/large_untested/portmacro.h +++ b/Source/portable/Paradigm/Tern_EE/large_untested/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Paradigm/Tern_EE/small/port.c b/Source/portable/Paradigm/Tern_EE/small/port.c index 31de22854..ea3e51b10 100644 --- a/Source/portable/Paradigm/Tern_EE/small/port.c +++ b/Source/portable/Paradigm/Tern_EE/small/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Paradigm/Tern_EE/small/portasm.h b/Source/portable/Paradigm/Tern_EE/small/portasm.h index 625e14c15..2a13a4438 100644 --- a/Source/portable/Paradigm/Tern_EE/small/portasm.h +++ b/Source/portable/Paradigm/Tern_EE/small/portasm.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Paradigm/Tern_EE/small/portmacro.h b/Source/portable/Paradigm/Tern_EE/small/portmacro.h index 19727d60e..d4b430ad2 100644 --- a/Source/portable/Paradigm/Tern_EE/small/portmacro.h +++ b/Source/portable/Paradigm/Tern_EE/small/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/RVDS/ARM_CM3/port.c b/Source/portable/RVDS/ARM_CM3/port.c index 372c83168..812afc270 100644 --- a/Source/portable/RVDS/ARM_CM3/port.c +++ b/Source/portable/RVDS/ARM_CM3/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -211,27 +211,25 @@ __asm void xPortPendSVHandler( void ) PRESERVE8 /* Start first task if the stack has not yet been setup. */ - mrs r0, psp - cbz r0, no_save + mrs r0, psp + cbz r0, no_save /* Save the context into the TCB. */ - sub r0, #0x20 - stm r0, {r4-r11} - sub r0, #0x04 + stmdb r0!, {r4-r11} + sub r0, r0, #0x04 ldr r1, =uxCriticalNesting - ldr r1, [r1] - stm r0, {r1} - ldr r1, =pxCurrentTCB - ldr r1, [r1] - str r0, [r1] + ldr r2, =pxCurrentTCB + ldr r1, [r1] + ldr r2, [r2] + str r1, [r0] + str r0, [r2] no_save; /* Find the task to execute. */ - ldr r0, =vTaskSwitchContext push {r14} cpsid i - blx r0 + bl vTaskSwitchContext cpsie i pop {r14} @@ -239,11 +237,10 @@ no_save; ldr r1, =pxCurrentTCB ldr r1, [r1]; ldr r0, [r1]; - ldm r0, {r1, r4-r11} + ldmia r0!, {r1, r4-r11} ldr r2, =uxCriticalNesting str r1, [r2] ldr r2, [r2] - add r0, #0x24 msr psp, r0 orr r14, #0xd @@ -264,10 +261,9 @@ __asm void xPortSysTickHandler( void ) PRESERVE8 /* Call the scheduler tick function. */ - ldr r0, =vTaskIncrementTick push {r14} cpsid i - blx r0 + bl vTaskIncrementTick cpsie i pop {r14} @@ -275,8 +271,7 @@ __asm void xPortSysTickHandler( void ) #if configUSE_PREEMPTION == 1 extern vPortYieldFromISR push {r14} - ldr r0, =vPortYieldFromISR - blx r0 + bl vPortYieldFromISR pop {r14} #endif diff --git a/Source/portable/RVDS/ARM_CM3/portmacro.h b/Source/portable/RVDS/ARM_CM3/portmacro.h index 2275840b2..12d4cad92 100644 --- a/Source/portable/RVDS/ARM_CM3/portmacro.h +++ b/Source/portable/RVDS/ARM_CM3/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Rowley/MSP430F449/Port1/port.c b/Source/portable/Rowley/MSP430F449/Port1/port.c index bd595cf24..027ab7816 100644 --- a/Source/portable/Rowley/MSP430F449/Port1/port.c +++ b/Source/portable/Rowley/MSP430F449/Port1/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Rowley/MSP430F449/Port1/portmacro.h b/Source/portable/Rowley/MSP430F449/Port1/portmacro.h index d085c0a33..77ec57ecf 100644 --- a/Source/portable/Rowley/MSP430F449/Port1/portmacro.h +++ b/Source/portable/Rowley/MSP430F449/Port1/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Rowley/MSP430F449/Port2/port.c b/Source/portable/Rowley/MSP430F449/Port2/port.c index 3c1b4f889..f991f341b 100644 --- a/Source/portable/Rowley/MSP430F449/Port2/port.c +++ b/Source/portable/Rowley/MSP430F449/Port2/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Rowley/MSP430F449/Port2/portmacro.h b/Source/portable/Rowley/MSP430F449/Port2/portmacro.h index 2d0afa3cf..90d24bbba 100644 --- a/Source/portable/Rowley/MSP430F449/Port2/portmacro.h +++ b/Source/portable/Rowley/MSP430F449/Port2/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Rowley/MSP430F449/port.c b/Source/portable/Rowley/MSP430F449/port.c index bd595cf24..027ab7816 100644 --- a/Source/portable/Rowley/MSP430F449/port.c +++ b/Source/portable/Rowley/MSP430F449/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/Rowley/MSP430F449/portmacro.h b/Source/portable/Rowley/MSP430F449/portmacro.h index f3d28dd00..ee3fd1590 100644 --- a/Source/portable/Rowley/MSP430F449/portmacro.h +++ b/Source/portable/Rowley/MSP430F449/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/SDCC/Cygnal/port.c b/Source/portable/SDCC/Cygnal/port.c index 137d21b4f..034331114 100644 --- a/Source/portable/SDCC/Cygnal/port.c +++ b/Source/portable/SDCC/Cygnal/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/SDCC/Cygnal/portmacro.h b/Source/portable/SDCC/Cygnal/portmacro.h index a1a06825f..06b4fdeb4 100644 --- a/Source/portable/SDCC/Cygnal/portmacro.h +++ b/Source/portable/SDCC/Cygnal/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/WizC/PIC18/Drivers/Tick/Tick.c b/Source/portable/WizC/PIC18/Drivers/Tick/Tick.c index 53e39953d..df9fb34e1 100644 --- a/Source/portable/WizC/PIC18/Drivers/Tick/Tick.c +++ b/Source/portable/WizC/PIC18/Drivers/Tick/Tick.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/WizC/PIC18/Drivers/Tick/isrTick.c b/Source/portable/WizC/PIC18/Drivers/Tick/isrTick.c index bbba5c435..7f8b60a9c 100644 --- a/Source/portable/WizC/PIC18/Drivers/Tick/isrTick.c +++ b/Source/portable/WizC/PIC18/Drivers/Tick/isrTick.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/WizC/PIC18/addFreeRTOS.h b/Source/portable/WizC/PIC18/addFreeRTOS.h index 954c5b2c5..84e00227d 100644 --- a/Source/portable/WizC/PIC18/addFreeRTOS.h +++ b/Source/portable/WizC/PIC18/addFreeRTOS.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/WizC/PIC18/port.c b/Source/portable/WizC/PIC18/port.c index f1dd68fe4..843fb0430 100644 --- a/Source/portable/WizC/PIC18/port.c +++ b/Source/portable/WizC/PIC18/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/WizC/PIC18/portmacro.h b/Source/portable/WizC/PIC18/portmacro.h index 6ea40f14e..0c2b66b51 100644 --- a/Source/portable/WizC/PIC18/portmacro.h +++ b/Source/portable/WizC/PIC18/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/oWatcom/16BitDOS/Flsh186/port.c b/Source/portable/oWatcom/16BitDOS/Flsh186/port.c index df288ccfb..6c1aa5b65 100644 --- a/Source/portable/oWatcom/16BitDOS/Flsh186/port.c +++ b/Source/portable/oWatcom/16BitDOS/Flsh186/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/oWatcom/16BitDOS/Flsh186/portmacro.h b/Source/portable/oWatcom/16BitDOS/Flsh186/portmacro.h index 14bea1e7c..99586921e 100644 --- a/Source/portable/oWatcom/16BitDOS/Flsh186/portmacro.h +++ b/Source/portable/oWatcom/16BitDOS/Flsh186/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/oWatcom/16BitDOS/PC/port.c b/Source/portable/oWatcom/16BitDOS/PC/port.c index 472e09ce9..904ac2fcf 100644 --- a/Source/portable/oWatcom/16BitDOS/PC/port.c +++ b/Source/portable/oWatcom/16BitDOS/PC/port.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/oWatcom/16BitDOS/PC/portmacro.h b/Source/portable/oWatcom/16BitDOS/PC/portmacro.h index 568075ab5..94b3731f0 100644 --- a/Source/portable/oWatcom/16BitDOS/PC/portmacro.h +++ b/Source/portable/oWatcom/16BitDOS/PC/portmacro.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/oWatcom/16BitDOS/common/portasm.h b/Source/portable/oWatcom/16BitDOS/common/portasm.h index 547ed7b45..b6dd14225 100644 --- a/Source/portable/oWatcom/16BitDOS/common/portasm.h +++ b/Source/portable/oWatcom/16BitDOS/common/portasm.h @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/portable/oWatcom/16BitDOS/common/portcomn.c b/Source/portable/oWatcom/16BitDOS/common/portcomn.c index 2fbb09085..20821ff3b 100644 --- a/Source/portable/oWatcom/16BitDOS/common/portcomn.c +++ b/Source/portable/oWatcom/16BitDOS/common/portcomn.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. diff --git a/Source/queue.c b/Source/queue.c index 46610e0b7..b7dd06c44 100644 --- a/Source/queue.c +++ b/Source/queue.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -137,11 +137,11 @@ typedef xQUEUE * xQueueHandle; */ xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize ); signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ); -unsigned portBASE_TYPE uxQueueMessagesWaiting( xQueueHandle pxQueue ); +unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle pxQueue ); void vQueueDelete( xQueueHandle xQueue ); signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle pxQueue, const void * const pvItemToQueue, signed portBASE_TYPE xTaskPreviouslyWoken, portBASE_TYPE xCopyPosition ); -signed portBASE_TYPE xQueueGenericReceive( xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ); -signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ); +signed portBASE_TYPE xQueueGenericReceive( xQueueHandle pxQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ); +signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, const void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ); xQueueHandle xQueueCreateMutex( void ); #if configUSE_CO_ROUTINES == 1 @@ -514,7 +514,7 @@ signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle pxQueue, const void } /*-----------------------------------------------------------*/ -signed portBASE_TYPE xQueueGenericReceive( xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ) +signed portBASE_TYPE xQueueGenericReceive( xQueueHandle pxQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ) { signed portBASE_TYPE xReturn = pdTRUE; xTimeOutType xTimeOut; @@ -648,7 +648,7 @@ signed portCHAR *pcOriginalReadPosition; } /*-----------------------------------------------------------*/ -signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ) +signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, const void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken ) { signed portBASE_TYPE xReturn; @@ -696,7 +696,7 @@ signed portBASE_TYPE xReturn; } /*-----------------------------------------------------------*/ -unsigned portBASE_TYPE uxQueueMessagesWaiting( xQueueHandle pxQueue ) +unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle pxQueue ) { unsigned portBASE_TYPE uxReturn; diff --git a/Source/tasks.c b/Source/tasks.c index 7ed5637a1..f00008461 100644 --- a/Source/tasks.c +++ b/Source/tasks.c @@ -1,5 +1,5 @@ /* - FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry. + FreeRTOS.org V4.5.0 - Copyright (C) 2003-2007 Richard Barry. This file is part of the FreeRTOS.org distribution. @@ -929,7 +929,7 @@ tskTCB * pxNewTCB; } #endif - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), configMAX_PRIORITIES - ( portTickType ) uxNewPriority ); + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( configMAX_PRIORITIES - ( portTickType ) uxNewPriority ) ); /* If the task is in the blocked or suspended list we need do nothing more than change it's priority variable. However, if -- 2.39.5

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℘AN)!p0}e@ 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

ISr5Yy;#wpH)u@DfVTa#03N z&CsCca-ZvaTQExETzo1COt0a9w%M}&vITQ4!?}hMK7Skeah@%*g<)xQshC7dZCqZW zDQO20cT7}R(5M(eFk6ih@}70rr}sAId~1WvMscF;RNe+Yh{9+FPloe8xAjA!T22T*f&QAyX+x z4A64zSBucOo!p;2x)xbXJ<(xfl}o7NQ|jYOiw@$4JvC3H6@O}`+PPxf*9|-*brB zt23SEMZ!90W@_V{{q>zXTcqotr#wxzU$LLXEY#VvQ}D8KS*do6OENd&vIgFwFf}Sm zT(Kyiye?%>VJ)C9u}mqiX>J{sU3_q~zGvfF2pCTd&)T^vJev%S;aPvmc-B|rk=hLN zQ=bm17OIF~+<{{W=FlZzTXP&^kIFG#_nM^8uWYY{jp93;HgBmuuNb{5DQGmAf(DIv zt_%ZBzQblim@-&Ri(1o?{g2f>eq>c?XV;G2i_0B7w%Q2;%~f%&6(ecInif4+VM$>; zx1zIl&K7C?eq3 zzAdQ*8t}ktGuu0^L9uHK7jJMly6T0|4p2Pq3tObx;eLu^eDfSgg3_%w)>*bw8Rwgu ztH+fO&qc=7=DDhIWx0rBXW>3?Y`gb(i=-AyUHJFZhphukIEQ+u(}z)l-+Le4JQw%c z|3B1+Tk7=TRQRes>~ogd#j3|UDio-j$b{g$$v|@in$Vb2JogVLL8$5C>Ds-vx4Ee~ z*l&w|*ZTL`<|g}YUhlsf>=*1k!*B3#8$8^GX2Y`qJh}Xv*ZQx;-{A2!dAv;?ev^ma zxH;EafG4i422o5I4L33m8PDq@7NRKUBOtYt;|HXxLs(c~#wZoc`e%RQD zVN}eDlH*L+)+3f#_11``RAQtb8%B9{db=bEr^s^Hozx*W?h3|U9)!_aG=($#~MBH->% z78SPtAW1WbZMJ7GuIaTqwuVaQLkx&h5tdHW&%x5p_&!ya@>L{NCx46f@A0fZ?{3?d z6{d>kSiyA^?x^2%(6<&0HkCDlk4sn~7~7-}=0jRyw6QE>bY(~lsk~UG^5P2f$ua7} zdvh=o?~dyC$M1mIi9Gw%`Y^R2Oi`R0c8nc@(PP{J>GVoPFL4l4&M5^yTNA?t4G6m& zCkhZYKNs@I@Nd3ZQ36#lr~l#++0Qy>RY?$#lhzkWEb71jjd)sOS>l$=bDdj{T9! z&5{&EXxtn^XK!11_ulr7QiseV3{?h-#u8Gf_IQz3OwPD1U-2?n+ul7pJ9q8t+0oaz zcTa)MZT+xjOg;US^wU!+MhRFoY0~|FdHsv3tyDgjCVEL4(p#XzNMShhXL4A~aK&d) z3!2O|i;xCGDt~7&S)(02J9;|`96n_R|GhH|sS2&zLcXc2+DOeZTQ~$J+TF8vSI-Wx zev#&iC96J!Sx<(dUZ~|rG|nZFR=)g1T`B++E{b#AS?{kes7+PilrCT2w)K{F_hXZc zEzlJ9_H|3;cS|Wk(97-G-(KpAL}yE>W%b5ma_iAWrSW2=(*E{#ZhqqDvQp~6 z<62K+7u=Us$2`}dAQexCtX07$6?R)t9oB?5I-X**tX_BQBtvcs$8hZk-Y3+ifjFS$ zDGmaijDdM!Nxd{k%@>G}f{PGWm)_}fwR1ifI^H7Piuo`4B4hqc&m3I~8jSG#U2rB= zcIr$OK9s?Ax~I<-ST12NQaY;cK^NcSQ_GsOx3-Um4PSRp zg5{PtfIvN&!zsxtceD09vl0t8%{BRk!h$ji)p%q`>|m@H=FS##%BqSVC6vD(8G9z5 zoPrkN`g;5}wjL^Y_TPt`y(ka6<-)wEasRojeX;X9H8Muv{@r=yijk62a`)g+5j|7$ z=HvKO<_SfzK~x~A9QS)=DyP(nJpkv+d%*kg=w-L*;dA-BcRch?jLd-443`e@F7Kg< zL!ozO0yE7XUfh8dEpGl8#}MUl+g_;Y4-G)`a4|odM)F9+R_%Im|I|=rs`YXQix^&A z^~ilz!cv<|B2uBj)LhVpRWb9qptQC3z=8H%Cokq-$bfr#`+EEKw6{L)Tx5|B83U`GQO~K)-Onk_Dgt~2o*rp_)smeOI3NI zohmA0C6~RhJ=j*1yYc8$p?b{`Q9RW~ye7vY>E-Q|)I8;#l~^cL&=tSh4&pQD_1@IiSqS?qF#CCTM&+4)&Ro%i=qlWZCb zv8&CVnr$Y^CyH1Vc9w7^73If_6m3MX$f=enVSoU38TBi8X`5TZVH7QV3p;idapGA$ zI;wj8rs50Gmt@j`EtJJrfDhyvYJtj69f4@PDS`9Y=+w;cTuc15MGIF@=#$A9s@PNy ziFRaUI#y}LjKc0} zO<&9UQl1r0w7OTZMD|!g?4TB1GzQH+qhwuagS-Vp4QIQ<91cy5&%v0-3~J6lgaj@a z*<-_DYJk`L3dX8~dO1|M;a^w@O7n>d?fdxU!>CSZ*%UTzw3FXa|2{|Aa&*fc2_4&R z(Muk^yua_C?bn}~P)@%2%rO7jGs9uL@wpyuZ+Ttu9o^&aN8tAvytm-J4e#xEe}(s~ z*Pj_4g!e+cO?bEBy%=vF-YfAA;hn@ghxa*n--7oBydS~)8N4^+{Rh1Ng7{?RdNJ9>hC@cM|VOyw~A<0p6G4eFNSb@ZN;?Z}8rN_cpw@_rO#h___P&=}51Pt7!y%R9T9o1xjsBPEpnhQ=j^ean&&LxAwRmW+&y&Ejez zJeMvRLGhJozja(=WT+qZ>sOynu4Gtsd+F)4pKfKl@^t964AR0q?tCHa z7o=ZJnA&o9t~(uwam5YcSDc=*7j8e@1Q@?OUD*ub4E#Fc<}*yB$~ad8p5X=sUjdDR)yDWTV&F^vmv##trdEoWf)JqX#>APni_d8@t; z^ZLK=Ho@lp4#8HgcM%?%RrnhSYl#xV`v{}r8TSK(#|y+C^lxVPMuUa;Lk0`+hXotr zj}o37n4)3SzaotP#QQnIGZXA8;R^=O^5Z^d&c^G}!-Z!aOO?=lrZw$pS)V5y`#j*( z#{oy@0GQK}`uL+l8!zm=80!U0jj)*-+R!jF!#mN-V8|rwZP+zDgOj|oV;%;M@1om& z(?RZ-g9GQ7|NE*AY}7Ze#z@Ea&YJgJ)KmUm+R?M8qib!8ML>oBo*$fx#Piipzvta& zhr0s;xeDFqY!7sga3kQYc=_;mo&X*WqIm*%=KUr7t_=Qu244uI^Z4d7o57#T;D68H z(rHEbOEP#mgP)thZ^_`#X7FiC3OuC@-k!n38GIsxU!KA527E2@{>}S^@JWYRmhU+H zrhA0&bA^8>ox|CuGu@Kl^8{Zg_%VW42A!44%Ibe6HZn2)@7IZwY>o;GYS8u;8=LVBRdBj}ZKDxvv-eNWtBLFAzK?_(H+g z30@}n4T52;3D3s`Te<#Gu*^1wUkZM-!aNA1U_PuCyjJiU!FvQZ2_6+p32z8b7ra(5 zNyvOyC-@_RA+W-8i(njZ!1Eu1t+(F&ZVaz$q{9V*TNP%D;5Nbh6YIZ6?hlmvsNjbP zzE-fn@be6Q$yr5vz0=_*917vn4&UchA>8WlulI)V8^H77JRy3(*@O-M8o?LJeV5>6 zg0B{Ab@f!iR#&ePyhUL?Aovdi-z>OG@J|GDS0sdUpr0}y1_iGaJS3QZV%gi^el5Ol z+8n}F4u2W#HmmUWstNy+%>B;=-&wt;#pH9cw2N0L}Fo4l*PfYg_a<@MA zTESNK8wIb3!BajX&WD^6!j~21PZj0|g1;vCH-bBA(mEI8llgf!vf2!IKG@jVCD_K! zRe~Q-lkSY%uax^U1z#oj)q)={_}zlZWr98kwmScYV5{>V3O=kb;hxOHQNia5Hs?JV z{35|mmd9HJKSl7T1ix4CHwA+@;Q4pKpBH>LG~0amw%~^e78uHcf2fa>=B~PWiQqE? zzg6(rg8xeJQo-K>%sPDkR~o`EzNpjr@Ce~tCD__=hv3J^{ea*#f+qyqc>iO; zEpmUQVC&oO75rGae@XCm!9Nt-D)z^64u7%%^K};Hof-Te9)|Jmhhf9;d>S48lX>V#Ief2;OTy)V zBaNCAtl(iOrVRwub6W-_a3V*x)_aI1U{WbO}I%`lhBeXU@NeE&6c ze}+DO*;L^9d`khJzLxOE73KoL7MFixJ>>9*6z1#{s9u;nd=7u@6!4$7&g$eBpd~GU z=Tk~WexB%I==BnZe*#kf4uwZ&$MZ?S#w&hHu$;ql*B3ZXY%JjGGx!G?%vklxc+IAw z&p*}SAEVt~26*0*3OhF!VIJ@B_WdE8035?GXg&O=;{Nq5hQH^zA^gPQH=Y&3>0qI* z1%h>eHv*mytB6idOlzOq(Gl=mBN&6-pBUz8ayQ3MXYeb*lFkPV2s|GZY+;^$5#3SQ z{zN=6Kbz72U#&1U2QgR-^FF!9n1%Z<;eIWg*KA%A?gjRD-h+HRg9E13m~Kh11$u_y zUHW)K=6?NlhVPU6M+FNEKh5A5?_e0?dHzDMh51*(hxKvq)*?Sw3m%vI(=+#*1<%O+ zXPJ9*8{$NyyRx3@FQ^W}bCM-l!t8T>23uU43c z?kvK5Q}Em5{)^0g6RK=pu8@yiO!#y9>K1GsAI{*loecAj^0-{EN5;?V9DL9v){eJg z{H+5#@9tBAAEB@3X70Zc3E1V1eQ8yXlUM;dzu`bAOLubU=S%9=-y1=HYfU-%qmekK9w_p`5}0DcHu^ zeZbPqJHB@duEqZaxD)?c(2DP8;a7AQai1^vQNr}r%>90sG0bXDp{W1Wa3{`&7lOA@ z7z^?&!4K2Nn=|*<^bpSqxxZhqg@0r(-J9(Le`B3&m%BONkikFB;43iX<~`==`wIBd z4E~4iQWz2kdyFOM4Husw{c*|7`^AULr3brukA({E` zDf__RSe7=pv###{#SjiU{H%=)VccOxc$&kPU>W#whaZNi=YxRj)z1UVbhq|u5o~>X zw_vO1LxRC95WnC@3x1{G#|Zv_V58?>6%2xe=aPQnM`h#LJwOy`ELcM9Gmc$eVE3%*$JalxH}pD*|l z!EY9Pso+lt268;#6b#~l=VyZV2)^eS)5W02^C-a>+;|=<*vkGm!5EbO#QgI!!cz#t zvV8eDkh3}5fo6J*;+7aR+#=Z8^u9-#uC)dIBAz{PC!Y2*LKsvS0RF@aNgtHYl5)V+oJ@V$BbaB2f9T3FUrE)A$W}x^K4+{Eay0;C?N>?=x{)c#gtYkgHEHe6v2T z6Kw835xiL+_rx4FZ_eT6Palv2rS8l}k z1w8NWKhEGw{+RAy*zp_{Y=K@S__6kZzY*t0;f`#F_h9(nl7)Zkb;Pqw;XfzXqW)a4 z(O$YlJokSluJi~Sv?sC_@b%z%&Vv7?4&MXt0f)~4Jm&DZfcdl|ZhYFqM(wLa_cPst z?sre{7Dh&SM<6N@5Aw42lorZMPc%s?f4@8i}Y*oV>A30g#!O$m1hgH!=;{# zyFEO>V-x>_@V-j;+rtZh-^$XaxPPv4wFQ=!Pdom_hwwf9qdn|$2{*%Zdha8=J9MWo zd&0p4?+sTcxH}w9@MQrcNl$y|2{r>0PcPapy7vV%o1XTtFT5bZ`@_o;d;o1`PkVS= zcuRsWcS##@J}!J9xxXZ!8|rBfSAi4owN}4=o8E44nxc z3jGPjor(z_31bO96pkf$B!HFB(;h~{(-M3nJUzjq;h70O5}udfqv84lPlUH8crv^{ z!4u)b34TKOc!H+`_u}}phneup1cP9o7TssVnF&4~HY9j1Y)|m<(2?L1;nD;@DLg5` zC&M!m{G{-#1V1^vAi+-!HzgRWs{}tad?~?C3tvm{)594{Vm|*kEKTrr;QXxQp-*;7{Lgdw3|~622L5TLw46Z7W_r{GBI&X9Vv&0X*~m5`I?(e?No&|Gp1< z3F_op77)*64qy3PljnQ_Zj|T5eWF`V2Tewp`S3M`=bzU(L>UXiQ|1%pu9t6G65?Li zqj%U|7{hQcY+iWorPwbKd~d;T6?|X8Oqb!g=XI0ZFOYlxvzZ5*ca95QA$R_X`FWn) z?1rUPQP- zBm8TE&7N zqrzON@c$tg3s5{u|BQIBSj6*i!Nx3BcUnE#y_`2X9>f^u6UG;o#)Yp8ly|zaQ zw!OCPf-CphK7_qC>Hx5Qr~`0?!kj0Zvw|NX_yvNkkG(7lX|0=je zFxxNkR}Xw8VdJS<1aDWEJ%U>W9~OLx;A;h=(eb=eaG&7!35IY2&ld$B5d2-i)^@)U ze6`#k_$sD5Ab7RlYXt8Sd_?fof~_5o3kI`~=h=bd5NuVwCMzm{>oA@>b}1%?s9-_*zR z1%F5IEm@eQuVdVQmiv0a7WatY+w22>@tK|ozdQ^7PZ|6UG((h+{f%IY`kXh=eO(P6 zIz*grK$vUsy$&+%4>?SIo3AMDLlyVCf=hz`TkwT~&wgW(E*&Dyhsa$)!WT36o^LAh z(C%5qD<>Z+#ctKc_H{7c4M*HiNg{z%c(Pk3)hj4FATq zTlQ}257fol>M;GOL-h#)c%lx~IiQ(WBFubvpxkE!KSc2J1q%$fWiWMnBA%$*Gjk|} zXMjx1Tk!DOzbIfj#k`&S-opLL4F1y$9)4dDCXXBUkzcw2`$Soo|H)wPBgedPA34Ht zANkMb!H0r`;YZJzA1L4#3GS8qyE69@>S#V(E_d$35@+0pCCq);xc7R0?7d#3@CqKz zzOlgnA0H~<<_{BYRiIA67JlhR=zgg_mI*fZB_E~xGxYJJzbx>4|My9q#ery1v0b=zeB`cV)7RO9P4#Om@)`qe^zM6<^O% zT6@Ad=WY+LQ(C)~)_WWVIS(Ik_#BVj9`+{ zK#E`w-TM;U7p_e3!O)-J%e1cg4Dz!bSXka~2;Ln|1N;Mr?*{m14tvyaQv~pPE8Zji zeWAm5ApC`pEzF}Htn8Po9v<`=*8k;_u{_FQ*24ye&viVMOT>pT>y1x)xF!@~`ZGDq zNI2huD9nxoAI)SelW8}jJxqi@Nns{4S;}Alo2926F~5}H!{KieJQ=Y3jSyGcX%CMuDX3D+_$6bOB~Nl{>z_R@%{q=Jgh^)FGu(b!*sa% z{@cU*0AG*2jI-eWNrzb{Uv`*vXtJ!StbV59YEL`n&7yBlr##U8UMb9zvbZN*bCz}f z6y=G*+QFf)Y<%ecXafPyXZ`cq@CV8Lx=^&mb5pCfqa~h_!rapEtOUP2+>qcGr(L-A z@Y3+DZM*p=Y#H0(?84;ls&e0#$a68y7< zrzH5l8lIitUo^Zd!M|*HV}gIvaASg>6{zcN>Hc-YcN6@vhMy+5ui^e2V0hZYryCxX z;LkMdPw?L~d@;daXt*uGUu?LyccAw0rG^J4xVxbx!F>&2Aszn(4Q&a&uwgpEpKZ84 z!RI#Ikl_0_+?wDAH=KTY#B*N5`UF3up*6t|ZP=UOhc#T8;D3CmkqQ1zSeD>h!=n@YgV31Z?}XI}{%&Ya@b|-p1piC8D8b(i?Fs%~*p=WP zguMy=QP`K@%?*bVyrtoIg10tMPu$A&*6@-9zb*WAg5MRsm*5-1lDoz5?+SPOf7p8u zXeo;3fwy~Rb{7dsP!voTxa1rJQIG`(L4stEARt+gC<21Ok|m0QBncNJgLpv@Ot=IU z#Q-Xbin@SgP!uH?@Kse$*A$BX@B6>=-Z}4`_xhZ@``fxTJ>AvSJv}qkGt8Ol8s@F4 zIP+#zj(L-+$h?K-NM^sUsyNFxsXENBsCvw=sV2;?s|T6iP#u_GQQer|RF5!kRsEQ^ zsX@%!)g0zsY8mtU>SgBLY8&$q{U!6O`T+AXb(DFz%8P?3BwsDm^_Umwq0CG566R%k z6Z3MtgL#?8>q91=<@!D575WhKtNIM{RQ((CG+iP%*!${P-GF(9Zp-|f#u#~%{{q#M zd7+xe{G?vXJX{}O9;GickJdS|+I+_9+{``oEzG@i1LnTkzUstR19U>j$1(TQ)0zA0 z=a~oSHO!CcPnd`3ZAB zi+R1C&%8k|VSZV!WZtOPF>lrznP1f@<}vy>^8|gCd5(?+lP4eI!3r~9(6}bR*y9%%$~d=Cb-{ z=JNU?Gu(N~Vas1pXJf9U^D^I|Z)2{k)0pqj1(+-AqRdrwY38xI4)b%m33EN&mbs4Z z!ThNj!2Fp?Fb~mBGY`_UnTP0A%rB|+%qP{W%vJPm=G%3O`8Iu=`Br_Fd8fL_JVd*} z#Lic5scg)fbOq*Db$jO8x*PL-dI0lBYAo}|YC7{CwSc*bUIA?8!vj?-m;)c(g>&P_ zRb$}Ddxr1hc``gP3pkzRgH&zcvcPe;1Bz3Rsw5w(;vla}JWN#sZbST}x)ZoJ@d#B3 z_$gwTe*!-TTmV~<~`gU6l!v|l^sqdtz$SIZN}Qd8g6SJ=vqvAC@rmymH>x|(h6*n&DZ zhFnd@jwh&t{qbr#wm+f{_Q9*Q5z5WBSGJMuv$(D8rdD{_G`=&`?V>< zm40aZJL+J6zgivbIDk4h4qR{6qwsuUg{GaM5^>GZj+I~@fwf)*L2lr*i z9Lpx3EBzUDOg>lomE6{jSC|iuS68!@9mh}y$F8fD8Rb_ivmNVjTO89crQm~nwS7sQ zZ9?C2I&6!45&C#q5K|O;AGr+t2jVb^%MzC&E=OF0xB_t_;)=u_h~Z)$q&~!ziJv5{ zLOh8WF0et`KpZE=KV9HcAU&?W1UYg!U}ty8r9p<*u`uCx0s&Gt_#_Y@C4vt!T+(Lw zF~R?DzyFTc+qYu{A>q9kWV{#i_iOJcx9gXY@!sX%udAcnu9-!)Yi5!0J~G~mN4D!y zk?~%Ea|wMhTd z^<>n+wKo6l^zRKeB!p<}-`9x>16^O9I*qaxBBCp>SC}y!iotZT>dq#I7OQ4*#=jh>$U!9&bHw!NR9qPP6|7b&ObaJIo{*L(pe{Egv0{Lk8T?yQvK5zmU(=#dL+lbc_6DsE* z%G1pc_-pgQdw<*EH{Sb`_dAv@HTjo>i+x3DTeIm`g7Y21JdK^J5*wX`#C7P$n?k1TxlPl5>k97ledew83L|9DAo_7kYHkp5AM*yx-jUPC{wIT_|z zSMY78P!0!ANO599wMKBE)2IVZ1gRde(ZRn<0+jcsvYat(8ov(a1;7b-YLiV?ALH$} zgAn8GI|lkSZUkM@H`+;p0HzIkibK!o65Vs`x93j8w7u4xM^0vf; zYB6zF^8@}a31}k&b7V<&QN3NKF+Ctvj=*9a99DI^)It!HMGj z;H2QrKW;lQxQmNCDVS*@PY6~I7#v42{WABV(7O3Rp01{;eq8>k zqWn|Ey}4<@mYDz3qWsfD`JWc$e^!)#2FGc`wNO!)8R9Wq) zsmcj-(&4)(d@57LNR)pOm0=2%e~~DE z2IY@`e6?7VKSPv%vC0u>`D&?%nO~*~vU~|2oqV;7>}krsh%`+37g71=Qu!BMQU2nf zwVcYoO64pZSKFwZE2;dLfv;9kK89CQK8Dwba;~~UKWngs4`&}?d#xAuE;k7O*(Chu z6*>Z&@~@^`KAvh`Gb>|iI@hx12 zWUznyO2G&F5hkn`a$(R$!bzPc52 z9}S0IO1|o^A7&n)X*PEO>)xKOLl!1(M`boPX{Vh)KN)=ER|-CGsHTK%fm{W)O@}9* zH7*iY4*_SWfn=+`0i&%(1dM&w*l?h}9vG8PPfN2rOxW;oVZ%W>t5G5S>zJR=d6*y9 zd6}OO_8g%LuzZv*!8}@*Pk*!qcK(l6U0d9Lk59o>J!Yf^^eSR zG)$G$G-!)BtiVD4d>J^Q2J7Q+{dp_N2kIEeKMWW*HU2Qry7oW%W|rVT=nu%>z_#h? z57n_KjE%q<>UYsM|G+FM`4E#I_Sru~EJ_ZIeG`+fJbjx%;4Hc*a}HgWIghT(e7$bW zoLBUPe7YUWE9p+mx9EP%6?B5RlFnqlODCD{*1MRi>yMe^`ZMODI>lU8|H)iN=L~G+ ztCBj6xsb+nRc36wOvme77tPq%2*$>{f#YC9JDwzi{O~IUpQb@RXn*ATpr5Xu*U4gb z?3yRWu6bhYdOp|^?Yvm@yXQr}n=i($=f&8yK;H!W!{n<)qK#e>W7i5@&ZvOSa$SLW zg}#G%ovy<1gN`%5tZOl^5be84jC-p^TW`=fLw}6yHlN0~;lvAQOfzHMJgTqp z?Ri|^WU!wJq`#c)gK}G!6mT{8TurAj$T6khW6lx`(|8LqY$N2EkbgSFu9qtgca(rL z)PCwCZv~8FrWq&qi}}EpAT`N{h^T9rzZ7%PZ^T^mOL1KOQp_K|5y$1TJO}XAcj6r3 zU=Z1g?R$uhxwt!wt9g+3dnkygMfq_NXLv%y+MR@%qe;FxtzKk4E7m7|Pfr{A2;!UD2Y~uPR!G4&!lFqjOu`gUr z=fCX>10er&wO40A8<}(DJ=8{~FYFO*w3o}^t9_!4_Hvm~eyu4swBufVBlA9;pZODA zh3%R}8f$@aloa#H>1$3Sx`+P!WSWf&Y+4&7%^xW0ie34c4MJF@&2Gq;4_F!$EIg}fj0uX-}`FM1mDc|D!^ zf?mmdNgRuR)335zJ4xn<^FFh7zGA+tzh&0WG3LuON4n`Z99s^P4T}?hPc}63q9Zgf z!cCIFb~QjJ0rmP`+^_E#{4WLHNx}9k1ltt3A#9tjvN$BW(Y||X1Z*;D4Lj4?0I3K>*$ro(wtGuGEZ+0rOynu5Tb72QAT~qQ^ zL8lgT0jD-|L8mTr0VnJug`EdjUdU<2T-a&JT-14zxr8&8xs)@3xwJEhxs)@Nxr7t? zMoH&cmX~&BGM97aFjsaKGgooK<4$EKoO|EtgmdqzPUu&6JLc>eZGNY-mGimV*~VPU z*~NUH6V3zcIpI98z5}-$DEX?f6Z&C&C&lsyoI}h_oFmNFIcJ!2I=2SB-&eOg;d=b) zPDPgAT*DE+)=OoC%C$RGzM;g_FTPzXEwe6>!dipC2au zf({;YeP=0I|OjzGh@QG7>yE=`_*!p&%`l1e8D-d<; zD#nCv!VdkM@EmG@sBb?fFJ=M>Vmn3MdpfrpG01xfJM?zSu)L2G&f6b%;w&HH)B!d= z){W|7>ez+tpA2-nQhj?~;Xk&VDbT^TxSEbF8|uX2gDC}{CJ2zwZpZ`3Zo`~Ru-mi1 z8EUAon|&e!*8NGcKW^*8lNzl3QEq)3*?ii3O!)oX&2Dr@~=JeBQDs^fTScXJ#WPsajte__06 z_X)yhCW*RF5cQqpU3gW;dEzS=RC%|!CB4xvKWUqIxn$& zi<4yDD#q2f#4&xY^9Ae77RUFwcpH@xTzhxywFqA=aI%5jFhPvBlY{wb=X&P1oV%D; zIpI2y*PH^6_NP%K=-zN@77EWrfQh zakcb{eqn8xg8wJslaF*}U!h~`jyhQWtL0^sP59e3;cwf7zilV`Kz3mNw}roL7ykCP@V8yU-}VT9`$qWNLE&%TiT-ua z>4`gn0DxlC%FW6_SH{L5$4n4*nQCH26E$9JIHQ6*dP7sj&9bkwh6!5#^XaW*pF%J@2>C} z=~q}^<5!f_{jy~C%*_kxgh-Hl9;bvaH_$+G5P9}bB{sb-<>$~AI^Quzl-_mA5JSFZ^!(H z)1EovPGMGV2D5fUUsCQ$Az#NFalZi`0rgF&Uuhm?+V=w4e=*3heS1Uunq%cTYEv_Y zoa4GDgZ%I-1)tLhkkIDHyCEMqr*KszYx9_k$1HPPh`HH;4}lJxU%25p0_X?HSJ~_m zISkf9o5@y9 zK_>&AniSgV7GbMfg{^Mk{rc)w_ts#?Fh6(gd>G}`ggo@m0&bk;CEQ`mh281QMcf(8 zCERy`jsM(AOS?J-HaWvKF;99jHo2L~HVJg%P#0T)WRM?zrQq{90wnY$M0bvq9jy-0=E9 zW#LPAxp;nI>`;d4l?i1|sIo4er)&#sa%*?nr%F*7j7>_B-OPRVQvYg`!$BF)CdjAA zCe__!Wowga!Y0+oCg%QoHDQzL!X`C^O{xo<)U@H%P~Ylqo?ySoY0Nd>v~}9Q&rhk)r768k*&-<{c8WUt%^gQ>8hcd zS;g9_fv{BrVXFqhRt<%%8j?O%4bGR{@EonF+lcG?pgWYgxjTmWL3cB-@r?(l%y!(U z$8~HV>ezsE;$)Ks?gj84%qoe0f|P>qWWeYT$PK8DZQXu%+VhJxqReeYUD}CuZ_76H zRXgDWZN;|j-0=LOts9y`)kGqSxuX};HpIaob5S)9u zEtns3$1)FeUuJ&XJ;XfN&E?th4{`G`4|59uoAahNY-en*;vnx&?RBrtsAk)%7F}C5 zcDOgFA=<>hLVm5;704Tkdyy^0{rWcII)7bVROnY>ZmjQNZmR1tH`C#`*HRB;c`H4f zxs4vjTu)pht*_q!xw%*9({;FkY}jj)MxhxjK@UtoPpt@Z;l9B2yK{fBcOu`o)2J`AQOkaJz9)=BZY5| zc5gD9g8nQwjd`})hWUB-Vdk-JFXoBvc;=_viOdu6k%g3eHAT!%rn=9v{CW2|=BM37 zz{a*C$(PPR-Q!R%w5Rd0;Z(2RNIsnFo(%FZaYWXe&6r`!nF1Z$*VS}zznD_+c?|(l z3O<&xy^v!tN~NoXZu}nGUJFEfEui*F2b~PHfW}zUUJFEfE#xx$YKa(&7P?s>e@rM3 zk4LNAd`1j%&nw6r@!B%4a=SCHaUW%V(M>R~ac48XB<9Q;TyY)1O|s7G?jGhh+#}3y zxo4Soxb}p>SKHk1-2W{%Jon$`hUfk}+`K%d?R3jBf8;n zpgYJD>Lr?^q6p>ooG}HAbsu*X9cu^F!Ma>c$JPsV76*HljN=B%=RyAIDu;KrrX4r3 zdw8B`#`)|Xo+p}dBfA%l^Vz*{4wl0M6-vI!>4o>9@_OM|ag!Gw`)>1Uuzni8wjtQI zpx1@DiZ_Hg-5bqZ#0$@Tig^oIUd3C_T*6B-m-6;8m+`)1uHv0zF6zNlo|3OhdolLa z0$wiW+}>@>6}<*0CFhrs9qPd{3l@=wxV^Ctyg_BtE31@Z;Z zPgi$&nfKbZs4Ci`s%VR&pCXIzn8Vj2=7B*=jY|=#dXLH&X_vNcLUS0%9 zFc0@C86F@ zyt|jlJkZ^#nEVAMf>y!Rxq zIlmi9`!#hOMs>s}dd$0epR4yl>$g}hB8Th5p|#K z1!jYCKEt+!bp*l>pYg(TirLAC9rJy>JdZ!@Jd}fX-|W%Z%e#HytR~x+!EPvSx=UO|xE-Zh|3+GyIcnKk&#=O&;#r&SPfH_NKC-X<% zN6dS?6U_U)pP0{jH^Ffh6I`nobCR=O6(O(6e9r5_{EIh$`8RJU^B>*_=HI+A%zt=O znE&*aG5_JMV*b-x!+hBbp98NVU$8t&nH)KIWBVKJMMme9W^~YargwYsB&sUifS=6&b|x?OuX;r#FQ;5}C>TiT5J&A@5`6 z^WI73vt9w{ZKl6JOa1*T=)drOB0ByaA)e{swc?+EZBi1xtbe9}vE7@I4nB?Dq$GUV_Dum}JIXwb{*`&! z_CkGZum4mp)VW%{Y+GYKwtX#Mt(>;4Q3u=lKb6z^1M1_o9ZV_sSWXYPE7&AmWs79g zvtxVKNEY~?nd@eagmc}jk(?km=g3(j;W(Tv0%A(O${x9a`MO9rCTEYN33);0n<%k^r^RK_mHI1whJa(HoTUM@n5@a@|01gK~(9Xz9$j&7q)9YJ1 z7Z-LeF6>-f*txi{a|zy;ugXO14_}p_d~kQj*j|_*WqWwQTa6>%u)I>_81o&G zJVAel_vS=yXRa9uW4ang?gqIT>q^qFy`9>tR0PK*6PH*jvLARa$csSUPxrOg{fdir zEN;!IlEMCer+g|zWbC3XTMBe+8IWrSWy7{cjyl+#MWQ$1HrmaMqwvN<>GGT()tw>9Qzz;<_F?SaIrCa22mUoYg zV(u83%G^7W!Q3sf3fRmu&C@4MTeP6Iu<;)G`dOPdr9Oq5C-F~^Qt+J_Fxn8g0NJpA zWO_qu!+yes{e%ts2^;nkHta8KIDq#HYr7)hwYve4yup6qdaSVFn8*VxA1HkO31OdM z5u6)i^3|Zoa|VIOL}oJ&ip*sm6Ild&AJhx|a1q$Vj3NEFoXJ2Jzf$m7ivS62g4~a6 zGCmT2z}jS-u*o=KlX1c(vlt&HiSc2Au)`$bOH(2xurQE(H7ydJgFF+d zZp0v;8L7qmoUq|MVZ)g;ZWuqAKz?HU=P4?i8DqzBdnJSX@GAwM#}FW)O^|1iO%_Cw zY?JxICi8_&<_nw57dBZSY_c$N4Q37r*7(r2h8IM_>jR6g*fzZ0yI9z2VWa@%V)7}) zyeJZ0PgooY&z)b0G-sVk^GSZ*rJ0e4w--(Q4UJ;qeyfU(cc?I=N{0XsGk(XJ% zIiDcK6NHih;8y?qyh8Kk;csDMH`(Jf_2VCrZb<9>;yLUJaxtKYb)FH zgt0l@&oXT6dE#H~xhKdU?TK83?0G42mhE{_*z=;W=S5-9i^86lggt+YKoe1dm@X~@ zayVZ7Cbs=u*z;24cHZ{)NI~XEv>0 z!)qY*qT#d3^G3t_M7Kv@XZ^J3m&^sDH#%m=Fb|JbWNsR*!<;W_BkO%tH5y*`xH~$P zb!tX4m>Wg+FgJ~U%bYC=kNctoYfPfKUCYIyw=(Hf1gxZ3k@5{eO#e zfpNG7_+di*9_a{dVt)RhvBI3I{z?8{k97Wu^Z=a)f#Wc>jY1L3_+!HEdXkP8Z3jAL z%#TFzxuE9$&PCB*E|Pzm{&JD>$J!+EPmogZ-8m>T_7~(KkbgQn^}AyWJN`6}W`X~i z^V8eILZ84#vaQ z)b1vJtW6Y;>E`&-JQ@QX)7H(6K8=mdqd_zNqkTsOWx)1DUPSFXIeNCGZQn_veJ6?b zog~_Kl4#$_v|lW%uO^ee;n~sa5FnvEJnqjHJ}_6bbw;$LQ3w4MqODg)!|M`jqdx1b zi#BE6B-(vrbc~RXW8N5@z`Q9Mo=B?*M&0+DXW}Grt}k%lt-k2J`dL=b1l_z65NZu``8yHA%ib zHM;TgUw?f>JT1Bw*o<#aliwOYpHBYs9qBw9-32Gk3^d@ ze;*C6GaQLNBIJFUk3_@snq$#~kdJ3R7JZ8OM06VSndn^RbJ2I1FGu$=UyP=he~bRe zd^sB4fB8-Ho!>>@xg4#}{;Xq-nBCYz%wFtq=16QY^N-Puz;&Qa6YA4wT^J|Lv2`E$ zn_1`bIr&Ko()l8K6I@p`{`O@w3$XFGuc8Xr_}hW#AAkJym$_E3_aA;WnDV(0^+10T za9mxyLdV(xziqvczX-~V?T@?&woO;rW7FGOKg<>jkF(ig;c+%wEIiI;i-pJ8?06`k z1lNIM;d%76v@QMvVj*JTb*kL4+l)HM(_-bA^TxvC>}|1oSe_Q^##|`YkJ*ns&RjP( zk-1oG26N%q9Oh!N1(BC%u_u^I#ilUVh}nA_KD=4vW0qHr9R@bzRSvSV@r`R^cq}$!PPW+J zkGWgOA9Ba+0Fi{UTAQbU(T1OrPGQpd1~{RL#Be?U|58c#SR1B*vF<0Yk|)alB>7EO zl)>5xx3zUg#=8Hf{aX8={sqv-l!A|C^jqX>;0!2T)sIbo$og$P;kWgK-_{d;TTl3H zec`ta?CW2kO&<_Cjbb;${xHG&$7u{S=ZOudzGg0D-t1!fseQ}KKj*h~O*T+wrH~6z z`CG(NT>j>w{LMxAn~U-{7iDW9%HKltyOyzV&eJ*;&UM?y3It{F;Y~9|m^;Q=Gd~~e z$lO`YIY^j__#(ItkU4`dw$@ZZW)nF_5@> zOx}aA_Q!2;{Q2K(Ywd&Ez7^D0GWsOS$HIOgZZ?+D!S<;I!Y3C9pIjh(a)I#4g~BHn zi9WSh_~fG44X{5QtVH0;ELnL4HZ_F~RB3W(oL>3FjpVA}EjGp9H5l zp-w%)j|s->6gHogg5MMDzyZhVqzR4-?ke~R!Se+F05%y7Wlq7Q(>~|?8u6U-)-OOj z_fqrB+vPA3xdi%lzj3%onNVr4HN2mlm{8S(fy6%Zyg9Lvze{`v{WvJ(-L66X>P89v zE(yp!^ZYbid>=l!cqm zHlNBjAZzGB@a`UBQdjE)Uza!3$NyUYc^7PoHr(|*_&4x&V0@Q>wFAC~OTMSz!J9Fk zc9@0gL;Mi&SmO4?bBH?-zewDfcsp?y;(f$Dh))ssCRVqE<*X)n4DoQ%nMXW=cs=n( z;&+I*5PwU&oA_7agT&e41S>%V&(|Y9MZfwRIoWU$F$}tp7864Ug7iAEx!Q&AYe2g_ z_34%GyZ@YY%vr=);@fdkl?^5f)_>B7&DEUB#AQk60b+Be(T%tQ$%hd`=YTYWxCZe$ z;yCg9#I=aOC$2|)nHU-r(oJwN#y%guJTY`?NcD(Y5kE|9+HNRuN0QGV?nJzrxF_)r z;$FlDh)p}5BOXL@JSj;K!FWsz&Iai@Vi-IjWfHF>evkM?;_rz!5dTU13h|8vFwfVB z%M+WkqXxt~NZy@z7x8f74~b_G6RNGmpVE&*LY}7}=KmSVs}mdjM~Tf<(V0TNllTi# zIwRx-3t>L{N#2;)w1YvF|9scYptCN}c& zRZ+f{e%w!NvGtQuhz6N1z3 zMICeeiW3{1!NlhHHDAcj5ceUaTz*)#hlmG~JR#&;iHDN>J0Z_o8@C-v^1F!%RX5_X z^kagM55EufpCbi%(?2#58=bUz zVg9p;zoma{6>=2V_I^?>U_|L6l8)BJj z5)XXorC;KJW_h5RzXeHf`Fz3F^!sIsRD^(7(M$L%zrA@9(a{y61;! z&t=LJDh?@cQ_SC76)I0mVl_eV)!uJ4usg&KHp6XA8X)*Z!NZz|I;d&O|DWD1^>gHZ z_im|LE#Vn-XH5I9fO7=-z7_c{l}|-^va|@xRzdJ0!QES;PF=!W%~*O!$ZNF0e83=( zIuH}8NL!Sfv9utuk#{FH*9TBy+i0xNDbOCbHK`kMU=tx9(gAhakkTw-qd&bP${(d4 z>xqqg!NVvwW7>9NBfl)TCG^#Vnn3>;N^EpacR~3I`jM?GvPq8+Z=@fSh5RD1IdFOc64s$%buxN2|C3~<{)bPXT>0dcJy z8wt;g2)x7Sj53>o&QLX$IRS6HG0BH5&5;fD2dY^tAFLKI4}mwISp6r0qZ#TC6VIl8 zQoYJL!&Q=bgnE}bp*~_B1y8Ux3F2neQRY$VIP(}4#{7&`xwO?E4{J~?Pf&0wND1!s z^V$=9k556CPgI4OC&Lrvt^QN09P?yVg?XxiLr#$AGzG&`z%vzeGu0Y=CLW9lJ&8N2 z7-)wLV=7{$b%@Oa%S)lS7b<&SBXYkAvuKg-=c8hr~QBShYauwb?SPDJNB#6xr{<%!} z=ThOH>w*yu^L$yY=51GsXR5DKX0$Upud~i-^(ONgwUc?R+RgkDKO4kXneb$KlYF&a z9bn#|4l}>3PBL#&ry}HEn)J*WVR>aS%8NiPM$H9MG*m6X`n8`%J_&bSzf|P=9 z8&85hiTph1r^6GnlAWwi?jxTxez;FOd;fFT!XzK`vF~8=!J1hO0)Hj^=WA7z<=^pj zb9}b{y)6Gp)n@)y)o1=jHDx}g%vBlO*BSAA{*zB>zOPc7TJ3+f>CZtv*rv!ks7<&aVeC-z=UxbgLfA^4s(T=G(wW*-Dv3?o7i@Ab$-%TZbl;!v7-QNYDcKE|o0I#dI#_ z!aAL~n63b9{3nOTW0n~ovS}P2vP1jEq1`e2yaD6!qF}(bFDFqUNGbS+ODB}juaHZD ze!7B_-L7$E=3sTnuj+$514c1C*0cy1{R)$h`ay!{Fp$2LXA|;kndLL7nu+K6H`KSV zPBVQwb8}sZxrJ`R+)BK+sEzP}wt61xv=eRjkp7J29q3&`_!HlI^(V_a>-<4&eAPvV zbB}HsPPZuG`>kNQ9B?l^nYp)K$=p}J&D>ufVjirI0h_r>eUh4XY)I{B<|^iB(Sh2| z@FM|Zn_^1RU-KsgUq1!;V>=>02KwphNv*oub{t0SGK1P~7`5Y~fWvkK{UE{f3Uq|| zNq+AGyq{5rZ8}oCPh^xBE5?iWSd9|zrx>qGah?-(b>^wM0rNy{&qQI~sLdG|w$W6b zV4bJ+c;;vDmKr70na%u+wlgV|F9o@YGaOEKHufJW>_3X?XzV|X?T`%e!><&4)+0bd zJ0ou)JI~fhw(~4u=UHUuqh#k<8trVx zi@x^0=xgta@$-E#e!i>Am@FaB_jP&Z4@DpRSoF2MdNAvJs%HY5{_-~2$Bb9+it%bY z$sdC{#-YAww~+w{*{Gxi_)fuRS@0Wu6L~V|r>p%slWq6~*>DBf?F(VUFQ^~k=051- zHztUc6*k<@ZHMykTxq{}kIYxXhWmvLzY;b)AZ+-pE@*ZI`#K(Hp`Fc@SOdG=r5H)NpB@63l6}J?F)D;*0>f@rSQS!}!Ai>QgU6dliALE=VCI@Uin%YzyQzuq`~B!fE`dZHuf9UZXSfimddE^kLK% zS;aHbvpJwb$yYZx5$0?Tj>DKx9?mPS74JI9Dc%QkgA-o6$m!f>Hl=L~FyG=-V7@`L z#Z68)-^ef8;ua^t`nNgbnbVwbUU7>Po)@G!OIha@CzH9LgZuapt*L@4Qmb}r*!`7rsatW(Y)a5<+ju<^;_R320Jl2is$ z_aa=*WUw86rQlmPa|4tI6U3hj->W8UQq?J8R6wVi7$2$&-@C_o2y~2n%u|_+eX3H~ zjD5`0B+YYdDslOfLEiY4f{(o}hqglgfNXWIQ?8HolUl-7wL~576}GA;Y;`a1%UAV; zt?m`Js(nR1p{;5QTQv~2sv~SwPuQxCuvI-_tNOxL4TP;~3ty@uY*mZo##Xhs{7JBf zO(}rC+v*hAs)>`ywrWguG~-xfQO732Ru2kWHQ{~1^FT!3Y2sWP>=@tEl#98E7{{84 zajcDa$5{&}Jm-DTDahNlaLO`2D8{$e&OIz|L+^bse$`Cass)wP_*G+)XCH*)e`9Xn zWRM4brQnl*4<_`h1bl7+{dCpADc9HfReRxA?S-v6Q2ww9_MZ=KoA9g7!mqjszv?dhs)z8ahlQ;=3%_bla^qL+x%^42T#!=m z{dd2rO1A3lWU{Ru6}Ea*)Umg))j(mZ-n=ik?;~v0TiB}a75Rj=>MLwDNZ6{su+>0e ztNy}P1BI;~7q%KCY}HrTs=u(+qrz5?a`}^io$xCKpTFCxHQ8#IQ?8%&EAy_a$3Twn zy~>UoLc;f08A2W_Y$e}&HC(($Y@`#~WUR2sNav;?Bg`i}M;)eq$d*oa?s(E4_HDAof=83w`7rwE;sR;Wr<)0(UKTnkZIo?+ibZtrj z*y{#ZX5{5m<|WQ_F7skh<|UkuuU-&sxT0pZGqkc0%5PdA-w%`DN!R=1tBr=FQGw=GVkKlHL&SI(*9s?{98* zY6TNAe4iAA3Q_XaE~h*5ZU=6+2l5Y{Da;=`tC;sX?=XMr*fU^w{)uDG#;{(WIx4U( z+^=!2WB$~+o_U{xYYs5My&k7J^M0od^HwDls2k9OU@VYn#?n(65m5!nWxu<-`ZtzVMy!s}$!0 z_l(4tkP_p`K`|yA7RTK0ox-pWO!)4tVg`YaIpOt_<4z5hpLA+5pK+}J!#yLXwUD=E zK1E|G{)BUFr!&iccDgeEDBibt)|t-opXt3|Rmg4!$!^BZhsmDC&fk;G%{kx^dS?@E zo(%H9uM~XNAV5NUA~zy?!aJV8p1puG)GuVu(E*3!@UOzQ7eqh(o#r{uP}zQA9n2r+ z%o&vbWhdw3arlLGzsx$m;>#5z56@Gy8zF5|&KU3}%ExolARlvY!licyd`9JTT`cG6 zfO7)>8SwQ%KJfg1n?39+zZ-NTV9$*TogB>BUCaj)>f|v9oW;${oL#(M;70crmfz$S zWxm-B&q;4_!}HMF+`6oDyW5O8&4rLYO7M&k_YvlFH@qfL#2v}&S%YFB5<~nXTp4W7nvD_E$U#LUxRxtfE>Y^i>`2eBHJ_N@@ zm;CV7fU&w|0=69{iNYYI;CpDWFYIf`)j=QD-ntos;;J2RhN?$>hNecL>n zrJjp@#Ps)i;yotyMSp4N<^~;1unw2>4L5ev5FnwvkU`+aZeiw@qAxt?)?|5W_de#f zZUg4_ZfEAE?f~Xyc~2FJbV-6X{ril zL8%M;?F#wZHHrOz_kj+|kxRq3o$ugx0zR0!!6$(LDG_{-UlM#wFy2c}z;8@&`pb;- zi3CZ_y+g}5Kd}7&gf)pNu*qmB=e+S|P2zT7yCxC&?`slqogm6_ogl91L&i0Ie_xA- z^8d|RJk+;q@sP{bG;8sYaV?%*M~3U^aIG22|J$`@xWyQO!@a1>{H;A3DCjR^9kf4#1n}L)h^;v^y8S2qhN_qQQKhf9u3^OFZc{_B9K1< zx1ufM1A!93xN$SFQEEeMXBA~9yGSh0?vR)R&Z0bJYYOVV1hUY1H`@T zVV304;6L!LZ53X(??bC~H$XmUh3f~`R^I@}Ia2nYb5TFYC!O}8)Ctf}hq&1!jC*E| z*H6R%_YbtOY>$Z;;DI6rc(8~8-XdavM?yJF^3@_$hk2xk0Uje_fJgE9tPd>{&gU0# zR5e^f5OHXuMBMK~AM#N7(E8-_-&~Xv7g7=y!Jf2{JSOxWiLEt&+ zSLV6u59WD%9m9v{x^QkbU*&*f4knCc4d-TyR5&-wP~m)Ri3;ak8LBF8yF`WO)Gu&c zt`B#VyRpu41!3;NzE&zY9SwN3GSMGchPCP`makBgm{+N1nAfT~%A6!R7p#{WDYF$9%B-m{RaLA29Y``_ zPuRG`*Qx)$5AqE4I>nlrSm@Uk&Oc2I>gx*UpI-zz;WfH9Kxz_PGf^J%8zTOBhlovm zgYrZ*h@((9vVKzKXMRH!VBP^`H3{>t!ThdzocVpQyGihTS_Ov!O7I+75$C*D#M^(S zHnGkg6`m`7BKqLRq7Qz`s}+4%dka&RApegQOj!cnBjQLuQ(v?Eb9IpU3lX1xQ1s1T zMXde>b)NN4@x5J)xxLKt!^#WV)Q4UjV?LvdeRJeG|Abyqklci{+~mswwN7rg!=nogY+3mj9@_GoR&md}Ayw&U20a z&ln9C@HsVx`B%~3FFfI3 zF$kJSK#%MTY_5a7PI15aK^}*Gfyu;p8^+&B{1c=Ue4h)-fIf>{6t;zX@j5xo_O+}O z7h(ETRuS7^;zBViAM~>#K=ReKBBn^j_vX?ij0))7AYxkb>HAooN8it!SH$|}(@j}k zUbkS*qq{TTDq_is>fS8BUiV|ZQN$qKq(`tkzaGbYvkv>?ZF&aFZx?YjX?iis3+V7# zM?sC}Ntk?9NQcMDbP;b;Sno6{pi@l5^cL5ju)Ku+lDVW#F_+TEm`m&MSXoAg$I7xg zJXV(H3t{k_F`b9~t+vK~WPB{Uev17kE5*{7xbduk_CI~b9yifvkZY6Az(jty^%)bd zdzxa!>yyuz7{&S&XXQMG<92-!O9R_-y&4D~Yb0V68;E$SMk1c7u`a;dHWe|4Ep;81 zHy81rEp%g+x7KZ$TZ#CY=DI7(AJpM>`_?+VZt#c>=T}{YpA6Ttc-zNB9OH2PJj=UM z>?r>9)o{In<=ymp=I$b1tEYa8<-PPf%#Z4DZ0{}Nko)MbS*Nc)#N1DxVD7KaG7r=j zm><{SxIIY3lMmM6_&h}T(i0-Kd8iJ@>S5$#m@U>Z9IHo)c(7+g{Bvs&57tTd2s{Gr z=V}Pmq6E+E)zg_f=!L+>hZ|~~!&Arj?U&LHoQL)C&1C9TD>Ic=x$z$M?myABgd4uUO~uff%p$YAhcn%>Q14 zz@O`G%=^VL>vR2tkcZ>XS7OXLAdXG@#n^H{9H;hE?6iq1+eQ7w*#CWD{|~5-82i7& zc1Q;M$FCH8wjn^mdLX|;c0L3b9;}@Y3OgSpJDb?`gJdgnTsSCv9<~h<%=biGM?~!UNfB>(O2k_p6Y-YEh0V{2*!ANgcKxh4j-1o&xI7ocd&$q~K`j4Ok7oW| ztns;^lPtd^#_iw5SbbTiSVxO{zMc~eEa5|(s-11Yy)7pn%RL9z@0fNxEZXr1X_$L< z$3*P$fSe6Zg5epnPRB9U z2eQ$y3FmwHo!zW+ixbYrZgax*R%uQp zsEp}f*E(29Grr{%@ekQZZera{T&sy^4r5%C!G7>71)uhTfzam2Mabrbo#a?+^K`Pg ziFHpGHcuBeFDz_cQrNt(xDQ)W*u1caohT||&k8$vp&Xbn{__@tz{SOV@RB0-thiH& zbxJz+t_8-IhUd#A#eMKH;y!peC!DueaF%mEm7IOdm7R;scRJzqpSv8mJWa`0cRFx+ zI^esUy3F@Dt(fm}+A+tS@Z9h&rxVMoIpMmkdz|pvPHiVVR^H>xW&OCbp1HQOojLC8 zWUl3W#$4OE0Bron#NrzNDelCe^tGVfi@^7Na9z}l)#=oxCN@5ue9ZV#I=5+(YHj|c z;LAS09eoM8H~G^2PHMdMrMl!xCN{n<`I3o^uS>pU`f^h<|Wy31K^Cd)lX*Utm)kCyJZ_yS#L`+w2 z5%1T}iDQP4Ft)I{LCU`+^8lwC^FR@QGRO(fm4-Nrh0e>&Lqxj_blzk6Q0F6HbL{Iv zes20mH>$g7iyl;8(=R%)O_D(#_?3dsB?L%lbL20{<|Cb)6Rpih2%C=(K0K21^wlU~ z+cCnP<3+oS5yzwP;&?Q{!TG!?|0q%ZG2$38g7=jKU7Jz>*0xxFm^)q6YliTd=_0m&hUl|1DK6C1 zeVVBIbW!)oBsX!hlj&HAWlQ3pAf@2@k$}+-$oUdD51HefWjo9kc9<>dV&W2UbGVNq z>@Y{zVV@VTVP+4)cW_7707d7j{@A?2sYsFi+TFzOch=VTalOwH@vxJ1lcL zPO|>IRQU5!QI}hgiG!$)GA-y_EPePW#7BYb|JsPBHKGIlOV81LHJAn*a_ zN#<{z4Ca)xgZYqi6xfWD9|=3`5q8*3auWw`7&lMipCF~+`#LelK;B4pIOZg$SbsQ5 zcEC+AP8Gi~!F>}^_fw+oXGGmkiMpQ=b^n3tZpwc`l>d|{|54solJ;o+q~NPl@EgZ= z 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�P{@eyB~V(D z9!dqW0ve=6u$A2je)fg%MtD=5J-CpPGOyh zxTio&+*RY3y6V#Me>*1AQ|K(D$*Joq5HIOM6p7}e5P#BDB$W)B)&FRa>*{}usSDIU z5AKOmeAL0MGzsTii_o5ii%<3eXRlx+;zt*_=Le&yRyVxxy#;1HDDTvLk#^P2LYC-3 z7pKt)KCI3$09Z0Bjne_#2(UPb<$%7mbf}Rc*@!_J~UQ zqm0+tyx2`iVA#n~Ia7?UvF9SVGWf>FOUqI?mt7~waPXye*>XY$2iNP-j|ug+;XDTFp{-NyMX%u1%5nH1Nv~Qq(2MCP z=vrq2NrQ`Ehi-13{!TWOy_bvgycJE%vQAnje3v>z> zCx*)k-#HeVgmHjCoT_ufEwp;D0(1xwDwl4=b=8K-Oo(C&p76d>;qp1)53nNu0+!WCv4bRcHiBe!(oc2_Ll3)jRR zDHc&?iDf;8!r(%y!Vr%AG(AKSVk@wu)7gRB@m+M(JwOtw)*Byge{1KJN?yC9B&h0r zDjbbZgF6#QIaHz~A`4HN3=3STOh&@4g-_@gnYHHpBVIof&xuKe%l0u>1CGT~<31BE z8J`XAf)P1nO-hu>qHFVIW&J;?a=m5kz}=NpR>~SG3=%}$FO7u6aLz8_FY$>7Rub?) z>nQ$GoxJ#vZ6PkNC1r>XMJrg9ASJ?=t0gs0ne;^<6+)SSx!^e23*$#BpKQ(l!`kXb zEG`K#H__nGzoTWt`lt4T^HH1%pLRqdeyqWAEj-{WW{q0Fy};QVbco;YAyoq^?tAG+ zlGRx`)cSzS4l}4m4Zk^yOV6>|S8NE^Ex_V&d zd5NH2vb?yk`HHrd>XJ-)#vm?8Jqf<6OzJKCUQ!Vfxr~`*Nf>PU9LG(3sCq5N;G(_kcLKEAwp-9F*&=* zz992vcGV$YWw^XhPlb?fUE~e1=U`N_?uplz7SE{<y^Y)Z9inzk4?`Ri>8CKgLbp z$z_yfui~QyC%P#ZK)GRoD0^bk0u~g^#B_CSK#7qN6dxmq)jSj!z2gj`<8|{LJ}GYR zZnRNSEsSpTgX#Hg>VEq|;6UQC_&~mKRas_`FcJJ9Fr`Ajn*lIeK*Mv11y}=+Kr(SlMx_YmdgTTJ9$8*31pU$Vdv0XWET8GnYCs> zc3B-H<#g|tR1lKLNwIGmB{6+xyE4Xm{d|9NxOeb!=h+4?qgVda5)U?B9~|)%e1(g! zmiYYW-**lVjyM#wq}`3fojv(WT87`X)cx(P`Bu?~!UH{sj zMqiJ*Pr;4Po^ZwmdCF)jMvDg?xBdXdMu43O%QbkH*xlO0;{4H2M8M;^2~P$IQ8l!; z_v|Smc57>Uf8$_#`6(0ElJv;(2sZ_o(afYxULU=}mBBK81%{mMzv$g~VI#p&5~uoB zN*LO~k_Ab-rMc@BT&UHIcxZa@DL+rGn5qKOJ`X|rf*x|Di_5g)p64x(9bX{>N@0V6 z(iq<4`NodkB)VRgG}&D)8p_ne{iAKq!B34gGDnb^IQmB3%BPhqps%jpP0p`wJ{}YC z(JM{Ha{&UAP>kKCVS_?Ts%7_vpf^iVc z9)3oFkPob#NI9c6-3~PK1#22qg?-<7(VLO$LqA3=B^^^LWFl4S1?L6ZY;GtzuxqnX zQ@M-s4u2R`!r;@r3zaa6Ju5~W-^CwL%AS51N|RDYLCs=cxS`qI-V`^Oyx4lig6JeiC!O46vjWdjFJBI}06lY!(k3UUx0@X?15J;Do)5!qXQq&aMi~Mzgf^k8 zjz(j2d6oyE$T)Eth$vxbXq3nY1ccFo^XN;??q@SiF>^79Mk;OsJ}{C*ateJdVQkGT zf!nhWcq2r+p#{N8sBgK@Fe&RY2+K$N&WpGFldX-z4LuL&({?ssbmOE0+-c6FY@@0j zReOs|Om_Qm8qO}|OQ&ysYfnCP#wnD-y-uIDjiZ7$+wqnq#?|37M^q>4 zwpV)fC1;%SbD+A9wpua$ll_l(SZr(=Gw zS~oF_{V`Yh>l9TOp+JP%NaCisMRUBS=TYZyA z08BU)bD=D)wHEV^$85i|OcFIOo5krl)R7HE1dm2ppQ0U>zFu~LDRm8tExnOa|)iwjyDG}2Ml3UC~ zZ!ipzRX&7F6cf=AH^b1Fq5ToduDSqg5q*LuVygSi@e<9p5(A8mSZ8MP?Wjw*2}Mf` z?)Cq2uteF-fph4wVkO$tdO(dluxs*|_=qsrM@m##Cud#@lxS?u#YxQ6x-P5WGQu;b z07U1Cl4xsgO+7p^NPBUNL>h#+#=w%s@>6BWkCsKzJ4yPp|M+o$L=B$|l-jfL5vdMu zYvB?3v@{MDY7vb0X>A+$+HP(zsld($iEG7o!4XN<4yTpRdZ^Hdq)HzekrCZjj=MyM zB>7U!g)~wIznz~~8w`snXm>#|fXF*hU_{!~og6YQwgz8_i|Fajg9I;cbO5Bf&uRQ+ zk)H#;E_Eey5Cb8vcO(u4;-&wrGI3wP&aHrm6!DJ2UyysQW^LXZbDUxB$TX_?J80)q z7ww>TF_tvMbIdzZ203_gPb5Uz1M>s1+!F|qVgq*!-Vl?nARP*^1p^HTzBvpcT_iT8 z@w+bw;`bb??D91zD`@5Ms@ak>ZxsSD1|KN=XOc@?S9mO?KW0yg(3(L)Ngo{v)gfs_ zGZ0Zg-w{cjjp9UP%3+4n?zN)=NoJyGJta;m2=+2iL5f%z57SgI6Zgs8+7e`uN75L@=8Rt+! z1Ixmz$FDDkIEU1M?V$bpLYPDF4c&hs%Ao-SQ)V$0Rc6A)RWY|JH8>+lOO8kW9?P5(G7tb_tEiK(yvZ=l?pR8HI9NC zM!`5^cCiiVB^jz_Ivzq!J{#GP8m1&$ofU06z#%!1O&{No6cGxC*slw3=(cNKN8t_0 zfh~5kQx-wY_oC>Aej6ec7XSYP!41J0QjA01&BZp<3GANGhLHu;iT#Wt8#-$~up#3c zQD2=!?Mq*+DC|zfHDquj(Prfz2y19~?u%-enaS(sf*MBlJuwX<^WKn#nSEbGLx#wr zLEvuz4M|}=bQC~1v)bOq;S4FsiW!&mgXFJ@W@uBYmAPPsmNys1GNij)LVC0+uBlh0 zwP5E08A4Lf%{Y!BRYr0J43uJCk?dg^#Sqi@(~CSZN_w*d$$^T49M0o(WF!?7vG_Sa z-(l=RRCN-?3v78y**m>6ym48r-&Pj?JyBFUiBG3@#0y1p?D`CkM9yP(U2VpiJ+;aV zJ1Qfs<-w2M8Clf!8{X`P#Y`gduM%C$PclMDiLHdVeE zYD?h9ZeSel#R^^O__OwJ`gjP7v1!9L2y6`Q8 zNeo_cV1iby6EV^O zN|lt{Dx(qP1cQcOQ1A`y2z#d0%1R9l?O1gZt$3H zXvnxFAjeRCpqmL|)zyHJq#RjuUtU#1I@t*#GM9$t{qV*UR1r^9glXo%?B5&mgqmWP z%v(j{8E zS&-sp<1D-)@!;cykSgvtt47#aQrqY@^me+2>pDt3(&MIwcDR>|UnT zg;;angXO8u&SF=?9oUlxphu);{eWl(Xl;Ln)`ls`t1^?$Ljf z!~5Hmjzj0jF??Y}9IJ_%(mf&6#h#)QLwC0TDe{O5s4jkjVQ*M|c~Eyz6f`4SkyvVZzFx<4_|yKv5acadS{&W8CD5M_gya5Fkvfip!?cL< z90iB_q`Xp+%kPR+Go-3p>{cu{a?L~_Q>d!$lf1`ZmgXdF6qX?F94tB)$>Ba6FD61P8;3@6aL1_0uSpj<-;$OyB@&WkE0; z(#7;_9UssTES5al(bFG zNW3@2=*BGg$%0roYQq~Rf1yZkeRBb8R7m1l9}6csHx1qw3r9tg(x^Tkx<*D6D&u|F zuSUWi2zF6>NW{WXp`a~(6qmgx77k^7jEII8#==n%rZeL2jEvZ0Nez}2YGmkdQ7jy_ zB`z3kA}({tE&~U@JWvL+_>Hk}R9g%*TDd0{jxr@j-a9?bR-{3e^sf6Uw~ZV*9}7qA zGJg>Zhh@zMSMxm=3`b>|M>htqcPxp1dmVz|s3enF!EpH08O4;UyE*sJ$k3D=mlza; znrhRHuu72){#~7UkL(r@8stNTIlqh|0;O zW^j=h&^gO(6b8~RI2nNtSzio>LqB@ffv5vB%n&&l3@5UJPgXFTpxd~s>7wC8(d3Kw zN5i35xQNsb2&kR$P2dTBjV>3ePJ6)zY>=1owi>Wc?gG#odVL_3a#qmq!C zm&7+k!%+jpZgmbENvTaCFo^e*508%e!D7tvZCh95n*ge$*uOa%PNl^zJ{JQh(duY8 zD#{izgs6$FLnp+4ax@%`QOvfFhNHA%2aBWObRt<>HW3Ub+8ZyM1wJrUj5!e==|1Vp z5_(|bzgsYzu}vERI5}v{oj`Ew{DDvae(x=NH}wBRwTNR{I53feI3#ca9H^zcm8@9>BfU7 z)^Jcz@t?caF}9Pty=8X^sSNi>b>+y!>JnQ8(@P-XIN6p$`4a{^+7EB-p`}B1oh`-s$ zof`o~(a4?sG8it)2U+qCH`cu55SkX`VGJH}Jfj)cdjIL3Dz<(|J0njR;N0O@>J|q> zc{Od(A(C%_l2W;AuNyZW3%FrpJ`dz*%GOBe;>usWo5~Rpwc1 z!mlzeu6R1mgy|@RGROL1Y>7zbUM+#la;|Uu$HuE<$wNHBej3JoOole_E~D!+bsfrV z(+((Y^F1MF7>-vp5(}lfHawn8B(iUkLx>Gd4vEGmotr-npF$Iu7jZ1UHPjuI zDFMm8&9W;0#}(H4uFWE&_J2%1URSSx7Gojp)}>T8h?f)l;D{e17TZv$n)6P%T&P@LtsU86jaY*5^k=c zSqq*6*&PPlWedgBcf`_Q@r2(B5-27BLh*e2AMxf@*M|uxybafZ%DUuQ+wc}AQDTR% zAgAhq)nQxdj+0^(?sF4E!g!yB*g71bfx)PhE=kU>L-$O;42>OLftX+j+^`2i^@^YV_%)K5wxPj+-eu|%E{yOJT3p=rQ@iZAttL4A*n1kiyJQ32Lz z>zBU;3DCt_t);tEsxtR9pf$R}SZ-{;MmaCf)0+pHWIkgwr#Ebn-Dpl*@fgeL&BM&E zk=#74gdl;_o9`Nr#4+0NO?kP@a;XU8pNHLR!3-k}JNTC$AM(dS}F zi3kZN4M5q)s7Pa;8iuS%l{jtn9$_a#O2h$Gk;nL6CP7z=XEzuIsY}f>&s5|*@an^9 z?AigyRr?{m0pjO;KPIe^P72~ksAWXTkB{!2OUK^|6Yc-+oGpPzr4D=I4@QhF!vdg^SjFk;-#Lwi}RO_+Q%67)u6pm z6CU?aY1&d5AL(q9L?DWL*%+J> zeQ_E$2)TbI=ONF=(D{-vGh>jd$Rjg3tQ%*?fDE~mlf2uYWP7I=B%rz%xc@qD_ZGvX zskmKgA+ka?t`H&?#N!!lZ}v4daa;WrTU}mVQ{`@^T${8QH^qj@0|JRfZX)>`1)Hn{ zvTJJaeuQtpq_&)a7#{?6M*`P(vMLuCBk5a@4YLI~SsCk58~Wfr z#5t1X@+Sn4snR`8HOAY79Zh2q=|pk4&`k+WB>R{`N!OScPy?)J8L92UDybwn#O;un zHO7Bj&05Xn6}1(iytICY?(ah00HJ7gqIVay6cVYqq=5-0NoEM+!_+g)Fj`|O9?%1< z^q*%3JCh?q(ehxEUmFKM?QZVu@i3E**V_j#{=$n)eje_;rpT&({^e-Ytv!A+*`<;nvO%c=xEUy&s&tm-^>u_p zh~+2sh2ICf71Yqd(^x4=n0 z_K54W8hNht8?>Zx)C1wC-m9T@t+4ZpjZ1G%#hu1hem(@m@*J%EB9TUH7sm~ggG)x28ZubdQc39-l1S3nH7u<<>SrdCmsR@l};x1rR&*A$F$zqbdp?&wk{ms-EtC)ITv zxSuHG0!n>^4nMdL*+g!%ku6Bl6;jlsT$pQ+ijiAMeI(mBH>4J&Yqzv7?OtrjBQ>R) zng>RfXKGS!IvDayO{#1J4ThBtAvNF?l}$Z>V^8O#B3T09y43U&Pbyrvl@%>T*|b@8 zBM3qn)r#WfZ;LVN6rguVQDZ8jmsMudhx!4%)xVhlw14?Js(Le^TY$GoPw>%dVL;S z?8Fe}-A%oPucz*b!F+jd>Arh;&%Uj92(me3$V@+b`B<1nmexX2w$J(Fca0LYoqc!W zTxbg0e`67poL)_i-{}=W%*Ea16h|3+m+R7{TS|PqnBp}lR7ljW3wfB)9if;pCqKz& zN=tDymyOLo-A8us$kvZOgftt2un^FiVq<-AW0h~sttZSMn!<+PfY)e+CSJrRrvI{i z5ox?g(jW;|HJ@UEr3w*(j;K$p^K9q0y2@_fXV+)2tooEIo}2#bbodhe-(oF&eC-0d zbnnKDj$gwJvn+~f04}H7_^zBEtWoTX&I`gX#CI8<4F?91z`aeaTz<0f!r(^1!)zY` zzt-V*tyIynq&DAe3(gpAd&am0i&ybL#SN*iYE}~6!wk6!>#26@K$T&dZLb)c2B^Fp z>j@~^yxrAVQ%u-`WS%oe0KpT}B9XtklL@s{j>SW_mPXrGD5(0Vg1(K)ZJ>pu&)%AD zRU^z{v-;E@j~A2}KAOd8NsFCy9;x=pL_P}ur_c5Sr50A!)xrl%y*&aeG)U)&9pbVE zK#77qaIxNXn-GPPL(Mv`4Wj16iVno=Qto=D3C`+XrHn98QW;qL(vGQBf>TA5fEi_p z1h59C^L-Qn$32__ECnk#5(>nJx zNagiD%sm0=T|vjA|1$^X)zdH_Gd`4u1z68>!s&=jrqD0E=45HTDQ^yH4YZ z8;+lwN;+mPE;2$U3S^mY(mEUJpnFK#jk{>7242-~k?aU6W6UCv+SfsxXEgN|0Oy+YFau?y^*p!y{~;LEVhlB5 zU=0cel(mkz3OXb9YOEaNL!Qy@!N+^f)b=PNH%%r=Xu(or--^4kqq{#mRAUuBUdXmL zI~l~loVq&2q`Y4G^pv2@ymRT?a4O+Y!3jm0+;o7)-w^a+i%~y)RP_x6nU1pEf~6$S zauV*S2z?cJNyg)BX$X0@^r@ttfuf^aqQi{eUWp<()qTbZTD7^83FZg{~ z`=z}Tw+-T$H2PZJbagTYmik2V^n3>$T}#;5l~c>XW<76@VpU;e2Nl%|1GgM9!eE1> z%MCMr1XOvrC}?nA7*k#D#>#z_sUWz|*~$CT9VfrMyX`y)GOZ}GvT-n<`%X^p!e<6( zB8Sa?eo&sph%iditl#s7-x?|(V4^aCn9=XXtgxyUi#u~07M4vVe+Q{Y{BjnBw~!!h>@(O?AToF%w6FV} z_&eOsrR3wQpComJxE?eU@v`1Ds0HMP9KXb^f?E_meKLQ>xF*zq0g$|F2qfE{2i@n& zwLEGiL6i*k#lm3TN1|<`#=qTRMUqx(T0y~+_%Sf07{9{EN27%R+1QWy7Q{_3`6w0Q zK0J%zRH-<)OmEM)E~YbGEqNfi?Wr<(f{~|KlvZI@Ex@>5N}h0fcDyh*9Q91E&a)mD z00YS7vj;z!VtKg^ML!Zt1Eeo13ptsy=iK*c|@MDFLhcXsuAFcfAQ*`f&l(@gTU{d+D_h zDYN*h5QYj#zF9n)FHFhay-J4>!v*m&P+8o>nUIDHO)@giqEas+nuQTDLq>BGv?&Af zDxhw&m^E9lSj#0~L5Ky^hm`qB?aB6>Lf>iMGDl zQc=&2jFPTT2O^FfI882^5Kd)yU|?k{55JO(T&w2v-OtzvMs5+H?Bmh7oxQvJc_ITs z&Vgqa$lx$|yX*o;^XX_e#JW_Fw;d#G<%I>A>xR9~KzF(r1P@TJ5jDs{&ANqLNy;h9 zZ2z#mD;>it3F1v6ic}O!g#)eZ9Jahx8z7c{1CnSPLL|@Op7|+DwUK*?uBQacG0BO5$+Zk8Z4o zKty1Uy+r~{t->}w_1S@)^OJzsVP^1SMT+H$vIp{)?{n zH@9COych^Ysh(b?j$~Q4634cPwCd(ilrNzDkUv=))3v%AQ13D4_QC17ZZpe!ljMVl z-t!H5v=OeA>0r$x3w{>HP zQY7ww!y{nTgu=h+5wPk)WBBiu!+^wS_exRurRSa}6e-eORUD}qCTf;TWkk1D^L8}iahsTyg7ChU6i^3sL`Wg#I>w+ z4L5?d29%RX!|j@|##~F6+5Cz(z%j_`udW=ct?W+6BZ0^Xii;1a4XQwOW=3&)(`@BE zwCV8OIvCZi=8I3T54Opl>q6Y3e*+wl=k&~1tG1a{gDwUzde>W^Gk@_0*aBot_o!&K zmAr)G)cA?3)Oo`bU?GaRtS7+ww3sh|VH<%OU7u@aJ@xTKSos{`onI3l*`PltqYT38 z-c%#gk;u8t7SmG{HEV_FDTfCoW8gTY|@L%`@SP+Qm=M!Lk7RKXL6d>mM3jsh$HGfo2CN+bL#DHBcMJIuQd_$YG zrlTBk95?Tyi>{cMeC&&G=iMb%%*+$u$cl}po&W=0vB>TPaFk50c>fDvVAZkGGyrsi zU^n{$SOs&LQZBhb{{mPApr&tr0j&Ds!1V&S(+r=DUjR$UYCJOSC~R*M>#0+HJ)dO!SS+KaNbe*+=eNh1f)fmYeUDU)IZx0cThkd za1b~cl+Z6X4kiamC`Gh#t%-JOX`=Npd2{sYRaRe34Yf;0y34Qi>3amOpJ1r0Fm8`C zBO5w+>DCkrZGGvxyXnn$xJLePcY4O(TaSZ74N*ycJG}_ci9CPtwyA4OT@wE7?g~2M z^3Cj&(-xYm`esG@ZgB36un%)d*R=DO`jRyx_G#43D2JIyxQK`!<6;MLyk20l@aH4F3U;^TA#MjtG1@A zim&!IZF${F9-rtXheqWGY*j9;3$lZ^X<(3_%8aCy0zvlR3T8O|b}Lc@Bv{#xBnlSv z-3{98p51g&)$7F@e%0iq+fjfp46}shcLJfp2kGzz#XSJ|xswP{NSyKBsv$z-)8*N6 z=wWl%F={wYXke?fMS27UrqKtT<$Q_N2I6feV$skpB2I_*4?!djP9op-%7Pa(8B+ z+l2khkJsE&?dx7N^0r?+XWruX!T$E<9(E|$^F}jAJFm86HOw4Fv~qP8RIKM4Fj)1P zdAwg87735QJk5#(ZByDAlau*7m^o{DsYSY3h<&2~sm_cZT(t)*7?A{=Cbc!4Y1!G< zk~D@FCmzO3`?2%u+CST_^Fr+VLn332ZB5;#F-1R2yTlz^bB&PT$<7_kJf!f`R}6jY zD7#dtdRM@cyKcFx=}rpsx?C>U+{+{xde?c>(Y*?7i7xMrLQkUW-Nohc&F?|EYr37% z0u3@W?OIwxs(Ao)27EgNX)!3C;pLC(Y zRWEL)`Y3v91Q*vNts4{EN+`I18p?z!LU&d^d}NZrhyqNJ3&_NhND|)yNalEo2ZBJ)q-;A$%Z!J+0zwMD^%TBTMz_yWb};5&%iC^^sQD7iHnCv^4fs zO)(y-CHX!#|5!q6%d*V0hNDqxLya1lu}5kBm%bIWO5w_b@mYg!7T3T)me+V<&T~RW zST(`8Yvuq)H&dk|OQ6M98LjuuC4XSwtc|oNp~?PZd9@jim%bfneJ8L~8hG5D7-ex8 z3x{h997?W2l*noYYh5mm)#dkeCp~hi^2?6CwD|d59W`j+2!9m6^{znQDBzbaudp?= zXxN&|$!?bd`JGVKquS6SBq|I0wxKu6;06*z&d(q0Vwk@bB7x1#9{>&)0(X~Rn1qJt zrISE8QjQPiw*2QK!S>ba3;{%z)-Xp#mYSzIKINA;?<65y2}KLW0(%<9vWy*ljwRdm z{Homqp&QHM8P2h=+vQm1sRcNO(UF}^YpN$>DxJ>JO<_b0v^%7Rw7IEDQ~27ed0Uag z3p54wf~FpX@wn~*0k9W$x4{Va+ z;JTlVJ!XB*kD0xBn9>!*lN__%2GBNJDOyWMd!ZHSR+eOx6L-vGzU=h=BDp4HfE5t@ zp_vgpiAvYhjP|t~GTZ!jHQFLc#cL}(voNcNPgpx(V-b5;qO(Mc#OTf0ExV0T#jxiv zB|m;uBggIe$lvzjgmNW$#~uC@c=kRdyxaQ5>6`-h(J*@ z6GL2^?a%tU1>ld^>9WFb#&%eOLe$H_#H`QauK^CToQG`8;~uvT#!b#3s5J>AU({p` zHUXL$ZD6cTKw8|$tgV#(jl8pvb#O_>bNxx_+D)-$BybeFK}s#tYP&Gc%7LLE&9TI} zi;fp_NE&RRkr)9%lfYd~;fZtTW=!FwF=e<# zxicWe&Nd5Kv{)yS1+a~l6h6^r5IK^y%*&G-6-wu)X0-Y^PtCO0^S@bW=NexT^#4)$GW_jU)lEo)0E4#&kEaFgSB4J&? z^(Y$av%SuV%05!5GR5YyYK*e7oP{zusmO4&ZXcDKysG@^7(+7~Ud>FArj0A>5((#! zjBd6=-O9jlxHw8JS@p4~`CJ(@2Ff!q%y-JF8|G_e5VW$n8B5AptYoRt&1BI=B&IdE zEZXMDp3Ax#5~XE~_9b}b1GPZIgmkuiW+}pQ_}DLCN?8c4gke2vQ5wel@*COYH#O5i zKh@%=*%oVu4oM}8eZV#0B+k<_0MKd#;KuPI}`L?KE-xCEBC{mc4 zN*odwYKVPuy%>yATAl{ug0U>J=1+@UT*&`Ei|Dk*TjE5OZg%Mt+je-CyJT;Ev<74B8K91}Zqd`S|_q>BkG6__m)5U-nX11{TLQGY4~V z^vAw74vAyjbTvLR|N4Agox?Re4|8rjU zhAz2(B$70nwsYy`|Z; z@z8lc*J$gICu|)gh@@uC{LtyP@q{ek2i!e)0}u%!Xi+<`*MT+Fm5bjY{vFSE{o?T3 zUhn3s#NqL-9&5%F75~&S%E<}FCh)iz(`*?nE)atqz1@Yd>(V{YlP?x+=A8Ewa}RfQ zGW<8LRYAjLfD-st*H7iwKF=-B8zo>)2^L&@nGpfC{kJka%HL<+E5 zXeGq}w0Prf-*Wdlci>+CK<`5*LY-eLx~ruL*T{dK9Fiy}E?yuykmCK*Oa^OLC32LH z#EJnYpp?v>f#+$-7HXH$EOf8or3rCcWua9W?A6ML(uiP>4Au?^LHU!~uqgx0;c}1& zwpjIHSqtS$^@HncQV4ZUiP#MJ!O}+|t-tGdC>s9b>*4q9zjf}N?WCLQt7vOIR~N3y z90jnT6pJt-mL?Z$ZW+K4B)~J_9X_icy~+@!609^@_QT1ui=Q!KU;?oe1~oiZ%MjRn zgA;u1D?JBNp^}4!h)wX@r*IzH7CAE6&*kklRt_F_iwEc0ncxGIR^!B(IAEYkqn)evEn%UjZ>QS1s5QcaEpitF#Nw(oWCJ^UDy0 z5~sR;H6ph({5cp4CkodIlM#SpJlv zRlRjWi=tx0!%fu3y_YJ0(UO0{;$?CtZWrT9&s~$d0e|`8Y0^Aj7CXxlYq9W$NhXD>f85Dk-Pq3J+4Bzm|;p5tY0?LtF8FbwpeB zYIRIXjU;-?sW)+BI0+d#&F?X>>El$q!h9!6U1Sf;>MvuuhFm|EsMmH0r|6kgF@p5W0+Md`dB zi`{z3%nozil?M-CS$8+`F2Skq_Kc^%YlJh^@p8!Ju zZ}c9Q|JNr!AAkI4Z@HKJ$}trtMB}+^?D;wUI8JULe3J&^l9sXL2*i4j0*!?=pP$~Y z0kL?{$9K0^pK#hX%7grr_vz&J>f^g{-V;bmc^@9H9>;Z%#X|Z@@Ny@g*$j@%!*JoN&Ic^p}EUJ(1ZsrDK`>YrZ6Eiy;8)8N7)Y;SV zke20qU-_R-$etbWvi$Bxu4;2anyD@ROTL^HFXKHQwr;BNEa+N+V@1f5vA@gWykD~@ zd%g&5cOfUGlfltngtbhr%y09S&zxq&yr`=EK6_Yao8(n@&mUEcUyVv z?M_^R>9M2d=(0{ep{b=2sZlND(AuN5+$1Mcb8(Xz>*CQGQ-^nPctj3!PK==?wB)Q* zcE6QXhcvq5Ss-yr*dcuO7gs?ccsH58m(NHig8-7bo^ovTNYh>-G?4Zok99tRlgP2| zuB#2?Sz8A^Hwau&8F7vmiJ8hejoMy}nFv*rh`6jo9#x!ZOR>+LE{2SJ@x)F=SeeT_ zqcP6l2w4BA^370N#{{X>QE7oos5!& zEKBkD*l%S6Ti|s%ocTdF%rm6rB|Eom#T&}bPa^O&K4X^&ky zKb?jPR?p^`BXEGz6x)o|!x^^{U9g$C6bE+C%`gT@@5A&oG}y>7=lqP5KL8Zf1ld3h zQ-$>zWd%OES#>33d?D3HkNH;Yn95RfkyT0-oe7j^bbshljn_2t;~CWQ<7y)i%eBWu z-iRNrRC-_*P)V&ckt02zsYw~GG8#!vB+Z{(-VW^ueWupR%JZE@7Wj+is8p?)jv{~Q zd>Re5yoSQ_DaW_IR$x#X6vb^AMrfMyVs*vrT|==PS@jb+ zQ|=my@l%832B}7_hKyUTHiq&8;Y{T3dB8}L4x~nMHKgO88X|LPXkNySL44La!2?u8 zg6qST521=C+f0CSEyhjw7m!!%IPHq+N%Wl)cX*m07PQthLA`vf=cGIWf5_+<)S_IT zfY+CPIl~AQ_N9)4jF`$_Kc>{)vKl3k)z-S|H14K4@BYd=fmTNdwT{gEb*-fbH3d6{ zQ4MpW)0|xXn*EY9AX`TS?ZP9am``$)HVnV9G=%>r9t-FsOE$1SYF$J*Bp`bCSx0tTL(202Fn$TI5`bYqn z-{>zI1r48Xw2HfFzk{U3FsD(|CgEy2rqK;cO8$Jq-JJUcqM8LKhFBNz1H_73Qvmxd z;b*asr32nvf??L79=sL{UXN|mIw<=*)P0rcA{VD5p@7}1w7L*$?t74Q^!XmT8ty=s z=bFX1+}00P?|>W?FXTv~`Euh$YZ80hFi0}wRByC&#S(7?lc409WV&Vyc%?%PAsD1^ z4Tl=Uf&s#tPbr9)Fyz+c^DwsZ9=`mO2ue8}2`EP-7lnHaKmH=+jp{@vTBGWu2#`ja zd&6|4hvd%fO}T>nM?6F7nUJLBuwGHSfyOlI;85ttO|n-5p8sU8kbbkIrkVBB?B&@z zOjpVuMY^4^QnIP-6GGHVh;|qwi^chE5dU@<)18rFZ~h>ChJ;Qv{_xh<%ybtC1dHqMMu{_6wW(Ih(%%-^h_PU^t~`nJ#j z3<2&a%uW+KvM!zYu7SmS3yWvD&dKzpaUbB0G#wupA47oSIl!HSzZjenEuICV%Ilj{ zlaUuD(xc2^Y^qpqaYorOAa+(dW@&$AfV*MR)NnXUm%`4>_MZ55>cKl6e=Rb6LwviC z;A2R1>_9Q>pgIEA%#1X~IRP;|=;@9GWCY!E2^@B#j+gmvF>xIiiFBdON3jQ8-g_oY zo&a~M4t*$;oqk$KiJuTars|y31-L^&Q=2Xge_en(+HTHNT7bJQaU9t$zYK@YVq5}v zdX8@i9>PNJx~~9t_E1(UgqcLGV$BJP&Oo!;>;v2lQ$H8r4!CsK`~Ly%{vQc&r}<>X z{$l~|)CkL6Dou&{u+A3YPFXBUs5B^+<;Z@~MYxN)$=62_?vzvPx%rSqlbQ_3e`qN! zUG1JAiF|Q{yWZMWhg6H*={fSB=5t$iG2iHNTh}$^@#MeW<2H8_0(9`M&Cmbq9B$jn zr(A`8qrYwY4eZ@*+u$vz%OS=(1GxL$ZHtA+_7vW>ZHa@B5NC`qPl2G36vF1u{$1Pg zXY{Pa@`GdyY9l;!R?45=$EIvzSsKR#?|xs}E^Z?kh*ND1mZw5hm@n`bzLjm= z??~Il>(1G)zXm_r2X3uG4lN4HSRRm>X=L;URDVV5{!Z8~i`Ok*! zB>_s&SS2tFvW(xa#aO1HVbqeWg(@8dtw0&gbvBEvUXKb(hSc3CzvqM)A9A|;o>|T}8GaugW2$_pL3cW1!Cp(^$||Z z^A`Hd)@B2S&2-~MNVx-%6)#X;=>FIX^|fDteVoIMZR?JCL?B z5P%oB%LW)I?vHfHDK)b86WXeC$_NeZ!B41@G3PS2 zC|<>Ufjkt8l{x1dn;xtP4HmoxdpT z@hEKvv2J;7oObX7F~XmW(>9*rLhs=?O>w_hX4)g-u>x$5`cOQh|0zFjJ=`&G;eFc! zXt}Z0;iGo4-G-$o$=eee#)VupA8Cg#k6u5+QP?>3-#7mEHo?I07&dh5rmJU2G5T;E zYI=j@T5p?gKwvkJ1HLiLBY6AD(2vrDK;GiDzLh2f5)5pVCIsS`V3Z~VvbzlMX;Vvo zeZT`rqw3DIkH|P2q0AEo<$i-Elh3W|Dm@+UL@t#2BVx;v*39d7bl+=wZ=%|26@}a|4sK(uZ zfui&}4VOusa%R5!U;xIfR95DD%}HhrHHH+0VjD6>a{782a-58KIVZHk-;91PDbGH> zJ3Bo+!?*ugu#t&;jPkShK@Un|d--qYgC5AW^`sAak0S&w`=F0+{!M9a&Ii4+z!iVk zMZ!^C-WPd7Nw-`#%0c*mJ8RDP%iQ%l$f#g{^F>j^FfJg%B8R!vAE{EtF6c>QD!(%i?T)CdfkMiQg*7DN*yxPhQZE!N5$fS~Mm)fj1$=Y~3FRe{8vR14T44$kI7*)x2%4o0k1tMTI70X%!;hR*6h~O?+g7{>Uy}ZO&8V)&gqxB%Y$k^9ex^Ad+}! z4N;K~Qr$9Il>|%!kGx{Q=t&}P#^Jgw3&Q1o;zw!);~L(w$oV{Q{EMB>3j(qGbUv@o z!g#!s4iH&CRwiM zO|+r1=v~iy=LnW~zvp>DRKx>lwbkS_C+Io1*2=^Xk_Ggh=am5|eY59z)ff9M&+~%{ zcE<6%ahS;Y8o%>u7^*alOV5y!L?8^odp6P>Sl6B#n2YBn(PfI_;dMTfLf%ev*@F69 z(S8eK5Smtl?AS(5=amLQ{ga)})2oypBNc+uinmC=(92ofahqcOYDm{DZm+2kh7pbr z+v*~BU%F4yiAS;Cb)}N{Z{u^GQ-fvu5E+Q?Cz5@@y8(nS6o&m4D={QJ|D7%-5i&au zgD!9Nn$2h|9!kvb_ZZ?km900=;P|i{rG`%TtX?V80_~)P@9l;|WrBXP23-Kr?x0BCE%kGU9P|q2SGc0v~N5H0T|z5{KU+C`M}x zT+a+3*uXU>!)~yFfoqxA%wpi$@71UOQ7|R~h&X-ru}cjEP&hp2j}UN8>{WY%AXS42 z1k_-*e!ol}pp{7x9cZR&7%Csj9iNQrVB*sZ;%fO;(Ww>#jpL6OAL4BWIcD3ADy=G}D_pwUzlsJ@#X0q) zti=*1HD0EZ20{0nvptK1)$odw15&oiVeRVX_-DPLrj}$lD0DhaXhzNB=tUI1>_mvH zYro#2qFmQAXO&EvWfRe5PCR>z2C#dfD}=eOf#vePXbvI!)b*vilN+4j8m^G}d5LB# zE%XLK(#;aC@g|<~pbTUxupKO#fT#S-1i2y6>*|Ne)uoxc-WSmlsN(@mlwul5V;p9g zM0^#ma8+$a2)GIYTb{M*U{z^;gu~bx87br9>Q@g~?3VaR)<$D#PBM=G6UZ#*`oL2v z6D8}Ec5|hb+NnvpjIPgQqsmM^;CQAmxDLv& zW_m(isTa$zJlj(SAJGFmzS)Sl3JV-k7u3#&w;`STirMfsqbAHu;xp8gWX2zKC^=VtEN(HFWNEkHTj5xRZ&uqM|A3A>SDDhS)8XcrF?nI# z6WoT%tT1(@*Kk}kq=?2*Asnn_ESjC&4Z_y^7lyQeG9=Orlg)YAm;3=$KS;l{jYXZJNS~X_z2q^jU~sO4Ohdq*zT(1wHb!0v z%EJl)kTI+OLPQ(NTez^h@*truq7AuX;Q$zf3`vT*#l(5k&!#b|k?0ra7D9N<6xl7J z4T)mQwAUiqjM~G?Kt!}jeN0G2eJj;PQClOoE})Hi32r;S(~8;7+e%+N#59Lr#l(A3 zW%1e=Ko`bFjq9`)oz(h1%P=-d^`<_Au^A1p!q})>(2Y&Og-o%TA&iX*Fpm%xQj!?a zL%qRoCD^9y(9J}!ydaE?oXb&ZVHg{=opY`Syg9@SW24NN@^6@;ief_}A!)iXUu|<0 z&CH)|AHJS!9`3(_8Tsel?(-eR#n#8+{?3buElId9SHkPpTT%F-KXuW5bU=hH<#ES9 z*^JtcvNoZ&Cq!i5JKE=mJ9*sY5GGG)E5x9V&QzSl=x}YEsFKUXs8-46JJ0u?6P1s) zU+nA=W-mZ*$**YPm4a8R@DDrNZ?`rMH?mnKZIl}A^74Exbw%N==TaXk)U{GKwzl>e z?`yeOJlxx#{IK!rXj{e=EpuaYbNhhEfj_<3mVJQI4ai(2wyZ^&uQv|<{1mcR-saxX z?%_6e1-mvLT-J}!G z6r6LMYO4xx9jGE`-}e44pzIwTzBwYYB4U4Z3!Fb5?m#DVxWTQ=y+u4&gka1b(Dd-y zCH>e&DDeinZjlE~PzUMQTwFjhH>HN{;yh1ke4<|IpT>cqKvlZ}#>N zC#%nP6oOE|`Fl;@Ih9UWeyo(7M5nyn**bhVNvH#XPT$?zf9kJXrqRoMV3(oilT)d_BOfV@Npikbeojq;TM~vY(z?9fpi8+DWy95)siZf?^ju(9PS~ie=X!^`!M_5yZD{L#PXl`jR?n^CO?D4u@rx4!h9;ky`PS6Q>j2@k~BpTwp@Y zRYC}b<6n<2J{;o~E^~63e7b(18jy_3=lb|`y*x?{v-Q@+*`*q)I=M#9uiz4s_X);$ zp zA!`aZnYQZ6#2obkwP`+9aBi+1<)YV9CJGv@$jA-vfj4K`{U)8kVdckqiii;~L;^*g z-&{!!^xcWu$W?WEG85@79ua(xcm?R^xDnLV0{$5%6&N{c$4htBKE3*MsrV+PLP#f@ zXTPCcxh!=Zqsu3CoYd6pfo&JIAF$@lcKC7kZFCBi=s+hi#>g0 zE~~xWY9|+F4{C+Gy}j&4am0l$XKa?*Vcbe4SCtG=b)UqgzdQQvda9cYR*sdf`oTQ6 zlChVBS?*A@#;L8o6^%V*C`vRI9zUzW8mqSMDsC@@U?$495k!SJK2x(B@bZJ$gdA^1 z*RLR6eyi0%Y^zXcH%My`>A>aRR|S{P&4}{dP*L{#z~J)le#Z?W?N@QIQx8dGHeIc? z?#a*P2|a58CVWHv47RO11RPb)HJ`Dz0~=bKF)Zt9L_m!jDr8W!T9eS;kx3h$x`t8l ziP=?EqD+O(6$2SBUwW1Ol(i4^dU`Rvzszbl|I`DaZZ!_w$iE|P_<7Od0}H z+vm`T+(1?%Eb)5^#foNW>48I90)(ZrL_xW(fI+YO31eq2zPwiVgCi4y*lR!pWb0|j z?N7`BF?NT;j$XF zUQ$ne#?J1cswBjH4!`wwWxfg-8$LTXU?g?5mNm~u2a}zD*FnDnrP2?T-a(S-D7~cT zKpL8B={cZx0A__b_=fZu@L<9L-dmGgNn}3E8uO9NiS`8tE_lBo$ika1H+FWdJnD*u z&c=u8F7=X={_cSf;C<@eo6V==Hkn^!y1thkW2NXO;JMs?3;G+9C0e?Q7EhFTYwb!j zG^Fk;^?}6J;WdJIb%=nvJ>sI>*T5lBEK~!*RK!>28?o>$-@dGUwPi6=A)1n{xR!8pV;k3tS9&$SF~*I%lLc+KIQk_3%;;^YQ|5_ zUMQ11HwN-W8}TRgoMU+XLS!%{$OWKHs2nLwTcQO9iP(ACjdD~hV|LajYofo)BUFU^ z-a4SzyKp9=eW@$Ly}FL-T|gn7fk+reXpd}i)17b+(mFv|b(&J>I)>q&*p6Lu;04Md zL=h?C(qlMPsX~YXQ&&7v4aCqDQ50KO1Z!5WT?ZL3ZwBT(vKHKcb`zj2E{D;L0+;!j zY7W(-@m-)VL314M&T2$%a>%c^eGwmWgv61g>DHN+n+Js~WQ#-_X$d81v+&Lcq1BFG zYvcqBGMnRcTgdZ#v_X#>nGsH_$&^)@VX4rDdB|x11u>_Tb0qtmbA6%r6Cxr4xplTK zB&kz$F^0p^Yjx_6#KTk)a3b94i3_LC&i5eR#$@^B zB(MhQ(7dJR9$XR%%9|^#0#o{YhltEwhw}2B9jeyi;S4ib9S$jpqz2)P_+1so`Gfqs zIKRoibJ-!`mH3>Ic|o!XZx&lo_%of&NZWJ0HF3LgygEFSUK9S+hBgwa+w?EaPMN#f zou4L-Ed4YQFEFP`?M;1d??3!QB^o?KxA(GUopI~5fLY>QESK< zGlujt7!))zE-rwxf5J|JL-rEVpJ)~$;$!^ui){b=*9jS;?&pP!$WDEYRN}IDM$Rhx zE~FgGS^3mY3#W-#HRMwFMC-a}v)S}aw%e94$W!Mhhg+|Aq*dHLoN!Ly_7sV+rStrG z`+24NS#^{@c)L@nencIqZ+Jmn$$qdN$y;4A2awjdI^F+aoBPn{7xAX$@n*Y{5#m}h z&$}yGQnvJ}@326Z?o{eQ$+w5kCOcccmU}kY-{6{e`^_N-A1C+=8i~N*17q^g{aJKh#5UD2icX;Ps>AKH)=IeRiuEgcA@6n%G#zt~CoEB?=k`;+N zqp{X6jW1?w|5LHG$eO?OSTolmsj)i#h`zvA4pz72RmKg;pDs>y6A{Uwc?#e}G1C4( zGKNu@Z6ZG@(9*ofPZ?}p9Ki37QM*xORnK;%RCX(Eb;jF=@jJ|1=sbW3A{V3}95~y?I}&v<9;tEA z9N$Cdjka1^m>suhGovbyb6`3d81fLE?dZEXR@#~zab2+aQU;*1Vw6n*68I0g_}Q7w zk)c~g@AK&!7Hn`u$@um0OFM zJe<;6A_s(@TWuI(vv>WtW=0y-8?z_|H#rYUHw5X}Nk#?p#Y^#N17RX?L*_X&2nTRO z-2Mg0B=4Uqu36J8*PuKJBiJd=-g<_pHO6-Jc@uAv5Je z7TvH@w$@+2K57#^G`8_-=f&>p?cKu(M8rMM(4xv8#Qbv_D7sNrUZqxH(8xNSe3 zoa_2N(lX@S#VC#Tyt2=U_*UiOjVI-XwD05co4eR4(b1YMjE`a~-*>B4JhR5GDIVWN zM6TJ8*kN9lhzC7-a!h69p|fF51hnzCjajc!>$gZ@B3-F|qd z*Q}UxgnmNzKzP3x_sTI-ukr@<1POX&r-b0cLzhE?(IYF39&@)=k0H@(hOXcLKD{8Q zWNnD4UE_$zjz$e#Px(r!X}1)NblkH3U%EJ3ASGgAA3ClmB2NrR)2jOt?garsDt@!s@gAd zn6n(|3y5jP3b7DtwppW#bQ=ZvR4{jTojp(y!8g@1A+-2e8E7l4hp32gu8e}>&{&o# z_rWv^OMQR!LBxlu5kshhh$RhHR%p3n`^bX`Y(WPRoHDik`g09AViGAX=J6wy)jsHy z^sg!Kwv=U3a2M0dltF@yW0gHw)fy0ENo~3m8WtauVxpXc|M6Oc-mQI~pR4h*Sso6* z>Ls=Ptrra-1~jbH6skN^sFNhiwku3M#mW!b&$zAivv{$!aLtX|o&#Q7`}(*z z$_Wa|SOYKw{}{ybrPHgA%^ymeyjl0-Ifh&zW*ae~9_^RT+&(P&%w5+Xp6}E^YI0|f z;7YsqB1e6Ku0~Xb;VTZX?ynB8UcL9s{EUVPh30TameYIBZA`I{I_b(=Rh@JzFHg9^ z%-hKcH+eKlwQ=Do?OVTsYtwVoPI{4o04X?sI&+U6MJ^ocjyG|{}EN59g>&Hhx z%a6T7&Z}lhc=Omq_Sl?kO?Kqp!F3{Kr%OS+phYbo zhZ6!xrmG zgIHU&s<~3Ur1)CNpAlLINp%nr+{tI z2064w^aYV~)V&r}-)((=t;m_aJNq+eiJaa(o5&eUBLz##sbs~uI1pwMRL~C#qaj~d zLm9$j3Ze4ameM2&XaV1goFT|)(k#A^5y1PL{bKdwndD7>-frwnLHur?$gx4b;Z= zP{gnK?QrGMz0U1H>mpqws<_XoBA1`U%a_obb$!n7V}de{6FGuhD@DtuL~{+3xZqKZ z8Im4aSwzyxjYEmg!t=L+Qb^ezB-u&XRCsAw?PvmXJ7PO^X(dP&FO5cPu?2*b7qEMM zb9kQLF+aC5Ji@QMu+$b354>^-w+qW)=L{gYL!IY^?1QnemeM1FFDYbYI5`4}6PiI!Qs^Wz$yT4#)PVjS~? zKi0mF*-VM`siSVXa%gr9hwI_^P$Y=q<*iUI00KSZc=|h7C9D-7t8&#?Cf#VY=!<= zM&Boc_NW8uYc;7dcjMM{F@{b((YoRUb@tNFCHCQ za~eLoGsYNdZx+KXF(RT6%pD`7%^V1)P61y&J1nku@980DXGZk+jotNwjt}{xvx8E6 zd0e^*Wu0Bcf1dzxK#p(_0}z7EZ$eezVX@OUa}n9w|K|mWqh~mzdWJ#DI)z{G#n#)u zJU|@qz>B{!KpchPp5;hF#w!?=*swREk&z$XPAfUpF{EQy5q3%A2yr@94#A8<9FuDV zI0xJH1KADX0$47F%T6j?ZKlN2mzC9z3wQppn*Wv-B96!GSk|m`Z~jdUDMCvU)hLo& zVpDN}af~>Xfofz~a*tMd4lNzFMri5mO=dbOV3LC9un})rQ`^Wzz(75o7WMgb&L=$-FUQqTjv}REFtt(`?Y;l+rhwP(9j2sQ#bj z%$Dvvf$B8@DF?H<5g^-hH{;9}Y92YW^>?7H_aGMYrH30foD6y@GtC%vb><1QADHN~ zUlp5S8=i-tO7Kow=I$sUm|5CF98S@mfA}-Aqn#Fbp@BorE|T>yz|g7USiY zFRJ1qHu^{=VR55Oh2(_?Br8+!@6E{%qBD&N{#r0@I(ZGGo%4Kikm=K0it2 z(3VzKk`8DsWt@rMnTsWG_7)+mtPT%KEg{Af5$6w+?w{MMw3sFN$-*U8H#?-rNtRP$ z>3twbW+tTF?dge3H3LocxGf~EfJRdaG~!JlNZv zyx88w$=W8ywDWm>LWxD~d=9SzM1?j5VXFNkb`_Nq`h*of(mz zqve3itz39KqM}lfDW2`pzo;Y$d;TP}Ms8ka5FTdu0)_I!&{zYtwJoiS9~maPON-Z7 zM>D3~xq;XwN`YA_zCjXmdRMf>k%C$8h%u-zjnJYAir3p}W@XSw1 zs}LdDdAN43?h^^JY+R5`Kz&SXy${!Wm&R3lcM}#588(t5X7HD%AMm=VDL(!%xYr}hA1ZUq#nY)Dk!0KB6ps=z9=1sC&5b#E!j$>*`-`97&lb0BxH5&( zi<3#$Vr=nVPs9ara1|Hno9W6t$p9>~%>)UtMC2!~>#1+1m9gV96$;H2@i&hz%MpI9 ziu45b{!0D|roQylmarQBzs`QUJ-fL){*Ye8>};jPk#zsH(5>OJ{3MIC-x1;1zgAx~IZ!_6AJG2QpFE+ml1bD5BCb=PQvh|O!|L3njsB-iT@q$oR4 zKaRwHn6N7Th(Zr{X?mKF*Q(vq0}o>5N%%w^F5mtTlJLU^;SjE|xb9@7^$a&Q#Sa`? zE43CioS6*)y=N^SMBaB9EGYTgj0_bs)_PN8#X{h_?h2KbJ(sey5dmuZdX2{`zrxSm z&`*Ete7$Xu>AEcoY#jaQgom|%9v(j9*->q#8=E}8&yVMXeSh3OHuiaHpE+;na;-i# z--OS1{M2Xm&a=(^2Xau~eJ{&3eSU8}Q}#;tNp1sZ>lwb)6+bcOckKXwC?CDB$ z$8VmPMSn`?BYNcHB|gaA48Ix5N_46Za-!Q;Td$wOUOXIJ`SR{Ie?EJP$Fls51K{ZR z;7}c~Rx;z|Q_dUl`}I>iUFqlR{e!2tX7*300JiF%N3Wg|!oojaZ9ILLUA~sI_%J(t z{R$WM?6N9!cK1<+t`ef8&gx%CHjG*3}~Ra*RCehq4k-Nb3K5 zgZmr?Vsq_UN?s=Ce{+)7u+r@f-mMGzSZLYo=GifbXny<>$9m;TM?kD>#e9#ChrP7Oi9BLI&2G23Fhcgh@85fLc+ z^pJciG9_S0ZF09-3BwFC5uQ#RJ-&ec&&}t0uWFnhY@$Sm7~zCLn?O6He7yT`dvT3l z+c9>aRwl4bkg(H8=K~ZZC0EDQFUhN4BO^`ZfT3XHq_~j!xoZPA=ivc%z-8%Oq zF;cYut3DN)+MUV^V)X4q_-iBvKu8no_up7ovQnPazKC0r&aar|b zXOTVX%w}NR(6v6CfKomaLYc%{a1XcaR4&gxWrF;tQ98nmM}JTOMrcGHBYh}{qfHgG z%?X%w9In0(?&&_fBg{p0arP_94Q_kY5W1~-^NP{wQqLWcOzeEnSAJZ!z)Y-{N=v-X z+6BrP4yG7f1vD;T^$5rF_?Tcoaq>&~X<%Y!GVHpKfmJ$}vE9dgwO2But35wFNNIqP z^V8h$PR@wJQrJp;ArHLd6lzI2bvYW0>vEvGJ`O#f4CjVsW9S7uI|pP1H6S1d)s6il7oHEqKDeC4~uRG2Swv!3(yS5plQB{g{B&^VR><<+JA zg3J11Jdm0r{D%hCdAI1IX_1rd#ibfb&7KY(On4xW)#h+7FM$J+6mNP=T2qCb&DI9Q zOP#(H3gd)TNJiI7BslbaV7z3ynFoc{-hqN)M}m_5)*R(n1(`jGCUhed^oybC zD-u+=uRG&oSQZ5HavA+AZ=knR^X99I+N~9{hpk zl8I&47nc~MU7&tsM@CttXyXaRsI4OGyK5H>MM(3}lWol#_p}Xy?NA($8D}`w@GYgv zk>QM38K6df=uVhV7Ly~sP;$gjSou+M9`8&>!W1jf+L;_z>Rjp)b*a-!r^QmKg%M*i zHz`%qj2t&i>B^&22`*g_CwO={mM;d!H){iXAWBYiqFlJ+gwCB_gvm%q=f)-Ll%aDO z9L_B2tMhCEHO*WXyj6jO{Y09*a6tj%sxGjL4184`JA6ax%pHG%+c3W11@?l)k5Zpmab%m2-PN1~OE(qQGH8&neU7cainn=1MKSLf5De`Rk}P+KdDM>? z2d|vRs1KBkJ8Ke4Qh&Wu?mEZB^TRKbMU{&#PETQIXUD(TFIG)TmtrntaRqGw+vYsv zBTlf=vEQLtGq6GN2PIEF$-;NkX_w+oS+?9%AayV9bg3)v_6I3Y0;LWlIg|QnR~&GN zPHo9zW4*^^2sw$(k~MvxL03XfqG~WiHG<_cVa)6B>C|@{%*fZfbKQoM3~jFP02Q3u zq})`$PpK3Pf=yA+V57nS+?_m1eHBu1DU1-%>ia9Dw;ay=6ptk$?ZhB&;5Rpf(fO6I zD05Sqm|F~5yu3>RqX#3fl6CWa-q7}7teYib=pD({0v_luiFg6=4j9Zq%(pX#jz=6j zyOGV;7=u3K&w+mbZZHByl)je8t;z7DySg@-BwHe$-G99;K)l+4aJVe%?3VR$(_G{ z&Y_QY`AajtNwR3oBtp#m4j=vHm5Nmd9Bj+1MvgGDk!ae|S>8&DDLJ4sW{V^FS`XhX zhmQ)>0H?P^0n15B$gZ!rJbo@;v`{KC!mk%scSH^2_EOzPau$t!N;3Fl`l*_+NN)DX zT6NyQ!_D{EAF{p$j85lJP4r2kfJbb$9KV5xx@ofoET$zn{*Xv$?H$ZHr!f(gO!(1A z@a`}oaw4+;N;jV+xg}x-iBQ{;@8p-7Kt71HKBabL!9kQA_I(%0!5?#n`a7`4RbefZ z&awL=HfnY|xr{^S;N|N0g&y`C#pxN8EgzC&+%S!LP?4W8vivyv?F2&#t*^jgI&x~q zh93Wg_JsON4n~Df3j!!@h7JA;ruC0vUzbz9nu*?!KD%CQMIV`F6w(Tn&bLk#^?j3P zgKR6N#Lt>KzYD#6Juo2!Zq_5OB$7JK88V|$0smkkCH%y_n>xn;N*N&a=K zHJNP0JfKe)0}%~})uFEPJGvehJiYsP9b9L&f9!_z_)3;HmDdpz3Sbbg6-*_9nO99I|})l@+U z9TqPDhfgdk@KuA2k7Muc*>97N4|!)X{C?lX7OIPKPCP7+Gu@OYLHzkcZZO9m@o`mnJ_}-z96tgT0<~xnXrGfySuZC`9>uWyZsPHw=4A>)|?OP z(_wZeRcn<=K0W3@b}1R_=JxJ7F0tIL=wxeSn{auPjl)CS=+bL`mx<_lL2Fe}R~I@t zb0Kv_z4$HIfHXd^t5NXZR!YVi&@d$)&Lp~|Kuy%dPKVefO`Ji6a?U#I)(D3Ow1dGb zHZB`~cAyIY=+fURnqZ`_jMCp60*@^a9`@-6Ao~@Oi?^{s=+k%i4ioc_20$Zpm!9$( zN~pNz@!8G`+|6$7YzR3ym9KUV53$nCWG~*Un_qOXh@$K`R-oRN28@|zFb+%nrgF&KJ?mEZ+$rsjRle9$MXU7ybwx?${oE`wN0Z|JDHiB|4r8(B#8Zct9H$si(UsDNe@8>~U6P z_ESd`3WWktD3m)!(@t6ppN806q14)4H{K~^d+x_=e~nb+js4dMNKIgB$r}>IT_+xTX{&hbel^Y~Dzv=Gdnw0?0d zn-@1yln)Uo!0wLt66QF+3&A3IPY72YRfZNOo$bxr64&4S^=WzF(t3)kzRC|xSE~^>VDJ0=*UyJWBhkzTwq$2G zwE#X%2yR2%Eg{2Oe-i~{hnM4bHYVS_9U2rZB!0oYZt}jfs1}eqnB80AZr)OH56Oo zOjZ!7+wCvjCs%QL?*B9;`$DjiW;LIT?z$v58M!2AJ>un9;*0%x+^!bro!km&nRPi6 zG9ful`AbB2g;ri`bT({4ia6F3sslHkR|;8AkZtZ7DfEP{Fk8ALA1Nu7H%UmfaHD6o z%W5oyA{`aa6*ntmgmP!i;;D;t7x=h&0B$7^f!}8*XNW!hESCu4w=Kh9TN4|i+s_C1 zMV;g=G!S5)Aaz=J)n(-DeKo{&?hIeP=fvd-CaK3wnBBsuG)5O@(@Tk6(rnO=@76|n zZ;q;1XjS=;-sd7vxdX=dm>XJ%b}1d(7rduP{9?aei+gTv0`Yrsnc&QGg4|kI$YxiU zn63a7)8#KF-CTW5dGZFKBFySP93X>1%)l}9Q=mW>28jc=#tD+hB{B#UZJx^ySzsyO zhfs_W!{|o}4kYyJHo6UQG$zRuAbB33VzIaGE-tb0aaD`(nSJ%XO@QRKaxI@$7B*NnS#;0wh<7)>a^Y)im45X1U<;k<7+rjx4ga-N!s5IrS>wzA+>CLQUfZ9>UpzZxMk#{r2 zku1d}eev;f+PmQ|LHw00lWmkmmFF>~p)Sm%3YB=Mv(iES93df51lbBjI%+R#{p6H! zTwVCFv@5AUh-4W1Mc=E~*+w!@C*lQuPOrI5+G8M4+D4aR_oJB+d;LbAj* zxEr2{a~pS0okiCYTRO~{bPzsaa|z^B!|Qv7IrqFT`vL$4Pto;fmw1ou$Tu? zW>NuN9vn3`Q(1ai&xn}^m{m9c{OuxuXC=0TV7@8V!O&FaR5y&hcf+2qkIXXE@9vun z^%tB%Bs6VxNiagJXf&VSLmOY{pedmU_M}5!7EIf7hv_GMI3e~rp^7L*+-r_drAc(f z6Y4HSl&=OpoSk1$J;_+%Vo7IiVuq928v9qO?PJC{>$ zVCGUb(kV;+t_j6FMn>$pyPGz&|Aj8wW1waZzvgIR{HRrP#*CkwM_L<&>>gekP&yw_F90}#ER=a9PC)wAV?x94cQ3}dm^S*uh; zBFVJ#jcab15kuJq`^4kLw^;|jGd4*%qzz=L!2k9=mWV5*_K(mhGy4%E(~U1rJJ zp!7ff;~V}zy*c{k!^t^kG~a|zcMt_eggT+{Nrtsn0-)HC5XT5~js$K?f;0?@*Qr2g zuK0=dXCdyM7Nmc=As-A#8Rko>W}V7(?WW#K0rPb5P_~wT%Ha&{!eRd)05Hm=MK#AV z+$@wCA+*8H%JoP!QX6b%3Z?bM@$YapL;JEa@yBdGX}eG=>rx%fbYqXB4C>f$#NTFI z*6IlPmQ-7e_{;fCSOx??C2B6pD$tfx&4Vnr0%_q14e1%%a={UeGHor=4`%KZdTJBH z7R|9937#?i0L57%0klC}IaXKogW5fu4WSKIaO6hi{f|O=LA)T2lWk;xeoW~nZ`XI$ zUlaL+PsAmDos;1c;rTc7F?=G%bkg|^{yVxDD%MByf%ugkhH}5gur|2(eqxo} z>tM)I$C?u>Jsb?5gn!|aU~-Peo3_AUf66Gvyui8eiP+y)b`1~BF=1(I9b{#?N`JRZZUS zJ_y&z`S>E|K^HGm=#1|md5N_z@*Jdi;_mZ)gOp9|e8y{#f{B{@d=Y3f`U*yYg}#F3dkb9!!I6+)vAg#ajDSufM?ug{(K$asxUgLN(hnE4 zu(<Cr++=#W0g?x?mJ}0ydjCFNfItTiA2|V%lsrKGfytUY<>4e}1cgXi`=oA@ zitp)oIppl-AGg5&k8(^~6fbPexY5NXs(X_o=Ray%A>l7G(u4MQy8hvN6JmdJ{qv|w z3$v2I&d#KISdd>XwKlF9fF3RtHG|*(D9YEdUC-uoX6d!U`KeCE8?%(h*BH(o+Hf8VWGc->~X%&Kdi4_^oEl zio~n!vH5$(j2inmgXZLG$STN9fzEQ>Lfo*9h&Ji+#RuIAjFUXnjZ; zy6y+B$w67V;Y4ogn}CujI{X=ZP)66z&Bsv%2_HiRO!wY#;u!sFe~wtJ#o3?G8E#=P;qOU!2jsU&#L)+SrEqrZL+O{ zyb72d)NR20RAwYCf1OF|Z{KoFiHlmJZ?_^(=mblgg?_a2v)b=&2n!#(Y;0;bH*%7Y zS&l+*wE;OxIux+22Hxk$h2?*%TSC(d$WqClRT+WVx&cjuP zwQX{3--3DLn>F+zXwI#s(+R|-z97uFQ|rNE0a4B0?u8t>gP5Y%1f(9Vu}MX%OmjPa z97ZzB$gmO#v5kG=jT|Gt%tJBk>djV-HBpj)f&FB*jEZZb9k#BuAPB=8DEFEj&u#9d zn9j24GM~j(IwaCe$UEvaRoQ-+5gOmqn=)men+C$%<4`gGo)>bAzLY1sCvt#@J$hIq zpLrsO;*emVC(%{0JOXQwn3iSGvPqW3#enX4B8T?ElDHMi5_LkEn$r>`cACMa0l3FVj`X#ufAx1uu_cC}r#G!Kh5N4%~|-d%I- zG+KQiDzGhT^~A-hX;BD82RsyW8? zlv(7ck0cb1yL~#UyqI579!nz_;3YI-h|kY|8BvHq4RN#~N9*h! zN+iqpVTE(9<#pJC6N%mdX%0&>5-9Op5=-yG@mAa+* zHZeU93T%Fuuq75`*MtWK5?bK!VLl3hwQy&rBWEM#J@z}}G)!%p4^+U&%_DMd5ChCkCyh;s0Ia07-B={(6r@HDgnS~6VljV?#?x#Fk#%17_Z_22NYl14aIRTl zPv5cW<|&%D;n-`tLo@+#&l%bynjq{qJY+N9!s3R28i(?+9S*R z>XC)CzjejSO`Pu8og0$T@_K&u9>-S+Q+BrI&}5QlxpG_ zEh5eS0wSexiDe9z5>c4>AsFLFd#8<0bLN16ArTIM-$iDFPdUk3$n_ z;&JjXLvl*JPClC+x96YQEyxLxN=|-0_AiY>3MOio!OIt>RGAtx7p6oif! zTTllX(?fiSC&$w(e1G+7R~C1AW}aS3?1+Xy>hi4NNwD4NO5>)Yf3MpR^^KwtA{5 zZID;Iz(9YMahE3|fje z1O-mvR|d16B^B!#g0J&Z9Itlh9uA-lSKmywBBIrmAS1~wvaS4U>8Kx3c?6*#jEF1F zcv7y@j6tw@x-+JwMiV{h)Gf#{q14GvPZ&DXnI(+iM+0HxrHv6`I3B|+5pYDHTT-J5 zN26RY;h3|umwACM*P@Nvjg1OKWpRs94QO~wqv$dYPW1x`BGv}nDz7Jw=pgSSiVn<6 zyzfeab2A8VllQtPX6`T9jU$zT;l?Scx?!~hyq9NJhqc!x%ZU_~Vzqc((>_Di_~=)U zBdx4u4`O0VD;f%%TUA2Y7%ecU7oP`^sJBk46bVj~ftMq9<}M${(M5{hxaF!M{MS5 zfX+Kn0@9#+8BRF|U4HoR*`xy0VqiXbe}xnp;N@v!%eL_{c2k`s8>6V0fBZ3;%R@*u zhvPFw)b35?5#$7l=PAf!b2?~_2Fyf32be21r&HU)a65+tol0#&R$fb*TtAAfm8s2B z#)*7Z(x(nNs@SmRKF%5^M?c-_rb`TSH7TA%b4`hxjdk%9i*cy4?7QWahdHT2tIkTN zysJ35yVSKh)03KPB#F`E_UgyUIZwm#c8glg$vv3j?S{8_F=-vF_7jBC<_TifX`e+a ztMRA?ZHeXZ@7d)20q&+2EcumVDolvRbJ^JEP-E4Sy@Bve8l1%GGO{FziQemTj5xjC z1?4l4H6T{`i^JQik4H9b4|$NE@;)BjUR@lH^PWIj$~#|OIT(gHUQ=cMmz3kel8rGp zG_1^!Eq5-0Z2h7TZ?aDCQt{&uUK3tXEPz;47l$`y@%4o)2ZeH`RC+bl8n%5fWu=@H*q}NrIOb zAUO#KdXb4WdwGF%;fjS%vW}c*3a4{c6n3XixQ+HKCR;yCqE&sC-tsDwAif`hE{^%6 zYhzpWb|)^u^h|UcG`cM1Cn6^ch>~(>?a^9pl9Q>qxEd3yezXSBa`z7&k;9ymV^q>B zmECW7MNddQxWfX4uE7prrBI?OA^uS z?z-9`@~U>L3|vted5*V?vPsry)b?V`M5vlX1ZE{puhGC@`Fg1dUzppULM7uHWSTTd zA~L@@HscJAfLT|SZ-(0TcUxLT2?C^(8?LI<{SDgr_5OERbk#N5St<;Ku z>}ZrMWQiR;xIV-9mv{|q$+&0ZNF~EOLtK7v$+ggih}055*(ncR987=ARswBO9;{zY z$dwPV5h6SJbnWzbn%?D_%`r!i4o9MoC_J2TD?tF@)uk|icy5Lzs28 zo|gcSqmv{b6{c|TaaQ1?o7Je~BiopXnD5)0yQ9idbDktwwJK2!SzdZ@-lZC^KINL= zlK<1vY84M!#BT2NZzruAIt$$=*s-S1 zCzezqDV5;!2`kt9z?yLdoc;0Smj+{y5mWioMM~{0t5FhJ!&(Q}#@$rs@NWv^P(v0% zZC(imyVf#-oPr<2sfJmWKBtIa=D*|&*p`l<9Ol8?dO)|721gMKqhMUONf1IcSk-Cy zz|6pth{?=M0XqsT=?7reX1(j%54KjD3sHgLPnTF+cNZ5HbZs)y5&clm(=6{w&je#f zQguxzwn|;xDSC4?3K~A$Xcc$UlAhI~gy(45G+a%`Jeq(cCV#r&Zqn_Rsb;~6o27OK z@xkq_cw)2*f!9q@t@l-;i(H)&g#vaj)9OOJx$i;Z z(WiUpYPbW*NWyve;^_y=cbHBUFXTiRzfX}!mX3x+YibW98FH#OTDoG57g5Ul&IN^? zHDka_9cl>4AidNr$d+6%KzQ>pC6PTh@>z;&10cY>r4hYB$iBWzh;Bhl&0%i~y@twL!$nz;3C%v%<=Bdh zrZl|9S%|w!qw6rZ7?gzy4MO(hpzyt~c(~jPn3!y~3!~0@P`vTtJv1li_JAm)lH8yu zDJN&wNKly)upeDF>`JfvVyrt6cVAq5RvDF-cOB@8krJnxj?NXu54vmqrzt2KzFYO6>) zLs0*U9izl)t0#?{6auqn)2k5zEi@`D4N6CHLG)sN)}CFRA6t{D(m`_s&N_Q9^~)0t zBe`3d;z)RIJyQ)7={k{%c(vF)jH>ND07B7T!5>xwt(HeS2@*<{A3CiRJD1L7p|ZB{ z6jKUTjTJ6gZNynJ3cp4V}VsJ{dfYuJ{%qwGr%KXS9 zs3*fwo^xYvlv}|W$F*Zj23}`scUX4MP(~9;o*Gv^!{PU|vB)|=gld#)x7C5;@|JZs zc0WQ>L)X416hIzWk=IlgTUJe$yCZEBGRmY0_?;jhgQB1>y0ckJ6Rz1A8IBW>7#}os zM*@<9U6B9-YU&u8k47bKgYP&|G%PVa2HP|Yr+gL-vJc&@#ZQYW@e?A*R6CVvkhcju znotqyL@z>dp+}g;;1jbb`xE*+H9(6^86c~;B&li2=n}KW_>bX`O2%1$+Ty{mJ1_38 z`#afDpsz>lrrEoTcB#3pfk{!Q&g`-@UbJ8^Q57*y0ZdBY$?oQ4f7g*>`L(|L*EcUV zw-HbHc)hXv-Jfxl=I7q#Yl^Js=b!gC_BWnB($7C_?7Z37db;}c=GNAPf7?V(eLQ@; zdAe2~>o0enKBJZhZG{Lg?9zogIZ^^{1Yi(dWw7&-ZsHjBb7F&C}&a_2s-(e{DbiPk%lB z`o)$+L!PVQjgvKh{fU9;>xsW!?!SJ^*SAQHl-%2qt2&>^jePFzZO7-bKNT`|^Uc2U z6(CkIY&D-OS?2S*jdv6N`^FCR@%d)^jb6!#kBkB=5mdBmUWy7RW272kz1#j8{QRKq zuq%sI37H1TvL4wr4hHEl>gJlU?LOQS4paG?-2lfwO@IzB%KSUt09WL>cK_{H-T?on zJTYURuh^gB0(d?fy5#ax4q)e*;ws zXn)WBZ?F7Vg7eqEotd(6#=`Djiizx4dHoe{HfaHqCXGIaJ)b9WBRlOI3on27{$zc9 zPpM8(!-p&anxX7ClDIY-D9l@WfB9Sdy}X3dBnYlan!Ef>3-Bc^HCblA;E9-fUx@ML zl?6A#Y1zDd;qx%{I*c!CfBA**(6UB1!W}O%1_DkN-3X@yYf&Rb)=Hu){h2%nvZR`S zw;SO=$I?d@?A~1QVY%k*o=0I|PqjE|=ZrUR-B?<~nsB$^N;u`1H+3+e%O}h;55oA~ z_vlJEyEY6|u>FIt!Jr&Kv@BILzw3DG#=}aBT#YLqgApLL0^7i5AeOcbSiyYsHtski znO%i#S6rJlmVS9iGfApn337X-N0W5e;+YMSM=Gt|{j+~g7&D2WSX)E^g{lb1_L(4N zv8<9ywV+$64m96t`M(Q~y5X*Ya=@*mxH^|y9A1L+{~Qi|iQg;-t|dK071Pa11}p&$ z=L&i1%L13#qpp1y5omfGi4HmL@4ng}JMy8svy&DGoA^!v>ykMZB^U1nuGy zyGaCi8z2ZI`K;R4*4u6^(dh7(i0$=?A!F}4J-fj|tm_}?8>~}GevGyAQXB z;-?O7Te-RvZvv!2Z{K!0;+)%kP+E;}Euk9GPc5XsDv zSQ=cL=oYNu-biL#)ko?GHjs*J8p|dn#Ql8P}>TMfStYOsG%bLn$x#Zpu+u(h#qf)fy zhX%hy6{ZFgDYQ|cR_%;xY0ZZM(l|!1qmou^M0#-#qMG=pzmAHyP%H^xzDOgc3KQ?~ z;WHQHdVPhU-&%^t^2TGD1ulrW4cH@k%KGaxt zktow50cFznx=M62xJLBpX;E`#h-G~)3saURNi*s&XE#cGK(pa)Qr|%E!BMtbFi}|& zOkOxDGQn_|;H9WC&ejPwKD-~>TV81x#4KS}kobULy%bUPB0bNek?yd0XeI8fzu@?l zw?*-Ai;tcCH*YrI$iXeX_jWeF`;ONuIoQk;9N*qXAU?1+kThr>ShONAN9)}+(%6&@8mL6niZpgQWJ{HG}8Xxc4UzQn3O#Ot;(DovSm z+^SjXqigts@sBz#ib?zWJzZz(Zh_`Q!On5`>Q?>^#5X;+8SP)ikRu!50*OosM6AGO zObQ^P*QXRdsI*)IJ3G@$+tq~2^)tl_b=1cJ{Qd0*(nZn_R6%j@koq6!wGm^5&Uoz- zTi;v|j+q(bYFW-$LPdC+4g~qhv4q%R=$2=|jC3fyoAV0W=6rhuCW0C;3xHrUyC(E{ zPLRzQHHC=8RE>BjGzt9rVb2A&~Sv%eiMR^;

LocalRemoteStateRetransmissionsTimerFlags