打印

求助:初始化PIC18F2480_CAN不能进入正常模式

[复制链接]
3489|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
longzixin168|  楼主 | 2011-6-22 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初始化程序如下:

void ECAN_init(void)
{
TRISB2=0;
TRISB3=1;
// Put module into Configuration mode.
ECANSetOperationMode(ECAN_MODE_CONFIGURATION);
//boudrate=250K Fosc=8M Tbit=4us BRP=2 ==> TQ=[2*BRP]/Fosc=0.5us
//SJW=1 Nominal bitrate=8TQ (Sync_seg=1TQ propseg=1TQ phseg1=3TQ phseg2=3TQ)
ECANSetBaudRate(2,1,1,3,3,1,0,0,1);    //(BRP, SJW, Propseg,  Phseg1,  Phseg2, SEG2PHTS,SAM,WAKDIS,WAKFIL)
//Initialize ECAN I/O(Set CANTX2, TXDRIVE and CAN Capture modes.)
CANIOControl(0x20);      // CANTx VDD ,disable capture
//Set ECAN functional mode.
ECANCON=0x10;       //mode0  legacy mode ,RB0
// Set RXB0 and RXB1 buffer modes.
RXB0CON=(ECAN_RECEIVE_ALL_VALID <<5)|(ECAN_DBL_BUFFER_MODE_DIS<<2);
RXB1CON=(ECAN_RECEIVE_ALL_VALID <<5);
RXB0D0=0;  RXB1D0=0;
RXB0D1=0x6A; RXB1D1=0;
RXB0D2=0;  RXB1D2=0;
RXB0D3=0;  RXB1D3=0;
RXB0D4=0;  RXB1D4=0;
RXB0D5=0;  RXB1D5=0;  
RXB0D6=0;  RXB1D6=0;
RXB0D7=0;  RXB1D7=0;
//Initialize the Recieve Filter & Mask Registers
CANFilterMask(ECAN_TX_ETD_FRAME);
//set ECAN Operation mode
//ECANSetOperationMode(ECAN_MODE_NORMAL);
ECANSetOperationMode(ECAN_MODE_LOOPBACK);

//Initialize ECAN interrupt
//PIE3: IRXIE WAKIE ERRIE TXB2IE TXB1IE TXB0IE RXB1IE RXB0IE   
PIR3=0x00;    //clear all interrupt
PIE3=0x01;    //enable RXB0 intterput
IPR3=0x01;    //
}

现象: 1)只使用一个MCU,烧录,调试,不能正常初始化,要在CNATX脚上点一下,用什么金属都可(只要触发一下即可),便可进入正常/回环模式。
           2)相关的的PCBA,烧录,调试,无论如何都不能正常初始化,程序停在 ECANSetOperationMode(ECAN_MODE_LOOPBACK);这个位置


/********************ECANSetOperationMode************************************/
void ECANSetOperationMode(uint8 mode)
{
    CANCON &= 0x1F;                         // clear previous mode
    CANCON |= mode;                         // set new mode
    while((ECANGetOperationMode())!= mode ); // Wait till desired mode is set.
}

/********************ECANGetOperationMode************************************/
uint8 ECANGetOperationMode(void)
{
return(CANSTAT&0xE0);
}
沙发
longzixin168|  楼主 | 2011-6-22 21:51 | 只看该作者
哪位大侠有相关的经验,指点一下。如果仅用一个MCU,进回环模式后,使用扩展ID试过收发都没有问题,求解!

使用特权

评论回复
板凳
longzixin168|  楼主 | 2011-6-22 21:53 | 只看该作者
停在 ECANSetOperationMode(ECAN_MODE_LOOPBACK);这个位置是由于 CANCON=0x40 /0x00 而CANSTAT=0x80;

使用特权

评论回复
地板
headwolf_83| | 2011-6-22 22:07 | 只看该作者
LATB2,LATB3都初始化成1看看。

使用特权

评论回复
5
longzixin168|  楼主 | 2011-6-22 22:11 | 只看该作者
TKS!ok,明天试试看吧,另外对于
“ 2)相关的的PCBA,烧录,调试,无论如何都不能正常初始化,程序停在 ECANSetOperationMode(ECAN_MODE_LOOPBACK);这个位置”

我是有用两个节点的,一个作为CAN—RS232—INTERFACE,一个作为一个SLAVE OR MASTER

使用特权

评论回复
6
longzixin168|  楼主 | 2011-8-30 14:29 | 只看该作者
很久没有上来了,硬件问题,搞定

使用特权

评论回复
7
yewuyi| | 2011-8-31 09:55 | 只看该作者
做CAN的人不多,自己搞定最好

使用特权

评论回复
8
longzixin168|  楼主 | 2011-9-6 09:22 | 只看该作者
CANCON &= 0x1F;                         // clear previous mode
这个不可用,大家小走弯路,呵呵。

使用特权

评论回复
9
drd95| | 2015-11-12 13:08 | 只看该作者
longzixin168 发表于 2011-8-30 14:29
很久没有上来了,硬件问题,搞定

请问您最后找到的硬件是哪个地方有问题呢?我这回环模式跟你遇到的情况差不多,我把TX和RX都配置成输出好像就能正常工作了。但现在进入正常模式后,一直停在发送请求处,无法发送完成

使用特权

评论回复
10
兰天白云| | 2015-11-12 13:44 | 只看该作者
硬件问题是不是线搞错了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

11

帖子

1

粉丝