查看: 3309|回复: 5

[其他] KEA128配置CAN同步状态标志位无法置位

[复制链接]

该用户从未签到

3

主题

5

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2021-3-8
发表于 2019-5-30 16:57:39 | 显示全部楼层 |阅读模式
void BSP_CAN_Init(uint_8 mode,uint_8 open_filter,uint_32 acc_id)
{
    uint_8 i;
    MSCAN_MemMapPtr p = (MSCAN_MemMapPtr) MSCAN_BASE_PTR;

    //MSCAN的引脚复用选择CAN_TX为PTE7,CAN_RX为PTH2
    SIM_PINSEL1 |= (uint_32)(SIM_PINSEL1_MSCANPS_MASK);
    //MSCAN模块时钟门控制;SIM_SCGC的MSCAN位=1:使能总线给MSCAN时钟;
    //SIM_SCGC的MSCAN位=0:禁止总线给MSCAN时钟
    SIM_SCGC |=(uint_32)(SIM_SCGC_MSCAN_MASK);

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

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

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

    if(open_filter)         //开启接收过滤器,只接收标示符为acc_id的帧
    {
        // 使用2个32位接收过滤器
        p->CANIDAC &= ~MSCAN_CANIDAC_IDAM_MASK;

        // 第1个32位滤波器
        // 设置接受寄存器的值
        p->CANIDAR_BANK_1[0]=acc_id>>3;
        p->CANIDAR_BANK_1[1]=acc_id<<5;
        p->CANIDAR_BANK_1[2]=0xFF;
        p->CANIDAR_BANK_1[3]=0xFF;
        // 设置屏蔽寄存器的值
        p->CANIDMR_BANK_1[0]=0x00;
        p->CANIDMR_BANK_1[1]=0x1F;
        p->CANIDMR_BANK_1[2]=0xFF;
        p->CANIDMR_BANK_1[3]=0xFF;

        // 第2个32位滤波器
        // 设置接受寄存器的值
        p->CANIDAR_BANK_2[0]=acc_id>>3;
        p->CANIDAR_BANK_2[1]=acc_id<<5;
        p->CANIDAR_BANK_2[2]=0xFF;
        p->CANIDAR_BANK_2[3]=0xFF;
        // 设置屏蔽寄存器的值
        p->CANIDMR_BANK_2[0]=0x00;
        p->CANIDMR_BANK_2[1]=0x1F;
        p->CANIDMR_BANK_2[2]=0xFF;
        p->CANIDMR_BANK_2[3]=0xFF;
    }
    else//关闭过滤器
    {
        for (i = 0; i < 16; i++)
        {

            if( i <=3)
                p->CANIDAR_BANK_1 = 0xFF;
            else if(i>=4 && i <=7)
                p->CANIDMR_BANK_1[i-4] = 0xFF;
            else if(i>=8 && i <=11)
                p->CANIDAR_BANK_2[i-8] = 0xFF;
            else
                p->CANIDMR_BANK_2[i-12]= 0xFF;
        }
    }

    //配置时钟
    p->CANCTL1 |= MSCAN_CANCTL1_CLKSRC_MASK;    // 采用总线时钟(20MHz)作为模块时钟
    p->CANBTR0 |= MSCAN_CANBTR0_SJW(0);
    p->CANBTR1 |= MSCAN_CANBTR1_SAMP_MASK;     // 位时间采样次数为3
    // MSCAN传输波特率 = 模块时钟 / [(1 + TSEG1 + TSEG2) * 分频因子]
    //                = 20000K/[(1+12+7)*4]=250Kbps
    p->CANBTR0 |= MSCAN_CANBTR0_BRP(3);        // 模块时钟4分频  
    p->CANBTR1 |= MSCAN_CANBTR1_TSEG2(6);      // TSEG2:6+1=7 Tq
    p->CANBTR1 |= MSCAN_CANBTR1_TSEG1(11);     // TSEG1:11+1=12 Tq

    //配置工作模式
    if(LOOP_MODE == mode)
        p->CANCTL1 |= MSCAN_CANCTL1_LOOPB_MASK; // 开启回环模式
    p->CANCTL1 &= ~MSCAN_CANCTL1_LISTEN_MASK;   // 禁止侦听模式,即开启正常模式

    //退出初始化模式
    p->CANCTL0 &= ~MSCAN_CANCTL0_INITRQ_MASK;   //退出初始化模式,进入正常模式

    //设置中断方式
    p->CANTIER = 0x00;                          //禁止发送中断
    p->CANRIER = 0x01;                          //开启接收满中断
    //设置嵌套向量中断控制寄存器值,使能CAN接收中断
    NVIC_EnableIRQ(MSCAN_RX_IRQn);
    //等待应答初始化模式
    while ((p->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) == 1);

    //等待总线通信时钟同步
    while ((p->CANCTL0 & MSCAN_CANCTL0_SYNCH_MASK) == 0);
    程序卡死在这里,使用例程情况一样,请问大家有遇到这种情况的吗?
    如果排查的话需要从哪个方面入手,万分感谢。
}


我知道答案 目前已有5人回答
回复

使用道具 举报

该用户从未签到

16

主题

61

帖子

0

中级会员

Rank: 3Rank: 3

积分
404
最后登录
2022-6-10
发表于 2019-6-5 22:23:34 | 显示全部楼层
我也是这种情况,你解决了没?
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

5

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2021-3-8
 楼主| 发表于 2019-6-12 15:11:53 | 显示全部楼层
yaomeng0725 发表于 2019-6-5 22:23
我也是这种情况,你解决了没?

解决了,我重新捋了下时钟,将CAN设置成回环模式就好了,具体怎么好的我现在也不好确认。
也没复现,只能留着等以后查找原因。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

61

帖子

0

中级会员

Rank: 3Rank: 3

积分
404
最后登录
2022-6-10
发表于 2019-6-12 21:47:56 | 显示全部楼层
mm1183462 发表于 2019-6-12 15:11
解决了,我重新捋了下时钟,将CAN设置成回环模式就好了,具体怎么好的我现在也不好确认。
也没复现,只能 ...

我的情况是,买的开发板CAN控制器坏了,又换了个就好了
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

5

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2021-3-8
 楼主| 发表于 2019-6-21 15:49:42 | 显示全部楼层
yaomeng0725 发表于 2019-6-12 21:47
我的情况是,买的开发板CAN控制器坏了,又换了个就好了

我看帖子有说到这个原因的。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2019-11-7 15:28
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    29

    帖子

    0

    注册会员

    Rank: 2

    积分
    62
    最后登录
    2022-1-1
    发表于 2019-10-27 11:48:52 | 显示全部楼层
    学习一下,了解备份
    上道
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 13:51 , Processed in 0.131013 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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