Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 45 additions & 47 deletions src/hal/drivers/gm.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,53 +32,51 @@
#define notPresented 0x00000000

typedef struct {
hal_u32_t serialModulesDataOut[16][8]; // 0000 0000
hal_u32_t serialModulesDataIn[16][8]; // 1000 0000

hal_u32_t moduleId[8]; //addr 0 0000 000

hal_u32_t card_status_reg; //addr 1 0001 000 // ... Estop_2 | Estop_1 | Pwr_fault | Bus_err | Wdt_err //Card status read resets wdt
hal_u32_t cardID; // 0001 001
hal_u32_t card_control_reg; // 0001 010 // Wdt_period(16 bit)[us] | ... | EstopEn_2 | EstopEn_1 | power_enable | card_enable
hal_u32_t reserved_0; // 0001 011
hal_u32_t gpio; // 0001 100
hal_u32_t gpioDir; // 0001 101
hal_u32_t StepGen_status; // 0001 110
hal_u32_t PCI_clk_counter; // 0001 111

hal_u32_t ENC_control_reg; //addr 2 0010 000
hal_u32_t CAN_status_reg;
hal_u32_t CAN_control_reg;
hal_u32_t DAC_0; //DAC AXIS 1-0
hal_u32_t DAC_1; //DAC AXIS 3-2
hal_u32_t DAC_2; //DAC AXIS 5-4
hal_u32_t reserved_1[2];

hal_u32_t CAN_RX_buffer[4]; //addr 3 0011 000
hal_u32_t CAN_TX_buffer[4];
hal_u32_t reserved_2[8]; //addr 4 0100 000

hal_u32_t reserved_3[8]; //addr 5 0101 000

hal_u32_t reserved_4[8]; //addr 6 0110 000

hal_u32_t reserved_5[8]; //addr 7 0111 000

hal_s32_t ENC_counter[6]; //addr 8 1000 000
hal_u32_t reserved_6[2];
hal_s32_t ENC_period[6]; //addr 9 1001 000
hal_u32_t reserved_7[2];
hal_s32_t ENC_index_latch[6]; //addr 10 1010 000
hal_u32_t reserved_8[2];
hal_s32_t reserved_9[8]; //addr 11 1011 000

hal_s32_t StepGen_steprate[6]; //addr 12 1100 000
hal_u32_t reserved_10[2];
hal_u32_t StepGen_fb[6]; //addr 13 1101 000
hal_u32_t reserved_11[2];
hal_u32_t StepGen_time_params[6]; //addr 14 1110 000
hal_u32_t reserved_12[2];
hal_u32_t reserved_16[8]; //addr 15 1111 000
volatile rtapi_u32 serialModulesDataOut[16][8]; // 0000 0000
volatile rtapi_u32 serialModulesDataIn[16][8]; // 1000 0000

volatile rtapi_u32 moduleId[8]; // addr 0 0000 000

volatile rtapi_u32 card_status_reg; // addr 1 0001 000 // ... Estop_2 | Estop_1 | Pwr_fault | Bus_err | Wdt_err //Card status read resets wdt
volatile rtapi_u32 cardID; // 0001 001
volatile rtapi_u32 card_control_reg; // 0001 010 // Wdt_period(16 bit)[us] | ... | EstopEn_2 | EstopEn_1 | power_enable | card_enable
volatile rtapi_u32 reserved_0; // 0001 011
volatile rtapi_u32 gpio; // 0001 100
volatile rtapi_u32 gpioDir; // 0001 101
volatile rtapi_u32 StepGen_status; // 0001 110
volatile rtapi_u32 PCI_clk_counter; // 0001 111

volatile rtapi_u32 ENC_control_reg; // addr 2 0010 000
volatile rtapi_u32 CAN_status_reg;
volatile rtapi_u32 CAN_control_reg;
volatile rtapi_u32 DAC_0; // DAC AXIS 1-0
volatile rtapi_u32 DAC_1; // DAC AXIS 3-2
volatile rtapi_u32 DAC_2; // DAC AXIS 5-4
volatile rtapi_u32 reserved_1[2];

volatile rtapi_u32 CAN_RX_buffer[4]; // addr 3 0011 000
volatile rtapi_u32 CAN_TX_buffer[4];

volatile rtapi_u32 reserved_2[8]; // addr 4 0100 000
volatile rtapi_u32 reserved_3[8]; // addr 5 0101 000
volatile rtapi_u32 reserved_4[8]; // addr 6 0110 000
volatile rtapi_u32 reserved_5[8]; // addr 7 0111 000

volatile rtapi_s32 ENC_counter[6]; // addr 8 1000 000
volatile rtapi_u32 reserved_6[2];
volatile rtapi_s32 ENC_period[6]; // addr 9 1001 000
volatile rtapi_u32 reserved_7[2];
volatile rtapi_s32 ENC_index_latch[6]; // addr 10 1010 000
volatile rtapi_u32 reserved_8[2];
volatile rtapi_s32 reserved_9[8]; // addr 11 1011 000

volatile rtapi_s32 StepGen_steprate[6]; // addr 12 1100 000
volatile rtapi_u32 reserved_10[2];
volatile rtapi_u32 StepGen_fb[6]; // addr 13 1101 000
volatile rtapi_u32 reserved_11[2];
volatile rtapi_u32 StepGen_time_params[6]; // addr 14 1110 000
volatile rtapi_u32 reserved_12[2];
volatile rtapi_u32 reserved_16[8]; // addr 15 1111 000

} volatile card;

Expand Down
39 changes: 15 additions & 24 deletions src/hal/drivers/hal_bb_gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ MODULE_LICENSE("GPL");
#define PINS_PER_HEADER 46

typedef struct {
hal_bit_t* led_pins[4];
hal_bit_t* input_pins[1 + PINS_PER_HEADER * HEADERS]; // array of pointers to bivts
hal_bit_t* output_pins[1 + PINS_PER_HEADER * HEADERS]; // array of pointers to bits
hal_bit_t *led_inv[4];
hal_bit_t *input_inv[1 + PINS_PER_HEADER * HEADERS];
hal_bit_t *output_inv[1 + PINS_PER_HEADER * HEADERS];
hal_bool_t led_pins[4];
hal_bool_t input_pins[1 + PINS_PER_HEADER * HEADERS]; // array of pointers to bivts
hal_bool_t output_pins[1 + PINS_PER_HEADER * HEADERS]; // array of pointers to bits
hal_bool_t led_inv[4];
hal_bool_t input_inv[1 + PINS_PER_HEADER * HEADERS];
hal_bool_t output_inv[1 + PINS_PER_HEADER * HEADERS];
} port_data_t;

static port_data_t *port_data;
Expand Down Expand Up @@ -169,7 +169,7 @@ int rtapi_app_main(void) {
}

// Add HAL pin
retval = hal_pin_bit_newf(HAL_IN, &(port_data->led_pins[led]), comp_id, "bb_gpio.userled%d", led);
retval = hal_pin_new_bool(comp_id, HAL_IN, &(port_data->led_pins[led]), 0, "bb_gpio.userled%d", led);

if(retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR, "%s: ERROR: userled %d could not export pin, err: %d\n", modname, led, retval);
Expand All @@ -178,17 +178,14 @@ int rtapi_app_main(void) {
}

// Add HAL pin
retval = hal_pin_bit_newf(HAL_IN, &(port_data->led_inv[led]), comp_id, "bb_gpio.userled%d-invert", led);
retval = hal_pin_new_bool(comp_id, HAL_IN, &(port_data->led_inv[led]), 0, "bb_gpio.userled%d-invert", led);

if(retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR, "%s: ERROR: userled %d could not export pin, err: %d\n", modname, led, retval);
hal_exit(comp_id);
return -1;
}

// Initialize HAL pin
*(port_data->led_inv[led]) = 0;

int gpio_num = user_led_gpio_pins[led].port_num;
// configure gpio port if necessary
if(gpio_ports[gpio_num] == NULL) {
Expand Down Expand Up @@ -241,7 +238,7 @@ int rtapi_app_main(void) {
data = NULL; // after the first call, subsequent calls to strtok need to be on NULL

// Add HAL pin
retval = hal_pin_bit_newf(HAL_OUT, &(port_data->input_pins[pin + (header - 8)*PINS_PER_HEADER]), comp_id, "bb_gpio.p%d.in-%02d", header, pin);
retval = hal_pin_new_bool(comp_id, HAL_OUT, &(port_data->input_pins[pin + (header - 8)*PINS_PER_HEADER]), 0, "bb_gpio.p%d.in-%02d", header, pin);

if(retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR, "%s: ERROR: pin p%d.%02d could not export pin, err: %d\n", modname, header, pin, retval);
Expand All @@ -250,17 +247,14 @@ int rtapi_app_main(void) {
}

// Add HAL pin
retval = hal_pin_bit_newf(HAL_IN, &(port_data->input_inv[pin + (header - 8)*PINS_PER_HEADER]), comp_id, "bb_gpio.p%d.in-%02d-invert", header, pin);
retval = hal_pin_new_bool(comp_id, HAL_IN, &(port_data->input_inv[pin + (header - 8)*PINS_PER_HEADER]), 0, "bb_gpio.p%d.in-%02d-invert", header, pin);

if(retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR, "%s: ERROR: pin p%d.%02d could not export pin, err: %d\n", modname, header, pin, retval);
hal_exit(comp_id);
return -1;
}

// Initialize HAL pin
*(port_data->input_inv[pin + (header - 8)*PINS_PER_HEADER]) = 0;

int gpio_num = bbpin->port_num;

// configure gpio port if necessary
Expand Down Expand Up @@ -315,7 +309,7 @@ int rtapi_app_main(void) {
data = NULL; // after the first call, subsequent calls to strtok need to be on NULL

// Add HAL pin
retval = hal_pin_bit_newf(HAL_IN, &(port_data->output_pins[pin + (header - 8)*PINS_PER_HEADER]), comp_id, "bb_gpio.p%d.out-%02d", header, pin);
retval = hal_pin_new_bool(comp_id, HAL_IN, &(port_data->output_pins[pin + (header - 8)*PINS_PER_HEADER]), 0, "bb_gpio.p%d.out-%02d", header, pin);

if(retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR, "%s: ERROR: pin p%d.%02d could not export pin, err: %d\n", modname, header, pin, retval);
Expand All @@ -324,17 +318,14 @@ int rtapi_app_main(void) {
}

// Add HAL pin
retval = hal_pin_bit_newf(HAL_IN, &(port_data->output_inv[pin + (header - 8)*PINS_PER_HEADER]), comp_id, "bb_gpio.p%d.out-%02d-invert", header, pin);
retval = hal_pin_new_bool(comp_id, HAL_IN, &(port_data->output_inv[pin + (header - 8)*PINS_PER_HEADER]), 0, "bb_gpio.p%d.out-%02d-invert", header, pin);

if(retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR, "%s: ERROR: pin p%d.%02d could not export pin, err: %d\n", modname, header, pin, retval);
hal_exit(comp_id);
return -1;
}

// Initialize HAL pin
*(port_data->output_inv[pin + (header - 8)*PINS_PER_HEADER]) = 0;

int gpio_num = bbpin->port_num;

// configure gpio port if necessary
Expand Down Expand Up @@ -393,7 +384,7 @@ static void write_port(void *arg, long period) {

if(pin.claimed != 'O') continue; // if we somehow get here but the pin isn't claimed as output, short circuit

if((*port->led_pins[i] ^ *(port->led_inv[i])) == 0)
if((hal_get_bool(port->led_pins[i]) ^ hal_get_bool(port->led_inv[i])) == 0)
*(pin.port->clrdataout_reg) = (1 << pin.pin_num);
else
*(pin.port->setdataout_reg) = (1 << pin.pin_num);
Expand All @@ -412,7 +403,7 @@ static void write_port(void *arg, long period) {

if(pin.claimed != 'O') continue; // if we somehow get here but the pin isn't claimed as output, short circuit

if((*port->output_pins[i] ^ *(port->output_inv[i])) == 0)
if((hal_get_bool(port->output_pins[i]) ^ hal_get_bool(port->output_inv[i])) == 0)
*(pin.port->clrdataout_reg) = (1 << pin.pin_num);
else
*(pin.port->setdataout_reg) = (1 << pin.pin_num);
Expand Down Expand Up @@ -440,7 +431,7 @@ static void read_port(void *arg, long period) {

if(!(pin.claimed == 'I' || pin.claimed == 'U' || pin.claimed == 'D')) continue; // if we get here but the pin isn't claimed as input, short circuit

*port->input_pins[i] = ((*(pin.port->datain_reg) & (1 << pin.pin_num)) >> pin.pin_num) ^ *(port->input_inv[i]);
hal_set_bool(port->input_pins[i], ((*(pin.port->datain_reg) & (1 << pin.pin_num)) >> pin.pin_num) ^ hal_get_bool(port->input_inv[i]));
}
}

Expand Down
63 changes: 32 additions & 31 deletions src/hal/drivers/hal_evoreg.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,14 @@ RTAPI_MP_STRING(cfg, "config string"); */
*/

typedef struct {
void *io_base;
hal_float_t *dac_out[3]; /* ptrs for dac output */
hal_float_t *position[3]; /* ptrs for encoder input */
hal_bit_t *digital_in[47]; /* ptrs for digital input pins 0 - 45 */
hal_bit_t *digital_out[25]; /* ptrs for digital output pins 0 - 20 */
__u16 raw_counts_old[3];
__s32 counts[3];
hal_float_t pos_scale; /*! \todo scale for position command FIXME should be one per axis */
void *io_base;
hal_real_t dac_out[3]; /* ptrs for dac output */
hal_real_t position[3]; /* ptrs for encoder input */
hal_bool_t digital_in[47]; /* ptrs for digital input pins 0 - 45 */
hal_bool_t digital_out[25]; /* ptrs for digital output pins 0 - 20 */
rtapi_u16 raw_counts_old[3];
rtapi_s32 counts[3];
hal_real_t pos_scale; /*! \todo scale for position command FIXME should be one per axis */
} evoreg_t;

/* pointer to array of evoreg_t structs in shared memory, 1 per port */
Expand Down Expand Up @@ -172,8 +172,8 @@ int rtapi_app_main(void)

/* Export DAC pin's */
for ( num_dac=1; num_dac<=MAX_DAC; num_dac++) {
retval = hal_pin_float_newf(HAL_IN, &(port_data_array->dac_out[num_dac-1]),
comp_id, "evoreg.%d.dac-%02d-out", 1, num_dac);
retval = hal_pin_new_real(comp_id, HAL_IN, &(port_data_array->dac_out[num_dac-1]),
0.0, "evoreg.%d.dac-%02d-out", 1, num_dac);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"EVOREG: ERROR: port %d var export failed with err=%i\n", n + 1,
Expand All @@ -185,8 +185,8 @@ int rtapi_app_main(void)

/* Export Encoder pin's */
for ( num_enc=1; num_enc<=MAX_ENC; num_enc++) {
retval = hal_pin_float_newf(HAL_OUT, &(port_data_array->position[num_enc - 1]),
comp_id, "evoreg.%d.position-%02d-in", 1, num_enc);
retval = hal_pin_new_real(comp_id, HAL_OUT, &(port_data_array->position[num_enc - 1]),
0.0, "evoreg.%d.position-%02d-in", 1, num_enc);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"EVOREG: ERROR: port %d var export failed with err=%i\n", n + 1,
Expand All @@ -200,8 +200,8 @@ int rtapi_app_main(void)

/* export write only HAL pin's for the input bit */
for ( i=0; i<=45;i++) {
retval += hal_pin_bit_newf(HAL_OUT, &(port_data_array->digital_in[i]),
comp_id, "evoreg.%d.pin-%02d-in", 1, i);
retval += hal_pin_new_bool(comp_id, HAL_OUT, &(port_data_array->digital_in[i]),
0, "evoreg.%d.pin-%02d-in", 1, i);

/* export another write only HAL pin for the same bit inverted */
/*
Expand All @@ -218,8 +218,8 @@ int rtapi_app_main(void)

/* export read only HAL pin's for the output bit */
for ( i=0; i<=23;i++) {
retval += hal_pin_bit_newf(HAL_IN, &(port_data_array->digital_out[i]),
comp_id, "evoreg.%d.pin-%02d-out", 1, i);
retval += hal_pin_new_bool(comp_id, HAL_IN, &(port_data_array->digital_out[i]),
0, "evoreg.%d.pin-%02d-out", 1, i);

/* export another read only HAL pin for the same bit inverted */
/*
Expand All @@ -235,8 +235,8 @@ int rtapi_app_main(void)
}

/* export parameter for scaling */
retval = hal_param_float_newf(HAL_RW, &(port_data_array->pos_scale),
comp_id, "evoreg.%d.position-scale", 1);
retval = hal_param_new_real(comp_id, HAL_RW, &(port_data_array->pos_scale),
0.0, "evoreg.%d.position-scale", 1);
if (retval != 0) {
return retval;
}
Expand Down Expand Up @@ -278,9 +278,9 @@ static void update_port(void *arg, long period)
port = arg;

/* write DAC's */
writew((*(port->dac_out[0])/10 * 0x7fff), (char *)port->io_base + 0x60);
writew((*(port->dac_out[1])/10 * 0x7fff), (char *)port->io_base + 0x80);
writew((*(port->dac_out[2])/10 * 0x7fff), (char *)port->io_base + 0xa0);
writew((hal_get_real(port->dac_out[0])/10 * 0x7fff), (char *)port->io_base + 0x60);
writew((hal_get_real(port->dac_out[1])/10 * 0x7fff), (char *)port->io_base + 0x80);
writew((hal_get_real(port->dac_out[2])/10 * 0x7fff), (char *)port->io_base + 0xa0);

/* Read Encoders, improve the 16bit hardware counters to 32bit and scale the values */
raw_counts[0] = (__u16) readw(port->io_base);
Expand All @@ -296,29 +296,30 @@ static void update_port(void *arg, long period)
port->counts[2] += (__s16) (raw_counts[2] - port->raw_counts_old[2]);
port->raw_counts_old[2] = raw_counts[2];

*port->position[0] = port->counts[0] * port->pos_scale;
*port->position[1] = port->counts[1] * port->pos_scale;
*port->position[2] = port->counts[2] * port->pos_scale;
rtapi_real pos_scale = hal_get_real(port->pos_scale);
hal_set_real(port->position[0], port->counts[0] * pos_scale);
hal_set_real(port->position[1], port->counts[1] * pos_scale);
hal_set_real(port->position[2], port->counts[2] * pos_scale);


/* read digital inputs */
tmp = readw((char *)port->io_base + 0x20); /* digital input 0-15 */
mask = 0x01;
for (pin=0 ; pin < 16 ; pin++) {
*port->digital_in[pin] = (tmp & mask) ? 1:0 ;
hal_set_bool(port->digital_in[pin], (tmp & mask) ? 1:0);
mask <<= 1;
}
tmp = readw((char *)port->io_base + 0x40); /* digital input 16-31 */
mask = 0x01;
for (pin=16 ; pin < 32 ; pin++) {
*port->digital_in[pin] = (tmp & mask) ? 1:0 ;
hal_set_bool(port->digital_in[pin], (tmp & mask) ? 1:0);
mask <<= 1;
}

tmp = readw((char *)port->io_base + 0x60); /* digital input 32-45 */
mask = 0x01;
for (pin=32 ; pin < 46 ; pin++) {
*port->digital_in[pin] = (tmp & mask) ? 1:0 ;
hal_set_bool(port->digital_in[pin], (tmp & mask) ? 1:0);
mask <<= 1;
}

Expand All @@ -327,21 +328,21 @@ static void update_port(void *arg, long period)
tmp = 0x0;
mask = 0x01;
for (pin=0; pin < 16; pin++) {
if (port->digital_out[pin]) {
if (hal_get_bool(port->digital_out[pin])) {
tmp |= mask;
mask <<= 1;
}
Comment thread
grandixximo marked this conversation as resolved.
mask <<= 1;
}
writew( tmp, (char *)port->io_base + 0x20); /* digital output 0-15 */


tmp = 0x0;
mask = 0x01;
for (pin=16; pin < 24; pin++) {
if (port->digital_out[pin]) {
if (hal_get_bool(port->digital_out[pin])) {
tmp |= mask;
mask <<= 1;
}
mask <<= 1;
}
writew( tmp, (char *)port->io_base + 0x40); /* digital output 16-23 */

Expand Down
Loading
Loading