lpcware

ARM: CAN peripheral Acceptance Flter in ON Mode

Discussion created by lpcware Employee on Jun 15, 2016
Content originally posted in LPCWare by chaitanya9 on Sat Jun 13 01:24:23 MST 2015
Hi,

I am working on CAN peripheral in LPC2368 controller.I am testing the CAN peripheral in Acceptance filter ON mode with 11-bit Standard Explicit identifier.

Tested Following conditions

GRP_STD_ID = 0x300

EXP_STD_ID = 0x400;

EXP_EXT_ID = 0x100000

CAN_MEM_BASE = 0xE0038000;

address =0;

CAN_MEM_BASE = 0xE0038000;

1. For Lower boundary

address =0;

CAN_SFF_SA = address;

i =1;

ID_low = (i << 29) | ((EXP_STD_ID) << 16);

ID_high = ((i+1) << 13) | ((EXP_STD_ID) << 0);

*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low | ID_high;

address += 4;

2. For Upper boundary

address =0;

CAN_SFF_SA = address;

i =0;

ID_low = (i << 29) | ((EXP_STD_ID) << 16);

ID_high = ((i+1) << 13) | ((EXP_STD_ID) << 0);

*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low | ID_high;

address += 4;

Above Two conditions are working fine,but when i try to include both lower and upper boundaries in CAN channel 2,it's not working

address =0;

CAN_SFF_SA = address;

i =1;

ID_low = (i << 29) | ((EXP_STD_ID) << 16);

ID_high = (i << 13) | ((EXP_STD_ID) << 0);

*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low | ID_high;

address += 4;

CAN_SFF_GRP_SA = address;

ID_low = (i << 29) | (GRP_STD_ID << 16);

ID_high = ((i+1) << 13) | (GRP_STD_ID << 0);

*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low | ID_high;

address += 4;

CAN_EFF_SA = address;

ID_low = (i << 29) | (EXP_EXT_ID << 0);

*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low;

address += 4;

CAN_EOT = address;

While writing the Look uptable RAM memory Acceptance filter is in OFF mode



Outcomes