首页>>论坛 >>技术社区 >>飞思卡尔社区论坛 >>16位MCU
|
我要发帖  | 我要投票  | 我要回复  | 收藏
1

can模块的问题

版主: 南京老练   
can模块的问题
 

我的can模块在loopb模式下能实现,正常模式的时候端口却没数据出来,端口的初始化:
void MC9S12_Port_Init(void)
{
DDRP_DDRP4 = 1;
DDRP_DDRP5 = 1;
// 连键盘
DDRP_DDRP0 = 0;//1B1--PB1
DDRP_DDRP1 = 0;//1B2--PB2
DDRA_BIT5 = 0;//1B3 --PB3
DDRA_BIT4 = 0;//1B4 --PB4
// 连LED
DDRA |= 0x0f;//
DDRB = 0xff;

DDRT = 0xff;

PTT = 0xff;
PORTB =0xff;
// 连CBT3244
PTP = 0xff; //OE1,OE2
PORTA = 0xf0;
// 0E1.0E2
PTP_PTP4 = 0;
PTP_PTP5 = 0;
// CAN
DDRM_DDRM0 = 0;//RxCAN0
DDRM_DDRM1 = 1;//TxCAN0
// LCD
DDRM_DDRM2 = 0;//MISO0
DDRM_DDRM3 = 1;//SS0
DDRM_DDRM4 = 1;//MOSI0
DDRM_DDRM5 = 1;//SCK0

//DDRM = 0xff;
PTM = 0xff;
WOMM=0x00; //管脚复用模式选择
MODRR=0x00;//CAN0端口选择 PM0,PM1
PERM=0x00;
}
 
 
 
 
 
can模块的初始化:
 void MSCAN_init()
 
  {
  CAN0CTL0_INITRQ=1;      //进入初始化模式//
  CAN4CTL0_INITRQ=1;
  while((CAN0CTL1_INITAK==0)&&(CAN4CTL1_INITAK==0));  //等待应答信号
  CAN0IDAC=0x20;    //验收控制寄存器//
  CAN4IDAC=0x20;
  CAN0IDMR0=0xFF;    //设置屏蔽寄存器,忽略屏蔽//
  CAN4IDMR0=0xFF;
  CAN0IDMR1=0xFF;
  CAN4IDMR1=0xFF;
  CAN0IDMR2=0xFF;
  CAN4IDMR2=0xFF;
  CAN0IDMR3=0xFF;
  CAN4IDMR3=0xFF;
  CAN0IDMR4=0xFF;
  CAN4IDMR4=0xFF;
  CAN0IDMR5=0xFF;
  CAN4IDMR5=0xFF;
  CAN0IDMR6=0xFF;
  CAN4IDMR6=0xFF;
  CAN0IDMR7=0xFF;
  CAN4IDMR7=0xFF;
  CAN0BTR0=0x40;
  CAN4BTR0=0x40;
  CAN0BTR1=0x3F;
  CAN4BTR1=0x3F;
  CAN0CTL1=0x80;
  CAN4CTL1=0x80;
  CAN0CTL0_INITRQ=0;
  CAN4CTL0_INITRQ=0;
  while((CAN0CTL1_INITAK==1)&&(CAN4CTL1_INITAK==1));  //等待应答信号//
  CAN0RIER_RXFIE=1;                      //允许CAN0的接收中断//
  //CAN0RIER=0xff;
  }
 
 
 
发送数据程序:
   void CAN_Transmit(void)
{
 mask = CAN0TFLG;    
  CAN0TBSEL= mask;//0x01;       
  mask = CAN0TBSEL;       
  /*CAN0TXIDR0  = 0x00;   
  CAN0TXIDR1  = 0x08;  //扩展桢
  CAN0TXIDR2  = 0x00;
  CAN0TXIDR3  = 0x04; //发送ID=2  */
    CAN0TXDSR0=0x01;   //发送数据//
    uart_putchar(CAN0TXDSR0);
    CAN0TXDSR1=0x02;
    uart_putchar(CAN0TXDSR1);
    CAN0TXDSR2=0x03;
    uart_putchar(CAN0TXDSR2);
    CAN0TXDSR3=0x04;
    uart_putchar(CAN0TXDSR3);
    CAN0TXDSR4=0x05;
    uart_putchar(CAN0TXDSR4);
    CAN0TXDSR5=0x06;
    uart_putchar(CAN0TXDSR5);
    CAN0TXDSR6=0x07;
    uart_putchar(CAN0TXDSR6);
    CAN0TXDSR7=0x08;
    uart_putchar(CAN0TXDSR7);
  CAN0TXDLR  = 0x08;      
  CAN0TXTBPR  = 0x00;      
  CAN0TFLG = mask;// 0x00;
  uart_putchar(mask);
  //return mask;        



请高手指点下 !!!!
关闭

 
相关主题
回复 链接 收藏
 
RE:can模块的问题
 
可能是你的Prescaler没有设置正确,因为在loopback模式下对baudrate没有特别的要求。看一下你的BTR0设置吧。因为不知道你的Osc频率是多少,没有办法帮你算了哦
 
回复 链接 收藏
 
我要发帖  | 我要投票  | 我要回复  | 收藏
1