查看: 4930|回复: 4

[求助] MSCAN寄存器仿真显示无写入(急急急)

[复制链接]

该用户从未签到

1

主题

3

帖子

0

新手上路

Rank: 1

积分
14
最后登录
2021-7-22
发表于 2021-7-22 10:30:58 | 显示全部楼层 |阅读模式
如图片所示,程序明明已经初始化,并对MSCAN相关寄存器配置了,但是在仿真RUN的时候,在keil system view上看到的寄存器确实0,相当于全部没写入。各位大神帮忙解解惑。初始化程序如下:

void CAN_Init(uint_8_t mode,uint_8_t open_filter,uint_8_t acc_id)
{
    uint_8_t i;
    MSCAN_MemMapPtr p = (MSCAN_MemMapPtr) MSCAN_BASE_PTR;   
    SIM_PINSEL1 |= (SIM_PINSEL1_MSCANPS_MASK);     //MSCAN的引脚复用选择CAN_TX为PTE7,CAN_RX为PTH2
    SIM_SCGC |=(SIM_SCGC_MSCAN_MASK);             //MSCAN模块时钟门控制;SIM_SCGC的MSCAN位=1:使能总线给MSCAN时钟;   
    p->CANCTL1 |= MSCAN_CANCTL1_CANE_MASK; //MSCAN12模块使能   0X80
    p->CANCTL0 |= MSCAN_CANCTL0_INITRQ_MASK;//请求进入初始化模式 0X1U 初始化模式请求
    while ((p->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK)== 0); //等待应答进入初始化模式
    if(open_filter)         //开启接收过滤器,只接收标示符为acc_id的帧
    {      
        p->CANIDAC &= ~MSCAN_CANIDAC_IDAM_MASK; // 使用2个32位接收过滤器
        // 第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[i] = 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;    // 采用总线时钟(24MHz)作为模块时钟
    p->CANBTR0 |= MSCAN_CANBTR0_SJW(0);
    p->CANBTR1 |= MSCAN_CANBTR1_SAMP_MASK;     // 位时间采样次数为3
    // MSCAN传输波特率 = 模块时钟 / [(1 + TSEG1 + TSEG2) * 分频因子]
    //                = 24000K/[(1+16+7)*2]=500Kbps
    p->CANBTR0 |= MSCAN_CANBTR0_BRP(1);        // 模块时钟2分频
    p->CANBTR1 |= MSCAN_CANBTR1_TSEG2(6);      // TSEG2:6+1=7 Tq
    p->CANBTR1 |= MSCAN_CANBTR1_TSEG1(15);     // TSEG1:15+1=16 Tq

    //配置工作模式
    if(LOOP_MODE == mode)
        p->CANCTL1 |= MSCAN_CANCTL1_LOOPB_MASK; // 开启回环模式
    p->CANCTL1 &= ~MSCAN_CANCTL1_LISTEN_MASK;   // 禁止侦听模式,即开启正常模式
    //  p->CANCTL1 |=0XC1;
    //退出初始化模式
     p->CANCTL0 &= ~MSCAN_CANCTL0_INITRQ_MASK;   //退出初始化模式,进入正常模式

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

    //等待总线通信时钟同步
    while ((p->CANCTL0 & MSCAN_CANCTL0_SYNCH_MASK) == 0);
          //MSCAN->CANRIER = 0x01;
         // NVIC_Init(MSCAN_RX_IRQn,0); //允许接受中断
}

我知道答案 目前已有4人回答
捕获_看图王.jpg
回复

使用道具 举报

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 2377 天

    连续签到: 86 天

    [LV.Master]伴坛终老

    84

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    22047
    最后登录
    2025-7-26
    发表于 2021-7-22 10:42:03 | 显示全部楼层
    外设时钟使能没?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    14
    最后登录
    2021-7-22
     楼主| 发表于 2021-7-22 10:59:57 | 显示全部楼层
    流水源 发表于 2021-7-22 10:42
    外设时钟使能没?

    SIM_SCGC |=(SIM_SCGC_MSCAN_MASK);
    使能了的,这句话就是,其他模块寄存可以看的到,我可以看到SCGC的MSCAN时钟是enable的,偏偏MSCAN都显示0,
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24948
    最后登录
    2025-7-25
    发表于 2021-7-22 11:57:37 | 显示全部楼层
    楼主你好
    直接参考【转载】[汽车MCU – KEA] 【玩转KEA】KEA底层驱动库帖子里的驱动测试一下呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    14
    最后登录
    2021-7-22
     楼主| 发表于 2021-7-22 13:03:19 | 显示全部楼层
    小恩GG 发表于 2021-7-22 11:57
    楼主你好
    直接参考【转载】[汽车MCU – KEA] 【玩转KEA】KEA底层驱动库帖子里的驱动测试一下呢?
    ...

    好的,谢谢
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-26 19:11 , Processed in 0.094369 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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