hi Kef
thanks for the reply.But no that bit is zero.here is some part of code.
CAN0CTL0_INITRQ = 1;
while((CAN0CTL1&1)==0);
CAN0CTL1 = 0xC0; //Enable MSCAN with bus clk, wake up enable
CAN0BTR0 = 0x04; //SJW=1 and Tq freq=4MHz
CAN0BTR1 = 0x1C; //1bit time =(PS*(1+13+2))/fclk =(5*16)/20M=4us =250 kbps (1bit=16Tq)
CAN0IDAC = 0x00; //Two 32 bit accept filters
//Bank 1
CAN0IDAR0 = 0;
CAN0IDAR1 = 0x08;//Match IDE bit=1 to support only EXT ID
CAN0IDAR2 = 0;
CAN0IDAR3 = 0; //Match RTR bit=0 to support only DATA FRAME
//Bank 2
CAN0IDAR4 = 0;
CAN0IDAR5 = 0x08;//Match IDE bit=1
CAN0IDAR6 = 0;
CAN0IDAR7 = 0; //Match RTR bit=0
//if MR_bit=1, don't check corres. AR_bit and accept that bit always
//if MR_bit=0, check corres. AR_bit and accept that bit only if it matches
//Bank 1
CAN0IDMR0 = 0xFF;
CAN0IDMR1 = 0xF7;//Match IDE bit for accepting Extended ID only (no std frame)
CAN0IDMR2 = 0xFF;
CAN0IDMR3 = 0xFE;//Match RTR bit for accepting DATA frames only (no remote frame)
//Bank 2
CAN0IDMR4 = 0xFF;
CAN0IDMR5 = 0xF7;
CAN0IDMR6 = 0xFF;
CAN0IDMR7 = 0xFE;
CAN0CTL0 = 0x00; /* Exit initialization mode request */
while (CAN0CTL1_INITAK)
; /* Wait for normal mode */
while(!(CAN0CTL0_SYNCH))
; /* Wait for CAN synchronization */
CAN0RFLG_RXF = 1; /* Clear receiver flags */
CAN0RIER_RXFIE = 1;
I dont know but may be transmit interrupt has to be defined at some address .I dont know where to define that.Right now i have defined it like
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 5 knopp()
{
unsigned char u8TxBuffer = {0},u8Length=8;
unsigned long u32ID=0x18FEF100;
unsigned char u8TxData[8]={ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18};
unsigned char u8Index;
// if (!CAN0TFLG) /* Retrun if Transmit Buffer is full */
// return ERR_BUFFER_FULL;
CAN0TBSEL = CAN0TFLG; /* Select lowest empty buffer */
u8TxBuffer = CAN0TBSEL; /* Backup selected buffer */
*((unsigned long *) ((unsigned long)(&CAN0TXIDR0)))= u32ID; /* Load Id to IDR Registers */
/* Load data to Data Segment Registers */
for (u8Index=0;u8Index<u8Length;u8Index++) {
*(&CAN0TXDSR0 + u8Index) = u8TxData[u8Index];
}
CAN0TXDLR = 8; /* Set Data Length Code */
CAN0TXTBPR = 1; /* Set Priority */
CAN0TFLG = u8TxBuffer; /* Start transmission */
while ( (CAN0TFLG & u8TxBuffer) != u8TxBuffer);
/* Wait for Transmission completion */
}
for testing purpose and i am forcefully setting CAN0TFLG flag in main loop.should it work.
waitig for reply
SARY