#define DEBUG 0
#define HCAN(channel, reg) ((channel) ? HCAN1_##reg : HCAN0_##reg)
+#define HCAN_MC(channel, mbox, byte) (HCAN((channel), MC0)+8*(mbox)+(byte))
/* Debug variables */
int prerus_hcan0_old, prerus_hcan0_rec_old;
#endif
+#if DEBUG
+ #define DBG(format, ...) printf(format, ##__VA_ARGS__)
+#else
+ #define DBG(format, ...)
+#endif
-#if DEBUG
+#if 0 //DEBUG
#ifndef DEB_LED_OUT
#define DEB_LED_OUT
static void deb_led_out(char val)
/* Prototypes */
UNS8 f_can_receive(UNS8 notused, Message *m);
UNS8 canSend(UNS8 notused, Message *m);
-void readCanOregisters(int low,int high);
+void readCanOregisters(void *low, void *high);
/* Copy from the stack of the message to treat */
//static Message msgRcv;
/***************************************************************************/
char canAddIdToFilter(int can_chanel, UNS8 nFilter, UNS16 id)
{
- __u32 lafm, hwid_tmp;
+ //__u32 lafm;
+ __u32 hwid_tmp;
__u16 lafml, lafmh;
__u16 id_std, id_in;
excptvec_set(108,can0HdlRcv);
excptvec_set(109,can0HdlRcv);
*SYS_MSTPCRC&=~MSTPCRC_MSTPC3m; /* enable HCAN power */
- #if DEBUG
- printf("HCAN0 isr set:\n");
- #endif
+ DBG("HCAN0 isr set:\n");
break;
case 1:
if(!(*SYS_MSTPCRC&MSTPCRC_MSTPC2m))
excptvec_set(106,can1HdlRcv);
excptvec_set(107,can1HdlRcv);
*SYS_MSTPCRC&=~MSTPCRC_MSTPC2m; /* enable HCAN power */
- #if DEBUG
- printf("HCAN1 isr set:\n");
- #endif
+ DBG("HCAN1 isr set:\n");
default:
return(-1);
};
*HCAN(hcanChS, LAFML)=can_settings_hcan->lafml;
*HCAN(hcanChS, LAFMH)=can_settings_hcan->lafmh;
}
- #if DEBUG
- printf("can_set_registers finished\n");
- #endif
+ DBG("can_set_registers finished\n");
return(0);
};
};
/* Looking for a free buffer */
cantflg = ~((*HCAN(can_chanel, TXPR))|(*HCAN(can_chanel, MBCR)));
- #if DEBUG
- printf("cantflg=0x%x, TXPR=0x%x, MBCR=0x%x\n", cantflg, *HCAN(can_chanel, TXPR), *HCAN(can_chanel, MBCR));
- #endif
+ DBG("cantflg=0x%x, TXPR=0x%x, MBCR=0x%x\n", cantflg, *HCAN(can_chanel, TXPR), *HCAN(can_chanel, MBCR));
if (!cantflg) { /* all the TXEx are set */
MSG_WAR(0X2604, "No buffer free. Msg to transmit is losted ", 0);
return 1; /* No buffer free */
if(cantflg&0x01)
break;
};
- #if DEBUG
- printf("Actual mailbox: %02x\n",mailbox);
- #endif
+ DBG("Actual mailbox: %02x\n",mailbox);
/* Set pointer to correct mailbox control and data */
- #if DEBUG
- printf("\n ...");
- printf("HCAN0_MC0: %04x\n",HCAN0_MC0);
- printf("can_chanel: %04x\n",can_chanel);
- printf("HCAN_MC_o: %04x\n",HCAN_MC_o);
- printf("mailbox: %04x\n",mailbox);
- printf("HCAN_MC_LENGTH: %04x\n",HCAN_MC_LENGTH);
- printf("f820+40: %04x\n",0xf820+0x40);
- printf("HCAN_MC+1: %04x\n",HCAN0_MC0+0x1);
- printf("can_chanel*HCAN_MC_o: %04x\n",can_chanel*HCAN_MC_o);
- printf("can_chanel*HCAN_MD_o: %04x\n",can_chanel*HCAN_MD_o);
- printf("mailbox*HCAN_MC_LENGTH: %04x\n",mailbox*HCAN_MC_LENGTH);
- printf("mailbox*HCAN_MD_LENGTH: %04x\n",mailbox*HCAN_MD_LENGTH);
- printf("HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH: %04x\n",HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH);
- printf("HCAN(can_chanel, MD0)+mailbox*HCAN_MD_LENGTH: %04x\n",HCAN(can_chanel, MD0)+mailbox*HCAN_MD_LENGTH);
- #endif
-
+ DBG("\n ...");
+ DBG("HCAN0_MC0: %p\n",HCAN0_MC0);
+ DBG("can_chanel: %04x\n",can_chanel);
+ DBG("mailbox: %04x\n",mailbox);
+ DBG("HCAN_MC_LENGTH: %04x\n",HCAN_MC_LENGTH);
+ DBG("f820+40: %04x\n",0xf820+0x40);
+ DBG("mailbox*HCAN_MC_LENGTH: %04x\n",mailbox*HCAN_MC_LENGTH);
+ DBG("mailbox*HCAN_MD_LENGTH: %04x\n",mailbox*HCAN_MD_LENGTH);
+ DBG("HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH: %p\n",HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH);
+ DBG("HCAN(can_chanel, MD0)+mailbox*HCAN_MD_LENGTH: %p\n",HCAN(can_chanel, MD0)+mailbox*HCAN_MD_LENGTH);
hcan_mc=(__u8 *)((void*)HCAN(can_chanel, MC0)+(mailbox*HCAN_MC_LENGTH));
hcan_md=(__u8 *)((void*)HCAN(can_chanel, MD0)+(mailbox*HCAN_MD_LENGTH));
//hcan_mc=0xfff860;
//hcan_md=0xfff8f0;
- #if DEBUG
- printf("\nadress hcan_mc: %02x\n",hcan_mc);
- printf("adress hcan_md: %02x\n",hcan_md);
- #endif
-
+
+ DBG("\nadress hcan_mc: %p\n",hcan_mc);
+ DBG("adress hcan_md: %p\n",hcan_md);
/* We put ide = 0 because id is on 11 bits only */
m_hwid=CAN_ID_FLG2HWID(msg.cob_id.w, 0, msg.rtr);
write_can_id(can_chanel, mailbox, m_hwid); //m_hwid
*hcan_mc=msg.len & 0x0f;
- #if DEBUG
-
- printf("message length in hcan_mc: %02x\n",*hcan_mc);
- #endif
+ DBG("message length in hcan_mc: %02x\n",*hcan_mc);
/* For the priority, we put the highter bits of the cob_id */
/* Seted in canInit */
- #if DEBUG
- printf("id=0x%x, len=0x%x, rtr=0x%x \n", msg.cob_id.w, msg.len, msg.rtr);
- printf("data: ");
- #endif
+ DBG("id=0x%04lx, len=0x%x, rtr=0x%x \n", msg.cob_id.w, msg.len, msg.rtr);
+ DBG("data: ");
for (i = 0 ; i < msg.len ; i++) {
*(hcan_md + i) = msg.data[i];
- #if DEBUG
- printf("%02x ", msg.data[i]);
- #endif
+ DBG("%02x ", msg.data[i]);
}
- #if DEBUG
- printf(" \n");
- printf("zprm send: id=0x%x, len=%d, rtr=%d\n data: ", msg.cob_id.w, msg.len, msg.rtr);
- for (i = 0 ; i < msg.len; i++)
- printf("%x ", msg.data[i]);
- printf("\n");
- #endif
+#if DEBUG
+ DBG(" \n");
+ DBG("zprm send: id=0x%04lx, len=%d, rtr=%d\n data: ", msg.cob_id.w, msg.len, msg.rtr);
+ for (i = 0 ; i < msg.len; i++)
+ DBG("%x ", msg.data[i]);
+ DBG("\n");
+#endif
/* Transmitting the message */
- #if DEBUG
- printf("MC[1..8]\n");
- readCanOregisters(0xfff820,0xfff898);
- printf("MD[1..8]\n");
- readCanOregisters(0xfff8b0,0xfff928);
- #endif
+#if DEBUG
+ DBG("MC[1..8]\n");
+ readCanOregisters((void*)0xfff820,(void*)0xfff898);
+ DBG("MD[1..8]\n");
+ readCanOregisters((void*)0xfff8b0,(void*)0xfff928);
+#endif
*HCAN(can_chanel, TXPR) |= name2mask[mailbox]; /* Ready to transmit ! */
}
inline int write_can_id(int can_chanel, int mailbox, __u32 hwid)
{
int i;
- #if DEBUG
- printf("\nMessage ID writed to MC registers:\n");
- printf("HCAN0_MC0: %04x\n",HCAN0_MC0);
- printf("can_chanel: %04x\n",can_chanel);
- printf("HCAN_MC_o: %04x\n",HCAN_MC_o);
- printf("can_chanel: %04x\n",can_chanel);
-
- #endif
+
+ DBG("\nMessage ID writed to MC registers:\n");
+ DBG("HCAN0_MC0: %p\n",HCAN0_MC0);
+ DBG("can_chanel: %04x\n",can_chanel);
for(i=0;i<4;i++) { /* Write id */
*((__u8 *)HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH+4+(3-i))=(hwid&0xff); //((__u16)(HCAN0_MC0))
//*(0xfff860+4+(3-i))=hwid&0xff;
hwid=(hwid>>8);
- #if DEBUG
- printf("adress:%02x, data:%02x\n",(__u16)HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH+4+(3-i),*(((__u8 *)HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH+4+(3-i)));
- printf("id:%08x\n",hwid);
+
+#if 0 //DEBUG
+ DBG("adress:%p, data:%02x\n",
+ (__u32)HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH+4+(3-i),
+ *(((__u8 *)HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH+4+(3-i))));
+ DBG("id:%08x\n",hwid);
// *(((__u16 *)(0xfff860))+((__u8)(0x000004))+((__u8)(0x000001)))=0x55;
- printf("write id MC[1..8]\n"); // volam to odsud
- readCanOregisters(0xfff850,0xfff870);
- #endif
+ DBG("write id MC[1..8]\n"); // volam to odsud
+ readCanOregisters(0xfff850,0xfff870);
+#endif
};
return 0;
};
hwid_tmp|=*((__u16 *)HCAN(can_chanel, MC0)+mailbox*HCAN_MC_LENGTH+4+i);
*hwid = hwid_tmp;
#if DEBUG
- printf("read can id MC[1..8]\n");
- readCanOregisters(0xfff820,0xfff898);
- printf("read can id MD[1..8]\n");
- readCanOregisters(0xfff8b0,0xfff928);
+ DBG("read can id MC[1..8]\n");
+ readCanOregisters((void*)0xfff820,(void*)0xfff898);
+ DBG("read can id MD[1..8]\n");
+ readCanOregisters((void*)0xfff8b0,(void*)0xfff928);
#endif
return 0;
};
save_and_cli(saveif);
//deb_led_out(0);
//FlWait(1*100000);
- #if DEBUG
- prerus_hcan0++;
- #endif
+#if DEBUG
+ prerus_hcan0++;
+#endif
if (*HCAN0_IRR&IRR_IRR0m) ;
*HCAN0_IRR |= IRR_IRR0m; /* set register to handled */
if (*HCAN0_IRR&IRR_IRR1m)
continue;
//deb_led_out(1);
//FlWait(1*100000);
- #if DEBUG
- prerus_hcan0_rec++;
- #endif
+#if DEBUG
+ prerus_hcan0_rec++;
+#endif
if(idx<8)
can_recive_msg(0, idx+8, 0); /* move message to buffer */
else
{
};
-void readCanOregisters(int low,int high)
+void readCanOregisters(void *low, void *high)
{
- int i;
+ void *i;
int *p_i;
unsigned char j =0;
for(i=low;i<=high;i+=16)
{
- printf("%04x: ",i);
+ printf("%p: ",i);
for(j = 0; j<16 ;j += 2)
{
p_i=i+j;