@@ -89,20 +89,10 @@ void isr_irq_timer(void) {
89
89
}
90
90
}
91
91
92
- STATIC mp_obj_t machine_timer_make_new (const mp_obj_type_t * type , size_t n_args , size_t n_kw , const mp_obj_t * args ) {
93
- mp_arg_check_num (n_args , n_kw , 1 , 1 , false);
94
- int id = mp_obj_get_int (args [0 ]);
95
- if (id > 3 ) {
96
- mp_raise_ValueError ("invalid timer number" );
97
- }
98
- machine_timer_obj_t * tim = (machine_timer_obj_t * ) & machine_timer_obj [id ];
99
- return tim ;
100
- }
101
-
102
92
STATIC mp_obj_t machine_timer_init_helper (machine_timer_obj_t * self , size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
103
93
static const mp_arg_t allowed_args [] = {
104
94
{ MP_QSTR_period , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 0xffffffff } },
105
- { MP_QSTR_mode , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 1 } },
95
+ { MP_QSTR_mode , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = ( int ) PERIODIC } },
106
96
{ MP_QSTR_callback , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_obj = mp_const_none } },
107
97
};
108
98
@@ -114,13 +104,37 @@ STATIC mp_obj_t machine_timer_init_helper(machine_timer_obj_t *self, size_t n_ar
114
104
self -> mode = args [1 ].u_int ;
115
105
self -> callback = args [2 ].u_obj ;
116
106
self -> counter = 0 ;
117
- timer_enable (self -> id );
107
+
108
+ // the timer is not enabled in this function
118
109
119
110
return mp_const_none ;
120
111
}
121
112
113
+ STATIC mp_obj_t machine_timer_make_new (const mp_obj_type_t * type , size_t n_args , size_t n_kw , const mp_obj_t * args ) {
114
+ mp_arg_check_num (n_args , n_kw , 1 , MP_OBJ_FUN_ARGS_MAX , true);
115
+ int id = mp_obj_get_int (args [0 ]);
116
+ if (id > 3 ) {
117
+ mp_raise_ValueError ("invalid timer number" );
118
+ }
119
+ machine_timer_obj_t * tim = (machine_timer_obj_t * ) & machine_timer_obj [id ];
120
+
121
+ mp_map_t kw_args ;
122
+ mp_map_init_fixed_table (& kw_args , n_kw , args + n_args );
123
+ machine_timer_init_helper (tim , n_args - 1 , args + 1 , & kw_args );
124
+
125
+ // the timer is enabled when the args other than id are provided
126
+ if (n_kw > 0 ) {
127
+ timer_enable (id );
128
+ }
129
+
130
+ return tim ;
131
+ }
132
+
122
133
STATIC mp_obj_t machine_timer_init (size_t n_args , const mp_obj_t * args , mp_map_t * kw_args ) {
123
- return machine_timer_init_helper (args [0 ], n_args - 1 , args + 1 , kw_args );
134
+ machine_timer_obj_t * self = (machine_timer_obj_t * ) args [0 ];
135
+ machine_timer_init_helper (self , n_args - 1 , args + 1 , kw_args );
136
+ timer_enable (self -> id );
137
+ return mp_const_none ;
124
138
}
125
139
STATIC MP_DEFINE_CONST_FUN_OBJ_KW (machine_timer_init_obj , 0 , machine_timer_init );
126
140
0 commit comments