@@ -15,7 +15,11 @@ static void top_handler(struct device *dev, void *user_data);
1515
1616void * exp_user_data = (void * )199 ;
1717
18+ #ifdef CONFIG_COUNTER_MCUX_RTC
19+ #define COUNTER_PERIOD_US (2*USEC_PER_SEC)
20+ #else
1821#define COUNTER_PERIOD_US 20000
22+ #endif
1923
2024struct counter_alarm_cfg alarm_cfg ;
2125struct counter_alarm_cfg alarm_cfg2 ;
@@ -52,6 +56,9 @@ const char *devices[] = {
5256#ifdef CONFIG_COUNTER_IMX_EPIT_2
5357 EPIT_2_LABEL ,
5458#endif
59+ #ifdef DT_RTC_MCUX_0_NAME
60+ DT_RTC_MCUX_0_NAME ,
61+ #endif
5562};
5663typedef void (* counter_test_func_t )(const char * dev_name );
5764
@@ -123,7 +130,11 @@ void test_set_top_value_with_alarm_instance(const char *dev_name)
123130
124131void test_set_top_value_with_alarm (void )
125132{
133+ #ifdef CONFIG_COUNTER_MCUX_RTC
134+ ztest_test_skip ();
135+ #else
126136 test_all_instances (test_set_top_value_with_alarm_instance );
137+ #endif
127138}
128139
129140static void alarm_handler (struct device * dev , u8_t chan_id , u32_t counter ,
@@ -133,7 +144,7 @@ static void alarm_handler(struct device *dev, u8_t chan_id, u32_t counter,
133144 alarm_cnt ++ ;
134145}
135146
136- void test_single_shot_alarm_instance (const char * dev_name )
147+ void test_single_shot_alarm_instance (const char * dev_name , bool set_top )
137148{
138149 struct device * dev ;
139150 int err ;
@@ -142,8 +153,8 @@ void test_single_shot_alarm_instance(const char *dev_name)
142153 dev = device_get_binding (dev_name );
143154 ticks = counter_us_to_ticks (dev , COUNTER_PERIOD_US );
144155
145- alarm_cfg .absolute = true ;
146- alarm_cfg .ticks = ticks + 1 ;
156+ alarm_cfg .absolute = false ;
157+ alarm_cfg .ticks = ticks ;
147158 alarm_cfg .callback = alarm_handler ;
148159 alarm_cfg .user_data = & alarm_cfg ;
149160
@@ -157,22 +168,26 @@ void test_single_shot_alarm_instance(const char *dev_name)
157168 err = counter_start (dev );
158169 zassert_equal (0 , err , "Counter failed to start\n" );
159170
160- err = counter_set_top_value (dev , ticks , top_handler , exp_user_data );
161- zassert_equal (0 , err , "Counter failed to set top value\n" );
171+ if (set_top ) {
172+ err = counter_set_top_value (dev , ticks , top_handler ,
173+ exp_user_data );
162174
163- err = counter_set_channel_alarm (dev , 0 , & alarm_cfg );
164- zassert_equal (- EINVAL , err , "Counter should return error because ticks"
165- " exceeded the limit set alarm\n" );
166- alarm_cfg .ticks = ticks - 100 ;
175+ zassert_equal (0 , err , "Counter failed to set top value\n" );
176+
177+ err = counter_set_channel_alarm (dev , 0 , & alarm_cfg );
178+ zassert_equal (- EINVAL , err ,
179+ "Counter should return error because ticks"
180+ " exceeded the limit set alarm\n" );
181+ alarm_cfg .ticks = ticks - 100 ;
182+ }
167183
168184 err = counter_set_channel_alarm (dev , 0 , & alarm_cfg );
169185 zassert_equal (0 , err , "Counter set alarm failed\n" );
170186
171- k_busy_wait (1.2 * counter_ticks_to_us (dev , ticks ));
172-
187+ k_busy_wait (1.5 * counter_ticks_to_us (dev , ticks ));
173188 zassert_equal (1 , alarm_cnt , "Expecting alarm callback\n" );
174189
175- k_busy_wait (counter_ticks_to_us (dev , 2 * ticks ));
190+ k_busy_wait (1.5 * counter_ticks_to_us (dev , ticks ));
176191 zassert_equal (1 , alarm_cnt , "Expecting alarm callback\n" );
177192
178193 err = counter_disable_channel_alarm (dev , 0 );
@@ -186,9 +201,28 @@ void test_single_shot_alarm_instance(const char *dev_name)
186201 zassert_equal (0 , err , "Counter failed to stop\n" );
187202}
188203
189- void test_single_shot_alarm ( void )
204+ void test_single_shot_alarm_notop_instance ( const char * dev_name )
190205{
191- test_all_instances (test_single_shot_alarm_instance );
206+ test_single_shot_alarm_instance (dev_name , false);
207+ }
208+
209+ void test_single_shot_alarm_top_instance (const char * dev_name )
210+ {
211+ test_single_shot_alarm_instance (dev_name , true);
212+ }
213+
214+ void test_single_shot_alarm_notop (void )
215+ {
216+ test_all_instances (test_single_shot_alarm_notop_instance );
217+ }
218+
219+ void test_single_shot_alarm_top (void )
220+ {
221+ #ifdef CONFIG_COUNTER_MCUX_RTC
222+ ztest_test_skip ();
223+ #else
224+ test_all_instances (test_single_shot_alarm_top_instance );
225+ #endif
192226}
193227
194228static void * clbk_data [2 ];
@@ -281,7 +315,7 @@ void test_all_channels_instance(const char *str)
281315
282316 for (int i = 0 ; i < n ; i ++ ) {
283317 alarm_cfgs [i ].absolute = false;
284- alarm_cfgs [i ].ticks = ticks - 100 ;
318+ alarm_cfgs [i ].ticks = ticks ;
285319 alarm_cfgs [i ].callback = alarm_handler2 ;
286320 }
287321
@@ -300,6 +334,9 @@ void test_all_channels_instance(const char *str)
300334 }
301335 }
302336
337+ k_busy_wait (1.5 * counter_ticks_to_us (dev , ticks ));
338+ zassert_equal (nchan , alarm_cnt , "Expecting alarm callback\n" );
339+
303340 for (int i = 0 ; i < nchan ; i ++ ) {
304341 err = counter_disable_channel_alarm (dev , i );
305342 zassert_equal (0 , err , "Unexpected error on disabling alarm" );
@@ -323,7 +360,10 @@ void test_main(void)
323360 ztest_unit_test_setup_teardown (test_set_top_value_with_alarm ,
324361 unit_test_noop ,
325362 counter_tear_down ),
326- ztest_unit_test_setup_teardown (test_single_shot_alarm ,
363+ ztest_unit_test_setup_teardown (test_single_shot_alarm_notop ,
364+ unit_test_noop ,
365+ counter_tear_down ),
366+ ztest_unit_test_setup_teardown (test_single_shot_alarm_top ,
327367 unit_test_noop ,
328368 counter_tear_down ),
329369 ztest_unit_test_setup_teardown (test_multiple_alarms ,
0 commit comments