diff --git a/bsp/lm3s/Libraries/SConscript b/bsp/lm3s/Libraries/SConscript new file mode 100644 index 000000000..970278df8 --- /dev/null +++ b/bsp/lm3s/Libraries/SConscript @@ -0,0 +1,37 @@ +Import('env') +Import('RTT_ROOT') + +# The set of source files associated with this SConscript file. +src_local = Split(""" + driverlib/adc.c + driverlib/can.c + driverlib/comp.c + driverlib/cpu.c + driverlib/epi.c + driverlib/ethernet.c + driverlib/flash.c + driverlib/gpio.c + driverlib/hibernate.c + driverlib/i2c.c + driverlib/i2s.c + driverlib/interrupt.c + driverlib/mpu.c + driverlib/pwm.c + driverlib/qei.c + driverlib/ssi.c + driverlib/sysctl.c + driverlib/systick.c + driverlib/timer.c + driverlib/uart.c + driverlib/udma.c + driverlib/usb.c + driverlib/watchdog.c +""") + +path = [RTT_ROOT + '/bsp/lm3s/Libraries/inc', RTT_ROOT + '/bsp/lm3s/Libraries', RTT_ROOT + '/bsp/lm3s/Libraries/driverlib'] + +env.Append(CPPPATH = path) + +obj = env.Object(src_local) + +Return('obj') diff --git a/bsp/lm3s/project.Opt b/bsp/lm3s/project.Opt deleted file mode 100644 index f200c39ef..000000000 --- a/bsp/lm3s/project.Opt +++ /dev/null @@ -1,80 +0,0 @@ -### 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 (RT-Thread/LM3S), 0x0004 // Tools: 'ARM-ADS' -GRPOPT 1,(Startup),1,0,0 -GRPOPT 2,(Kernel),0,0,0 -GRPOPT 3,(finsh),1,0,0 -GRPOPT 4,(LM3S),1,0,0 -GRPOPT 5,(driverlib),0,0,0 - -OPTFFF 1,1,1,0,0,0,0,0,<.\application.c> -OPTFFF 1,2,1,16777216,0,0,0,0,<.\board.c> -OPTFFF 1,3,1,0,0,0,0,0,<.\startup.c> -OPTFFF 1,4,5,335544320,0,0,0,0,<.\rtconfig.h> -OPTFFF 2,5,1,0,0,0,0,0,<..\..\src\clock.c> -OPTFFF 2,6,1,0,0,0,0,0,<..\..\src\device.c> -OPTFFF 2,7,1,234881024,0,0,0,0,<..\..\src\idle.c> -OPTFFF 2,8,1,0,0,0,0,0,<..\..\src\ipc.c> -OPTFFF 2,9,1,0,0,0,0,0,<..\..\src\irq.c> -OPTFFF 2,10,1,0,0,0,0,0,<..\..\src\mem.c> -OPTFFF 2,11,1,0,0,0,0,0,<..\..\src\mempool.c> -OPTFFF 2,12,1,0,0,0,0,0,<..\..\src\object.c> -OPTFFF 2,13,1,0,0,0,0,0,<..\..\src\scheduler.c> -OPTFFF 2,14,1,0,0,0,0,0,<..\..\src\slab.c> -OPTFFF 2,15,1,0,0,0,0,0,<..\..\src\thread.c> -OPTFFF 2,16,1,0,0,0,0,0,<..\..\src\timer.c> -OPTFFF 2,17,1,0,0,0,0,0,<..\..\src\kservice.c> -OPTFFF 3,18,1,0,0,0,0,0,<..\..\finsh\symbol.c> -OPTFFF 3,19,1,0,0,0,0,0,<..\..\finsh\cmd.c> -OPTFFF 3,20,1,0,0,0,0,0,<..\..\finsh\finsh_compiler.c> -OPTFFF 3,21,1,0,0,0,0,0,<..\..\finsh\finsh_error.c> -OPTFFF 3,22,1,0,0,0,0,0,<..\..\finsh\finsh_heap.c> -OPTFFF 3,23,1,0,0,0,0,0,<..\..\finsh\finsh_init.c> -OPTFFF 3,24,1,0,0,0,0,0,<..\..\finsh\finsh_node.c> -OPTFFF 3,25,1,0,0,0,0,0,<..\..\finsh\finsh_ops.c> -OPTFFF 3,26,1,0,0,0,0,0,<..\..\finsh\finsh_parser.c> -OPTFFF 3,27,1,0,0,0,0,0,<..\..\finsh\finsh_token.c> -OPTFFF 3,28,1,0,0,0,0,0,<..\..\finsh\finsh_var.c> -OPTFFF 3,29,1,0,0,0,0,0,<..\..\finsh\finsh_vm.c> -OPTFFF 3,30,1,0,0,0,0,0,<..\..\finsh\shell.c> -OPTFFF 4,31,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\cpu.c> -OPTFFF 4,32,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\interrupt.c> -OPTFFF 4,33,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\stack.c> -OPTFFF 4,34,2,0,0,157,157,0,<..\..\libcpu\arm\lm3s\context_rvds.S> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,88,0,0,0,116,0,0,0,222,2,0,0,106,1,0,0 } -OPTFFF 4,35,2,0,0,0,0,0,<..\..\libcpu\arm\lm3s\start_rvds.S> -OPTFFF 4,36,1,620756994,0,52,65,0,<..\..\libcpu\arm\lm3s\serial.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,196,2,0,0,75,1,0,0 } -OPTFFF 5,37,4,0,0,0,0,0,<.\driverlib\rvmdk\driverlib.lib> - - -TARGOPT 1, (RT-Thread/LM3S) - ADSCLK=6000000 - OPTTT 1,1,1,0 - OPTHX 1,65535,0,0,0 - OPTLX 79,66,8,<.\> - 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 0 - OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S6918)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S6918) - OPTDBG 48125,7,()()()()()()()()()() (Segger\JL2CM3.dll)()()() - OPTKEY 0,(DLGDARM)((1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(150=165,205,660,637,0)(151=-1,-1,-1,-1,0)(152=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1014=-1,-1,-1,-1,0)(1016=-1,-1,-1,-1,0)(136=-1,-1,-1,-1,0)) - 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)(110=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)(152=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1014=-1,-1,-1,-1,0)(1016=-1,-1,-1,-1,0)(136=-1,-1,-1,-1,0)) - OPTKEY 0,(ARMDBGFLAGS)(-T0) - OPTKEY 0,(DLGUARM)((105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)) - OPTKEY 0,(JL2CM3)(-U20090110 -O206 -S0 -C0 -JU1 -JI127.0.0.1 -JP0 -N00("ARM CoreSight SW-DP") -D00(3BA00477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0LM3S_256 -FS00 -FL040000) - OPTDF 0x94 - OPTLE <> - OPTLC <> -EndOpt - diff --git a/bsp/lm3s/project.Uv2 b/bsp/lm3s/project.Uv2 deleted file mode 100644 index d8245d256..000000000 --- a/bsp/lm3s/project.Uv2 +++ /dev/null @@ -1,140 +0,0 @@ -### uVision2 Project, (C) Keil Software -### Do not modify ! - -Target (RT-Thread/LM3S), 0x0004 // Tools: 'ARM-ADS' - -Group (Startup) -Group (Kernel) -Group (finsh) -Group (LM3S) -Group (driverlib) - -File 1,1,<.\application.c> -File 1,1,<.\board.c> -File 1,1,<.\startup.c> -File 1,5,<.\rtconfig.h> -File 2,1,<..\..\src\clock.c> -File 2,1,<..\..\src\device.c> -File 2,1,<..\..\src\idle.c> -File 2,1,<..\..\src\ipc.c> -File 2,1,<..\..\src\irq.c> -File 2,1,<..\..\src\mem.c> -File 2,1,<..\..\src\mempool.c> -File 2,1,<..\..\src\object.c> -File 2,1,<..\..\src\scheduler.c> -File 2,1,<..\..\src\slab.c> -File 2,1,<..\..\src\thread.c> -File 2,1,<..\..\src\timer.c> -File 2,1,<..\..\src\kservice.c> -File 3,1,<..\..\finsh\symbol.c> -File 3,1,<..\..\finsh\cmd.c> -File 3,1,<..\..\finsh\finsh_compiler.c> -File 3,1,<..\..\finsh\finsh_error.c> -File 3,1,<..\..\finsh\finsh_heap.c> -File 3,1,<..\..\finsh\finsh_init.c> -File 3,1,<..\..\finsh\finsh_node.c> -File 3,1,<..\..\finsh\finsh_ops.c> -File 3,1,<..\..\finsh\finsh_parser.c> -File 3,1,<..\..\finsh\finsh_token.c> -File 3,1,<..\..\finsh\finsh_var.c> -File 3,1,<..\..\finsh\finsh_vm.c> -File 3,1,<..\..\finsh\shell.c> -File 4,1,<..\..\libcpu\arm\lm3s\cpu.c> -File 4,1,<..\..\libcpu\arm\lm3s\interrupt.c> -File 4,1,<..\..\libcpu\arm\lm3s\stack.c> -File 4,2,<..\..\libcpu\arm\lm3s\context_rvds.S> -File 4,2,<..\..\libcpu\arm\lm3s\start_rvds.S> -File 4,1,<..\..\libcpu\arm\lm3s\serial.c> -File 5,4,<.\driverlib\rvmdk\driverlib.lib> - - -Options 1,0,0 // Target 'RT-Thread/LM3S' - Device (LM3S6918) - 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 (4722) - 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 (.\obj\) - OutName (rtthread-lm3s) - GenApp=1 - GenLib=0 - GenHex=0 - Debug=1 - Browse=1 - LstDir (.\) - HexSel=1 - MG32K=0 - TGMORE=0 - RunUsr 0 0 <> - RunUsr 1 0 <> - BrunUsr 0 0 <> - BrunUsr 1 0 <> - CrunUsr 0 0 <> - CrunUsr 1 0 <> - SVCSID <> - GLFLAGS=1790 - ADSFLGA { 243,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } - ACPUTYP ("Cortex-M3") - RVDEV () - ADSTFLGA { 0,12,0,2,99,0,1,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 { 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } - ADSCMISC () - ADSCDEFN () - ADSCUDEF () - ADSCINCD (.;.\inc;..\..\include;..\..\libcpu\arm\lm3s;..\..\finsh) - 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 (--keep __fsym_* --keep __vsym_*) - ADSLDIF () - ADSLDDW () - OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S6918)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S6918) - OPTDBG 48125,7,()()()()()()()()()() (Segger\JL2CM3.dll)()()() - FLASH1 { 9,0,0,0,1,0,0,0,5,16,0,0,0,0,0,0,0,0,0,0 } - FLASH2 (Segger\JL2CM3.dll) - FLASH3 ("" ()) - FLASH4 () -EndOpt - diff --git a/bsp/lm3s/project_lwip_dfs.Opt b/bsp/lm3s/project_lwip_dfs.Opt index 3969bd1dd..e87959468 100644 --- a/bsp/lm3s/project_lwip_dfs.Opt +++ b/bsp/lm3s/project_lwip_dfs.Opt @@ -14,21 +14,21 @@ Target (RT-Thread/LM3S), 0x0004 // Tools: 'ARM-ADS' GRPOPT 1,(Startup),1,0,0 GRPOPT 2,(Kernel),0,0,0 GRPOPT 3,(finsh),0,0,0 -GRPOPT 4,(LM3S),1,0,0 -GRPOPT 5,(driverlib),0,0,0 -GRPOPT 6,(Filesystem),0,0,0 -GRPOPT 7,(LwIP),1,0,0 +GRPOPT 4,(LM3S),0,0,0 +GRPOPT 5,(driverlib),1,0,0 +GRPOPT 6,(Filesystem),1,0,0 +GRPOPT 7,(LwIP),0,0,0 GRPOPT 8,(Utils),1,0,0 OPTFFF 1,1,1,201326592,0,0,0,0,<.\application.c> -OPTFFF 1,2,1,520093698,0,46,58,0,<.\board.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,205,2,0,0,129,1,0,0 } -OPTFFF 1,3,1,0,0,133,135,0,<.\startup.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,44,0,0,0,58,0,0,0,214,2,0,0,38,1,0,0 } -OPTFFF 1,4,5,0,0,1,1,0,<.\rtconfig.h> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,192,2,0,0,9,1,0,0 } -OPTFFF 1,5,1,922746880,0,783,783,0,<.\sdcard.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,236,2,0,0,67,1,0,0 } -OPTFFF 1,6,1,0,0,38,46,0,<.\luminaryif.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,205,2,0,0,129,1,0,0 } +OPTFFF 1,2,1,2,0,10,18,0,<.\board.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,161,2,0,0,71,1,0,0 } +OPTFFF 1,3,1,0,0,0,0,0,<.\startup.c> +OPTFFF 1,4,5,0,0,0,0,0,<.\rtconfig.h> +OPTFFF 1,5,1,922746880,0,0,0,0,<.\sdcard.c> +OPTFFF 1,6,1,0,0,0,0,0,<.\luminaryif.c> OPTFFF 2,7,1,0,0,0,0,0,<..\..\src\clock.c> OPTFFF 2,8,1,0,0,0,0,0,<..\..\src\device.c> -OPTFFF 2,9,1,0,0,57,60,0,<..\..\src\idle.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,236,2,0,0,67,1,0,0 } +OPTFFF 2,9,1,0,0,0,0,0,<..\..\src\idle.c> OPTFFF 2,10,1,0,0,0,0,0,<..\..\src\ipc.c> OPTFFF 2,11,1,0,0,0,0,0,<..\..\src\irq.c> OPTFFF 2,12,1,0,0,0,0,0,<..\..\src\mem.c> @@ -56,18 +56,18 @@ OPTFFF 4,33,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\cpu.c> OPTFFF 4,34,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\interrupt.c> OPTFFF 4,35,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\stack.c> OPTFFF 4,36,2,0,0,0,0,0,<..\..\libcpu\arm\lm3s\context_rvds.S> -OPTFFF 4,37,2,0,0,28,32,0,<..\..\libcpu\arm\lm3s\start_rvds.S> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,205,2,0,0,129,1,0,0 } +OPTFFF 4,37,2,0,0,0,0,0,<..\..\libcpu\arm\lm3s\start_rvds.S> OPTFFF 4,38,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\serial.c> OPTFFF 4,39,1,0,0,0,0,0,<..\..\libcpu\arm\lm3s\fault.c> -OPTFFF 4,40,2,0,0,12,12,0,<..\..\libcpu\arm\lm3s\fault_rvds.S> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,88,0,0,0,116,0,0,0,227,2,0,0,158,1,0,0 } -OPTFFF 5,41,4,0,0,0,0,0,<.\driverlib\rvmdk\driverlib.lib> +OPTFFF 4,40,2,0,0,0,0,0,<..\..\libcpu\arm\lm3s\fault_rvds.S> +OPTFFF 5,41,4,0,0,0,0,0, OPTFFF 6,42,1,1,0,0,0,0,<..\..\filesystem\dfs\src\dfs_init.c> OPTFFF 6,43,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_fs.c> OPTFFF 6,44,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_raw.c> OPTFFF 6,45,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_util.c> -OPTFFF 6,46,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_cache.c> +OPTFFF 6,46,1,0,0,1,1,0,<..\..\filesystem\dfs\src\dfs_cache.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,135,2,0,0,41,1,0,0 } OPTFFF 6,47,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_posix.c> -OPTFFF 6,48,1,0,0,160,168,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\efs.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,44,0,0,0,58,0,0,0,183,2,0,0,100,1,0,0 } +OPTFFF 6,48,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\efs.c> OPTFFF 6,49,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\extract.c> OPTFFF 6,50,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\partition.c> OPTFFF 6,51,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\plibc.c> @@ -115,16 +115,12 @@ OPTFFF 7,92,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch.c> OPTFFF 7,93,1,0,0,0,0,0,<..\..\net\lwip\src\api\sockets.c> OPTFFF 7,94,1,0,0,0,0,0,<..\..\net\lwip\src\core\memp_tiny.c> OPTFFF 8,95,1,0,0,0,0,0,<..\..\net\apps\chargen.c> -OPTFFF 8,96,1,0,0,548,558,0,<..\..\net\apps\ftpd.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,44,0,0,0,58,0,0,0,214,2,0,0,38,1,0,0 } +OPTFFF 8,96,1,0,0,0,0,0,<..\..\net\apps\ftpd.c> OPTFFF 8,97,1,0,0,0,0,0,<..\..\net\apps\sntp.c> OPTFFF 8,98,1,0,0,0,0,0,<..\..\net\apps\tcpecho.c> -OPTFFF 8,99,1,486539264,0,56,56,0,<..\..\net\apps\tftp.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,161,2,0,0,71,1,0,0 } +OPTFFF 8,99,1,486539264,0,0,0,0,<..\..\net\apps\tftp.c> OPTFFF 8,100,1,0,0,0,0,0,<..\..\net\apps\udpecho.c> -ExtF 141,141,0,{ 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,236,2,0,0,67,1,0,0 } -ExtF 83,91,0,{ 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,170,2,0,0,236,0,0,0 } -ExtF 144,148,0,{ 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,170,2,0,0,236,0,0,0 } -ExtF 81,87,0,{ 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,170,2,0,0,236,0,0,0 } TARGOPT 1, (RT-Thread/LM3S) ADSCLK=6000000 diff --git a/bsp/lm3s/project_lwip_dfs.Uv2 b/bsp/lm3s/project_lwip_dfs.Uv2 index d0b45185e..94bad23c2 100644 --- a/bsp/lm3s/project_lwip_dfs.Uv2 +++ b/bsp/lm3s/project_lwip_dfs.Uv2 @@ -52,7 +52,7 @@ File 4,2,<..\..\libcpu\arm\lm3s\start_rvds.S> File 4,1,<..\..\libcpu\arm\lm3s\serial.c> File 4,1,<..\..\libcpu\arm\lm3s\fault.c> File 4,2,<..\..\libcpu\arm\lm3s\fault_rvds.S> -File 5,4,<.\driverlib\rvmdk\driverlib.lib> +File 5,4, File 6,1,<..\..\filesystem\dfs\src\dfs_init.c> File 6,1,<..\..\filesystem\dfs\src\dfs_fs.c> File 6,1,<..\..\filesystem\dfs\src\dfs_raw.c> @@ -172,7 +172,7 @@ Options 1,0,0 // Target 'RT-Thread/LM3S' ADSCMISC () ADSCDEFN () ADSCUDEF () - ADSCINCD (.;.\inc;..\..\include;..\..\libcpu\arm\lm3s;..\..\finsh;..\..\filesystem\dfs;..\..\filesystem\dfs\include;..\..\net\lwip\src;..\..\net\lwip\src\include;..\..\net\lwip\src\arch\include;..\..\net\lwip\src\include\ipv4;..\..\filesystem\dfs\include;..\..\filesystem\dfs\filesystems\efsl\src\include;..\..\filesystem\dfs\filesystems\efsl\src\base\include;..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\include) + ADSCINCD (.;.\Libraries;..\..\include;..\..\libcpu\arm\lm3s;..\..\finsh;..\..\filesystem\dfs;..\..\filesystem\dfs\include;..\..\net\lwip\src;..\..\net\lwip\src\include;..\..\net\lwip\src\arch\include;..\..\net\lwip\src\include\ipv4;..\..\filesystem\dfs\include;..\..\filesystem\dfs\filesystems\efsl\src\include;..\..\filesystem\dfs\filesystems\efsl\src\base\include;..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\include) ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } ADSAMISC () ADSADEFN () diff --git a/filesystem/dfs/filesystems/efsl/src/base/debug.c b/filesystem/dfs/filesystems/efsl/src/base/debug.c deleted file mode 100644 index 05962c617..000000000 --- a/filesystem/dfs/filesystems/efsl/src/base/debug.c +++ /dev/null @@ -1,182 +0,0 @@ -/*****************************************************************************\ -* EFSL - Embedded Filesystems Library * -* ----------------------------------- * -* * -* Filename : debug.c * -* Release : 0.3 - devel * -* Description : These functions are used for debugging output on different * -* environments * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License * -* as published by the Free Software Foundation; version 2 * -* of the License. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* As a special exception, if other files instantiate templates or * -* use macros or inline functions from this file, or you compile this * -* file and link it with other works to produce a work based on this file, * -* this file does not by itself cause the resulting work to be covered * -* by the GNU General Public License. However the source code for this * -* file must still be made available in accordance with section (3) of * -* the GNU General Public License. * -* * -* This exception does not invalidate any other reasons why a work based * -* on this file might be covered by the GNU General Public License. * -* * -* (c)2006 Lennart Yseboodt * -* (c)2006 Michael De Nil * -\*****************************************************************************/ - -/* COMMENT REGARDING FUNCTION COMMENTS IN THIS FILE - * Only the linuxfile debug functions are commented since all functions - * perform the same logical task. -*/ - -/*****************************************************************************/ -#include "debug.h" -/*****************************************************************************/ - - -/*****************************************************************************/ -#ifdef DEBUG -#ifdef HW_ENDPOINT_LINUX_ALL -/*****************************************************************************/ - -/* **************************************************************************** - * void debug(const eint8 *format, ...) - * Description: This function prints debug output to the screen (target dependant) - * and if DO_FUNC_DEBUG is defined also to a localfile. - * Return value: void -*/ - -void debug(const eint8 *format, ...) -{ - va_list ap; - #ifdef DO_FUNC_DEBUG - euint8 c; - extern FILE* debugfile; - extern volatile euint8 tw; - #endif - - va_start(ap, format); - vprintf(format,ap); - #ifdef DO_FUNC_DEBUG - for(c=0;c0)tw--; - - for(c=0;c - #include - - #define TXT(x) x - #define DBG(x) debug x - #define FUNC_IN(x) debug_funcin(x) - #define FUNC_OUT(x) debug_funcout(x) - #endif - - void debug(const eint8 *format, ...); - void debug_init(); - void debug_end(); - -#endif - -#endif diff --git a/filesystem/dfs/filesystems/efsl/src/base/include/ioman.h b/filesystem/dfs/filesystems/efsl/src/base/include/ioman.h deleted file mode 100644 index 406ed5aff..000000000 --- a/filesystem/dfs/filesystems/efsl/src/base/include/ioman.h +++ /dev/null @@ -1,140 +0,0 @@ -/*****************************************************************************\ -* EFSL - Embedded Filesystems Library * -* ----------------------------------- * -* * -* Filename : ioman.c * -* Release : 0.3 - devel * -* Description : The IO Manager receives all requests for sectors in a central * -* allowing it to make smart decision regarding caching. * -* The IOMAN_NUMBUFFER parameter determines how many sectors * -* ioman can cache. ioman also supports overallocating and * -* backtracking sectors. * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License * -* as published by the Free Software Foundation; version 2 * -* of the License. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* As a special exception, if other files instantiate templates or * -* use macros or inline functions from this file, or you compile this * -* file and link it with other works to produce a work based on this file, * -* this file does not by itself cause the resulting work to be covered * -* by the GNU General Public License. However the source code for this * -* file must still be made available in accordance with section (3) of * -* the GNU General Public License. * -* * -* This exception does not invalidate any other reasons why a work based * -* on this file might be covered by the GNU General Public License. * -* * -* (c)2006 Lennart Yseboodt * -* (c)2006 Michael De Nil * -\*****************************************************************************/ - -#ifndef __IOMAN_H__ -#define __IOMAN_H__ - -/*****************************************************************************/ -#include - -#include "error.h" -#include "plibc.h" -#include "debug.h" -#include "types.h" -#include "config.h" -/*****************************************************************************/ - -#define IOMAN_STATUS_ATTR_VALIDDATA 0 -#define IOMAN_STATUS_ATTR_USERBUFFER 1 -#define IOMAN_STATUS_ATTR_WRITE 2 - -#define IOM_MODE_READONLY 1 -#define IOM_MODE_READWRITE 2 -#define IOM_MODE_EXP_REQ 4 - -struct _IOManStack{ - euint32 sector; - euint8 status; - euint8 usage; -}; -typedef struct _IOManStack IOManStack; - -struct _IOManager{ - rt_device_t device; - euint8 *bufptr; - euint16 numbuf; - euint16 numit; - - IOMAN_ERR_EUINT8 - - IOManStack stack[IOMAN_NUMBUFFER][IOMAN_NUMITERATIONS]; - - euint32 sector[IOMAN_NUMBUFFER]; - euint8 status[IOMAN_NUMBUFFER]; - euint8 usage[IOMAN_NUMBUFFER]; - euint8 reference[IOMAN_NUMBUFFER]; - euint8 itptr[IOMAN_NUMBUFFER]; -#ifdef IOMAN_DO_MEMALLOC - euint8 cache_mem[IOMAN_NUMBUFFER * 512]; -#endif -}; -typedef struct _IOManager IOManager; - -#define IOBJ ioman - -#define ioman_isValid(bp) ioman_getAttr(IOBJ,bp,IOMAN_STATUS_ATTR_VALIDDATA) -#define ioman_isUserBuf(bp) ioman_getAttr(IOBJ,bp,IOMAN_STATUS_ATTR_USERBUFFER) -#define ioman_isWritable(bp) ioman_getAttr(IOBJ,bp,IOMAN_STATUS_ATTR_WRITE) - -#define ioman_setValid(bp) ioman_setAttr(IOBJ,bp,IOMAN_STATUS_ATTR_VALIDDATA,1) -#define ioman_setUserBuf(bp) ioman_setAttr(IOBJ,bp,IOMAN_STATUS_ATTR_USERBUFFER,1) -#define ioman_setWritable(bp) ioman_setAttr(IOBJ,bp,IOMAN_STATUS_ATTR_WRITE,1) - -#define ioman_setNotValid(bp) ioman_setAttr(IOBJ,bp,IOMAN_STATUS_ATTR_VALIDDATA,0) -#define ioman_setNotUserBuf(bp) ioman_setAttr(IOBJ,bp,IOMAN_STATUS_ATTR_USERBUFFER,0) -#define ioman_setNotWritable(bp) ioman_setAttr(IOBJ,bp,IOMAN_STATUS_ATTR_WRITE,0) - -#define ioman_isReqRo(mode) ((mode)&(IOM_MODE_READONLY)) -#define ioman_isReqRw(mode) ((mode)&(IOM_MODE_READWRITE)) -#define ioman_isReqExp(mode) ((mode)&(IOM_MODE_EXP_REQ)) - -esint8 ioman_init(IOManager *ioman, euint8* bufferarea); -void ioman_reset(IOManager *ioman); -euint8* ioman_getBuffer(IOManager *ioman,euint8* bufferarea); -void ioman_setAttr(IOManager *ioman,euint16 bufplace,euint8 attribute,euint8 val); -euint8 ioman_getAttr(IOManager *ioman,euint16 bufplace,euint8 attribute); -euint8 ioman_getUseCnt(IOManager *ioman,euint16 bufplace); -void ioman_incUseCnt(IOManager *ioman,euint16 bufplace); -void ioman_decUseCnt(IOManager *ioman,euint16 bufplace); -void ioman_resetUseCnt(IOManager *ioman,euint16 bufplace); -euint8 ioman_getRefCnt(IOManager *ioman,euint16 bufplace); -void ioman_incRefCnt(IOManager *ioman,euint16 bufplace); -void ioman_decRefCnt(IOManager *ioman,euint16 bufplace); -void ioman_resetRefCnt(IOManager *ioman,euint16 bufplace); -esint8 ioman_pop(IOManager *ioman,euint16 bufplace); -esint8 ioman_push(IOManager *ioman,euint16 bufplace); -euint8* ioman_getPtr(IOManager *ioman,euint16 bufplace); -esint16 ioman_getBp(IOManager *ioman,euint8* buf); -esint8 ioman_readSector(IOManager *ioman,euint32 address,euint8* buf); -esint8 ioman_writeSector(IOManager *ioman, euint32 address, euint8* buf); -void ioman_resetCacheItem(IOManager *ioman,euint16 bufplace); -esint32 ioman_findSectorInCache(IOManager *ioman, euint32 address); -esint32 ioman_findFreeSpot(IOManager *ioman); -esint32 ioman_findUnusedSpot(IOManager *ioman); -esint32 ioman_findOverallocableSpot(IOManager *ioman); -esint8 ioman_putSectorInCache(IOManager *ioman,euint32 address, euint16 bufplace); -esint8 ioman_flushSector(IOManager *ioman, euint16 bufplace); -euint8* ioman_getSector(IOManager *ioman,euint32 address, euint8 mode); -esint8 ioman_releaseSector(IOManager *ioman,euint8* buf); -esint8 ioman_directSectorRead(IOManager *ioman,euint32 address, euint8* buf); -esint8 ioman_directSectorWrite(IOManager *ioman,euint32 address, euint8* buf); -esint8 ioman_flushRange(IOManager *ioman,euint32 address_low, euint32 address_high); -esint8 ioman_flushAll(IOManager *ioman); - -void ioman_printStatus(IOManager *ioman); - -#endif diff --git a/filesystem/dfs/filesystems/efsl/src/base/include/ioman_small.h b/filesystem/dfs/filesystems/efsl/src/base/include/ioman_small.h deleted file mode 100644 index 5962f56c6..000000000 --- a/filesystem/dfs/filesystems/efsl/src/base/include/ioman_small.h +++ /dev/null @@ -1,93 +0,0 @@ -/*****************************************************************************\ -* EFSL - Embedded Filesystems Library * -* ----------------------------------- * -* * -* Filename : ioman_small.c * -* Release : 0.3 - devel * -* Description : The IO Manager receives all requests for sectors in a central * -* allowing it to make smart decision regarding caching. * -* The IOMAN_NUMBUFFER parameter determines how many sectors * -* ioman can cache. ioman also supports overallocating and * -* backtracking sectors. * -* This is the small version of IOMan, for systems with limited * -* resources. It features only one fixed buffer, and has * -* simplified operation * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License * -* as published by the Free Software Foundation; version 2 * -* of the License. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* As a special exception, if other files instantiate templates or * -* use macros or inline functions from this file, or you compile this * -* file and link it with other works to produce a work based on this file, * -* this file does not by itself cause the resulting work to be covered * -* by the GNU General Public License. However the source code for this * -* file must still be made available in accordance with section (3) of * -* the GNU General Public License. * -* * -* This exception does not invalidate any other reasons why a work based * -* on this file might be covered by the GNU General Public License. * -* * -* (c)2006 Lennart Yseboodt * -* (c)2006 Michael De Nil * -\*****************************************************************************/ - -#include "error.h" -#include "plibc.h" -#include "debug.h" -#include "types.h" -#include "config.h" - -#define IOMAN_STATUS_ATTR_VALIDDATA 0 -#define IOMAN_STATUS_ATTR_USERBUFFER 1 -#define IOMAN_STATUS_ATTR_WRITE 2 - -#define IOM_MODE_READONLY 1 -#define IOM_MODE_READWRITE 2 -#define IOM_MODE_EXP_REQ 4 - -struct _IOManStack{ - euint32 sector; - euint8 status; -}; -typedef struct _IOManStack IOManStack; - -struct _IOManager{ - rt_device_t device; /* device handler */ - euint8 bufptr[512]; - IOMAN_ERR_EUINT8 - euint32 sector; - euint8 status; - euint8 itptr; - IOManStack stack; -}; -typedef struct _IOManager IOManager; - -#define IOBJ ioman - -#define ioman_isValid() ioman_getAttr(IOBJ,IOMAN_STATUS_ATTR_VALIDDATA) -#define ioman_isUserBuf() ioman_getAttr(IOBJ,IOMAN_STATUS_ATTR_USERBUFFER) -#define ioman_isWritable() ioman_getAttr(IOBJ,IOMAN_STATUS_ATTR_WRITE) - -#define ioman_setValid() ioman_setAttr(IOBJ,IOMAN_STATUS_ATTR_VALIDDATA,1) -#define ioman_setUserBuf() ioman_setAttr(IOBJ,IOMAN_STATUS_ATTR_USERBUFFER,1) -#define ioman_setWritable() ioman_setAttr(IOBJ,IOMAN_STATUS_ATTR_WRITE,1) - -#define ioman_setNotValid() ioman_setAttr(IOBJ,IOMAN_STATUS_ATTR_VALIDDATA,0) -#define ioman_setNotUserBuf() ioman_setAttr(IOBJ,IOMAN_STATUS_ATTR_USERBUFFER,0) -#define ioman_setNotWritable() ioman_setAttr(IOBJ,IOMAN_STATUS_ATTR_WRITE,0) - -#define ioman_isReqRo(mode) ((mode)&(IOM_MODE_READONLY)) -#define ioman_isReqRw(mode) ((mode)&(IOM_MODE_READWRITE)) -#define ioman_isReqExp(mode) ((mode)&(IOM_MODE_EXP_REQ)) - -esint8 ioman_init(IOManager *ioman, euint8* bufferarea); -void ioman_reset(IOManager *ioman); -void ioman_setAttr(IOManager *ioman,euint8 attribute,euint8 val); -euint8 ioman_getAttr(IOManager *ioman,euint8 attribute); diff --git a/filesystem/dfs/filesystems/efsl/src/base/include/plibc.h b/filesystem/dfs/filesystems/efsl/src/base/include/plibc.h index 30d86bd60..80dd11467 100644 --- a/filesystem/dfs/filesystems/efsl/src/base/include/plibc.h +++ b/filesystem/dfs/filesystems/efsl/src/base/include/plibc.h @@ -35,7 +35,6 @@ #define __PLIBC_H__ /*****************************************************************************/ -#include "debug.h" #include "types.h" #include "config.h" /*****************************************************************************/ diff --git a/filesystem/dfs/filesystems/efsl/src/base/ioman.c b/filesystem/dfs/filesystems/efsl/src/base/ioman.c deleted file mode 100644 index 42fb66432..000000000 --- a/filesystem/dfs/filesystems/efsl/src/base/ioman.c +++ /dev/null @@ -1,600 +0,0 @@ -/*****************************************************************************\ -* EFSL - Embedded Filesystems Library * -* ----------------------------------- * -* * -* Filename : ioman.c * -* Release : 0.3 - devel * -* Description : The IO Manager receives all requests for sectors in a central * -* allowing it to make smart decision regarding caching. * -* The IOMAN_NUMBUFFER parameter determines how many sectors * -* ioman can cache. ioman also supports overallocating and * -* backtracking sectors. * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License * -* as published by the Free Software Foundation; version 2 * -* of the License. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* As a special exception, if other files instantiate templates or * -* use macros or inline functions from this file, or you compile this * -* file and link it with other works to produce a work based on this file, * -* this file does not by itself cause the resulting work to be covered * -* by the GNU General Public License. However the source code for this * -* file must still be made available in accordance with section (3) of * -* the GNU General Public License. * -* * -* This exception does not invalidate any other reasons why a work based * -* on this file might be covered by the GNU General Public License. * -* * -* (c)2006 Lennart Yseboodt * -* (c)2006 Michael De Nil * -\*****************************************************************************/ - -/*****************************************************************************/ -#include "ioman.h" -#include "efs.h" -/*****************************************************************************/ - -esint8 ioman_init(IOManager *ioman, euint8* bufferarea) -{ - ioman->bufptr = ioman_getBuffer(ioman,bufferarea); - ioman->numbuf = IOMAN_NUMBUFFER; - ioman->numit = IOMAN_NUMITERATIONS; - - ioman_reset(ioman); - return(0); -} -/*****************************************************************************/ - -void ioman_reset(IOManager *ioman) -{ - euint16 nb,ni; - - memClr(ioman->sector,sizeof(euint32)*ioman->numbuf); - memClr(ioman->status,sizeof(euint8) *ioman->numbuf); - memClr(ioman->usage ,sizeof(euint8) *ioman->numbuf); - memClr(ioman->itptr ,sizeof(euint8) *ioman->numbuf); - ioman_setError(ioman,IOMAN_NOERROR); - - for(nb=0;nbnumbuf;nb++){ - for(ni=0;ninumit;ni++){ - ioman->stack[nb][ni].sector=0; - ioman->stack[nb][ni].status=0; - ioman->stack[nb][ni].usage =0; - } - } -} -/*****************************************************************************/ - -euint8* ioman_getBuffer(IOManager *ioman,euint8* bufferarea) -{ -#ifdef IOMAN_DO_MEMALLOC - return(ioman->cache_mem); -#else - return(bufferarea); -#endif -} -/*****************************************************************************/ - -void ioman_setAttr(IOManager *ioman,euint16 bufplace,euint8 attribute,euint8 val) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_SETATTROUTOFBOUNDS); - return; /* Out of bounds */ - } - - if(val){ - ioman->status[bufplace]|=1<status[bufplace]&=~(1<=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_GETATTROUTOFBOUNDS); - return(0xFF); /* Out of bounds */ - } - - return(ioman->status[bufplace]&(1<=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return(0x00); - } - return(ioman->usage[bufplace]); -} -/*****************************************************************************/ - - -void ioman_incUseCnt(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return; - } - if(ioman->usage[bufplace]==0xFF)return; - else ioman->usage[bufplace]++; -} -/*****************************************************************************/ - -void ioman_decUseCnt(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return; - } - if(ioman->usage[bufplace]==0x0)return; - else ioman->usage[bufplace]--; -} -/*****************************************************************************/ - -void ioman_resetUseCnt(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return; - } - ioman->usage[bufplace]=0x00; -} -/*****************************************************************************/ - -euint8 ioman_getRefCnt(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return(0x00); - } - return(ioman->reference[bufplace]); -} -/*****************************************************************************/ - -void ioman_incRefCnt(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return; - } - if(ioman->reference[bufplace]==0xFF)return; - else ioman->reference[bufplace]++; -} -/*****************************************************************************/ - -void ioman_decRefCnt(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return; - } - if(ioman->reference[bufplace]==0x00)return; - else ioman->reference[bufplace]--; -} -/*****************************************************************************/ - -void ioman_resetRefCnt(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return; - } - ioman->reference[bufplace]=0x00; -} -/*****************************************************************************/ - -esint8 ioman_pop(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_POPEMPTYSTACK); - return(-1); - } - if(ioman->itptr[bufplace]==0 || ioman->itptr[bufplace]>IOMAN_NUMITERATIONS)return(-1); - ioman->itptr[bufplace]--; - ioman->sector[bufplace] = ioman->stack[bufplace][ioman->itptr[bufplace]].sector; - ioman->status[bufplace] = ioman->stack[bufplace][ioman->itptr[bufplace]].status; - ioman->usage[bufplace] = ioman->stack[bufplace][ioman->itptr[bufplace]].usage; - return(0); -} -/*****************************************************************************/ - -esint8 ioman_push(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return(-1); - } - if(ioman->itptr[bufplace]>=IOMAN_NUMITERATIONS){ - ioman_setError(ioman,IOMAN_ERR_PUSHBEYONDSTACK); - return(-1); - } - ioman->stack[bufplace][ioman->itptr[bufplace]].sector = ioman->sector[bufplace]; - ioman->stack[bufplace][ioman->itptr[bufplace]].status = ioman->status[bufplace]; - ioman->stack[bufplace][ioman->itptr[bufplace]].usage = ioman->usage[bufplace]; - ioman->itptr[bufplace]++; - return(0); -} -/*****************************************************************************/ - -euint8* ioman_getPtr(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return(0); - } - return(ioman->bufptr+bufplace*512); -} -/*****************************************************************************/ - -esint16 ioman_getBp(IOManager *ioman,euint8* buf) -{ - if(buf<(ioman->bufptr) || buf>=( ioman->bufptr+(ioman->numbuf*512) )){ - ioman_setError(ioman,IOMAN_ERR_CACHEPTROUTOFRANGE); - return(-1); - } - return((buf-(ioman->bufptr))/512); -} -/*****************************************************************************/ - -esint8 ioman_readSector(IOManager *ioman,euint32 address,euint8* buf) -{ - esint8 r; - - if(buf==0){ - return(-1); - } - - r = efs_read_sectors(ioman->device, address, 1, buf); - - if(r!=1){ - ioman_setError(ioman,IOMAN_ERR_READFAIL); - return(-1); - } - return(0); -} -/*****************************************************************************/ - -esint8 ioman_writeSector(IOManager *ioman, euint32 address, euint8* buf) -{ - esint8 r; - - if(buf==0)return(-1); - - r = efs_write_sectors(ioman->device, address, 1, buf); - - if(r!=1){ - ioman_setError(ioman,IOMAN_ERR_WRITEFAIL); - return(-1); - } - return(0); -} -/*****************************************************************************/ - -void ioman_resetCacheItem(IOManager *ioman,euint16 bufplace) -{ - if(bufplace>=ioman->numbuf){ - ioman_setError(ioman,IOMAN_ERR_OPOUTOFBOUNDS); - return; - } - ioman->sector[bufplace] = 0; - ioman->status[bufplace] = 0; - ioman->usage[bufplace] = 0; - ioman->reference[bufplace] = 0; -} -/*****************************************************************************/ - -esint32 ioman_findSectorInCache(IOManager *ioman, euint32 address) -{ - euint16 c; - - for(c=0;cnumbuf;c++){ - if(ioman_isValid(c) && ioman->sector[c] == address)return(c); - } - return(-1); -} -/*****************************************************************************/ - -esint32 ioman_findFreeSpot(IOManager *ioman) -{ - euint16 c; - - for(c=0;cnumbuf;c++){ - if(!ioman_isValid(c))return(c); - } - return(-1); -} -/*****************************************************************************/ - -esint32 ioman_findUnusedSpot(IOManager *ioman) -{ - esint32 r=-1; - euint16 c; - euint8 fr=0,lr=0xFF; - - for(c=0;cnumbuf;c++){ - if(ioman_getUseCnt(ioman,c)==0){ - if(!ioman_isWritable(c) && !fr){ - fr=1; - lr=0xFF; - r=-1; - } - if(ioman_isWritable(c) && !fr){ - if(ioman_getRefCnt(ioman,c)<=lr){ - r=c; - lr=ioman_getRefCnt(ioman,c); - } - } - if(fr && !ioman_isWritable(c)){ - if(ioman_getRefCnt(ioman,c)<=lr){ - r=c; - lr=ioman_getRefCnt(ioman,c); - } - } - } - } - return(r); -} -/*****************************************************************************/ - -esint32 ioman_findOverallocableSpot(IOManager *ioman) -{ - euint8 points,lp=0xFF; - euint16 c; - esint32 r=-1; - - for(c=0;cnumbuf;c++){ - if(ioman->itptr[c]numit){ - points = 0; - if(ioman_isWritable(c))points+=0x7F; - points += ((euint16)(ioman->itptr[c]*0x4D))/(ioman->numit); - points += ((euint16)(ioman_getRefCnt(ioman,c)*0x33))/0xFF; - if(pointssector[bufplace]=address; - return(0); -} -/***************** if(bufplace>=ioman->numbuf)return; -************************************************************/ - -esint8 ioman_flushSector(IOManager *ioman, euint16 bufplace) -{ - euint8* buf; - - if((buf = ioman_getPtr(ioman,bufplace))==0){ - ioman_setError(ioman,IOMAN_ERR_CACHEPTROUTOFRANGE); - return(-1); - } - if(!ioman_isWritable(bufplace)){ - ioman_setError(ioman,IOMAN_ERR_WRITEREADONLYSECTOR); - return(-1); - } - if(ioman_writeSector(ioman,ioman->sector[bufplace],buf)){ /* ERROR HERE STILL TO BE FIXED -> ! must be removed! */ - ioman_setError(ioman,IOMAN_ERR_WRITEFAIL); - return(-1); - } - if(ioman->usage[bufplace]==0)ioman_setNotWritable(bufplace); - return(0); -} -/*****************************************************************************/ - -esint8 ioman_flushRange(IOManager *ioman,euint32 address_low, euint32 address_high) -{ - euint32 c; - - if(address_low>address_high){ - c=address_low; address_low=address_high;address_high=c; - } - - for(c=0;cnumbuf;c++){ - if((ioman->sector[c]>=address_low) && (ioman->sector[c]<=address_high) && (ioman_isWritable(c))){ - if(ioman_flushSector(ioman,c)){ - return(-1); - } - if(ioman->usage[c]==0)ioman_setNotWritable(c); - } - } - return(0); -} -/*****************************************************************************/ - -esint8 ioman_flushAll(IOManager *ioman) -{ - euint16 c; - - for(c=0;cnumbuf;c++){ - if(ioman_isWritable(c)){ - if(ioman_flushSector(ioman,c)){ - return(-1); - } - if(ioman->usage[c]==0)ioman_setNotWritable(c); - } - } - return(0); -} -/*****************************************************************************/ - -euint8* ioman_getSector(IOManager *ioman,euint32 address, euint8 mode) -{ - esint32 bp; - - if((bp=ioman_findSectorInCache(ioman,address))!=-1){ - if(ioman_isReqRw(mode)){ - ioman_setWritable(bp); - } - ioman_incUseCnt(ioman,bp); - if(!ioman_isReqExp(mode))ioman_incRefCnt(ioman,bp); - return(ioman_getPtr(ioman,bp)); - } - - if((bp=ioman_findFreeSpot(ioman))==-1){ - if(((bp=ioman_findUnusedSpot(ioman))!=-1)&&(ioman_isWritable(bp))){ - ioman_flushSector(ioman,bp); - } - } - - if(bp!=-1){ - ioman_resetCacheItem(ioman,bp); - if((ioman_putSectorInCache(ioman,address,bp))){ - return(0); - } - if(ioman_isReqRw(mode)){ - ioman_setWritable(bp); - } - ioman_incUseCnt(ioman,bp); - if(!ioman_isReqExp(mode))ioman_incRefCnt(ioman,bp); - return(ioman_getPtr(ioman,bp)); - } - - if((bp=ioman_findOverallocableSpot(ioman))!=-1){ - if(ioman_isWritable(bp)){ - ioman_flushSector(ioman,bp); - } - if(ioman_push(ioman,bp)){ - return(0); - } - ioman_resetCacheItem(ioman,bp); - if((ioman_putSectorInCache(ioman,address,bp))){ - return(0); - } - if(ioman_isReqRw(mode)){ - ioman_setWritable(bp); - } - ioman_incUseCnt(ioman,bp); - if(!ioman_isReqExp(mode))ioman_incRefCnt(ioman,bp); - return(ioman_getPtr(ioman,bp)); - } - ioman_setError(ioman,IOMAN_ERR_NOMEMORY); - return(0); -} -/*****************************************************************************/ - -esint8 ioman_releaseSector(IOManager *ioman,euint8* buf) -{ - euint16 bp; - - bp=ioman_getBp(ioman,buf); - ioman_decUseCnt(ioman,bp); - - if(ioman_getUseCnt(ioman,bp)==0) - { - if(ioman_isWritable(bp)) - { - ioman_flushSector(ioman,bp); - } - if(ioman->itptr[bp]!=0) - { - ioman_pop(ioman,bp); - ioman_putSectorInCache(ioman,ioman->sector[bp],bp); - } - } - - return(0); -} -/*****************************************************************************/ - -esint8 ioman_directSectorRead(IOManager *ioman,euint32 address, euint8* buf) -{ - euint8* ibuf; - esint16 bp; - - if((bp=ioman_findSectorInCache(ioman,address))!=-1){ - ibuf=ioman_getPtr(ioman,bp); - memCpy(ibuf,buf,512); - return(0); - } - - if((bp=ioman_findFreeSpot(ioman))!=-1){ - if((ioman_putSectorInCache(ioman,address,bp))){ - return(-1); - } - ibuf=ioman_getPtr(ioman,bp); - memCpy(ibuf,buf,512); - return(0); - } - - if(ioman_readSector(ioman,address,buf)){ - return(-1); - } - - return(0); -} -/*****************************************************************************/ - -esint8 ioman_directSectorWrite(IOManager *ioman,euint32 address, euint8* buf) -{ - euint8* ibuf; - esint16 bp; - - if((bp=ioman_findSectorInCache(ioman,address))!=-1){ - ibuf=ioman_getPtr(ioman,bp); - memCpy(buf,ibuf,512); - ioman_setWritable(bp); - return(0); - } - - if((bp=ioman_findFreeSpot(ioman))!=-1){ - ibuf=ioman_getPtr(ioman,bp); - memCpy(buf,ibuf,512); - ioman_resetCacheItem(ioman,bp); - ioman->sector[bp]=address; - ioman_setWritable(bp); - ioman_setValid(bp); - return(0); - } - - if(ioman_writeSector(ioman,address,buf)){ - return(-1); - } - - return(0); -} -/*****************************************************************************/ - -void ioman_printStatus(IOManager *ioman) -{ - euint16 c; - - DBG((TXT("IO-Manager -- Report\n====================\n"))); - DBG((TXT("Buffer is %i sectors, from %p to %p\n"), - ioman->numbuf,ioman->bufptr,ioman->bufptr+(ioman->numbuf*512))); - for(c=0;cnumbuf;c++){ - if(ioman_isValid(c)){ - DBG((TXT("BP %3i\t SC %8li\t\t US %i\t RF %i\t %s %s\n"), - c,ioman->sector[c],ioman_getUseCnt(ioman,c),ioman_getRefCnt(ioman,c), - ioman_isUserBuf(c) ? "USRBUF" : " ", - ioman_isWritable(c) ? "WRITABLE" : "READONLY")); - } - } -} -/*****************************************************************************/ - diff --git a/filesystem/dfs/filesystems/efsl/src/base/ioman_small.c b/filesystem/dfs/filesystems/efsl/src/base/ioman_small.c deleted file mode 100644 index 287e0e08a..000000000 --- a/filesystem/dfs/filesystems/efsl/src/base/ioman_small.c +++ /dev/null @@ -1,120 +0,0 @@ -/*****************************************************************************\ -* EFSL - Embedded Filesystems Library * -* ----------------------------------- * -* * -* Filename : ioman_small.c * -* Release : 0.3 - devel * -* Description : The IO Manager receives all requests for sectors in a central * -* allowing it to make smart decision regarding caching. * -* The IOMAN_NUMBUFFER parameter determines how many sectors * -* ioman can cache. ioman also supports overallocating and * -* backtracking sectors. * -* This is the small version of IOMan, for systems with limited * -* resources. It features only one fixed buffer, and has * -* simplified operation * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License * -* as published by the Free Software Foundation; version 2 * -* of the License. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* As a special exception, if other files instantiate templates or * -* use macros or inline functions from this file, or you compile this * -* file and link it with other works to produce a work based on this file, * -* this file does not by itself cause the resulting work to be covered * -* by the GNU General Public License. However the source code for this * -* file must still be made available in accordance with section (3) of * -* the GNU General Public License. * -* * -* This exception does not invalidate any other reasons why a work based * -* on this file might be covered by the GNU General Public License. * -* * -* (c)2006 Lennart Yseboodt * -* (c)2006 Michael De Nil * -\*****************************************************************************/ - -#include "ioman_small.h" - -esint8 ioman_init(IOManager *ioman, euint8* bufferarea) -{ - ioman_reset(ioman); - return(0); -} -/*****************************************************************************/ - -void ioman_reset(IOManager *ioman) -{ - ioman->sector=ioman->status=ioman->itptr=0; - ioman->stack.sector=ioman->stack.status=0; - - ioman_setError(ioman,IOMAN_NOERROR); - -} -/*****************************************************************************/ - -void ioman_setAttr(IOManager *ioman,euint8 attribute,euint8 val) -{ - if(val){ - ioman->status|=1<status&=~(1<status&(1<sector){ - if(mode==IOM_MODE_READWRITE)ioman_setWritable(); - return(ioman->bufptr); - } - -} - -esint8 ioman_readSector(IOManager *ioman,euint32 address,euint8* buf) -{ - esint8 r; - - if(buf==0){ - return(-1); - } - - //r=if_readBuf(ioman->iface,address,buf); - r = efs_read_sectors(ioman->device, address, 1, buf); - - if(r!=0){ - ioman_setError(ioman,IOMAN_ERR_READFAIL); - return(-1); - } - return(0); -} -/*****************************************************************************/ - -esint8 ioman_writeSector(IOManager *ioman, euint32 address, euint8* buf) -{ - esint8 r; - - if(buf==0)return(-1); - - //r=if_writeBuf(ioman->iface,address,buf); - r = efs_write_sectors(ioman->device, address, 1, buf); - - if(r<=0){ - ioman_setError(ioman,IOMAN_ERR_WRITEFAIL); - return(-1); - } - return(0); -} -/*****************************************************************************/ diff --git a/filesystem/dfs/filesystems/efsl/src/fs/vfat/fat.c b/filesystem/dfs/filesystems/efsl/src/fs/vfat/fat.c index 4f9a3f475..eea76446c 100644 --- a/filesystem/dfs/filesystems/efsl/src/fs/vfat/fat.c +++ b/filesystem/dfs/filesystems/efsl/src/fs/vfat/fat.c @@ -51,9 +51,9 @@ euint32 fat_getSectorAddressFatEntry(FileSystem *fs,euint32 cluster_addr) res=(cluster_addr*3/1024); if(res>=fs->FatSectorCount){ return(0); - } + } return(base+res); - + case FAT16: res=cluster_addr/256; if(res>=fs->FatSectorCount){ @@ -64,7 +64,7 @@ euint32 fat_getSectorAddressFatEntry(FileSystem *fs,euint32 cluster_addr) res=cluster_addr/128; if(res>=fs->FatSectorCount){ return(0); - } + } return(base+res); } return(0); @@ -142,8 +142,7 @@ void fat_setNextClusterAddress(FileSystem *fs,euint32 cluster_addr,euint32 next_ euint32 sector; sector=fat_getSectorAddressFatEntry(fs,cluster_addr); - if(fs->FatSectorCountFatSectorCount from + * r1 --> to + */ +.global rt_hw_context_switch_interrupt +.type rt_hw_context_switch_interrupt, %function +.global rt_hw_context_switch +.type rt_hw_context_switch, %function + +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + /* set rt_thread_switch_interrput_flag to 1 */ + LDR r2, =rt_thread_switch_interrput_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread /* set rt_interrupt_from_thread */ + STR r0, [r2] + +_reswitch: + LDR r2, =rt_interrupt_to_thread /* set rt_interrupt_to_thread */ + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + +/* r0 --> swith from thread stack + * r1 --> swith to thread stack + * psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack + */ +.global rt_hw_pend_sv +.type rt_hw_pend_sv, %function +rt_hw_pend_sv: + /* disable interrupt to protect context switch */ + MRS r2, PRIMASK + CPSID I + + /* get rt_thread_switch_interrupt_flag */ + LDR r0, =rt_thread_switch_interrput_flag + LDR r1, [r0] + CBZ r1, pendsv_exit /* pendsv already handled */ + + /* clear rt_thread_switch_interrput_flag to 0 */ + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, swtich_to_thread /* skip register save at the first time */ + + MRS r1, psp /* get from thread stack pointer */ + STMFD r1!, {r4 - r11} /* push r4 - r11 register */ + LDR r0, [r0] + STR r1, [r0] /* update from thread stack pointer */ + +swtich_to_thread: + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] /* load thread stack pointer */ + + LDMFD r1!, {r4 - r11} /* pop r4 - r11 register */ + MSR psp, r1 /* update stack pointer */ + +pendsv_exit: + /* restore interrupt */ + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * r0 --> to + */ +.global rt_hw_context_switch_to +.type rt_hw_context_switch_to, %function +rt_hw_context_switch_to: + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + + /* set from thread to 0 */ + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + /* set interrupt flag to 1 */ + LDR r1, =rt_thread_switch_interrput_flag + MOV r0, #1 + STR r0, [r1] + + /* set the PendSV exception priority */ + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + STR r1, [r0] + + LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + CPSIE I /* enable interrupts at processor level */ + + /* never reach here! */ + +/* compatible with old version */ +.global rt_hw_interrupt_thread_switch +.type rt_hw_interrupt_thread_switch, %function +rt_hw_interrupt_thread_switch: + BX lr + NOP diff --git a/libcpu/arm/lm3s/start_gcc.c b/libcpu/arm/lm3s/start_gcc.c new file mode 100644 index 000000000..fa1398e35 --- /dev/null +++ b/libcpu/arm/lm3s/start_gcc.c @@ -0,0 +1,242 @@ +//***************************************************************************** +// +// startup.c - Boot code for Stellaris. +// +// Copyright (c) 2005-2008 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. You may not combine +// this software with "viral" open-source software in order to form a larger +// program. 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 2752 of the Stellaris Peripheral Driver Library. +// +//***************************************************************************** + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +#ifndef STACK_SIZE +#define STACK_SIZE 64 +#endif +static unsigned long pulStack[STACK_SIZE]; + +//***************************************************************************** +// +// 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. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((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 + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // 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 + IntDefaultHandler, // 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 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler // uDMA Error +}; + +//***************************************************************************** +// +// 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. +// +//***************************************************************************** +extern unsigned long _etext; +extern unsigned long _sdata; +extern unsigned long _edata; +extern unsigned long _sbss; +extern unsigned long _ebss; + +//***************************************************************************** +// +// 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 main() 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; + + // + // Copy the data segment initializers from flash to SRAM. + // + pulSrc = &_etext; + for(pulDest = &_sdata; pulDest < &_edata; ) + { + *pulDest++ = *pulSrc++; + } + + // + // Zero fill the bss segment. This is done with inline assembly since this + // will clear the value of pulDest if it is not kept in a register. + // + __asm(" ldr r0, =_sbss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // 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) + { + } +}