forked from epagris/FreeRTOS-Kernel
		
	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>
 | 
			
		||||
    <KeepTimersRunning>true</KeepTimersRunning>
 | 
			
		||||
    <OverrideVtor>false</OverrideVtor>
 | 
			
		||||
    <OverrideVtorValue />
 | 
			
		||||
    <OverrideVtorValue>exception_table</OverrideVtorValue>
 | 
			
		||||
    <eraseonlaunchrule>1</eraseonlaunchrule>
 | 
			
		||||
    <AsfVersion>3.5.1</AsfVersion>
 | 
			
		||||
    <AsfFrameworkConfig>
 | 
			
		||||
@ -135,12 +135,8 @@
 | 
			
		||||
    <avrtool>com.atmel.avrdbg.tool.samice</avrtool>
 | 
			
		||||
    <com_atmel_avrdbg_tool_samice>
 | 
			
		||||
      <ToolType>com.atmel.avrdbg.tool.samice</ToolType>
 | 
			
		||||
      <ToolName>J-Link-OB-SAM3U128</ToolName>
 | 
			
		||||
      <ToolNumber>000480008435</ToolNumber>
 | 
			
		||||
      <KeepTimersRunning>true</KeepTimersRunning>
 | 
			
		||||
      <OverrideVtor>false</OverrideVtor>
 | 
			
		||||
      <OverrideVtorValue>
 | 
			
		||||
      </OverrideVtorValue>
 | 
			
		||||
      <ToolName>J-Link</ToolName>
 | 
			
		||||
      <ToolNumber>000480008423</ToolNumber>
 | 
			
		||||
      <Channel>
 | 
			
		||||
        <host>127.0.0.1</host>
 | 
			
		||||
        <port>1882</port>
 | 
			
		||||
@ -158,13 +154,13 @@
 | 
			
		||||
          <JtagDevicesAfter>0</JtagDevicesAfter>
 | 
			
		||||
          <JtagInstrBitsBefore>0</JtagInstrBitsBefore>
 | 
			
		||||
          <JtagInstrBitsAfter>0</JtagInstrBitsAfter>
 | 
			
		||||
          <SwdClock>4000000</SwdClock>
 | 
			
		||||
          <SwdClock>32000</SwdClock>
 | 
			
		||||
        </InterfaceProperties>
 | 
			
		||||
      </ToolOptions>
 | 
			
		||||
    </com_atmel_avrdbg_tool_samice>
 | 
			
		||||
    <CacheFlash>true</CacheFlash>
 | 
			
		||||
    <ProgFlashFromRam>true</ProgFlashFromRam>
 | 
			
		||||
    <RamSnippetAddress />
 | 
			
		||||
    <RamSnippetAddress>0x20000000</RamSnippetAddress>
 | 
			
		||||
    <UncachedRange />
 | 
			
		||||
    <BootSegment>2</BootSegment>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
@ -212,7 +208,7 @@
 | 
			
		||||
  <armgcc.compiler.optimization.OtherFlags>-fdata-sections</armgcc.compiler.optimization.OtherFlags>
 | 
			
		||||
  <armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
 | 
			
		||||
  <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>
 | 
			
		||||
    <ListValues>
 | 
			
		||||
      <Value>arm_cortexM4l_math</Value>
 | 
			
		||||
@ -227,7 +223,7 @@
 | 
			
		||||
  </armgcc.linker.libraries.LibrarySearchPaths>
 | 
			
		||||
  <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.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>
 | 
			
		||||
    <ListValues>
 | 
			
		||||
      <Value>../src/asf/sam/utils/preprocessor</Value>
 | 
			
		||||
@ -256,7 +252,7 @@
 | 
			
		||||
      <Value>%24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL\sam4l\include</Value>
 | 
			
		||||
    </ListValues>
 | 
			
		||||
  </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>
 | 
			
		||||
    <ListValues>
 | 
			
		||||
      <Value>../src/asf/sam/utils/preprocessor</Value>
 | 
			
		||||
@ -336,7 +332,7 @@
 | 
			
		||||
  <armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
 | 
			
		||||
  <armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
 | 
			
		||||
  <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>
 | 
			
		||||
    <ListValues>
 | 
			
		||||
      <Value>libm</Value>
 | 
			
		||||
@ -350,7 +346,7 @@
 | 
			
		||||
  </armgcc.linker.libraries.LibrarySearchPaths>
 | 
			
		||||
  <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.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>
 | 
			
		||||
    <ListValues>
 | 
			
		||||
      <Value>../src/asf/sam/utils/preprocessor</Value>
 | 
			
		||||
@ -380,7 +376,7 @@
 | 
			
		||||
    </ListValues>
 | 
			
		||||
  </armgcc.assembler.general.IncludePaths>
 | 
			
		||||
  <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>
 | 
			
		||||
    <ListValues>
 | 
			
		||||
      <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. */
 | 
			
		||||
void vPortSuppressTicksAndSleep( portTickType xExpectedIdleTime )
 | 
			
		||||
{
 | 
			
		||||
uint32_t ulAlarmValue, ulCompleteTickPeriods;
 | 
			
		||||
uint32_t ulAlarmValue, ulCompleteTickPeriods, ulInterruptStatus;
 | 
			
		||||
eSleepModeStatus eSleepAction;
 | 
			
		||||
portTickType xModifiableIdleTime;
 | 
			
		||||
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
 | 
			
		||||
	that will mask interrupts that should exit sleep mode. */
 | 
			
		||||
	__asm volatile( "cpsid i		\n\t"
 | 
			
		||||
					"dsb			\n\t" );
 | 
			
		||||
	ulInterruptStatus = cpu_irq_save();
 | 
			
		||||
 | 
			
		||||
	/* 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
 | 
			
		||||
@ -303,7 +302,7 @@ enum sleepmgr_mode xSleepMode;
 | 
			
		||||
 | 
			
		||||
		/* Re-enable interrupts - see comments above the cpsid instruction()
 | 
			
		||||
		above. */
 | 
			
		||||
		__asm volatile( "cpsie i" );
 | 
			
		||||
		cpu_irq_restore( ulInterruptStatus );
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
@ -345,7 +344,7 @@ enum sleepmgr_mode xSleepMode;
 | 
			
		||||
 | 
			
		||||
		/* Re-enable interrupts - see comments above the cpsid instruction()
 | 
			
		||||
		above. */
 | 
			
		||||
		__asm volatile( "cpsie i" );
 | 
			
		||||
		cpu_irq_restore( ulInterruptStatus );
 | 
			
		||||
 | 
			
		||||
		if( ulTickFlag != pdFALSE )
 | 
			
		||||
		{
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user