static void CAN_configPin();
static void CAN_setBusTiming(struct canchip_t *chip);
+#define MAX_TRANSMIT_WAIT_LOOPS 20
+
//---------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
int lpc17xx_send_msg(struct canchip_t *chip, struct msgobj_t *obj,
struct canmsg_t *msg)
{
-
+ uint32_t i=0;
+
// write transmission request
can_write_reg(chip, (CAN_CMR_TR | CAN_CMR_STB1), CAN_CMR_o);
+ while (!(can_read_reg(chip, CAN_SR_o) & (1<<3))){
+ if(i++<MAX_TRANSMIT_WAIT_LOOPS)
+ continue;
+
+ // request command to abort transmission request
+ can_write_reg(chip, CAN_CMR_AT, CAN_CMR_o);
+ break;
+ }
+
return 0;
}
{
int cmd;
+
if(obj->tx_slot){
/* Do local transmitted message distribution if enabled */
if (processlocal){
}
+
void CAN_send(struct canchip_t *chip, canmsg_t* msg){
volatile uint32_t data;
volatile uint32_t can_tfi1;
- uint32_t i;
+ uint32_t i=0;
// check status of TB1
- while (!(can_read_reg(chip, CAN_SR_o) & CAN_SR_TBS1)){}
+ while (!(can_read_reg(chip, CAN_SR_o) & CAN_SR_TBS1)){
+ if(i++<MAX_TRANSMIT_WAIT_LOOPS)
+ continue;
+
+ // request command to abort transmission request
+ can_write_reg(chip, CAN_CMR_AT, CAN_CMR_o);
+ return;
+ }
can_tfi1 = can_read_reg(chip, CAN_TFI1_o);