⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ceshi.c

📁 英飞凌的CAN驱动。英飞凌的CAN非常复杂
💻 C
字号:
 #include<XC886CLM.H>
#include<stdio.h>
#include "can.h"

 void can_read(uword addr)
{
  CAN_ADL=(addr>>2)&0xff;
CAN_ADH=(addr>>10)&0x0f;
 RWEN=0;
 while(BSY==1);
// BSY=0;
}

    //置位
void set_bit(uword addr,uchar bitnum,uchar value)
{
  uchar i=1;
  //can_read(addr);
  CAN_ADL=(addr>>2)&0xff;
  CAN_ADH=(addr>>10)&0x0f;
   if(bitnum<8)  {
   V0=1;
   if(value)
   CAN_DATA0|=(i<<bitnum);
   else
   CAN_DATA0&=~(i<<bitnum);
   }
   else if((bitnum>=8)&&(bitnum<16))
   {
     V1=1;
     if(value)
     CAN_DATA1|=(i<<(bitnum-8));
     else
     CAN_DATA1&=~(i<<(bitnum-8));

     }
      else if(bitnum>=16&&bitnum<24)
      {
      V2=1;
      if(value)
     CAN_DATA2|=(i<<(bitnum-16));
     else
       CAN_DATA2&=~(i<<(bitnum-16));
     }
      else if(bitnum>=24&&bitnum<32)
      {
        V3=1;
      if(value)
     CAN_DATA3=(i<<(bitnum-24));
     else
     CAN_DATA3=~(i<<(bitnum-24));
    
     }

       RWEN=1;
 while(BSY==1);
}
void can_write(uword addr,ulong value)
{
CAN_ADL=(addr>>2)&0xff;
CAN_ADH=(addr>>10)&0x0f;
CAN_DATA0=value&0xff;
//P3_DATA=CAN_DATA0;
CAN_DATA1=(value>>8)&0xff;
CAN_DATA2=(value>>16)&0xff;
CAN_DATA3=(value>>24)&0xff;
CAN_ADCON=0xf1;
while(BSY==1);
//BSY=0;
}


int main()
{
//设置ncr0 (p495)
P3_init();
PORT_PAGE=0;
can_write(0x0200,0x004e);


   //P3_DATA=2;
//write_pancom(0x02,0x00,0x01);
//can_read(0x0200);
//CAN_DATA0=0X55;
   //set_bit(PANCTR,8,0);
   //set_bit(PANCTR,9,0);
//write_pancom(0x02,0x03,0x01);
  //can_read(0X01C4);
    //set_bit(MOCTR0,SETTXEN0,1);
    //set_bit(MOCTR0,SETTXEN1,1);
    set_bit(MOCTR0,SETDIR,1);
    can_read(MOSTAT0);
 //CAN_DATA0=8;
 PORT_PAGE=0;
P3_DATA=CAN_DATA1;
while(1);


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -