查看: 2285|回复: 2

[求助] can接收中断进不去,求助。

[复制链接]

该用户从未签到

16

主题

61

帖子

0

中级会员

Rank: 3Rank: 3

积分
404
最后登录
2022-6-10
发表于 2019-6-7 14:45:05 | 显示全部楼层 |阅读模式
同志们,我的程序CAN接收中断进不去。下面是相关代码。不胜感激。
  1. void CAN_Init(uint_16 baud)
  2. {

  3.     uint_8 i;
  4.     MSCAN_MemMapPtr p = (MSCAN_MemMapPtr) MSCAN_BASE_PTR;

  5.     //MSCAN的引脚复用选择CAN_TX为PTC7,CAN_RX为PTC6
  6.     SIM_PINSEL1 &= (uint_32)~(uint_32)(SIM_PINSEL1_MSCANPS_MASK);
  7.     //MSCAN模块时钟门控制;SIM_SCGC的MSCAN位=1:使能总线给MSCAN时钟;
  8.     //SIM_SCGC的MSCAN位=0:禁止总线给MSCAN时钟
  9.     SIM_SCGC |=(uint_32)(SIM_SCGC_MSCAN_MASK);

  10.     //MSCAN12模块使能
  11.     p->CANCTL1 |= MSCAN_CANCTL1_CANE_MASK;

  12.     //请求进入初始化模式
  13.     p->CANCTL0 |= MSCAN_CANCTL0_INITRQ_MASK;

  14.     //等待应答进入初始化模式
  15.     while ((p->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK)== 0);


  16.         for (i = 0; i < 16; i++)    //不进行滤波
  17.         {

  18.             if(i>=0 && i <=3)
  19.                 p->CANIDAR_BANK_1[i] = 0xFF;
  20.             else if(i>=4 && i <=7)
  21.                 p->CANIDMR_BANK_1[i-4] = 0xFF;
  22.             else if(i>=8 && i <=11)
  23.                 p->CANIDAR_BANK_2[i-8] = 0xFF;
  24.             else
  25.                 p->CANIDMR_BANK_2[i-12]= 0xFF;
  26.         }


  27.     //配置时钟
  28.     p->CANCTL1 |= MSCAN_CANCTL1_CLKSRC_MASK;    // 采用总线时钟(24MHz)作为模块时钟
  29.     p->CANBTR0 |= MSCAN_CANBTR0_SJW(0);
  30.     p->CANBTR1 |= MSCAN_CANBTR1_SAMP_MASK;     // 位时间采样次数为3



  31.     p->CANBTR0 |= MSCAN_CANBTR0_BRP(1);        // 模块时钟2分频
  32.     p->CANBTR1 |= MSCAN_CANBTR1_TSEG2(6);      // TSEG2:6+1=7 Tq
  33.     p->CANBTR1 |= MSCAN_CANBTR1_TSEG1(15);     // TSEG1:15+1=16 Tq



  34.     p->CANCTL1 &= ~MSCAN_CANCTL1_LISTEN_MASK;   // 禁止侦听模式,即开启正常模式

  35.     //退出初始化模式
  36.     p->CANCTL0 &= ~MSCAN_CANCTL0_INITRQ_MASK;   //退出初始化模式,进入正常模式
  37.     //等待应答初始化模式
  38.     while ((p->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) == 1);
  39.     //等待总线通信时钟同步
  40.     while ((p->CANCTL0 & MSCAN_CANCTL0_SYNCH_MASK) == 0);
  41.     //设置中断方式
  42.     p->CANRIER = 0x01;                          //开启接收满中断
  43.         NVIC_SetPriority(MSCAN_RX_IRQn,0);
  44.         NVIC_EnableIRQ(MSCAN_RX_IRQn);
  45. }
复制代码
  1. void MSCAN_Rx_IRQHandler()
  2.                 {
  3.         CAN_Send_activate_Msg();
  4.                 }
复制代码



最佳答案

楼主你好,可以参考下KE06的MSCAN代码: https://www.nxpic.org.cn/module/forum/thread-599136-1-1.html
回复

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
7
最后登录
2019-8-20
发表于 2019-6-10 17:08:51 | 显示全部楼层
你的查询模式通了吗?
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24901
最后登录
2025-7-21
发表于 2019-6-11 10:55:30 | 显示全部楼层
楼主你好,可以参考下KE06的MSCAN代码:
https://www.nxpic.org.cn/module/forum/thread-599136-1-1.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 13:18 , Processed in 0.090817 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表