⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can.c

📁 1、程序目的:AT91SAM7A3的CAN功能验证与使用指导。 2、功能说明:该程序包括三个常用CAN功能的测试 1)、测试1:将CAN0 Mailbox 0中的数据传到CAN1 Mailbox
💻 C
📖 第 1 页 / 共 2 页
字号:
  //等待数据发送完
  tick=0;
  do {
    status = AT91F_CAN_GetMessageStatus(&(AT91C_BASE_CAN1->CAN_MB0));
   } while( !(status & AT91C_CAN_MRDY) && (++tick<AT91C_CAN_TIMEOUT) );

/////////////////////
  AT91F_DBGU_Printk("\n\r-- the send is finished\n\r");
  AT91F_DBGU_Printk("-- CAN1 Mailbox 0: Rx Mailbox low 4 byte data is:");
  //读取接收邮箱中的数据,将其打印到”超级中端“
  PrintkFoueByte(AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB0));

  AT91F_DBGU_Printk("\n\r-- CAN1 Mailbox 0: Rx Mailbox high 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0));

  if (tick == AT91C_CAN_TIMEOUT) { //如果超时则表示发送错误
    AT91F_DBGU_Printk("\n\r-E- Test FAILED !\n\r");
     }
  else { //比较接收与发送邮箱中的数据是否正确
    if( AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB0) != AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB0) )
      AT91F_DBGU_Printk("\n\r-E-low 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("\n\r-E-low 4 byte Data right !\n\r");}
    if( AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB0) != AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0) )
      AT91F_DBGU_Printk("-E-high 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("-E-high 4 byte Data right !\n\r");}
  }
 AT91F_DBGU_Printk("\n\r-E- Test 1 is finished !\n\r");
////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////
  //测试2:将CAN0_MB1和CAN0_MB2中的消息发送到CAN1_MB15中(一个邮箱接收多个邮箱发来的信息)
  //注释:必须设置号CAN1_MB15中的MAM和MID寄存器,最简短的帮法就是全部设为0 ,它将接受所有消息
  AT91F_DBGU_Printk("\n\r----------------------------------------------------------\n\r");
  AT91F_DBGU_Printk("2. CAN0 Mailboxes 1 & 2 transmitting to CAN1 Mailbox 15...\n\r");
  AT91F_DBGU_Printk("----------------------------------------------------------\n\r");
  AT91F_DBGU_Printk("-- CAN0 Mailbox 1 : Tx Mailbox \n\r");
  AT91F_DBGU_Printk("-- CAN0 Mailbox 2 : Tx Mailbox \n\r");
  AT91F_DBGU_Printk("-- CAN1 Mailbox 15: Rx with Overwrite Mailbox \n\r");
  AT91F_DBGU_Printk("----------------------------------------------------------\n\r");
/////////////////////////////
  AT91F_DBGU_Printk("-- CAN0 Mailbox 1: Tx Mailbox send data low 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB1));

  AT91F_DBGU_Printk("\n\r-- CAN0 Mailbox 1: Tx Mailbox send data high 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB1));
//////////////////////////////
  //启动发送
  AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN0,AT91C_CAN_MB1);
  //等待数据发送完
  tick=0;
  do {
    status = AT91F_CAN_GetMessageStatus(&(AT91C_BASE_CAN1->CAN_MB15));
   } while( !(status & AT91C_CAN_MRDY) && (++tick<AT91C_CAN_TIMEOUT) );

/////////////////////
  AT91F_DBGU_Printk("\n\r-- the send is finished\n\r");
  AT91F_DBGU_Printk("-- CAN1 Mailbox 15: Rx Mailbox receive data low 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB15));

  AT91F_DBGU_Printk("\n\r-- CAN1 Mailbox 15: Rx Mailbox receive data high 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB15));

  if (tick == AT91C_CAN_TIMEOUT) {
    AT91F_DBGU_Printk("\n\r-E- Test FAILED !\n\r");
     }
  else {
   // AT91F_DBGU_Printk("\n\r-I- Tranfer Completed: CAN1 Mailbox 0 MRDY flag has raised.\n\r");
    if( AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB1) != AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB15) )
      AT91F_DBGU_Printk("\n\r-E-low 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("\n\r-E-low 4 byte Data right !\n\r");}
    if( AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB1) != AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB15) )
      AT91F_DBGU_Printk("-E-high 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("-E-high 4 byte Data right !\n\r");}
  }
/////////////////////////////
/////////////////////////////
  AT91F_DBGU_Printk("-- CAN0 Mailbox 2: Tx Mailbox send data low 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB2));

  AT91F_DBGU_Printk("\n\r-- CAN0 Mailbox 2: Tx Mailbox send data high 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB2));
//////////////////////////////
  //启动发送
  AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN0,AT91C_CAN_MB2);

  //等待数据发送完
  tick=0;
  do {
    status = AT91F_CAN_GetMessageStatus(&(AT91C_BASE_CAN1->CAN_MB15));
   } while( !(status & AT91C_CAN_MRDY) && (++tick<AT91C_CAN_TIMEOUT) );

/////////////////////
  AT91F_DBGU_Printk("\n\r--the send is finished\n\r");
  AT91F_DBGU_Printk("-- CAN1 Mailbox 15: Rx Mailbox low receive data 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB15));

  AT91F_DBGU_Printk("\n\r-- CAN1 Mailbox 15: Rx Mailbox receive data high 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB15));

  if (tick == AT91C_CAN_TIMEOUT) {
    AT91F_DBGU_Printk("\n\r-E- Test FAILED !\n\r");
     }
  else {
    if( AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB2) != AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB15) )
      AT91F_DBGU_Printk("\n\r-E-low 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("\n\r-E-low 4 byte Data right !\n\r");}
    if( AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB2) != AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB15) )
      AT91F_DBGU_Printk("-E-high 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("-E-high 4 byte Data right !\n\r");}
  }
   AT91F_DBGU_Printk("\n\r-E- Test 2 is finished !\n\r");
///////////////////////
   ///////////////////////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////////
  //测试3: CAN0 Mailbox 3请求 CAN1 Mailbox 3 发送数据
  AT91F_DBGU_Printk("\n\r-----------------------------------------------------------\n\r");
  AT91F_DBGU_Printk("3. CAN0 Mailbox 3 asking for CAN1 Mailbox 3 transmission...\n\r");
  AT91F_DBGU_Printk("-----------------------------------------------------------\n\r");
  AT91F_DBGU_Printk("-- CAN0 Mailbox 3: Consumer Mailbox \n\r");
  AT91F_DBGU_Printk("-- CAN1 Mailbox 3: Producer Mailbox \n\r");
  AT91F_DBGU_Printk("-----------------------------------------------------------\n\r");
 ///////////////////////
  AT91F_DBGU_Printk("-- CAN1 Mailbox 3: Tx Mailbox  send data low 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB3));

  AT91F_DBGU_Printk("\n\r-- CAN1 Mailbox 3: Tx Mailbox  send data high 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB3));
////////////////////////
  //启动发送请求
   AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN1,AT91C_CAN_MB3);
   AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN0,AT91C_CAN_MB3);

  //等待数据发送完
  tick=0;
  do {
     status = AT91F_CAN_GetMessageStatus(&(AT91C_BASE_CAN1->CAN_MB3));
    } while( !(status & AT91C_CAN_MRDY) && (++tick<AT91C_CAN_TIMEOUT) );

/////////////////////////////
  AT91F_DBGU_Printk("\n\r-- the send is finished\n\r");
  AT91F_DBGU_Printk("-- CAN0 Mailbox 3: Rx Mailbox receive data low 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB3));

  AT91F_DBGU_Printk("\n\r-- CAN0 Mailbox 3 Rx Mailbox receive data high 4 byte data is:");
  PrintkFoueByte(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB3));

  if (tick == AT91C_CAN_TIMEOUT) {
    AT91F_DBGU_Printk("\n\r-E- Test FAILED !\n\r");
     }
  else {
    if( AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB3) != AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB3) )
      AT91F_DBGU_Printk("\n\r-E-low 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("\n\r-E-low 4 byte Data right !\n\r");}
    if( AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB3) != AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB3) )
      AT91F_DBGU_Printk("-E-high 4 byte Data ERROR !\n\r");
    else{AT91F_DBGU_Printk("-E-high 4 byte Data right !\n\r");}
  }
  AT91F_DBGU_Printk("\n\r-E- Test 3 is finished !\n\r");
///////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////////
  AT91F_DBGU_Printk("\n\r all Tests over!--zzf-2006-2-10\n\r");
  return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -