@@ -146,13 +146,20 @@ parameter TotalNumregs = Mux_regPrIOReg * NumIOAddrReg * NumPinsPrIOAddr;
146146 wire [31 : 0 ]adc_data_out;
147147
148148// Touch sensor:
149+ reg [BusWidth- 1 : 0 ] hysteresis_reg;
150+ reg [1 : 0 ]sr_delay;
151+ reg reset_sr;
152+ reg [2 : 0 ]sr_init_delay;
153+ reg reset_init_sr;
149154 wire [NumSense- 1 : 0 ] sense;
150155 wire charge;
151- reg [BusWidth- 1 : 0 ] hysteresis_reg;
152156 wire [3 : 0 ] hysteresis[NumSense- 1 : 0 ];
153-
154- wire sense_reset = ~ reset_reg_N | ~ buttons[1 ];
155-
157+
158+ wire sr_delay_act;
159+ wire sr_init_delay_act;
160+ wire sense_reset;
161+ // wire sense_reset = ~reset_reg_N;
162+
156163 genvar sh;
157164 generate
158165 for (sh= 0 ;sh< NumSense;sh= sh+ 1 ) begin : sense_hystloop
@@ -256,15 +263,35 @@ generate if (Capsense >= 1) begin
256263 // Writes:
257264 always @ ( posedge reset_in or posedge write_address) begin
258265 if (reset_in) begin
259- hysteresis_reg <= 32'h11111111 ;
266+ hysteresis_reg <= 32'h22222222 ;
267+ reset_sr <= 1'b0 ;
260268 end
261269 else if ( write_address ) begin
262- if (busaddress_r == 10'h0304 ) begin hysteresis_reg <= busdata_in_r; end
263- end
270+ if (busaddress_r == 10'h0304 ) begin
271+ hysteresis_reg <= busdata_in_r;
272+ reset_sr <= 1'b1 ;
273+ end
274+ else begin
275+ hysteresis_reg <= hysteresis_reg;
276+ reset_sr <= 1'b0 ;
277+ end
278+ end
264279 end
265280end
266281endgenerate
267282
283+ always @ (posedge reg_clk) begin
284+ sr_delay[0 ] <= reset_sr;
285+ sr_delay[1 ] <= sr_delay[0 ];
286+ sr_init_delay[0 ] <= reset_init_sr;
287+ sr_init_delay[1 ] <= sr_init_delay[0 ];
288+ sr_init_delay[2 ] <= sr_init_delay[1 ];
289+ end
290+
291+ assign sr_delay_act = (sr_delay[1 ] == 1'b1 && sr_delay[0 ] == 1'b0 ) ? 1'b1 : 1'b0 ;
292+ assign sr_init_delay_act = (sr_init_delay[2 ] == 1'b0 && sr_init_delay[0 ] == 1'b1 ) ? 1'b1 : 1'b0 ;
293+ assign sense_reset = ~ reset_reg_N | ~ buttons[1 ] | sr_delay_act | sr_init_delay_act;
294+
268295 genvar il;
269296 generate
270297 for (il= 0 ;il< NumIOAddrReg;il= il+ 1 ) begin : reg_initloop
@@ -356,11 +383,12 @@ endgenerate
356383 always @ (posedge reset_in or posedge read_address)begin
357384 if (reset_in)begin
358385 busdata_to_cpu <= 32'b0 ;
386+ reset_init_sr <= 1'b0 ;
359387 end
360388 else if (read_address) begin
361389 if (Capsense >= 1 ) begin
362390 if (adc_address_valid) begin busdata_to_cpu <= adc_data_out; end
363- else if (busaddress_r == 'h0300 ) begin busdata_to_cpu <= touched; end
391+ else if (busaddress_r == 'h0300 ) begin busdata_to_cpu <= touched; reset_init_sr <= 1'b1 ; end
364392 else if (busaddress_r == 'h0304 ) begin busdata_to_cpu <= hysteresis_reg; end
365393 else if (busaddress_r == 'h1000 ) begin busdata_to_cpu <= { 8'b0 ,gpio_input_data[0 ][23 : 0 ]} ; end
366394 else if (busaddress_r == 'h1004 ) begin busdata_to_cpu <= { 8'b0 ,gpio_input_data[1 ][11 : 0 ],gpio_input_data[0 ][35 : 24 ]} ; end
0 commit comments