Skip to content

Commit

Permalink
Merge pull request #39 from MasterPlayer/free_fall_support
Browse files Browse the repository at this point in the history
Fix issue #38
  • Loading branch information
MasterPlayer committed Jan 4, 2022
2 parents f5dc8e7 + 474b64c commit e7223c9
Show file tree
Hide file tree
Showing 8 changed files with 1,793 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src_hw/axi_adxl345.sv
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ module axi_adxl345 #(
logic out_awfull ;

logic [ 7:0] version_major = 8'h01 ; // read only,
logic [ 7:0] version_minor = 8'h0A ; // read only,
logic [ 7:0] version_minor = 8'h0B ; // read only,
logic [ 6:0] i2c_address = DEFAULT_DEVICE_ADDRESS ; // reg[0][14:8]
logic link_on = 1'b0 ;
logic on_work = 1'b0 ; // reg[0][4]
Expand Down Expand Up @@ -247,6 +247,7 @@ module axi_adxl345 #(
logic has_dt_intr;
logic has_act_intr;
logic has_inact_intr;
logic has_ff_intr;

always_comb begin : has_dataready_intr_proc
if ((int_source_reg[7] & int_enable_reg[7]))
Expand Down Expand Up @@ -284,6 +285,14 @@ module axi_adxl345 #(
has_inact_intr = 1'b0;
end

always_comb begin : has_ff_intr_proc
if (int_source_reg[2] & int_enable_reg[2])
has_ff_intr = 1'b1;
else
has_ff_intr = 1'b0;
end


always_comb begin

int_enable_reg = register[11][2];
Expand Down Expand Up @@ -669,7 +678,7 @@ module axi_adxl345 #(
if (has_st_intr | has_dt_intr | has_act_intr | has_inact_intr)
current_state <= TX_WRITE_ACT_TAP_STATUS_PTR_ST;
else
if (has_dataready_intr)
if (has_dataready_intr | has_ff_intr)
current_state <= TX_WRITE_INTR_DATA_PTR_ST;
else
current_state <= IDLE_ST;
Expand Down
112 changes: 112 additions & 0 deletions src_sw/free_fall_intr/app.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "axi_adxl.h"
#include <time.h>
#include <xscugic.h>

#include <xparameters.h>


int scugic_initialize(XScuGic *ptr, axi_adxl* adxl_ptr);
void adxl_intr_handler(void *callback);

int main(){

init_platform();

axi_adxl adxl_device;
XScuGic gic;

axi_adxl_init(&adxl_device, 0x40030000, 0x40040000);

scugic_initialize(&gic, &adxl_device);

int status = axi_adxl_enable(&adxl_device, 0x53, 10);
if (status != ADXL_OK){
printf("[MAIN] : enable device return code [%d]\r\n", status);
}

status = axi_adxl_calibration(&adxl_device);
if (status != ADXL_OK){
printf("[MAIN] : calibration device return code [%d]\r\n", status);
}

status = axi_adxl_disable_requesting(&adxl_device);
if (status != ADXL_OK){
xil_printf("[MAIN] : disable requests return code : [%d]\r\n", status);
return 0;
}

axi_adxl_set_int_map(&adxl_device, FREE_FALL, 0x00);
axi_adxl_set_thresh_ff(&adxl_device, 0x10);
axi_adxl_set_time_ff(&adxl_device, 0x10);
axi_adxl_int_enable(&adxl_device, FREE_FALL);

volatile int change_mode = 0;
volatile int mode = 0;
while(1){
if (change_mode){

axi_adxl_change_bw(&adxl_device, mode);

change_mode = 0;
}

}
cleanup_platform();
return 0;
}




int scugic_initialize(XScuGic *ptr, axi_adxl* adxl_ptr){

int status = 0;

XScuGic_Config *cfg;

cfg = XScuGic_LookupConfig(XPAR_SCUGIC_0_DEVICE_ID);
if (!cfg){
return XST_FAILURE;
}

status = XScuGic_CfgInitialize(ptr, cfg, cfg->CpuBaseAddress);
if (status != XST_SUCCESS){
return XST_FAILURE;
}

XScuGic_SetPriorityTriggerType(ptr, XPAR_FABRIC_AXI_ADXL345_VHD_0_ADXL_IRQ_INTR, 0x00, 0x3);

status = XScuGic_Connect(ptr, XPAR_FABRIC_AXI_ADXL345_VHD_0_ADXL_IRQ_INTR, (Xil_InterruptHandler)adxl_intr_handler, adxl_ptr);
if (status != XST_SUCCESS){
return XST_FAILURE;
}

XScuGic_Enable(ptr, XPAR_FABRIC_AXI_ADXL345_VHD_0_ADXL_IRQ_INTR);

Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XScuGic_InterruptHandler, ptr);
Xil_ExceptionEnable();

return status ;
}

int iter = 0;

void adxl_intr_handler(void *callback){
axi_adxl *ptr = (axi_adxl*)callback;
adxl_cfg_ack(ptr->cfg);

printf("INTR[%5d]\r\n", iter);
iter++;
// axi_adxl_debug(ptr);

// g_coord g;
//
// axi_adxl_get_gravity(ptr, &g);
//
// printf("[x] : %3.3f \t[y] : %3.3f \t [z] %3.3f\r\n", g.x, g.y, g.z);
return;
}

Loading

0 comments on commit e7223c9

Please sign in to comment.