if (c_can_enable_configuration(pchip))
return -ENODEV;
- clock /=2;
-
/* tseg even = round down, odd = round up */
for (tseg=(0+0+2)*2; tseg<=(MAX_TSEG2+MAX_TSEG1+2)*2+1; tseg++)
{
if (best_error && (rate/best_error < 10))
{
CANMSG("baud rate %d is not possible with %d Hz clock\n",
- rate, 2*clock);
+ rate, clock);
CANMSG("%d bps. brp=%d, best_tseg=%d, tseg1=%d, tseg2=%d\n",
best_rate, best_brp, best_tseg, tseg1, tseg2);
return -EINVAL;
DEBUGMSG("(c%d)calling c_can_config_irqs(...)\n", pchip->chip_idx);
- /*
- CANMSG("c_can_config_irqs not implemented\n");
- return -ENOSYS;
- */
-
tempreg = c_can_read_reg_w(pchip, CCCR);
//DEBUGMSG("-> CAN Control Register: 0x%.4lx\n",(long)tempreg);
c_can_write_reg_w(pchip, tempreg | (irqs & 0xe), CCCR);
return -1;
}
- // flags = c_can_read_reg_w(pchip, CCCE) | CE_EN;
- // c_can_write_reg_w(pchip, flags, CCCE);
- //
+#ifdef C_CAN_WITH_CCCE
flags = c_can_read_reg_w(pchip, CCCE) | CE_EN;
c_can_write_reg_w(pchip, flags, CCCE);
+#endif
DEBUGMSG("-> ok\n");
#ifdef REGDUMP
return -1;
}
+#ifdef C_CAN_WITH_CCCE
flags = c_can_read_reg_w(pchip, CCCE) & ~CE_EN;
c_can_write_reg_w(pchip, flags, CCCE);
+#endif
DEBUGMSG("-> ok\n");
return 0;
(long)(c_can_read_reg_w( pchip, CCTR)));
CANMSG("Baud Rate Presc. Register: 0x%.4lx\n",
(long)(c_can_read_reg_w( pchip, CCBRPE)));
+#ifdef C_CAN_WITH_CCCE
CANMSG("CAN Enable Register: 0x%.4lx\n",
(long)(c_can_read_reg_w( pchip, CCCE)));
+#endif
CANMSG("Transm. Req. 1 Register: 0x%.4lx\n",
(long)(c_can_read_reg_w( pchip, CCTREQ1)));
CANMSG("Transm. Req. 2 Register: 0x%.4lx\n",
CANMSG("------------------------------------\n");
}
+
+void c_can_if1_registerdump(struct canchip_t *pchip)
+{
+ CANMSG("----------------------------------------\n");
+ CANMSG("Error Counting Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCEC)));
+ CANMSG("---------C-CAN IF1 Register Dump--------\n");
+ CANMSG("IF1 Command Req. Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1CR)));
+ CANMSG("IF1 Command Mask Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1CM)));
+ CANMSG("IF1 Mask 1 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1M1)));
+ CANMSG("IF1 Mask 2 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1M2)));
+ CANMSG("IF1 Arbitration 1 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1A1)));
+ CANMSG("IF1 Arbitration 2 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1A2)));
+ CANMSG("IF1 Message Control Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1DMC)));
+ CANMSG("IF1 Data A1 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1DA1)));
+ CANMSG("IF1 Data A2 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1DA2)));
+ CANMSG("IF1 Data B1 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1DB1)));
+ CANMSG("IF1 Data B2 Register: 0x%.4lx\n",
+ (long)(c_can_read_reg_w( pchip, CCIF1DB2)));
+}
+
///////////////////////////////////////////////////////////////////////
int c_can_register(struct chipspecops_t *chipspecops)
int c_can_fill_chipspecops(struct canchip_t *chip)
{
chip->chip_type="c_can";
- chip->max_objects = 32;
+ if(MAX_MSGOBJS >= 32) {
+ chip->max_objects = 32;
+ } else {
+ CANMSG("C_CAN requires 32 message objects per chip,"
+ " but only %d is compiled maximum\n",MAX_MSGOBJS);
+ chip->max_objects = MAX_MSGOBJS;
+ }
c_can_register(chip->chipspecops);
return 0;
}