mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-20 21:41:59 -04:00
Update the SAM4L low power demo to use the ASF enable/disable interrupts functions rather than manipulating the PIRMASK directly - and in so doing allow other ASF functions to be called with the interrupt enable bit nesting.
This commit is contained in:
parent
0cd79ad81d
commit
8320dfb885
|
@ -18,7 +18,7 @@
|
||||||
<ToolchainFlavour>Native</ToolchainFlavour>
|
<ToolchainFlavour>Native</ToolchainFlavour>
|
||||||
<KeepTimersRunning>true</KeepTimersRunning>
|
<KeepTimersRunning>true</KeepTimersRunning>
|
||||||
<OverrideVtor>false</OverrideVtor>
|
<OverrideVtor>false</OverrideVtor>
|
||||||
<OverrideVtorValue />
|
<OverrideVtorValue>exception_table</OverrideVtorValue>
|
||||||
<eraseonlaunchrule>1</eraseonlaunchrule>
|
<eraseonlaunchrule>1</eraseonlaunchrule>
|
||||||
<AsfVersion>3.5.1</AsfVersion>
|
<AsfVersion>3.5.1</AsfVersion>
|
||||||
<AsfFrameworkConfig>
|
<AsfFrameworkConfig>
|
||||||
|
@ -135,12 +135,8 @@
|
||||||
<avrtool>com.atmel.avrdbg.tool.samice</avrtool>
|
<avrtool>com.atmel.avrdbg.tool.samice</avrtool>
|
||||||
<com_atmel_avrdbg_tool_samice>
|
<com_atmel_avrdbg_tool_samice>
|
||||||
<ToolType>com.atmel.avrdbg.tool.samice</ToolType>
|
<ToolType>com.atmel.avrdbg.tool.samice</ToolType>
|
||||||
<ToolName>J-Link-OB-SAM3U128</ToolName>
|
<ToolName>J-Link</ToolName>
|
||||||
<ToolNumber>000480008435</ToolNumber>
|
<ToolNumber>000480008423</ToolNumber>
|
||||||
<KeepTimersRunning>true</KeepTimersRunning>
|
|
||||||
<OverrideVtor>false</OverrideVtor>
|
|
||||||
<OverrideVtorValue>
|
|
||||||
</OverrideVtorValue>
|
|
||||||
<Channel>
|
<Channel>
|
||||||
<host>127.0.0.1</host>
|
<host>127.0.0.1</host>
|
||||||
<port>1882</port>
|
<port>1882</port>
|
||||||
|
@ -158,13 +154,13 @@
|
||||||
<JtagDevicesAfter>0</JtagDevicesAfter>
|
<JtagDevicesAfter>0</JtagDevicesAfter>
|
||||||
<JtagInstrBitsBefore>0</JtagInstrBitsBefore>
|
<JtagInstrBitsBefore>0</JtagInstrBitsBefore>
|
||||||
<JtagInstrBitsAfter>0</JtagInstrBitsAfter>
|
<JtagInstrBitsAfter>0</JtagInstrBitsAfter>
|
||||||
<SwdClock>4000000</SwdClock>
|
<SwdClock>32000</SwdClock>
|
||||||
</InterfaceProperties>
|
</InterfaceProperties>
|
||||||
</ToolOptions>
|
</ToolOptions>
|
||||||
</com_atmel_avrdbg_tool_samice>
|
</com_atmel_avrdbg_tool_samice>
|
||||||
<CacheFlash>true</CacheFlash>
|
<CacheFlash>true</CacheFlash>
|
||||||
<ProgFlashFromRam>true</ProgFlashFromRam>
|
<ProgFlashFromRam>true</ProgFlashFromRam>
|
||||||
<RamSnippetAddress />
|
<RamSnippetAddress>0x20000000</RamSnippetAddress>
|
||||||
<UncachedRange />
|
<UncachedRange />
|
||||||
<BootSegment>2</BootSegment>
|
<BootSegment>2</BootSegment>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -212,7 +208,7 @@
|
||||||
<armgcc.compiler.optimization.OtherFlags>-fdata-sections</armgcc.compiler.optimization.OtherFlags>
|
<armgcc.compiler.optimization.OtherFlags>-fdata-sections</armgcc.compiler.optimization.OtherFlags>
|
||||||
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
|
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
|
||||||
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
|
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
|
||||||
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.compiler.miscellaneous.OtherFlags>
|
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.compiler.miscellaneous.OtherFlags>
|
||||||
<armgcc.linker.libraries.Libraries>
|
<armgcc.linker.libraries.Libraries>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
<Value>arm_cortexM4l_math</Value>
|
<Value>arm_cortexM4l_math</Value>
|
||||||
|
@ -227,7 +223,7 @@
|
||||||
</armgcc.linker.libraries.LibrarySearchPaths>
|
</armgcc.linker.libraries.LibrarySearchPaths>
|
||||||
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
||||||
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
||||||
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
||||||
<armgcc.assembler.general.IncludePaths>
|
<armgcc.assembler.general.IncludePaths>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
<Value>../src/asf/sam/utils/preprocessor</Value>
|
<Value>../src/asf/sam/utils/preprocessor</Value>
|
||||||
|
@ -256,7 +252,7 @@
|
||||||
<Value>%24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL\sam4l\include</Value>
|
<Value>%24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL\sam4l\include</Value>
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.assembler.general.IncludePaths>
|
</armgcc.assembler.general.IncludePaths>
|
||||||
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
||||||
<armgcc.preprocessingassembler.general.IncludePaths>
|
<armgcc.preprocessingassembler.general.IncludePaths>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
<Value>../src/asf/sam/utils/preprocessor</Value>
|
<Value>../src/asf/sam/utils/preprocessor</Value>
|
||||||
|
@ -336,7 +332,7 @@
|
||||||
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
|
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
|
||||||
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
|
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
|
||||||
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
|
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
|
||||||
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -Wmissing-field-initializers -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.compiler.miscellaneous.OtherFlags>
|
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -Wmissing-field-initializers -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.compiler.miscellaneous.OtherFlags>
|
||||||
<armgcc.linker.libraries.Libraries>
|
<armgcc.linker.libraries.Libraries>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
<Value>libm</Value>
|
<Value>libm</Value>
|
||||||
|
@ -350,7 +346,7 @@
|
||||||
</armgcc.linker.libraries.LibrarySearchPaths>
|
</armgcc.linker.libraries.LibrarySearchPaths>
|
||||||
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
||||||
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
||||||
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
||||||
<armgcc.assembler.general.IncludePaths>
|
<armgcc.assembler.general.IncludePaths>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
<Value>../src/asf/sam/utils/preprocessor</Value>
|
<Value>../src/asf/sam/utils/preprocessor</Value>
|
||||||
|
@ -380,7 +376,7 @@
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.assembler.general.IncludePaths>
|
</armgcc.assembler.general.IncludePaths>
|
||||||
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
|
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
|
||||||
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
||||||
<armgcc.preprocessingassembler.general.IncludePaths>
|
<armgcc.preprocessingassembler.general.IncludePaths>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
<Value>../src/asf/sam/utils/preprocessor</Value>
|
<Value>../src/asf/sam/utils/preprocessor</Value>
|
||||||
|
|
|
@ -253,7 +253,7 @@ asynchronous timer (AST), as the tick is generated from the low power AST and
|
||||||
not the SysTick as would normally be the case on a Cortex-M. */
|
not the SysTick as would normally be the case on a Cortex-M. */
|
||||||
void vPortSuppressTicksAndSleep( portTickType xExpectedIdleTime )
|
void vPortSuppressTicksAndSleep( portTickType xExpectedIdleTime )
|
||||||
{
|
{
|
||||||
uint32_t ulAlarmValue, ulCompleteTickPeriods;
|
uint32_t ulAlarmValue, ulCompleteTickPeriods, ulInterruptStatus;
|
||||||
eSleepModeStatus eSleepAction;
|
eSleepModeStatus eSleepAction;
|
||||||
portTickType xModifiableIdleTime;
|
portTickType xModifiableIdleTime;
|
||||||
enum sleepmgr_mode xSleepMode;
|
enum sleepmgr_mode xSleepMode;
|
||||||
|
@ -284,8 +284,7 @@ enum sleepmgr_mode xSleepMode;
|
||||||
|
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL() method as
|
/* Enter a critical section but don't use the taskENTER_CRITICAL() method as
|
||||||
that will mask interrupts that should exit sleep mode. */
|
that will mask interrupts that should exit sleep mode. */
|
||||||
__asm volatile( "cpsid i \n\t"
|
ulInterruptStatus = cpu_irq_save();
|
||||||
"dsb \n\t" );
|
|
||||||
|
|
||||||
/* The tick flag is set to false before sleeping. If it is true when sleep
|
/* The tick flag is set to false before sleeping. If it is true when sleep
|
||||||
mode is exited then sleep mode was probably exited because the tick was
|
mode is exited then sleep mode was probably exited because the tick was
|
||||||
|
@ -303,7 +302,7 @@ enum sleepmgr_mode xSleepMode;
|
||||||
|
|
||||||
/* Re-enable interrupts - see comments above the cpsid instruction()
|
/* Re-enable interrupts - see comments above the cpsid instruction()
|
||||||
above. */
|
above. */
|
||||||
__asm volatile( "cpsie i" );
|
cpu_irq_restore( ulInterruptStatus );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -345,7 +344,7 @@ enum sleepmgr_mode xSleepMode;
|
||||||
|
|
||||||
/* Re-enable interrupts - see comments above the cpsid instruction()
|
/* Re-enable interrupts - see comments above the cpsid instruction()
|
||||||
above. */
|
above. */
|
||||||
__asm volatile( "cpsie i" );
|
cpu_irq_restore( ulInterruptStatus );
|
||||||
|
|
||||||
if( ulTickFlag != pdFALSE )
|
if( ulTickFlag != pdFALSE )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue