#include "DSP281x_Device.h" //Ïîñëåäîâàòåëüíîñòü Shutdown è Swichon ïåðåâîäèò EPOS â ðåæèì óïðàâëåíèÿ void Transmit1 (Uint32 ID, Uint16 DLC, Uint32 DATALow, Uint32 DATAHi) { struct ECAN_REGS ECanaShadow; ECanaShadow.CANTRR.all=ECanaRegs.CANTRR.all; ECanaShadow.CANTRR.bit.TRR1 = 1; ECanaRegs.CANTRR.all=ECanaShadow.CANTRR.all; do { ECanaShadow.CANTRS.all=ECanaRegs.CANTRS.all; } while(ECanaShadow.CANTRS.bit.TRS1 == 1); // æä¸ì ñáðîñà ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME1 = 0; ECanaRegs.CANME.all=ECanaShadow.CANME.all; // ÏÎÑÛËÊÀ PDO1 ECanaMboxes.MBOX1.MSGID.bit.IDE = 0; ECanaMboxes.MBOX1.MSGID.bit.AAM = 0; ECanaMboxes.MBOX1.MSGID.bit.AME = 0; ECanaMboxes.MBOX1.MSGCTRL.bit.DLC = DLC; ECanaMboxes.MBOX1.MSGCTRL.bit.RTR = 0; ECanaMboxes.MBOX1.MSGID.bit.STDMSGID = ID; ECanaShadow.CANMD.all=ECanaRegs.CANMD.all; ECanaShadow.CANMD.bit.MD1=0; ECanaRegs.CANMD.all=ECanaShadow.CANMD.all; ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME1 =1 ; ECanaRegs.CANME.all=ECanaShadow.CANME.all; //==============transmit================= ECanaMboxes.MBOX1.MDL.all = DATALow; ECanaMboxes.MBOX1.MDH.all = DATAHi; ECanaShadow.CANTRR.all=ECanaRegs.CANTRR.all; ECanaShadow.CANTRR.bit.TRR1 = 0; ECanaRegs.CANTRR.all=ECanaShadow.CANTRR.all; ECanaShadow.CANTRS.all=ECanaRegs.CANTRS.all; ECanaShadow.CANTRS.bit.TRS1 = 1; ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all; do { ECanaShadow.CANTA.all=ECanaRegs.CANTA.all; } while(ECanaShadow.CANTA.bit.TA1 == 0 ); // Wait for TA1 bit to be set.. ECanaShadow.CANTA.all=ECanaRegs.CANTA.all; ECanaShadow.CANTA.bit.TA1 = 0; ECanaShadow.CANTA.bit.TA1 = 1; // Clear TA1 ECanaRegs.CANTA.all = ECanaShadow.CANTA.all; } void Transmit2 (Uint32 ID, Uint16 DLC, Uint32 DATALow, Uint32 DATAHi) { struct ECAN_REGS ECanaShadow; ECanaShadow.CANTRR.all=ECanaRegs.CANTRR.all; ECanaShadow.CANTRR.bit.TRR2 = 1; ECanaRegs.CANTRR.all=ECanaShadow.CANTRR.all; do { ECanaShadow.CANTRS.all=ECanaRegs.CANTRS.all; } while(ECanaShadow.CANTRS.bit.TRS2 == 1); // æä¸ì ñáðîñà ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME2 = 0; ECanaRegs.CANME.all=ECanaShadow.CANME.all; // ÏÎÑÛËÊÀ PDO1 ECanaMboxes.MBOX2.MSGID.bit.IDE = 0; ECanaMboxes.MBOX2.MSGID.bit.AAM = 0; ECanaMboxes.MBOX2.MSGID.bit.AME = 0; ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = DLC; ECanaMboxes.MBOX2.MSGCTRL.bit.RTR = 0; ECanaMboxes.MBOX2.MSGID.bit.STDMSGID = ID; ECanaShadow.CANMD.all=ECanaRegs.CANMD.all; ECanaShadow.CANMD.bit.MD2=0; ECanaRegs.CANMD.all=ECanaShadow.CANMD.all; ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME2 =1 ; ECanaRegs.CANME.all=ECanaShadow.CANME.all; //==============transmit================= ECanaMboxes.MBOX2.MDL.all = DATALow; ECanaMboxes.MBOX2.MDH.all = DATAHi; ECanaShadow.CANTRR.all=ECanaRegs.CANTRR.all; ECanaShadow.CANTRR.bit.TRR2 = 0; ECanaRegs.CANTRR.all=ECanaShadow.CANTRR.all; ECanaShadow.CANTRS.all=ECanaRegs.CANTRS.all; ECanaShadow.CANTRS.bit.TRS2 = 1; ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all; do { ECanaShadow.CANTA.all=ECanaRegs.CANTA.all; } while(ECanaShadow.CANTA.bit.TA2 == 0 ); // Wait for TA1 bit to be set.. ECanaShadow.CANTA.all=ECanaRegs.CANTA.all; ECanaShadow.CANTA.bit.TA2 = 0; ECanaShadow.CANTA.bit.TA2 = 1; // Clear TA1 ECanaRegs.CANTA.all = ECanaShadow.CANTA.all; } // óäàë¸ííûé çàïðîñ äàííûõ c ÝÏÎÑ1 void ReqData1 (Uint32 ID) { struct ECAN_REGS ECanaShadow; ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME10 = 0; ECanaRegs.CANME.all=ECanaShadow.CANME.all; ECanaMboxes.MBOX10.MSGID.bit.IDE = 0; ECanaMboxes.MBOX10.MSGID.bit.AAM = 0; ECanaMboxes.MBOX10.MSGID.bit.AME = 0; ECanaMboxes.MBOX10.MSGCTRL.bit.DLC = 2; ECanaMboxes.MBOX10.MSGCTRL.bit.RTR = 1; ECanaMboxes.MBOX10.MSGID.bit.STDMSGID = ID; ECanaShadow.CANMD.all=ECanaRegs.CANMD.all; ECanaShadow.CANMD.bit.MD10 = 1; ECanaRegs.CANMD.all=ECanaShadow.CANMD.all; ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME10 = 1; ECanaRegs.CANME.all = ECanaShadow.CANME.all |= 0x400; ECanaShadow.CANTRS.all=ECanaRegs.CANTRS.all; ECanaShadow.CANTRS.bit.TRS10 = 1; ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all; do { ECanaShadow.CANRMP.bit.RMP10 = ECanaRegs.CANRMP.bit.RMP10; } while (ECanaRegs.CANRMP.bit.RMP10 == 0); ECanaShadow.CANRMP.bit.RMP10 = ECanaRegs.CANRMP.bit.RMP10; ECanaShadow.CANRMP.bit.RMP10 = 1; //÷èñòèì RMP10 ECanaRegs.CANRMP.bit.RMP10 = ECanaShadow.CANRMP.bit.RMP10; } // óäàë¸ííûé çàïðîñ äàííûõ c ÝÏÎÑ2 void ReqData2 (Uint32 ID) { struct ECAN_REGS ECanaShadow; ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME11 = 0; ECanaRegs.CANME.all=ECanaShadow.CANME.all; ECanaMboxes.MBOX11.MSGID.bit.IDE = 0; ECanaMboxes.MBOX11.MSGID.bit.AAM = 0; ECanaMboxes.MBOX11.MSGID.bit.AME = 0; ECanaMboxes.MBOX11.MSGCTRL.bit.DLC = 2; ECanaMboxes.MBOX11.MSGCTRL.bit.RTR = 1; ECanaMboxes.MBOX11.MSGID.bit.STDMSGID = ID; ECanaShadow.CANMD.all=ECanaRegs.CANMD.all; ECanaShadow.CANMD.bit.MD11 = 1; ECanaRegs.CANMD.all=ECanaShadow.CANMD.all; ECanaShadow.CANME.all=ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME11 = 1; ECanaRegs.CANME.all = ECanaShadow.CANME.all |= 0x800; ECanaShadow.CANTRS.all=ECanaRegs.CANTRS.all; ECanaShadow.CANTRS.bit.TRS11 = 1; ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all; do { ECanaShadow.CANRMP.bit.RMP11 = ECanaRegs.CANRMP.bit.RMP11; } while (ECanaRegs.CANRMP.bit.RMP11 == 0); ECanaShadow.CANRMP.bit.RMP11 = ECanaRegs.CANRMP.bit.RMP11; ECanaShadow.CANRMP.bit.RMP11 = 1; //÷èñòèì RMP11 ECanaRegs.CANRMP.bit.RMP11 = ECanaShadow.CANRMP.bit.RMP11; }