打印

LPC2292 的CAN无输出

[复制链接]
1965|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lwz104|  楼主 | 2011-12-23 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
还有各位高手,我初次使用LPC2292,也是初次接触CAN通讯,在使用过程中出现一些问题向各位请教。在初始化后调用CAN数据发送程序,使用示波器测量CAN2的TD2管脚信号,始终为高电平,没有信号输出,芯片程序如下,其中工作环境为芯片时钟输入16MHZ,经过PLL倍频到48MHZ,再经VPB4分频后变为12MHZ,CAN通讯波特率800K。之前在发送数据前读取CAN2SR时钟为0,在发送数据后,也就是CAN2CMR=0x21;指令之后读取CAN2SR也为0。请周工还有各位高手帮我找一下程序里存在的问题,为什么没有信号输出,谢谢了。

#include "config.h"
void yans(uint32  dly)   
{
   uint32  i;   
  
   i = dly;
   while(--i){;}
}

void set_can_accf(void)
{//CAN2的扩展帧验收码
uint32 tmp;
CANAFMR = 0x02;
CANSFF_sa=0;
CANSFF_GRP_sa=0;
CANEFF_sa=0;
tmp=2<<29;//01版芯片
(*(volatile unsigned long *)(can_ram))=0x03032000+tmp;
(*(volatile unsigned long *)(can_ram+4))=0x07032000+tmp;
(*(volatile unsigned long *)(can_ram+8))=0x0a032000+tmp;
(*(volatile unsigned long *)(can_ram+12))=0x1a382000+tmp;
(*(volatile unsigned long *)(can_ram+16))=0x1a388410+tmp;
CANEFF_GRP_sa=20;
CANENDofTable=20;
CANAFMR=0;
}
void can_send(void)
{

     CAN2TFI1=0x80080000;
     CAN2TID1=0x03032000;
     CAN2TDA1=0x55aa55aa;
     CAN2TDB1=0x00ff00ff;
     CAN2CMR=0x21;
}
void chushi(void)//初始化
{
   
   /////////////////////PLL配置
   //时钟输入为16MHZ,经过PLL倍频为48MHZ
   PLLCON=1;//使能但不连接
   PLLCFG=0x22;//设定M值为2 P值为1
   PLLFEED=0xaa;//发送馈送序列
   PLLFEED=0x55;
   while((PLLSTAT & 0X0400)==0)//如果PLL没有被锁定
   {}
   PLLCON=3;//连接PLL
   PLLFEED=0xaa;//发送馈送序列
   PLLFEED=0x55;
   /////////////////////GPIO管脚配置
   PINSEL0=0x00000000;//管脚为GPIO                               // 打开CAN控制器电源   
   PINSEL2=(PINSEL2 & 0xff8c1f2f)| 0x0f800920;
   IO0DIR=0x400000;
   VPBDIV=0;//设备时钟为PLL的1/4,即12MHZ
   ////////////////////外部存储器控制
   BCFG0=0x10002ce0;//读访问延时7个周期,写访问延时5个周期  
   ///////////CAN初始化
   PCONP |= (1 << 14);//开CAN2电源
   PINSEL1 &= ~(0x3F << 14);                        
   PINSEL1 |=  (0x15 << 14);//设置TD2,RD2,RD1
   CAN2MOD |= 0x01; //复位
   CAN2BTR = 0x001C000E; //波特率为800k,所以将VPB时钟15分频
   CAN2IER = 0x00;
   CAN1EWL = 0x60;
   set_can_accf();
   CAN2MOD &= ~0x01;
}
int main (void)
{// add user source code
uint8 i=0;
    chushi();     
    while(1)
    {//1   
     can_send();
     yans(10000000); //延时1秒
         
    }//1
    return 0;
}

相关帖子

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

本版积分规则

1

主题

4

帖子

1

粉丝