1 /*
2 * Copyright (c) 2006-2023, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2010-03-30 Kyle First version
9 * 2023-10-20 Raman Gopalan Access GPIO using RT's pin abstractions
10 */
11
12 #include <rtthread.h>
13 #include <rtdevice.h>
14 #include "compiler.h"
15 #include "gpio.h"
16
17 #define USER_LED_1 AVR32_PIN_PA08
18 #define USER_LED_2 AVR32_PIN_PA07
19
20 char thread_led1_stack[1024];
21 struct rt_thread thread_led1;
rt_thread_entry_led1(void * parameter)22 static void rt_thread_entry_led1(void* parameter)
23 {
24 rt_pin_mode(USER_LED_1, PIN_MODE_OUTPUT);
25 while (1)
26 {
27 rt_pin_write(USER_LED_1, 1);
28 rt_thread_delay(RT_TICK_PER_SECOND / 2); /* sleep 0.5 second and switch to other thread */
29
30 rt_pin_write(USER_LED_1, 0);
31 rt_thread_delay(RT_TICK_PER_SECOND / 2);
32 }
33 }
34
35 char thread_led2_stack[1024];
36 struct rt_thread thread_led2;
rt_thread_entry_led2(void * parameter)37 void rt_thread_entry_led2(void* parameter)
38 {
39 rt_pin_mode(USER_LED_2, PIN_MODE_OUTPUT);
40 while (1)
41 {
42 rt_pin_write(USER_LED_2, 1);
43 rt_thread_delay(RT_TICK_PER_SECOND);
44
45 rt_pin_write(USER_LED_2, 0);
46 rt_thread_delay(RT_TICK_PER_SECOND);
47 }
48 }
49
rt_application_init()50 int rt_application_init()
51 {
52 /* create led1 thread */
53 rt_thread_init(&thread_led1,
54 "led1",
55 rt_thread_entry_led1,
56 RT_NULL,
57 &thread_led1_stack[0],
58 sizeof(thread_led1_stack), 5, 5);
59 rt_thread_startup(&thread_led1);
60
61 //------- init led2 thread
62 rt_thread_init(&thread_led2,
63 "led2",
64 rt_thread_entry_led2,
65 RT_NULL,
66 &thread_led2_stack[0],
67 sizeof(thread_led2_stack),5,10);
68 rt_thread_startup(&thread_led2);
69
70 return 0;
71 }
72