OSDN Git Service

Update lejos_osek to nxtOSEK_v205b0.zip
[nxt-jsp/etrobo-atk.git] / nxtOSEK / samples / i2cwritetest / i2cwritetest.c
1 /* i2cwritetest.c */ \r
2 #include "kernel.h"\r
3 #include "kernel_id.h"\r
4 #include "ecrobot_interface.h"\r
5 \r
6 /* OSEK declarations */\r
7 DeclareCounter(SysTimerCnt);\r
8 DeclareTask(Task1);\r
9 DeclareTask(Task2);\r
10 \r
11 /* LEJOS OSEK hooks */\r
12 void ecrobot_device_terminate()\r
13 {\r
14         i2c_disable(NXT_PORT_S2);\r
15 }\r
16 \r
17 /* LEJOS OSEK hook to be invoked from an ISR in category 2 */\r
18 void user_1ms_isr_type2(void)\r
19 {\r
20   StatusType ercd;\r
21 \r
22   ercd = SignalCounter(SysTimerCnt); /* Increment OSEK Alarm Counter */\r
23   if(ercd != E_OK)\r
24   {\r
25     ShutdownOS(ercd);\r
26   }\r
27 }\r
28 \r
29 /* Task1 executed only once at initialization */\r
30 TASK(Task1)\r
31 {\r
32         nxt_avr_set_input_power(NXT_PORT_S2,2);\r
33         i2c_enable(NXT_PORT_S2);\r
34 \r
35         TerminateTask();\r
36 }\r
37 \r
38 /* Task2 executed every 500msec */\r
39 TASK(Task2)\r
40 {\r
41         static U8 data;\r
42         \r
43         while (i2c_busy(NXT_PORT_S2) != 0);\r
44         /* write Single shot command */\r
45         data = 0x01;\r
46         i2c_start_transaction(NXT_PORT_S2,1,0x41,1,&data,1,1);\r
47 \r
48         systick_wait_ms(50);\r
49 \r
50         if (i2c_busy(NXT_PORT_S2) == 0)\r
51         {\r
52                 /* read mesurement data */      \r
53                 i2c_start_transaction(NXT_PORT_S2,1,0x42,1,&data,1,0);\r
54 \r
55                 systick_wait_ms(50);\r
56 \r
57                 display_clear(0);\r
58                 display_goto_xy(0, 0);\r
59                 display_int(data, 0);\r
60                 display_update();\r
61         }\r
62 \r
63         TerminateTask();\r
64 }\r
65 \r