Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1147575
  • 博文数量: 139
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1712
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 23:10
个人简介

每天进步一点点。

文章分类

全部博文(139)

文章存档

2015年(3)

2014年(11)

2013年(25)

2011年(1)

2009年(3)

2008年(29)

2007年(45)

2006年(22)

分类: C/C++

2008-01-17 13:59:47

/*    2.00   2005.1.18   Version2.0
 MC68HC908GZ60中CAN调试主文件。
本自发自收的程序是成功的?可以实现发送接收中断,接收的数据完全正确。
 *************************************************************************/
 #include /* for EnableInterrupts macro */
 #include /* include peripheral declarations */
 
 
 #define  SelfTest    CMCR1_LOOPB=1                        //进入自测模式
 #define    EnableTransmitInt        CTCR=0x07            //使能发送中断
 #define    EnableReceiveInt    CRIER_RXFIE=1                //使能接收中断

 void        Can_Init(void);
 void   Transmit_Frame(void);        //发送一帧
 void        ISR_Receive(void);            //接收中断函数
 void        ISR_Transmit(void);
 void        Fill_Frame(byte);
 
 #define      SetExt_Frame(Hit)  Trans_Buf[Hit].ID1|=0x18
 #define      SetData_Frame(Hit)  Trans_Buf[Hit].ID3&=0xfe
 #define      SetStd_Frame(Hit)  Trans_Buf[Hit].ID1&=0xe7
 #define      SetRem_Frame(Hit)  Trans_Buf[Hit].ID3|=0x01
 

 
 typedef    struct        _Tr_Rv_BUF_{        //Transmit and Receive buffer,16 bytes in all
    byte    ID0;                //ID21---ID28
    byte    ID1;                //ID20,19,18,SRR,IDE,ID17,16,15
    byte    ID2;                //ID7--ID14
    byte    ID3;                //ID0-ID6,SRR
    byte    Data_Segment[8];        //Data Segment, 8 bytes
    byte    Data_Len;            //Data Length,  4 bits
    //#ifdef            Can_Trans
    byte            Tran_Buf_Pri;        //Transmit Frame priority,only for Transmit Buffer, 1 byte
    //#else
    //byte            unimplemented;        //1 byte
    //#endif
    byte            unused[2];            //2 bytes
}CanBufFrame,*p_CanBufFrame;
 
 extern volatile    CanBufFrame        Rec_Buf;
 extern volatile     CanBufFrame     Trans_Buf[3];
 extern volatile    byte            Rcv_Data[8];        //used to save Received Data
 extern volatile     CanBufFrame     *Frame_Buf;
 
void main()
 {
     //CONFIG1=1;
     CONFIG2_MSCANEN=1;                //Enable Can Module,using PTC0/PTC1
     Can_Init();
     EnableTransmitInt;
     EnableReceiveInt;
     EnableInterrupts;
     Transmit_Frame();
 for(;;);   
 }      
 
 void    Can_Init(void)
 {
     CMCR0_SFTRES=1;                        //SoftWare Reset enable 进入初始化状态
     do{
     }while(!(CMCR0_SFTRES));//判断是否设置成功

    CMCR1=0x00;  // loop back configuration and Wake up mode features. 
    SelfTest;//进入自测试模式
   
     CBTR0=0x22;     // bit timing portion
  
    CBTR1=0x38;     //boud rate=5K Hz

    
     CIDAC=0;    //Single 32-bit acceptance filter
 
     CIDAR0=0b00000000;
     CIDAR1=0b00000000;
     CIDAR2=0b00000000;
     CIDAR3=0b00000000;
    
     CIDMR0=CIDMR1=0xff;
     CIDMR2=CIDMR3=0xff;
    //不和标识符接收寄存器的内容比较
     do{CMCR0_SFTRES=0;}
     while(CMCR0_SFTRES);                        //SoftWare Enable Can
 }
 
 void interrupt 20    ISR_Receive(void)      //Receive Frame successfully!
 {
     byte Rcv_Data[8],i;
     if(CRFLG_RXF)
     for(i=0;i<=8;i++){
      Rcv_Data[i]=Rec_Buf.Data_Segment[i];   
     }
     CRFLG_RXF=1;       
 }
 
  void interrupt 21 ISR_Transmit(void)
  {
      for(;;);                //发送成功!
  }
 
 void    Fill_Frame(byte Hit){
    byte i;
     Trans_Buf[Hit].ID0=0x80;
     Trans_Buf[Hit].ID1=0x00;
     Trans_Buf[Hit].ID2=0x80;
     Trans_Buf[Hit].ID3=0x00;
     for(i=0;i<8;i++){
          Trans_Buf[Hit].Data_Segment[i]=i;
     }   
     Trans_Buf[Hit].Data_Len=0x08;
     Trans_Buf[Hit].Tran_Buf_Pri=0x01;
     SetExt_Frame(Hit);
     SetData_Frame(Hit);
 }
 
void Transmit_Frame(void)
{
     if(1==CTFLG_TXE0){
         Fill_Frame(0);
         CTFLG_TXE0=0;                //Start Transmitting
     }
     else if(1==CTFLG_TXE1){
         Fill_Frame(1);
         CTFLG_TXE1=0;
     }
     else if(1==CTFLG_TXE2){
         Fill_Frame(2);
         CTFLG_TXE2=0;
     }
 }
阅读(3221) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-05-09 15:35:40

中断向量好象不对啊