AUTOMOTIVE
AUTOMOTIVE FOR CAN
CAN PROTOCAL CODE FOR LPC2129 ARM7 BOARD
#include"header.h"
unsigned int MSG[4];
unsigned char can_test()
{
unsigned int a,b,key;
test:
lcdstring("turn on ignitation");
delay(1000);
lcdclear();
key=IOPIN1;
key=IOPIN1 &(1<<25);
if(key)
{
lcdclear();
lcdstring("key pass");
delay(1000);
unsigned int MSG[4];
unsigned char can_test()
{
unsigned int a,b,key;
test:
lcdstring("turn on ignitation");
delay(1000);
lcdclear();
key=IOPIN1;
key=IOPIN1 &(1<<25);
if(key)
{
lcdclear();
lcdstring("key pass");
delay(1000);
TX_from_CAN2(2);
while(!(RX_IN_CAN1()==2));
lcdclear();
lcdstring("ignitation start");
delay(1000);
lcdclear();
lcdstring("checking status");
delay(2000);
a=IOPIN0;
a=(0x0000010 & a);
b=IOPIN0;
b=(0x0000040 & b);
if(a==0&&b==0)
{
TX_from_CAN2(2);
while(!(RX_IN_CAN1()==2));
lcdclear();
lcdstring("braktest pass");
delay(2000);
TX_from_CAN2(2);
while(!(RX_IN_CAN1()==2));
lcdclear();
lcdstring("seat pass");
delay(2000);
return 1;
}
else
{
lcdclear();
delay(1000);
lcdstring("test fail");
delay(2000);
return 0;
}
}
while(!(RX_IN_CAN1()==2));
lcdclear();
lcdstring("ignitation start");
delay(1000);
lcdclear();
lcdstring("checking status");
delay(2000);
a=IOPIN0;
a=(0x0000010 & a);
b=IOPIN0;
b=(0x0000040 & b);
if(a==0&&b==0)
{
TX_from_CAN2(2);
while(!(RX_IN_CAN1()==2));
lcdclear();
lcdstring("braktest pass");
delay(2000);
TX_from_CAN2(2);
while(!(RX_IN_CAN1()==2));
lcdclear();
lcdstring("seat pass");
delay(2000);
return 1;
}
else
{
lcdclear();
delay(1000);
lcdstring("test fail");
delay(2000);
return 0;
}
}
goto test;
}
void canint()
{
VPBDIV =0X02;//divide frequncy by 2 30frequney
PINSEL1 |=(1<<22)|(1<<24)|(1<<26)|(1<<28)|(1<<18)|(1<<16)|(1<<14); //18,16.14 can tx & rx
C1MOD= 1<<0; // can data sheet reset bit because we writting something ex :electrical city repair
C1BTR=1<<20|1<<19|1<<18|29; //bus timing register plck/btr 1100 19-16
C1MOD=0;
C2MOD=1<<0;
C2BTR=1<<20|1<<19|1<<18|29;
C2MOD=0;
}
void TX_from_CAN2(unsigned int ch)
{
while((C2SR&0X00000004)!=0X00000004); //sr status register check 2 bit 1 2 4
C2TFI1=(1<<18); //transsimission frame information like dlc,rtr ,ide
C2TDA1=ch; // it will contaoined 32 bit
C2TID1=0x45; // 11 bit are 29 bit
C2CMR=(1<<0)|(1<<5); //0 bit for fillter 5 tx buffer
while((C2GSR&0x00000008)!=0x00000008);//goble data register read value s r no
}
unsigned int RX_IN_CAN1(void)
{
while((C1SR&0x01));
MSG[0]=C1RID;
MSG[1]=C1RDA;
MSG[2]=C1RDB;
MSG[3]=C1RFS;
C1CMR=(1<<2);
return MSG[1];
}
void canint()
{
VPBDIV =0X02;//divide frequncy by 2 30frequney
PINSEL1 |=(1<<22)|(1<<24)|(1<<26)|(1<<28)|(1<<18)|(1<<16)|(1<<14); //18,16.14 can tx & rx
C1MOD= 1<<0; // can data sheet reset bit because we writting something ex :electrical city repair
C1BTR=1<<20|1<<19|1<<18|29; //bus timing register plck/btr 1100 19-16
C1MOD=0;
C2MOD=1<<0;
C2BTR=1<<20|1<<19|1<<18|29;
C2MOD=0;
}
void TX_from_CAN2(unsigned int ch)
{
while((C2SR&0X00000004)!=0X00000004); //sr status register check 2 bit 1 2 4
C2TFI1=(1<<18); //transsimission frame information like dlc,rtr ,ide
C2TDA1=ch; // it will contaoined 32 bit
C2TID1=0x45; // 11 bit are 29 bit
C2CMR=(1<<0)|(1<<5); //0 bit for fillter 5 tx buffer
while((C2GSR&0x00000008)!=0x00000008);//goble data register read value s r no
}
unsigned int RX_IN_CAN1(void)
{
while((C1SR&0x01));
MSG[0]=C1RID;
MSG[1]=C1RDA;
MSG[2]=C1RDB;
MSG[3]=C1RFS;
C1CMR=(1<<2);
return MSG[1];
}
CODE FOR LCD FUNCTION CODE
#include "header.h"
void delay(int count)
{
int i,j;
for(i=0;i<count;i++)
{
for(j=0;j<=3000;j++)
{
}
}
}
{
int i,j;
for(i=0;i<count;i++)
{
for(j=0;j<=3000;j++)
{
}
}
}
void lcdcmd(int cmd)
{
IOCLR0 = (0XFF<<15);
IOSET0 = (cmd<<15);
IOCLR0 = RS;
IOCLR0 = RW;
IOSET0 = EN;
delay(100);
IOCLR0= EN;
delay(100);
}
void lcddata(char data)
{
IOCLR0 = (0XFF<<15);
IOSET0 = (data<<15);
IOSET0 = RS;
IOCLR0 = RW;
IOSET0 = EN;
delay(100);
IOCLR0= EN;
delay(100);
}
void lcdint()
{
IODIR0 |= RS|RW|EN|DATA_PINS;
lcdcmd(0x38);// cmd for enable lcd
lcdcmd(0x0E);// cmd for cursur blink
lcdcmd(0x01);// cnd for clear
lcdcmd(0x80);// cmd for print first line
}
void lcdclear()
{
lcdcmd(0x01);
{
IOCLR0 = (0XFF<<15);
IOSET0 = (data<<15);
IOSET0 = RS;
IOCLR0 = RW;
IOSET0 = EN;
delay(100);
IOCLR0= EN;
delay(100);
}
void lcdint()
{
IODIR0 |= RS|RW|EN|DATA_PINS;
lcdcmd(0x38);// cmd for enable lcd
lcdcmd(0x0E);// cmd for cursur blink
lcdcmd(0x01);// cnd for clear
lcdcmd(0x80);// cmd for print first line
}
void lcdclear()
{
lcdcmd(0x01);
}
void lcdstring(char *str)
{
while(*str)
{
lcddata(*str);
str++;
}
}
void lcdstring(char *str)
{
while(*str)
{
lcddata(*str);
str++;
}
}
CODE FOR MAIN FUNCTION
#include "header.h"
int main()
{
unsigned char res;
lcdint();
canint();
lcdclear();
lcdstring("can test code");
delay(1000);
TEST:
res=can_test();
if(res!=1)
int main()
{
unsigned char res;
lcdint();
canint();
lcdclear();
lcdstring("can test code");
delay(1000);
TEST:
res=can_test();
if(res!=1)
{
goto TEST;
delay(2000);
}
while(1)
{
lcdclear();
lcdstring("vehile on");
delay(100);
}
}
goto TEST;
delay(2000);
}
while(1)
{
lcdclear();
lcdstring("vehile on");
delay(100);
}
}
Comments
Post a Comment