Added FreeRTOS
This commit is contained in:
parent
22a382e475
commit
35635fe2ea
|
|
@ -40,7 +40,7 @@
|
|||
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Stack_Size EQU 0x00002000
|
||||
Stack_Size EQU 0x00000200
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN = 3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
|
|
@ -51,7 +51,7 @@ __initial_sp
|
|||
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Heap_Size EQU 0x00002000
|
||||
Heap_Size EQU 0x00000200
|
||||
|
||||
AREA HEAP, NOINIT, READWRITE, ALIGN = 3
|
||||
__heap_base
|
||||
|
|
@ -166,6 +166,7 @@ Reset_Handler PROC
|
|||
EXPORT Reset_Handler [WEAK]
|
||||
IMPORT __main
|
||||
IMPORT SystemInit
|
||||
IMPORT prvGetRegistersFromStack
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
LDR R0, =__main
|
||||
|
|
@ -178,10 +179,25 @@ NMI_Handler PROC
|
|||
B .
|
||||
ENDP
|
||||
|
||||
HardFault_Handler PROC
|
||||
EXPORT HardFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
HardFault_Handler\
|
||||
PROC
|
||||
EXPORT HardFault_Handler [WEAK]
|
||||
|
||||
movs r1, #4
|
||||
mov r2, lr
|
||||
tst r1, r2
|
||||
bne lable
|
||||
mrs r0, msp
|
||||
nop
|
||||
b lable1
|
||||
lable
|
||||
mrs r0, psp
|
||||
lable1
|
||||
ldr r1, [r0, #24]
|
||||
ldr r2, =prvGetRegistersFromStack
|
||||
bx r2
|
||||
|
||||
ENDP
|
||||
|
||||
MemManage_Handler PROC
|
||||
EXPORT MemManage_Handler [WEAK]
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ extern uint32_t SystemCoreClock;
|
|||
/* Constants that describe the hardware and memory usage. */
|
||||
#define configCPU_CLOCK_HZ (SystemCoreClock)
|
||||
#define configTICK_RATE_HZ ((TickType_t)1000)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)4096)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)8192)
|
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
|
||||
#define configSUPPORT_DYNAMIC_ALLOCATION 1
|
||||
#define configSUPPORT_STATIC_ALLOCATION 0
|
||||
|
|
@ -82,15 +82,15 @@ extern uint32_t SystemCoreClock;
|
|||
#define configUSE_CO_ROUTINES 0
|
||||
|
||||
/* Constants provided for debugging and optimisation assistance. */
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 0
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 1
|
||||
#define configQUEUE_REGISTRY_SIZE 0
|
||||
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
|
||||
|
||||
/* Constants that define which hook (callback) functions should be used. */
|
||||
#define configUSE_IDLE_HOOK 0
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configUSE_TICK_HOOK 1
|
||||
#define configUSE_DAEMON_TASK_STARTUP_HOOK 0
|
||||
#define configUSE_MALLOC_FAILED_HOOK 0
|
||||
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||
|
||||
/* Port specific configuration. */
|
||||
#define configENABLE_MPU 0
|
||||
|
|
@ -106,7 +106,7 @@ extern uint32_t SystemCoreClock;
|
|||
#define configPRIO_BITS __NVIC_PRIO_BITS
|
||||
#else
|
||||
/* 7 priority levels */
|
||||
#define configPRIO_BITS 3
|
||||
#define configPRIO_BITS 4
|
||||
#endif
|
||||
|
||||
/* The lowest interrupt priority that can be used in a call to a "set priority" function. */
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@
|
|||
#define RTE_RTOS_FreeRTOS_CONFIG /* RTOS FreeRTOS Config for FreeRTOS API */
|
||||
/* ARM.FreeRTOS::RTOS:Core:Cortex-M:10.5.1 */
|
||||
#define RTE_RTOS_FreeRTOS_CORE /* RTOS FreeRTOS Core */
|
||||
/* ARM.FreeRTOS::RTOS:Heap:Heap_4:10.5.1 */
|
||||
#define RTE_RTOS_FreeRTOS_HEAP_4 /* RTOS FreeRTOS Heap 4 */
|
||||
/* ARM.FreeRTOS::RTOS:Heap:Heap_2:10.5.1 */
|
||||
#define RTE_RTOS_FreeRTOS_HEAP_2 /* RTOS FreeRTOS Heap 2 */
|
||||
/* GigaDevice::Device:GD32F10x_StdPeripherals:EXTI:2.0.2 */
|
||||
#define RTE_DEVICE_STDPERIPHERALS_EXTI
|
||||
/* GigaDevice::Device:GD32F10x_StdPeripherals:GPIO:2.0.2 */
|
||||
|
|
|
|||
|
|
@ -153,24 +153,7 @@
|
|||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F107VC$Flash\GD32F10x_CL.FLM))</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>0</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134218370</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename></Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>0x08000282</Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<Breakpoint/>
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
<WinNumber>1</WinNumber>
|
||||
|
|
@ -180,7 +163,7 @@
|
|||
</Mm>
|
||||
</MemoryWindow1>
|
||||
<ScvdPack>
|
||||
<Filename>C:\Users\User\AppData\Local\Arm\Packs\ARM\CMSIS-FreeRTOS\10.5.1\CMSIS\RTOS2\FreeRTOS\FreeRTOS.scvd</Filename>
|
||||
<Filename>E:\Arm\Packs\ARM\CMSIS-FreeRTOS\10.5.1\CMSIS\RTOS2\FreeRTOS\FreeRTOS.scvd</Filename>
|
||||
<Type>ARM.CMSIS-FreeRTOS.10.5.1</Type>
|
||||
<SubType>1</SubType>
|
||||
</ScvdPack>
|
||||
|
|
@ -231,7 +214,7 @@
|
|||
|
||||
<Group>
|
||||
<GroupName>Source Group 1</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
|
|
|||
|
|
@ -317,28 +317,28 @@
|
|||
<interw>1</interw>
|
||||
<Optim>1</Optim>
|
||||
<oTime>0</oTime>
|
||||
<SplitLS>0</SplitLS>
|
||||
<SplitLS>1</SplitLS>
|
||||
<OneElfS>1</OneElfS>
|
||||
<Strict>0</Strict>
|
||||
<EnumInt>0</EnumInt>
|
||||
<PlainCh>0</PlainCh>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<wLevel>4</wLevel>
|
||||
<wLevel>3</wLevel>
|
||||
<uThumb>0</uThumb>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<uC99>0</uC99>
|
||||
<uC99>1</uC99>
|
||||
<uGnu>1</uGnu>
|
||||
<useXO>0</useXO>
|
||||
<v6Lang>5</v6Lang>
|
||||
<v6LangP>3</v6LangP>
|
||||
<v6LangP>5</v6LangP>
|
||||
<vShortEn>1</vShortEn>
|
||||
<vShortWch>1</vShortWch>
|
||||
<v6Lto>0</v6Lto>
|
||||
<v6Lto>1</v6Lto>
|
||||
<v6WtE>0</v6WtE>
|
||||
<v6Rtti>0</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<MiscControls>-D DEBUG</MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
|
|
@ -406,6 +406,75 @@
|
|||
</Group>
|
||||
<Group>
|
||||
<GroupName>::FreeRTOS</GroupName>
|
||||
<GroupOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>0</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>0</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<GroupArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
<interw>2</interw>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<thumb>2</thumb>
|
||||
<SplitLS>2</SplitLS>
|
||||
<SwStkChk>2</SwStkChk>
|
||||
<NoWarn>2</NoWarn>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<useXO>2</useXO>
|
||||
<ClangAsOpt>0</ClangAsOpt>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Aads>
|
||||
</GroupArmAds>
|
||||
</GroupOption>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::RTOS</GroupName>
|
||||
|
|
@ -429,7 +498,7 @@
|
|||
<targetInfo name="Target 1"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cbundle="FreeRTOS" Cclass="RTOS" Cgroup="Heap" Cvariant="Heap_4" Cvendor="ARM" Cversion="10.5.1" condition="FreeRTOS Heap">
|
||||
<component Cbundle="FreeRTOS" Cclass="RTOS" Cgroup="Heap" Cvariant="Heap_2" Cvendor="ARM" Cversion="10.5.1" condition="FreeRTOS Heap">
|
||||
<package name="CMSIS-FreeRTOS" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="ARM" version="10.5.1"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Target 1"/>
|
||||
|
|
@ -444,25 +513,25 @@
|
|||
<component Cclass="FreeRTOS" Cgroup="FreeRTOS+ TCP" Csub="Buffer Allocation" Cvariant="Buffer Allocation 1" Cvendor="AWS" Cversion="2.3.2-LTS-Patch-2" condition="freertos_plus_tcp_lts_buffer_allocation_1 Condition">
|
||||
<package name="FreeRTOS-Plus-TCP" schemaVersion="1.7.2" url="https://freertos-cmsis-packs.s3.us-west-2.amazonaws.com/" vendor="AWS" version="4.0.1"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Target 1"/>
|
||||
<targetInfo excluded="1" name="Target 1" versionMatchMode=""/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="FreeRTOS" Cgroup="FreeRTOS+ TCP" Csub="Compiler Port" Cvariant="Keil" Cvendor="AWS" Cversion="2.3.2-LTS-Patch-2" condition="freertos_plus_tcp_lts_keil_compiler Condition">
|
||||
<package name="FreeRTOS-Plus-TCP" schemaVersion="1.7.2" url="https://freertos-cmsis-packs.s3.us-west-2.amazonaws.com/" vendor="AWS" version="4.0.1"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Target 1"/>
|
||||
<targetInfo excluded="1" name="Target 1" versionMatchMode=""/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="FreeRTOS" Cgroup="FreeRTOS+ TCP" Csub="Core Library" Cvendor="AWS" Cversion="2.3.2-LTS-Patch-2" condition="freertos_plus_tcp_lts_library Condition">
|
||||
<package name="FreeRTOS-Plus-TCP" schemaVersion="1.7.2" url="https://freertos-cmsis-packs.s3.us-west-2.amazonaws.com/" vendor="AWS" version="4.0.1"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Target 1"/>
|
||||
<targetInfo excluded="1" name="Target 1" versionMatchMode=""/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="FreeRTOS" Cgroup="FreeRTOS+ TCP" Csub="Network Interface" Cvariant="STM32Fxx" Cvendor="AWS" Cversion="2.3.2-LTS-Patch-2" condition="freertos_plus_tcp_lts_stm32fxx_network_interface_port Condition">
|
||||
<package name="FreeRTOS-Plus-TCP" schemaVersion="1.7.2" url="https://freertos-cmsis-packs.s3.us-west-2.amazonaws.com/" vendor="AWS" version="4.0.1"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Target 1"/>
|
||||
<targetInfo excluded="1" name="Target 1" versionMatchMode=""/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="EVAL" Csub="GD32F107C" Cvendor="GigaDevice" Cversion="2.0.2" condition="GD32F10x STDPERIPHERALS EVAL">
|
||||
|
|
|
|||
191
main.c
191
main.c
|
|
@ -1,24 +1,177 @@
|
|||
#include "FreeRTOS.h"
|
||||
#include "FreeRTOSConfig.h"
|
||||
#include "task.h"
|
||||
#include "gd32f107c_eval.h"
|
||||
#include "gd32f10x_gpio.h"
|
||||
#include "stdio.h"
|
||||
#define BUTTON_USER GPIO_PIN_14
|
||||
#define LED_USER GPIO_PIN_0
|
||||
char ButtonState = 0;
|
||||
#define LED2_USER GPIO_PIN_0
|
||||
#define LED5_TICK GPIO_PIN_1
|
||||
|
||||
void vTaskHelloWorld( void *pvParameters);
|
||||
void vTaskToggleLed( void *pvParameters);
|
||||
int stdout_putchar (int ch);
|
||||
int stdin_getchar (void);
|
||||
void DelayMS(unsigned char ms);
|
||||
|
||||
int stdout_putchar (int ch)
|
||||
{
|
||||
usart_data_transmit(EVAL_COM1, (uint16_t)ch);
|
||||
DelayMS(1);
|
||||
while (!usart_flag_get(EVAL_COM1, USART_FLAG_TBE)){}
|
||||
|
||||
return ch;
|
||||
}
|
||||
int stdin_getchar (void)
|
||||
{
|
||||
return usart_data_receive(EVAL_COM1);
|
||||
}
|
||||
|
||||
/*! \brief InitMCU
|
||||
* Initial MCU configuration
|
||||
*/
|
||||
static void InitMCU(void)
|
||||
{
|
||||
SystemInit();
|
||||
//gd_eval_led_init(LED2);
|
||||
//gd_eval_led_on(LED2);
|
||||
rcu_periph_clock_enable(RCU_GPIOC);
|
||||
|
||||
gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, LED2_USER);
|
||||
gpio_bit_set(GPIOC, LED2_USER);
|
||||
|
||||
rcu_periph_clock_enable(RCU_GPIOE);
|
||||
gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, LED5_TICK);
|
||||
gpio_bit_set(GPIOE, LED5_TICK);
|
||||
|
||||
gd_eval_com_init(EVAL_COM1);
|
||||
rcu_periph_clock_enable(RCU_GPIOB);
|
||||
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ, BUTTON_USER);
|
||||
}
|
||||
|
||||
/*! \brief vTaskHelloWorld procedure
|
||||
*
|
||||
* \param Not Used.
|
||||
*/
|
||||
void vTaskHelloWorld( void *pvParameters)
|
||||
{
|
||||
char ButtonState = 0;
|
||||
for( ;; )
|
||||
{
|
||||
ButtonState = !gpio_input_bit_get(GPIOB, BUTTON_USER);
|
||||
if (ButtonState)
|
||||
{
|
||||
printf("Hello world\n");
|
||||
vTaskDelay(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*! \brief vTaskToggleLed procedure
|
||||
*
|
||||
* \param Not Used.
|
||||
*/
|
||||
void vTaskToggleLed( void *pvParameters)
|
||||
{
|
||||
char toggle = 1;
|
||||
for( ;; )
|
||||
{
|
||||
if (toggle)
|
||||
{
|
||||
gpio_bit_reset(GPIOC, LED2_USER);
|
||||
}
|
||||
else
|
||||
{
|
||||
gpio_bit_set(GPIOC, LED2_USER);
|
||||
}
|
||||
toggle = !toggle;
|
||||
vTaskDelay(125);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
InitMCU();
|
||||
xTaskCreate(vTaskToggleLed, "ToggleLed", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL);
|
||||
xTaskCreate(vTaskHelloWorld, "HelloWorld", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL);
|
||||
vTaskStartScheduler();
|
||||
while(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* task.h
|
||||
* @code{c}
|
||||
* void vApplicationMallocFailedHook( void )
|
||||
* @endcode
|
||||
*
|
||||
* This hook function is called when allocation failed.
|
||||
*/
|
||||
void vApplicationMallocFailedHook( void )
|
||||
{
|
||||
#if defined (DEBUG)
|
||||
__ASM("BKPT #0\n");
|
||||
#endif
|
||||
NVIC_SystemReset();
|
||||
while(TRUE){}
|
||||
}
|
||||
|
||||
|
||||
/*! \func vApplicationTickHook( void )
|
||||
* \brief Toggles LED5_TICK to indicate RTOS running well
|
||||
*/
|
||||
void vApplicationTickHook( void )
|
||||
{
|
||||
static uint16_t tickCounter = 0;
|
||||
if(++tickCounter == configTICK_RATE_HZ)
|
||||
{
|
||||
gpio_bit_reset(GPIOE, LED5_TICK);
|
||||
tickCounter = 0;
|
||||
}
|
||||
else if(tickCounter == configTICK_RATE_HZ/2)
|
||||
{
|
||||
gpio_bit_set(GPIOE, LED5_TICK);
|
||||
}
|
||||
}
|
||||
|
||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
|
||||
{
|
||||
#if defined (DEBUG)
|
||||
__ASM("BKPT #0\n");
|
||||
#endif
|
||||
NVIC_SystemReset();
|
||||
while(TRUE){}
|
||||
}
|
||||
|
||||
|
||||
__attribute__((used)) void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress )
|
||||
{
|
||||
/* These are volatile to try and prevent the compiler/linker optimising them
|
||||
away as the variables never actually get used. If the debugger won't show the
|
||||
values of the variables, make them global my moving their declaration outside
|
||||
of this function. */
|
||||
static volatile uint32_t r0;
|
||||
static volatile uint32_t r1;
|
||||
static volatile uint32_t r2;
|
||||
static volatile uint32_t r3;
|
||||
static volatile uint32_t r12;
|
||||
static volatile uint32_t lr; /* Link register. */
|
||||
static volatile uint32_t pc; /* Program counter. */
|
||||
static volatile uint32_t psr;/* Program status register. */
|
||||
|
||||
r0 = pulFaultStackAddress[ 0 ];
|
||||
r1 = pulFaultStackAddress[ 1 ];
|
||||
r2 = pulFaultStackAddress[ 2 ];
|
||||
r3 = pulFaultStackAddress[ 3 ];
|
||||
|
||||
r12 = pulFaultStackAddress[ 4 ];
|
||||
lr = pulFaultStackAddress[ 5 ];
|
||||
pc = pulFaultStackAddress[ 6 ];
|
||||
psr = pulFaultStackAddress[ 7 ];
|
||||
#ifdef DEBUG
|
||||
__asm volatile("BKPT #0\n") ;
|
||||
#endif
|
||||
NVIC_SystemReset();
|
||||
/* When the following line is hit, the variables contain the register values. */
|
||||
for( ;; );
|
||||
}
|
||||
|
||||
void DelayMS(unsigned char ms)
|
||||
{
|
||||
unsigned long us = 1000*ms;
|
||||
|
|
@ -28,33 +181,3 @@ while (us--)
|
|||
__NOP();
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
ButtonState = !gpio_input_bit_get(GPIOB, BUTTON_USER);
|
||||
if (ButtonState)
|
||||
{
|
||||
printf("Hello world\n");
|
||||
DelayMS(250);
|
||||
DelayMS(250);
|
||||
}
|
||||
}
|
||||
}
|
||||
int main(void)
|
||||
{
|
||||
|
||||
SystemInit();
|
||||
//gd_eval_led_init(LED2);
|
||||
//gd_eval_led_on(LED2);
|
||||
rcu_periph_clock_enable(RCU_GPIOC);
|
||||
gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, LED_USER);
|
||||
gpio_bit_set(GPIOC, LED_USER);
|
||||
gd_eval_com_init(EVAL_COM1);
|
||||
rcu_periph_clock_enable(RCU_GPIOB);
|
||||
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ, BUTTON_USER);
|
||||
|
||||
|
||||
xPortStartScheduler();
|
||||
while(1);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue