]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/app/usbcan/lpc17xx_can.c
lpc17xx embedded: new function for obtaining chip bittiming constant parameters.
[lincan.git] / embedded / app / usbcan / lpc17xx_can.c
index 0d42658c16414049463e6df5265d64934ea25103..f9fd5ac5c2e634e5cf53c14083babdcecad98099 100644 (file)
@@ -32,7 +32,6 @@ int can_lmc1_init_hw_data(struct candevice_t *candev){
 
 int can_lmc1_init_chip_data(struct candevice_t *candev, int chipnr){
 
-       struct can_bittiming_const *btc;
        struct can_lmc1_chip_data *chip_data;
 
        // used CAN1 peripherial -> CAN1 registers base 
@@ -48,18 +47,7 @@ int can_lmc1_init_chip_data(struct candevice_t *candev, int chipnr){
 
 
        chip_data = (struct can_lmc1_chip_data*) candev->chip[chipnr]->chip_data;
-
-       btc = &chip_data->btc;
-       
-       // set bittiming constants
-       btc->tseg1_min = 1;
-       btc->tseg1_max = 16;
-       btc->tseg2_min = 1;
-       btc->tseg2_max = 8;
-       btc->sjw_max = 4;
-       btc->brp_min = 1;
-       btc->brp_max = 1024;
-       btc->brp_inc = 1;
+       chip_data->flags = 0;
 
        return 0;
 }
@@ -113,9 +101,10 @@ int lpc17xx_baud_rate(struct canchip_t *chip, int rate, int clock, int sjw,
        int best_tseg=0, best_brp=0, best_rate=0, brp=0;
        int tseg=0, tseg1=0, tseg2=0;
 
-       struct can_lmc1_chip_data *chip_data = (struct can_lmc1_chip_data*) chip->chip_data;
+       struct can_bittiming_const btc_buff;
+       struct can_bittiming_const *btc = &btc_buff;
 
-       struct can_bittiming_const *btc = &chip_data->btc;
+       chip->chipspecops->get_bittiming_const(chip, btc);              
 
        /* tseg even = round down, odd = round up */
        for (tseg=(0+0+2)*2; tseg<=(btc->tseg2_max+btc->tseg1_max+2)*2+1; tseg++) {
@@ -385,6 +374,20 @@ int lpc17xx_set_bittiming(struct canchip_t *chip, int brp, int sjw, int tseg1, i
        return 0;
 }
 
+int lpc17xx_get_bittiming_const(struct canchip_t *chip, struct can_bittiming_const *btc) {
+       btc->tseg1_min = 1;
+       btc->tseg1_max = 16;
+       btc->tseg2_min = 1;
+       btc->tseg2_max = 8;
+       btc->sjw_max = 4;
+       btc->brp_min = 1;
+       btc->brp_max = 1024;
+       btc->brp_inc = 1;
+
+       return 0;
+}
+
+
 int lpc17xx_fill_chipspecops(struct canchip_t *chip){
 
        chip->max_objects=1;
@@ -408,6 +411,7 @@ int lpc17xx_register(struct chipspecops_t *chipspecops){
        chipspecops->irq_handler = lpc17xx_irq_handler;
 
        chipspecops->set_bittiming = lpc17xx_set_bittiming;
+       chipspecops->get_bittiming_const = lpc17xx_get_bittiming_const;
 
        return 0;