5010|5

19

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

求助关于LPC17xx系列单片机CAN总线问题 [复制链接]

关于can的自接收问题 查阅文档时看到一句话:
当产生自接收请求时,如果验收滤波器被设置成相应的标识符,则报文被发送,同时被接收,一个接收和发送中断将指示出正确的自接收。


不是很理解这句话


后面再LPC17XX的自接收例程中,发现代码中开启了两个中断:
        //Enable Interrupt
        CAN_IRQCmd(LPC_CAN1, CANINT_RIE, ENABLE);
        CAN_IRQCmd(LPC_CAN1, CANINT_TIE1, ENABLE);



不明白为什么要开发送中断,中断服务函数里也没有和发送中断有关的内容:
void CAN_IRQHandler()
{

        uint8_t IntStatus;
//        uint32_t data1;
        /* Get CAN status */
        IntStatus = CAN_GetCTRLStatus(LPC_CAN1, CANCTRL_STS);
        //check receive buffer status
        if((IntStatus>>0)&0x01)
        {
                CAN_ReceiveMsg(LPC_CAN1,&RXMsg);
                _DBG_("Received buffer:");
                PrintMessage(&RXMsg);
                //Validate received and transmited message
                if(Check_Message(&TXMsg, &RXMsg))
                        _DBG_("Self test is SUCCESSFUL!!!");
                else
                        _DBG_("Self test is FAIL!!!");
                                       
                FIO_ByteSetValue(1, 3, 1<<4);
                delay();
                FIO_ByteClearValue(1, 3, 1<<4);
                delay();       
               
        }
}

还有就是,不知道为什么不能给can发送函数加个while循环让它不停地发送数据:
int c_entry(void) { /* Main Program */

        /* Initialize debug via UART0
         * – 115200bps
         * – 8 data bit
         * – No parity
         * – 1 stop bit
         * – No flow control
         */
        debug_frmwrk_init();
        print_menu();

        //FIO_ByteSetDir(1, 3, 1<<4, 1);
                               
        /* Initialize CAN1 peripheral
         * Note: Self-test mode doesn't require pin selection
         */
        CAN_Init(LPC_CAN1, 125000);

        //Enable self-test mode
        CAN_ModeConfig(LPC_CAN1, CAN_SELFTEST_MODE, ENABLE);

        //Enable Interrupt
        CAN_IRQCmd(LPC_CAN1, CANINT_RIE, ENABLE);
        CAN_IRQCmd(LPC_CAN1, CANINT_TIE1, ENABLE);

        //Enable CAN Interrupt
        NVIC_EnableIRQ(CAN_IRQn);
        CAN_SetAFMode(LPC_CANAF,CAN_AccBP);
        CAN_InitMessage();
        _DBG_("Transmitted buffer:");
        PrintMessage(&TXMsg);

        /** To test Bypass Mode: we send infinite messages to CAN2 and check
         * receive process via COM1
         */         

        CAN_SendMsg(LPC_CAN1, &TXMsg);
        LPC_CAN1->CMR |=(1<<4); //Self Reception Request
       
        while (1);
}











此帖出自NXP MCU论坛

最新回复

NXP 的 CAN 编程 要比 STM32  的 难多了,2种芯片 都 搞过,有体会  详情 回复 发表于 2017-8-23 23:03
点赞 关注
 

回复
举报

4997

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
CAN跟串口一样的,应该可以中断接收和中断发送,也可以查询接收和查询发送,但效率确不同。利用中断可以提高收发的效率。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

19

帖子

2

TA的资源

一粒金砂(中级)

板凳
 
zhaojun_xf 发表于 2017-4-6 10:25
CAN跟串口一样的,应该可以中断接收和中断发送,也可以查询接收和查询发送,但效率确不同。利用中断可以提 ...

谢谢你  我是想知道这里为什么要开两个中断呢
此帖出自NXP MCU论坛
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

4
 
我的说得很清楚了,打开两个中断是接收后发送都采用中断。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

19

帖子

2

TA的资源

一粒金砂(中级)

5
 
zhaojun_xf 发表于 2017-4-7 09:47
我的说得很清楚了,打开两个中断是接收后发送都采用中断。

https://bbs.eeworld.com.cn/thread-526723-1-1.html

帮我看看这个  我写详细了  谢谢你
此帖出自NXP MCU论坛
 
 
 

回复

22

帖子

1

TA的资源

一粒金砂(中级)

6
 
NXP 的 CAN 编程 要比 STM32  的 难多了,2种芯片 都 搞过,有体会
此帖出自NXP MCU论坛
 
个人签名[冗余双CAN现场总线STM32F105开发板Keil工程C++源程序分享下载:
https://bbs.eeworld.com.cn/thread-553036-1-1.html
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表