www.ti.com
Bootloader Code Listing (V3.0)
ECanaRegs.CANGIF1.all = 0xFFFFFFFF;
/* Configure bit timing parameters for eCANA*/
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 1 ;
// Set CCR = 1
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
while(ECanaRegs.CANES.bit.CCE != 1 ) {}
// Wait for CCE bit to be set..
ECanaShadow.CANBTC.all = 0;
ECanaShadow.CANBTC.bit.BRPREG = 1;
ECanaShadow.CANBTC.bit.TSEG2REG = 2;
ECanaShadow.CANBTC.bit.TSEG1REG = 5;
ECanaShadow.CANBTC.bit.SAM = 1;
ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 0 ;
// Set CCR = 0
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
while(ECanaRegs.CANES.bit.CCE == !0 ) {}
// Wait for CCE bit to be cleared..
/* Disable all Mailboxes
*/
ECanaRegs.CANME.all = 0;
// Required before writing the MSGIDs
/* Assign MSGID to MBOX1 */
ECanaMboxes.MBOX1.MSGID.all = 0x00040000;
/* Configure MBOX1 to be a receive MBOX */
ECanaRegs.CANMD.all = 0x0002;
/* Enable MBOX1 */
ECanaRegs.CANME.all = 0x0002;
EDIS;
return;
}
//#################################################
// Uint16 CAN_GetWordData(void)
//-----------------------------------------------
// This routine fetches two bytes from the CAN-A
// port and puts them together to form a single
// 16-bit value.
It is assumed that the host is
// sending the data in the order LSB followed by MSB.
//-----------------------------------------------
Uint16 CAN_GetWordData()
{
Uint16 wordData;
Uint16 byteData;
wordData = 0x0000;
byteData = 0x0000;
// Fetch the LSB
while(ECanaRegs.CANRMP.all == 0) { }
wordData =
(Uint16) ECanaMboxes.MBOX1.MDL.byte.BYTE0;
// LS byte
84
Bootloader Code Overview
SPRU722C – November 2004 – Revised October 2006