Skip to content

Commit 8b41b7d

Browse files
committed
Add calibrate capsensor on Hysteresis value written
1 parent fabac90 commit 8b41b7d

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

HW/QuartusProjects/Common/gpio_adr_decoder_reg.sv

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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
265280
end
266281
endgenerate
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

Comments
 (0)