这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » LPC,CAN 请教使用LPC CAN 滤波器的问题

共2条 1/1 1 跳转至

LPC,CAN 请教使用LPC CAN 滤波器的问题

院士
2006-09-17 18:14:16     打赏
LPC,CAN 请教使用LPC CAN 滤波器的问题



关键词: 请教     使用     滤波器     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 实验条件:
硬件:使用PLC2119 CAN1
软件:采用ZLG CAN  RS322TOCAN 的例子
**描        述: 实现简单的RS232 TO CAN,CAN T0 RS232的数据转换。通过RS232将一帧固定格式固定长度的数据发给
**                ARM,下位机将数据发往指定的CAN通道,CAN通过自接收将接收到的数据发往RS232.
**                该系统中下位机的UART0\CAN全部工作在查询模式下.
**                RS232发送的数据格式必须为HEX格式,长度必须为17个字节
方式:采用自收自发方式、11位ID 发送时让ID在0---255之间变化
现象:在不加入验收滤波方式时 发收正常!加入验收滤波后:如只接收ID为0X01、0X61
     的帧信息时,接收不到数据!
代码如下:
struct    KK
    {
        UINT32    CANSFFID1     :11;    
        UINT32    RSV_BIT1        :1;    
        UINT32    EN_BIT1         :1;    
        UINT32    Num_BIT1     :3;    
        UINT32    CANSFFID2     :11;
        UINT32    RSV_BIT2        :1;    
        UINT32    EN_BIT2         :1;    
        UINT32    Num_BIT2     :3;    
    }lookup_sff_sa={0x63,0,0,1,0x01,0,0,1};

CANNum=0;

    HwEnCAN(CANNum);                                                                
    SoftRstCAN(CANNum);                                                                
    CANEWL(CANNum).Bits.EWL_BIT = USE_EWL_CAN[CANNum];                                        
    //初始化波特率
    CANBTR(CANNum).Word = USE_BTR_CAN[CANNum];                                            
    //初始化中断为非向量中断
    VICDefVectAddr =(UINT32)CANIntPrg;
    VICIntEnable |=(1<<19)|(1<<(20+ CANNum))|(1<<(26+ CANNum));
    CANIER(CANNum).Word= USE_INT_CAN[CANNum];                                                
                         //配置验收滤波器(旁路状态)
    
    CANAFMR.Bits.AccBP_BIT =1;
    CANSFF_TAB(0).Bits.CANSFFID1=lookup_sff_sa.CANSFFID1;
    CANSFF_TAB(0).Bits.RSV_BIT1=lookup_sff_sa.RSV_BIT1;
    CANSFF_TAB(0).Bits.EN_BIT1  =lookup_sff_sa.EN_BIT1;    
    CANSFF_TAB(0).Bits.Num_BIT1=lookup_sff_sa.Num_BIT1;
    CANSFF_TAB(0).Bits.CANSFFID2=lookup_sff_sa.CANSFFID2;
    CANSFF_TAB(0).Bits.RSV_BIT2=lookup_sff_sa.RSV_BIT2;
    CANSFF_TAB(0).Bits.EN_BIT2 =lookup_sff_sa.EN_BIT2;
    CANSFF_TAB(0).Bits.Num_BIT2=lookup_sff_sa.Num_BIT2;
     CANAFMR.Bits.AccBP_BIT=0;
     CANAFMR.Bits.AccOff_BIT=0;
    //初始化模式
    CANMOD(CANNum).Bits.TPM_BIT = USE_TPM_CAN[CANNum];                                        
    CANMOD(CANNum).Bits. LOM_BIT = USE_MOD_CAN[CANNum];
    //初始化接收环形缓冲区
    CANRcvBufApp.FullFlag1=CANRcvBufApp.FullFlag2=CANRcvBufApp.FullFlag3=CANRcvBufApp.FullFlag4=0;
    CANRcvBufApp.ReadPoint1=CANRcvBufApp.ReadPoint2=CANRcvBufApp.ReadPoint3=CANRcvBufApp.ReadPoint4=0;
    CANRcvBufApp.WritePoint1=CANRcvBufApp.WritePoint2=CANRcvBufApp.WritePoint3=CANRcvBufApp.WritePoint4=0;
    //启动CAN
    SoftEnCAN(CANNum);
1: 找到了 ID 位数没有匹配对 2: 验收过虑寄存器没有正确初始化,详细查阅菲利普器件文档 3: 请问ID为数怎么匹配?我遇到和你一样的问题,现在也不知道错在哪里
请问你说的ID为数没有匹配对是什么意思?
以该怎么匹配
我看了你的程序
我和你是一样的设置
十分感谢

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]