You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.0 KiB
C++
171 lines
4.0 KiB
C++
// Some comments about author
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
|
#include "DSP2833x_Examples.h"
|
|
#include "Protocol/CAN.h"
|
|
|
|
|
|
//Functions declarations
|
|
void idle_loop(void);
|
|
interrupt void cpu_timer0_isr(void);
|
|
interrupt void canb_isr(void);
|
|
volatile Uint16 canISRcounter = 0;
|
|
|
|
canSpace::CAN canTest(canSpace::CANB);
|
|
Uint16 msgsSent = 0;
|
|
volatile Uint16 infCounter = 0;
|
|
volatile Uint16 testCounter = 0;
|
|
Uint32 testVar = 0;
|
|
volatile bool startTX = false;
|
|
volatile bool update = false;
|
|
volatile bool sendRemote = false;
|
|
canSpace::CANMessage message;
|
|
canSpace::CANMessage rxMessage;
|
|
|
|
void main()
|
|
{
|
|
ServiceDog();
|
|
DisableDog();
|
|
|
|
InitSysCtrl();
|
|
|
|
DINT;
|
|
|
|
InitPieCtrl();
|
|
|
|
IER = 0x0000;
|
|
IFR = 0x0000;
|
|
|
|
InitPieVectTable();
|
|
|
|
EALLOW;
|
|
PieVectTable.TINT0 = &cpu_timer0_isr;
|
|
PieVectTable.ECAN0INTB = &canb_isr;
|
|
EDIS;
|
|
|
|
// memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);
|
|
|
|
InitCpuTimers();
|
|
ConfigCpuTimer(&CpuTimer0, 150, 100000);
|
|
|
|
IER |= M_INT1; // Enable CPU Interrupt 1
|
|
IER |= M_INT9; // Enable CPU Interrupt 9
|
|
|
|
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
|
|
PieCtrlRegs.PIEIER9.bit.INTx7 = 1; // from 5 to 8
|
|
|
|
canTest.initGpio();
|
|
canTest.config(100);
|
|
canTest.configTxMBox(1, canSpace::MsgID(0xAAA), canSpace::MsgCtrlReg(0x8));
|
|
canTest.configRxMBox(25, canSpace::MsgID(0xAAA), canSpace::MsgCtrlReg(0x8));
|
|
// Remote frame
|
|
canTest.configRxMBox(2, canSpace::MsgID(0x111), canSpace::MsgCtrlReg(0x13));
|
|
// canTest.configTxMBox(30, canSpace::MsgID(0x111, false, true), canSpace::MsgCtrlReg(0x3)); // for remote answer
|
|
|
|
canTest.configSystemIsr(canSpace::I0EN_ENABLE | canSpace::EPIM_ENABLE | canSpace::WLIM_ENABLE | canSpace::AAIM_ENABLE);
|
|
|
|
//
|
|
// Enable global Interrupts and higher priority real-time debug events:
|
|
//
|
|
EINT; // Enable Global interrupt INTM
|
|
ERTM; // Enable Global realtime interrupt DBGM
|
|
|
|
|
|
//
|
|
// Start CPU Timer
|
|
//
|
|
// core.cpu_timers.start();
|
|
//
|
|
|
|
CpuTimer0.RegsAddr->TCR.bit.TSS = 0;
|
|
|
|
message.msgctrl.bit.DLC = 8;
|
|
message.mdl.byte.BYTE0 = 0x11;
|
|
message.mdl.byte.BYTE1 = 0x22;
|
|
message.mdl.byte.BYTE2 = 0x33;
|
|
message.mdl.byte.BYTE3 = 0x44;
|
|
message.mdh.byte.BYTE4 = 0xAA;
|
|
message.mdh.byte.BYTE5 = 0xBB;
|
|
message.mdh.byte.BYTE6 = 0xCC;
|
|
message.mdh.byte.BYTE7 = 0xDD;
|
|
// canTest.updateTXMessage(30, message); // for remote answer
|
|
|
|
idle_loop();
|
|
//
|
|
}//end main()
|
|
//
|
|
//
|
|
|
|
void idle_loop()
|
|
{
|
|
while (true)
|
|
{
|
|
infCounter++;
|
|
if (startTX){
|
|
startTX = false;
|
|
canTest.transmitMsg(1, message);
|
|
msgsSent++;
|
|
}
|
|
if(canTest.isNewMessage()){
|
|
testCounter++;
|
|
testVar = canTest.receiveMsg(25, rxMessage);
|
|
// testVar = canTest.receiveMsg(2, rxMessage);
|
|
}
|
|
|
|
testVar = canTest.receiveMsg(2, rxMessage);
|
|
|
|
if (update){
|
|
update = false;
|
|
message.mdh.all = 0xBBEEBBEE;
|
|
canTest.updateTXMessage(1, message);
|
|
}
|
|
|
|
if (sendRemote){
|
|
sendRemote = false;
|
|
canTest.sendRemoteRequest(2);
|
|
}
|
|
|
|
}//end while
|
|
//
|
|
}//end idle_loop()
|
|
|
|
|
|
interrupt void cpu_timer0_isr(void)
|
|
{
|
|
canTest.sendRemoteRequest(2);
|
|
|
|
if(canTest.isNewMessage()){
|
|
testCounter++;
|
|
testVar = canTest.receiveMsg(25, rxMessage);
|
|
testVar = canTest.receiveMsg(2, rxMessage);
|
|
}
|
|
|
|
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
|
|
}//end
|
|
|
|
|
|
interrupt void canb_isr(void){
|
|
canISRcounter++;
|
|
|
|
CANGIF0_REG CANGIF0_SHADOW;
|
|
volatile Uint32 resetBit;
|
|
|
|
CANGIF0_SHADOW.all = ECanbRegs.CANGIF0.all;
|
|
|
|
if (CANGIF0_SHADOW.bit.WLIF0){
|
|
resetBit = 256;
|
|
ECanbRegs.CANGIF0.all = resetBit;
|
|
}
|
|
|
|
if (CANGIF0_SHADOW.bit.EPIF0){
|
|
resetBit = 528;
|
|
ECanbRegs.CANGIF0.all = resetBit;
|
|
}
|
|
|
|
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
|
|
}
|