From e372a22696a079ea7f3bb00aa46e8a8281f1c49f Mon Sep 17 00:00:00 2001 From: Jiri Vanek Date: Sat, 5 May 2012 12:22:38 +0200 Subject: [PATCH] Some bugs related with transmission/reception fixed. --- embedded/app/usbcan/can/lpc17xx_can.h | 2 +- embedded/app/usbcan/lpc17xx_can.c | 28 ++++++++++++++------------- embedded/app/usbcan/main.c | 1 + 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/embedded/app/usbcan/can/lpc17xx_can.h b/embedded/app/usbcan/can/lpc17xx_can.h index 4e50be1..5f9f4c0 100644 --- a/embedded/app/usbcan/can/lpc17xx_can.h +++ b/embedded/app/usbcan/can/lpc17xx_can.h @@ -149,7 +149,7 @@ extern "C" //---------------------------------- -#define MAX_TRANSMIT_WAIT_LOOPS 20 +#define MAX_TRANSMIT_WAIT_LOOPS 10000 void CAN_init(struct canchip_t *chip); void CAN_send(struct canchip_t *chip, canmsg_t* msg); diff --git a/embedded/app/usbcan/lpc17xx_can.c b/embedded/app/usbcan/lpc17xx_can.c index 9157dcf..0d42658 100644 --- a/embedded/app/usbcan/lpc17xx_can.c +++ b/embedded/app/usbcan/lpc17xx_can.c @@ -50,7 +50,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; @@ -180,7 +180,18 @@ int lpc17xx_chip_config(struct canchip_t *chip){ int lpc17xx_pre_write_config(struct canchip_t *chip, struct msgobj_t *obj, struct canmsg_t *msg) { + uint32_t i=0; + // check status of TB1 + while (!(can_read_reg(chip, CAN_SR_o) & CAN_SR_TBS1)){ + if(i++msgobj[0]; - i = can_read_reg(chip, CAN_ICR_o); @@ -355,7 +367,7 @@ int lpc17xx_set_bittiming(struct canchip_t *chip, int brp, int sjw, int tseg1, i //debug print - printf("BRP: %d, SJW: %d, TSEG1: %d, TSEG2: %d \n", brp+1, sjw+1, tseg1+1, tseg2+1); + CANMSG("BRP: %d, SJW: %d, TSEG1: %d, TSEG2: %d \n", brp+1, sjw+1, tseg1+1, tseg2+1); can_disable_irq(chip->chip_irq); @@ -501,16 +513,6 @@ void CAN_send(struct canchip_t *chip, canmsg_t* msg){ volatile uint32_t can_tfi1; uint32_t i=0; - // check status of TB1 - while (!(can_read_reg(chip, CAN_SR_o) & CAN_SR_TBS1)){ - if(i++