完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
34 个讨论
|
|
小Qhhui 发表于 2018-10-10 11:09 昨天时间紧张,回复有误,抱歉。谢谢提醒 刚才单步调试了下,对比了CAN总线断线前后CANRMP寄存器的值,应该找到了问题的原因。 同样是通过USBCAN卡以100ms间隔发送三条消息(对应15、14、13号邮箱消息)到目标板, 在断线前,CANRMP的值总是只有一个邮箱的中断标志位被置位,因而程序的响应是正常的 可是断线后,CANRMP的值总是三个邮箱的中断标志位被同时置位, 程序在处理15邮箱的消息后,就把CANRMP复位了,没有再处理其他两个邮箱的消息。 所以只是响应高优先级的邮箱消息。 如果CANRMP同时响应多个邮箱中断,有什么好的处理机制。 |
|
|
|
|
|
|
|
|
您好,打扰您一下,我是初学者,导师让我写了一个简单的发送和接收的ecan程序(分别,见附件), A DSP发送,B DSP 接收。用的是CCS3.3
1.然后我是把发送的程序烧写进了A板。 但出了问题:(Flash.cmd)在烧写的过程中,出现了一个警告:对于.const那一行,no matching。(见附件) 2.B板:将程序load program进板子,用仿真器在电脑上,观察接收邮箱寄存器里的值(此板子没有把接收程序烧进板子,但Flash里已经有了以前固化的程序,具体是什么我不清楚,不知道这个对于此时的仿真有没有影响),然后load program到板子里,开始run,在接收邮箱前设置的有断点,然后我就分别把高、低16位装入观察窗口,发现里面已经有值了,而且很大(在附件)这也太奇怪了吧?!2个板子的can的双绞线还没有连接怎么会有值呢?而且一断开,并断电;再一连接仿真器,值还是那个值。 太奇怪了? 由于是初学者,不知道哪里出了问题,所以想请教您一下,耽误您的宝贵时间了。我怀疑是我的程序有问题,但就是不知道问题出在哪里? 请教您一下,帮忙看看,谢谢,不胜感激! 另外,您能否提供一些基于2812的发送、接收成功的例程,我想学习一下;ti的官方发送接收例程在哪可以下载得到?谢谢 导师催的很紧,所以想借助于成功例程,尽快编好。简单的程序就可以,一个dsp发送1,另一个dsp接收1,只要能实现这个功能就好。谢谢。 祝您,工作顺利!期待您的回信,再次感谢您。1083176055@qq.com |
|
|
|
|
|
|
|
yijie692 发表于 2018-10-10 11:43 你好。 1.这个Warning是你的CMD文件没有写好。请从http://www.ti.com/lit/zip/sprc097下载2812的驱动代码和相关例程。 2.你看到的LL和HH以及寄存器中的值是不是在接收到报文之前的。如果是的话,那是可能的。因为上电后,RAM中的所有数据都是随机数,包括未赋值的变量。 |
|
|
|
|
|
|
|
|
基本搞定了 要改下接收方式,不能像官方例子那样处理了,虽然曾经工作的很好
修改下CAN接收函数,要对CANRMP寄存器进行逐位判断,以处理多个接收中断标志位同时存在的情况 需要增加个缓冲区,接收函数判断发生接收中断后,用循环逐位判断CANRMP寄存器,查出中断邮箱,将相应数据放入缓冲区,清相应标志位就行了 当CANRMP寄存器为0时,就退出循环。 实际上只用到四个接收邮箱,要在查找中断邮箱上曾加开销,可以从32个邮箱的一端开始,按邮箱的使用频率排列接收邮箱,以减少些判断上的开销 程序已经可以工作了,CAN断线前和恢复后的现象一致,具体的测试要交给同事了 谢谢TI支持 |
|
|
|
|
|
|
|
小Qhhui 发表于 2018-10-10 11:57 非常感谢您的回复。谢谢。 您说的没错,确实是这样的,can的双绞线还没连接呢,寄存器里就观察到有数据了。 1.我使用最普通的2跟杜邦线,将他们绞在一起制作而成的?见附件图片。不知道在发送和接收程序都没有任何问题时,这个双绞线管不管用?由于是初学者,我对硬件的连接也感到质疑。希望您能帮我看看,谢谢您。板子和原理图都在附件图片里。 2. 板子和仿真器都是上海三意公司的。F2812的。 1083176055@qq.com,期待您的回复,谢谢,工作顺利! |
|
|
|
|
|
|
|
|
非常感谢您的回复。谢谢。 我刚刚又在实验,发现RMP位一直没有置位到1,仿真暂停时发现那个黄色指针一直停在 RMP那一行 1.我怀疑是我的程序有问题,可就是不知道问题出在哪里? 2.我感觉是有关帧设置的问题,这部分我不是很理解,还有就是为什么寄存器里不能用MSGID?而非得用GID, 3.Mboxes.这个寄存器书上压根没讲,所以也是很迷糊。 我将我的发送和接收例程上传到了附件,你能否帮我看看 ,帮我修改一下,感激不尽啊。 如果有机会的话,想当面谢谢你。 导师催得要命,请大哥帮帮我吧。 谢谢。 期待您的回复,谢谢。1083176055@qq.com |
|
|
|
|
|
|
|
yijie692 发表于 2018-10-10 12:51 你好。 我看了你的代码,有以下几个问题: 1. 发送程序的ID用的是扩展的ID,而接收的程序所有邮箱都是标准的,而且ID号都对不上,这样接收的板子肯定接收不到任何报文 2.接收的RMP判断用问题。while(ECanaRegs.CANRMP.all != 0xFFFFFFFF ) [] //等待RMP为1 如果上面这个循环要退出,那么接收方的所有邮箱都要有报文收到后才会退出,可是你发送的只有一个ID的报文。所以,应该判断某个邮箱的RMP位。 |
|
|
|
|
|
|
|
小Qhhui 发表于 2018-10-10 13:23 非常感谢您。祝您工作顺利! 我对于ID的设置比较陌生,您能否举个例子怎么去设置ID号 ? 我想将发送程序烧写到A dsp 的0号邮箱,作为发送邮箱;(编译的时候有Flash警告,见附件,不知道影响不) //设置接收邮箱的ID,扩展帧,IDE, ECanaMboxes.MBOX0.MID.all = 0xA0C80000; //向邮箱RAM区写数据 ECanaMboxes.MBOX0.MDRL.all = 0x01234567; ECanaMboxes.MBOX0.MDRH.all = 0x89ABCDEF; 用B DSP 的1号邮箱接收并利用仿真器观察LL和HH 有没有收到预定的数据: 邮箱ID等的设置:ECanaMboxes.MBOX1.MID.all = 0xA0C80000; 并把接收到的邮箱数据存放在 Uint32 LL和HH中; for(;;) [ while(ECanaRegs.CANRMP.all!=0x00000002); ECanaRegs.CANRMP.all=0x00000002; LL=ECanaMboxes.MBOX1.MDRL.all;//低16位 HH=ECanaMboxes.MBOX1.MDRH.all;//高16位 I++; //在这里 设置断点进行观察。 ] 看了您的指导后,我就又试着写了写,TA TRS RMP 的设置我也改正了一下,就是不知道对不。 我刚刚又测试了一下,RMP老是不置位,还是停在等待那条语句。我快急哭了都,请大哥帮帮忙吧。谢谢。 当然了,我给大哥您看到的只是程序的一小部分,2个工程在附件里,包括对于DBO ,MBNR,CCR,SCB,CDR,波特率等的设置, 但我感觉还有问题,就是不知道出在哪里? 请大哥您帮我指正、修改一下,感激不尽。 再次感谢您。 |
|
|
|
|
|
|
|
yijie692 发表于 2018-10-10 13:42 你好。 你的初始化有点问题。 你没有把CANA的对应GPIO引脚配置成CAN功能,如果不配置的话,就是GPIO功能,那样肯定发不出来数据来。 调试CAN的时候,请一步步来。 程序改完后,用示波器来看DSP1发送的数据的TX引脚(DSP引脚上)是否有波形输出,然后看收发器的CANH和CANL上是否有信号。如果这些没有问题,那么DSP1的发送应该没有问题。 再看DSP2的RX引脚是否有波形。如果有信号,那么DSP2的CAN模块初始化没有问题,再去看RMP有没有收到数据的标志。 接收标志的判断,建议用bit来判断,而不要用all。 |
|
|
|
|
|
|
|
|
您好,非常感谢您,您是说can的初始化有问题吧。 由于我是初学者,看不出来,请大哥您帮忙修改一下吧,感激不尽啊。 如果程序有问题的话,用示波器检查相关引脚也是没用的吧? 我实在是检查不出程序到底是哪里出现了问题。非常着急,恳求大哥帮我修改一下吧,我用到的是ccs3.3。 期待您的回复,再次感谢。 1083176055@qq.com。Thanks. |
|
|
|
|
|
|
|
|
您好,再次感谢您的回复 以下就是配置功能引脚的程序,将引脚设置为相应的功能。 不知道哪里缺失了什么,请大哥帮我修改修改,Thanks. //配置GPIO引脚工作在eCAN功能 EALLOW; GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1; GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1; //配置eCAN的RX和TX分别为eCAN的接收和发送引脚 ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all; ECanaShadow.CANTIOC.bit.TXFUNC = 1; ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all; ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all; ECanaShadow.CANRIOC.bit.RXFUNC = 1; ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all; EDIS; 期待您的回复,谢谢。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1724浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:23 , Processed in 1.186800 second(s), Total 86, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
31139