You probably have no connected another CAN device to the CAN bus and the
CAN device tries to deliver a message to an another CAN node. When the
CAN bus is configured correctly, you should see only one frame to be
transmitted on the oscilloscope.
S pozdravem,
Marek Vinkler
m...@atlas.cz
s...@hotmail.com wrote: > Hi to everybody,
>
> I'm a young electronical engeneer and i'm using for the first time
an EVM with 56f83232. I try to configure the flexcan module following the
instrustion on the chapter 7 of the 56f8300 peripheral user manual and i also
have an example bean to help me in the initialization.
> My CAN1_Init() function is :
>
> void CAN1_Init()
> {
> setRegBit(FCMCR, SOFT_RST); /* Soft-reset of the FlexCAN
> while(!getRegBit(FCMCR, FREEZ_ACK)){} /* Wait for entering the debug
>
> setRegBit(FCMAXMB, MAXMB0);
> setRegBit(FCMAXMB, MAXMB1);
> clrRegBit(FCMAXMB, MAXMB2);
> clrRegBit(FCMAXMB, MAXMB3);
>
> setReg16(FCCTL0, 2); /* Set the Control 0 register */
>
>
> // Initialization of all message buffers
> setReg(FCMB0_Control, 64);
> setReg(FCMB0_ID_HIGH, 0);
> setReg(FCMB0_ID_LOW,0);
> setReg(FCMB1_Control, 64);
> setReg(FCMB1_ID_HIGH, 0);
> setReg(FCMB1_ID_LOW,0);
>
> setReg(FCMB2_Control, 0);
> setReg(FCMB2_ID_HIGH, 0);
>
>
>
> // FCRXGMASK_L:
> setReg16(FCRXGMASK_L, 0);
>
> // FCRXGMASK_H:
> setReg16(FCRXGMASK_H, 57352);
>
> // FCRX14MASK_L:
> setReg16(FCRX14MASK_L, 65534);
>
> // FCRX14MASK_H:
> setReg16(FCRX14MASK_H, 65519);
>
> // FCRX15MASK_L:
> setReg16(FCRX15MASK_L, 65534);
>
> // FCRX15MASK_H:
> setReg16(FCRX15MASK_H, 65519);
> setReg16(FCCTL1, 2304);
> clrRegBits(FCMCR,FCMCR_HALT_MASK | FCMCR_FRZ1_MASK);
> getReg(FCIFLAG1); /* Dumy read of the MB interrupt
> setReg(FCIFLAG1,0xFFFF);
>
> // FCIMASK1:
> setReg16(FCIMASK1, 4);
>
>
> setRegBits(FCSTATUS,7); /* Reset interrupt flags */
> setRegBits(FCCTL0,(FCCTL0_BUSOFF_MASK_MASK)); /* Enable interrupts */
>
> }
>
> To test the transmission i put on MB2 registers the data and i give the tx
code on FCMB control.
>
> setReg(FCMB2_Control, 0x0080);
>
> setReg(FCMB2_ID_HIGH, 0);
> setReg(FCMB2_DATA0, 0x0000);
> setReg(FCMB2_DATA1, 0xFFFF);
> setReg(FCMB2_DATA2, 0x0000);
> setReg(FCMB2_DATA3, 0xFFFF);
> setReg(FCMB2_Control, 0x00C8);
>
> I check with the oscilloscope and i see the transmission but the device
> continue the transmission continuously ,and i'm not able to see the
interrupt of succesfull transmission.
> There is someone who can give me a hand solving this problem or giving me
some suggestion?
>
> Cheers
> SIMONE BENATTI
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
Reply by Charlie W●May 11, 20062006-05-11
Try this code which someone posted before
//CAN initialization
void init()
{
unsigned int timer;
// CAN transimssion
void can_tx()
{ unsigned int n,status;
FCMB0_Control |= 0x0080; //MB0 is inactive
// Configure MB0 for TX
FCMB0_ID_HIGH = 0xC7FE; // MB0 = TX, Ext. ID
FCMB0_ID_LOW = 0x003C; // CAN ID =0x18FF001E,
Data Frame
FCMB0_ID_HIGH |= 0x0018; //IDE = 1 & SRR = 1;
FCMB0_ID_LOW &=~ 0x0001; //RTR = 0;
// Copy Tx data bytes to the message buffer
FCMB0_DATA0 = CANTxMsg[0].i;
FCMB0_DATA1 = CANTxMsg[1].i;
FCMB0_DATA2 = CANTxMsg[2].i;
FCMB0_DATA3 = CANTxMsg[3].i;
FCMB0_Control |= 0x00C8; //Length of the data
= 8
status = FCIFLAG1;
n=0;
while((status & 0x0001)!=1) // polling
{
if(n++>0x6000)
break;
status = FCIFLAG1;
}
}
Charlie
--- s...@hotmail.com wrote:
> Hi to everybody,
>
> I'm a young electronical engeneer and i'm using for
> the first time an EVM with 56f83232. I try to
> configure the flexcan module following the
> instrustion on the chapter 7 of the 56f8300
> peripheral user manual and i also have an example
> bean to help me in the initialization.
> My CAN1_Init() function is :
>
> void CAN1_Init()
> {
> setRegBit(FCMCR, SOFT_RST); /* Soft-reset
> of the FlexCAN
> while(!getRegBit(FCMCR, FREEZ_ACK)){} /* Wait for
> entering the debug
>
> setRegBit(FCMAXMB, MAXMB0);
> setRegBit(FCMAXMB, MAXMB1);
> clrRegBit(FCMAXMB, MAXMB2);
> clrRegBit(FCMAXMB, MAXMB3);
>
> setReg16(FCCTL0, 2); /* Set the
> Control 0 register */
>
>
> // Initialization of all message buffers
> setReg(FCMB0_Control, 64);
> setReg(FCMB0_ID_HIGH, 0);
> setReg(FCMB0_ID_LOW,0);
> setReg(FCMB1_Control, 64);
> setReg(FCMB1_ID_HIGH, 0);
> setReg(FCMB1_ID_LOW,0);
>
> setReg(FCMB2_Control, 0);
> setReg(FCMB2_ID_HIGH, 0);
>
>
>
> // FCRXGMASK_L:
> setReg16(FCRXGMASK_L, 0);
>
> // FCRXGMASK_H:
> setReg16(FCRXGMASK_H, 57352);
>
> // FCRX14MASK_L:
> setReg16(FCRX14MASK_L, 65534);
>
> // FCRX14MASK_H:
> setReg16(FCRX14MASK_H, 65519);
>
> // FCRX15MASK_L:
> setReg16(FCRX15MASK_L, 65534);
>
> // FCRX15MASK_H:
> setReg16(FCRX15MASK_H, 65519);
> setReg16(FCCTL1, 2304);
> clrRegBits(FCMCR,FCMCR_HALT_MASK |
> FCMCR_FRZ1_MASK);
> getReg(FCIFLAG1); /* Dumy read of
> the MB interrupt
> setReg(FCIFLAG1,0xFFFF);
>
> // FCIMASK1:
> setReg16(FCIMASK1, 4);
>
>
> setRegBits(FCSTATUS,7); /* Reset interrupt flags
> */
> setRegBits(FCCTL0,(FCCTL0_BUSOFF_MASK_MASK)); /*
> Enable interrupts */
>
> }
>
> To test the transmission i put on MB2 registers the
> data and i give the tx code on FCMB control.
>
> setReg(FCMB2_Control, 0x0080);
>
> setReg(FCMB2_ID_HIGH, 0);
> setReg(FCMB2_DATA0, 0x0000);
> setReg(FCMB2_DATA1, 0xFFFF);
> setReg(FCMB2_DATA2, 0x0000);
> setReg(FCMB2_DATA3, 0xFFFF);
> setReg(FCMB2_Control, 0x00C8);
>
>
> I check with the oscilloscope and i see the
> transmission but the device
> continue the transmission continuously ,and i'm not
> able to see the interrupt of succesfull
> transmission.
> There is someone who can give me a hand solving
> this problem or giving me some suggestion?
>
> Cheers
> SIMONE BENATTI __________________________________________________
Reply by simo...@hotmail.com●May 10, 20062006-05-10
Hi to everybody,
I'm a young electronical engeneer and i'm using for the first time an
EVM with 56f83232. I try to configure the flexcan module following the
instrustion on the chapter 7 of the 56f8300 peripheral user manual and i also
have an example bean to help me in the initialization.
My CAN1_Init() function is :
void CAN1_Init()
{
setRegBit(FCMCR, SOFT_RST); /* Soft-reset of the FlexCAN
while(!getRegBit(FCMCR, FREEZ_ACK)){} /* Wait for entering the debug
I check with the oscilloscope and i see the transmission but the device
continue the transmission continuously ,and i'm not able to see the
interrupt of succesfull transmission.
There is someone who can give me a hand solving this problem or giving me some
suggestion?