]> begriffs open source - cmsis-driver-validation/blob - Source/DV_I2C.c
Updated image: removed Flash, changed to I2C, set index numbers straight
[cmsis-driver-validation] / Source / DV_I2C.c
1 /*-----------------------------------------------------------------------------
2  *      Name:         DV_I2C.c
3  *      Purpose:      I2C test cases
4  *----------------------------------------------------------------------------
5  *      Copyright(c) KEIL - An ARM Company
6  *----------------------------------------------------------------------------*/
7
8 #include "cmsis_dv.h" 
9 #include "DV_Config.h"
10 #include "DV_Framework.h"
11 #include "Driver_I2C.h"
12 #include <stdio.h>
13 #include <stdlib.h> 
14 #include <string.h> 
15
16 // Register Driver_I2C#
17 extern ARM_DRIVER_I2C CREATE_SYMBOL(Driver_I2C, DRV_I2C);
18 static ARM_DRIVER_I2C *drv = &CREATE_SYMBOL(Driver_I2C, DRV_I2C);
19 static ARM_I2C_CAPABILITIES capab;  
20
21 // Event flags
22 static uint8_t volatile Event;    
23
24 // I2C event
25 static void I2C_DrvEvent (uint32_t event) {
26   Event |= event;
27 }
28
29 /*-----------------------------------------------------------------------------
30  *      Test cases
31  *----------------------------------------------------------------------------*/
32  
33 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
34 /**
35 \defgroup i2c_funcs I2C Validation
36 \brief I2C test cases
37 \details
38 The I2C validation test checks the API interface compliance only.
39 @{
40 */
41
42 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
43 /**
44 \brief Test case: I2C_GetCapabilities
45 \details
46 The test case \b I2C_GetCapabilities verifies the function \b GetCapabilities.
47 */
48 void I2C_GetCapabilities (void) {                    
49   /* Get SPI capabilities */
50   capab = drv->GetCapabilities();
51   TEST_ASSERT(&capab != NULL); 
52 }
53
54 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
55 /**
56 \brief  Test case: I2C_Initialization
57 \details
58 The test case \b I2C_Initialization verifies the I2C functions with the sequence:
59   - \b Initialize  without callback
60   - \b Uninitialize
61   - \b Initialize with callback
62   - \b Uninitialize
63 */
64 void I2C_Initialization (void) { 
65   
66   /* Initialize without callback */
67   TEST_ASSERT(drv->Initialize(NULL) == ARM_DRIVER_OK); 
68     
69   /* Uninitialize */
70   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
71   
72   /* Initialize with callback */
73   TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK); 
74   
75   /* Uninitialize */
76   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
77 }
78
79 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
80 /**
81 \brief  Test case: I2C_CheckInvalidInit
82 \details
83 The test case \b I2C_CheckInvalidInit verifies the driver behaviour when receiving an invalid initialization sequence:
84   - \b Uninitialize
85   - \b PowerControl with Power off
86   - \b PowerControl with Power on
87   - \b Control with bus speed fast 
88   - \b PowerControl with Power off
89   - \b Uninitialize
90 */
91 void I2C_CheckInvalidInit (void) { 
92   
93   /* Uninitialize */
94   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
95   
96   /* Power off */
97   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
98   
99   /* Try to power on */
100   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) != ARM_DRIVER_OK); 
101   
102   /* Try to set configuration */
103   TEST_ASSERT(drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST) != ARM_DRIVER_OK);
104
105   /* Power off */
106   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
107   
108   /* Uninitialize */
109   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
110 }
111
112 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
113 /**
114 \brief  Test case: I2C_PowerControl
115 \details
116 The test case \b I2C_PowerControl verifies the \b PowerControl function with the sequence:
117  - Initialize 
118  - Power on
119  - Power low
120  - Power off 
121  - Uninitialize 
122 */
123 void I2C_PowerControl (void) { 
124   int32_t val;
125   
126   /* Initialize with callback */
127   TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK); 
128   
129   /* Power on */
130   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);  
131   
132   /* Power low */
133   val = drv->PowerControl (ARM_POWER_LOW);
134   if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Low power is not supported"); }
135   else { TEST_ASSERT(val == ARM_DRIVER_OK); }
136    
137   /* Power off */
138   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
139   
140   /* Uninitialize */
141   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
142 }
143
144 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
145 /**
146 \brief  Test case: I2C_SetBusSpeed
147 \details
148 The test case \b I2C_SetBusSpeed verifies the \b Control function with the sequence:
149  - Initialize 
150  - Power on
151  - Set bus speed standard 
152  - Set bus speed fast 
153  - Set bus speed fast plus 
154  - Set bus speed high 
155  - Power off 
156  - Uninitialize 
157 */
158 void I2C_SetBusSpeed (void) { 
159 int32_t val;  
160   
161   /* Initialize with callback and power on */
162   TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK); 
163   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK); 
164   
165   /* Set bus speed standard */
166   TEST_ASSERT(drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_STANDARD) == ARM_DRIVER_OK);
167   
168   /* Set bus speed fast */
169   val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
170   if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Fast speed is not supported"); }
171   else { TEST_ASSERT(val == ARM_DRIVER_OK); } 
172   
173   /* Set bus speed fast plus */
174   val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST_PLUS);
175   if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Fast plus speed is not supported"); }
176   else { TEST_ASSERT(val == ARM_DRIVER_OK); } 
177   
178   /* Set bus speed high */
179   val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_HIGH);
180   if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] High speed is not supported"); }
181   else { TEST_ASSERT(val == ARM_DRIVER_OK); } 
182   
183   /* Power off and uninitialize*/
184   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
185   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
186 }
187
188 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
189 /**
190 \brief  Test case: I2C_SetOwnAddress
191 \details
192 The test case \b I2C_SetOwnAddress verifies the \b Control function with the sequence:
193  - Initialize 
194  - Power on
195  - Set slave own address \token{0x0000}
196  - Set slave own address \token{0x0001}
197  - Set slave own address \token{0x00FF}
198  - Set slave own address \token{0x03FF}
199  - Power off 
200  - Uninitialize 
201 */
202 void I2C_SetOwnAddress (void) { 
203   
204   /* Initialize with callback and power on */
205   TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK); 
206   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK); 
207   
208   /* Set slave own address */
209   TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x0000) == ARM_DRIVER_OK);
210   
211   /* Set slave own address */
212   TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x0001) == ARM_DRIVER_OK);
213   
214   /* Set slave own address */
215   TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x00FF) == ARM_DRIVER_OK);
216   
217   /* Set slave own address */
218   TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x03FF) == ARM_DRIVER_OK);
219   
220   /* Power off and uninitialize*/
221   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
222   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);   
223 }
224
225 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
226 /**
227 \brief  Test case: I2C_BusClear
228 \details
229 The test case \b I2C_BusClear verifies the \b Control function with the sequence:
230  - Initialize 
231  - Power on
232  - Clear Bus
233  - Power off 
234  - Uninitialize 
235 */
236 void I2C_BusClear (void) { 
237   
238   /* Initialize with callback and power on */
239   TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK); 
240   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
241   
242   /* Clear Bus */
243   TEST_ASSERT(drv->Control(ARM_I2C_BUS_CLEAR, 0x0000) == ARM_DRIVER_OK);
244   
245   /* Power off and uninitialize*/
246   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
247   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
248 }
249   
250 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
251 /**
252 \brief  Test case: I2C_AbortTransfer
253 \details
254 The test case \b I2C_AbortTransfer verifies the \b Control function with the sequence:
255  - Initialize 
256  - Power on
257  - Abort transfer
258  - Power off 
259  - Uninitialize 
260 */
261 void I2C_AbortTransfer (void) { 
262   
263   /* Initialize with callback and power on */
264   TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK); 
265   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
266   
267   /* Abort transfer */
268   TEST_ASSERT(drv->Control(ARM_I2C_ABORT_TRANSFER, 0x0000) == ARM_DRIVER_OK);
269   
270   /* Power off and uninitialize*/
271   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
272   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
273 }
274
275 /**
276 @}
277 */ 
278 // end of group i2c_funcs
279