void can_tx(){ unsigned int n,status;MCF_CAN_MBUF_CODE(0) = MCF_CAN_TX_INACTIVE; //MB0 is inactive // Configure MB0 for TXMCF_CAN_MBUF_ID(0) = 0x18FF001E; // MB0 = TX, Ext. ID // CAN ID =0x18FF001E, Data Frame // IDE = 1 & SRR = 1; // RTR = 0;// Copy Tx data bytes to the message bufferMCF_CAN_MBUF_BYTE(0,0) = 0x22;MCF_CAN_MBUF_BYTE(0,1) = 0x22;MCF_CAN_MBUF_BYTE(0,2) = 0x11;MCF_CAN_MBUF_BYTE(0,3) = 0x11;MCF_CAN_MBUF_BYTE(0,4) = 0x66;MCF_CAN_MBUF_BYTE(0,5) = 0x66;MCF_CAN_MBUF_BYTE(0,6) = 0x99;MCF_CAN_MBUF_BYTE(0,7) = 0x99;MCF_CAN_MBUF_CTRL(0) = 0x68;MCF_CAN_MBUF_CODE(0) = MCF_CAN_TX_TRONCE;status = MCF_CAN_IFLAG;n=0;while((status & 0x0001)!=1) // polling{if(n++>0x6000)break;status = MCF_CAN_IFLAG; } }
for(i=0;i<16;i++) MCF_CAN_MBUF_CODE(i) = MCF_CAN_RX_INACTIVE; /* inactive state */
#define MCF_CAN_MBUF_CODE(x) (*(vuint8 *)(void *)(&__IPSBAR[((0x1C0080+(0x10*x)))]))#define MCF_CAN_MBUF_CTRL(x) (*(vuint8 *)(void *)(&__IPSBAR[((0x1C0081+(0x10*x)))]))#define MCF_CAN_MBUF_TIME(x) (*(vuint16 *)(void *)(&__IPSBAR[((0x1C0082+(0x10*x)))]))#define MCF_CAN_MBUF_ID(x) (*(vuint32 *)(void *)(&__IPSBAR[((0x1C0084+(0x10*x)))]))#define MCF_CAN_MBUF_BYTE(x,y) (*(vuint8 *)(void *)(&__IPSBAR[((0x1C0088+(0x10*x)+y))]))
Message Edited by BugMan on 2006-09-2911:19 AM
#define MCF_CAN_MBUF_BYTE(x,y) (*(vuint8 *)(void *)(&__IPSBAR[((0x1C0088+(0x10*x)+y))]))
MCF_CAN_CANMCR = 0 | MCF_CAN_CANMCR_SOFTRST ; /* enable Flex CAN module */ while(MCF_CAN_CANMCR&MCF_CAN_CANMCR_SOFTRST); /* wait end of soft reset */ MCF_CAN_CANMCR = 0 | MCF_CAN_CANMCR_MDIS /* FlexCAN Disable */ | MCF_CAN_CANMCR_HALT /* freeze Flex CAN module */ | MCF_CAN_CANMCR_MAXMB(MAX_MB); /* use MAX_MB messages buffer */ while(MCF_CAN_CANMCR&MCF_CAN_CANMCR_FRZACK); /* wait for enterfreeze mode */ MCF_CAN_CANCTRL = 0; /* CLK = EXTAL Freq = 8Mhz */ MCF_CAN_RXGMASK = MCF_CAN_RXGMASK_MI(0x1FF00000); /* set global mask filter extended ID */ for(i=0;i<16;i++) MCF_CAN_MBUF_CODE(i) = MCF_CAN_RX_INACTIVE; /* inactive state */ MCF_CAN_CANMCR = 0 | MCF_CAN_CANMCR_HALT /* freeze Flex CAN module */ | MCF_CAN_CANMCR_MAXMB(MAX_MB-1); /* use MAX_MB messages buffers */ while(MCF_CAN_CANMCR&MCF_CAN_CANMCR_FRZACK); /* wait for enter freeze mode */ MCF_CAN_CANCTRL = 0 | MCF_CAN_CANCTRL_PRESDIV(3) /* S = 2Mhz => 16 * 125Khz bit rate */ | MCF_CAN_CANCTRL_RJW(0) /* 1 times quanta resync */ | MCF_CAN_CANCTRL_PSEG1(5) /* SEG1 = 6 time quanta */ | MCF_CAN_CANCTRL_PSEG2(6) /* SEG2 = 7 time quanta */ | MCF_CAN_CANCTRL_BOFFMSK /* enable Bus Off interrupt */ | MCF_CAN_CANCTRL_ERRMSK /* enable Error interrupt */ | MCF_CAN_CANCTRL_SAMP /* triple sample point */ | MCF_CAN_CANCTRL_TSYNC /* resync enable */ | MCF_CAN_CANCTRL_LBUF /* lowest buffer transmitted first */ | MCF_CAN_CANCTRL_PROPSEG(1); /* 2 time quanta PROPSEG */ MCF_CAN_CANMCR &= ~MCF_CAN_CANMCR_HALT; /* unfreeze FlexCAN */
to answer your question, MCF_CAN_CANMCR is defined as vuint32 in mcf5213_can.h
ps: M5213 run @ 64Mhz
Emmanuel