完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
34 个讨论
|
|
|
您好,非常感谢您。 这份来自TI的说明书里也是说28--0位是ID消息标识符位,我不明白的是,为什么这29位只有1或0值,上面的IDE,AME,AAM,都是一位的,可以赋值为0或者1; 可这是29位呀,怎么能同时全部赋值为0或者1呢? 只有2种取值吗?对于这全部的29位? 难道说是这样的意思吗: 1. 全为1,才是1;全为0,才是0? 2. 1和0 对应的解释 怎么理解呢? 3. 还得由IDE决定?但是1的话,对应于IDE=1;0的话对应于IDE=1;也说不通啊。怎么理解呢?赋值为0或者1,不管用?由IDE决定? 4. 这里的0或者1难道代表的是2种情况而已吗? 这该怎么理解呢?! 谢谢,等待您的回复。 |
|
|
|
|
|
|
|
yijie692 发表于 2018-10-10 14:54 你好。 看你你是没有理解ID是怎么一回事。 每个邮箱都有对应的MSGID寄存器,用来设置邮箱ID。只有发送邮箱的ID和接收邮箱的ID相同时,发送邮箱发出的报文才能被接收邮箱收到。 IDE位配置该邮箱使用标准ID(11位)还是扩展ID(29位)。
|
|
|
|
|
|
|
|
|
您好,我用的是2812的eCAN。 以下是配置功能引脚的程序,将引脚设置为相应的收、发功能。 不知哪里缺失了什么,请您指出,谢谢. //配置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; 期待您的回复,谢谢。 |
|
|
|
|
|
|
|
yijie692 发表于 2018-10-10 13:42 1)邮箱初始化配置:首先应确定从32个邮箱中选择要配置的目标邮箱,比如配置成发送邮箱或接收邮箱,一般是成对出现的。然后是对靠近的邮箱进行ID号(标识符)的配置,数据长度,优先级的设置,是远程帧还是普通扩展数据帧等。 具体步骤总结如下:第一步在写标识符前必须将所有邮箱屏蔽掉,ECanaRegs.CANME.all=0。(第五步,最后将要用到的邮箱配置好后,使能需要用到的邮箱,比如邮箱0和邮箱16,ECanaRegs.CANME.bit.ME0=1;ECanaRegs.CANME.bit.ME16=1;)第二步:通过向寄存器CANMC的CDR位请求改变数据区,该位允许快速更新数据消息。再第五步的时候,需要将该位写0,CPU请求正常操作。第三步,设置邮箱的ID(标识符,发送邮箱对应的接收邮箱的标识符是一致的,这个需注意),数据方向寄存器配置了发送邮箱还是接收邮箱。数据长度,发送优先级的设置,以及是否有远方应答帧的请求,向邮箱RAM区写数据(这个注意:ECanaboxes.MBOXO.MDRL.all=?ECanaboxes.MBOXO.MDRH.all=?) 2)邮箱初始化之后,就可以对其进行发送或者接收操作啦!前面第一步主要是前奏,现在进入主题。 消息的发送操作,分为五步: 第一步:清除CANTRS发送请求置位寄存器---当邮箱n准备发送时,CPU将TRSn置1,启动发送。就相当于一个开关一样,当数据要被发送时,将开关TRSn闭合,则数据发送出去。上电复位,各位都被清0。接着配置发送响应寄存器CANTA,如果邮箱n中的消息已经发送成功,则相应的TAn将置位。CPU通过向TANTA中的位写1,使其复位。如果已经产生中断,向CANTA寄存器写1,则可以清除中断,向CANTA寄存器写0没有影响。上电后,寄存器所有的位都被清除。 第二步:初始化邮箱,见第一部分。 第三步:设置TRS请求发送标志,请求发送消息 第四步:等待传输响应位置位,邮箱完成发送。(由0置1才能跳出循环等待,这点是关键!!!) 第五步:复位TA和传输标志,需要向相应的寄存器位写1才能清零(这点相当重要,向该位写1才能清零,等待下一次发送!!!)。 3)消息的接收操作,分五步操作 第一步:设置局部接收屏蔽寄存器LAMn,它可以指明哪些标识符位 第二步:初始化邮箱 第三步:等待接收响应标志置位 第四步:CPU读取邮箱中的数据 第五步:复位接收消息挂起标志 |
|
|
|
|
|
|
|
|
您好,我现在设计的是3块dsp之间的通信,但遇到了这样的问题: A的一个发送邮箱的ID为8000FFFF; B的一个发送邮箱的ID为80C8FFFF; C的其中2个邮箱分别接收A、B发送过来的数据; 我通过观察寄存器发现,只能收到ID为8000FFFF的邮箱数据,而另一个好像不被响应;只有将A DSP的复位键按下不松手,才会看到邮箱接收到了来自于B板的数据,一松手复位键,又是只能收到A板的数据,好像是A板的优先级高,永远不让B发送数据一样。也不能不让B板接收数据吧,A永远在发送……不知道这是怎么回事,怎么做才能让C同时收到A、B发送过来的数据呢?谢谢。 期待您的回复…… 我使用中断线0,接收数据:程序如下 Uint32 Rec_l; Uint32 Rec_h; interrupt void ECAN0INTA_ISR(void) // eCAN-A [ struct ECAN_REGS ECanaShadow; do [ ECanaShadow.CANRMP.all=ECanaRegs.CANRMP.all;//检查接收成功标志位位值 ] while(ECanaShadow.CANRMP.bit.RMP12!=1&&ECanaShadow.CANRMP.bit.RMP1!=1); //循环等待接收 GpioDataRegs.GPFCLEAR.bit.GPIOF14=1;//灯亮,证明已经接收信息 ECanaShadow.CANRMP.all = 0; ECanaShadow.CANRMP.bit.RMP1 = 1; ECanaShadow.CANRMP.bit.RMP12 = 1; ECanaRegs.CANRMP.all = ECanaShadow.CANRMP.all;//目的是,复位GMIF0接收成功中断标志位 GpioDataRegs.GPFSET.bit.GPIOF14=1;//让指示灯灭,用来监测动态变化 Rec_l=ECanaMboxes.MBOX1.MDRL.all;//收到的数据低位保存在接收邮箱Mbox1的低32位 Rec_h=ECanaMboxes.MBOX1.MDRH.all;//收到的数据高位保存在接收邮箱Mbox1的高32位 PieCtrl.PIEACK.bit.ACK9 = 1;//使得同组其他中断能够得到响应 EINT; ] |
|
|
|
|
|
|
|
|
您好,我用的是TMS320F28335,我最近做的项目中包含如下的一下can总线通信系统:
A -DSP中有2个邮箱,标识符分别为:0x8000FFFF (发送邮箱);0x8FFFFFFF(接收邮箱)。 B-DSP中与A对应的也有2个邮箱,0x8000FFFF (接收邮箱);0x8FFFFFFF(发送邮箱)。 然后我是把A中的AD采样数据结果寄存器中的数字量发给B,用仿真器和B连接,来观察B对应的邮箱里的数据,观察接收是否正常。 把B中的一个数值常量整型25发送给A,让A稳定输出一25V电压值。 【问题是】, 一、如果让2个DSP中的上述的4个邮箱都工作时,用示波器观测can总线上的波形:木有任何波形,就是数据没有被传送; 二、如果分别让2个DSP中的2个邮箱,就是一个发,另一个DSP接收数据,是能正常工作的。 【我是这么想的】好像是 仲裁机制的问题,优先级高的一直在占用总线,而不会退出,优先级低的始终获取不了传送数据权限。 也不知道我这样认为对不对?您是怎么处理 在2块或者多块DSP,之间进行若干个邮箱之间进行数据通信的,怎么做才能让每个邮箱都有权获取总线特权,都可以实时的进行数据传输呢? 我的qq,1083176055@qq.com期待您的回复,谢谢。 |
|
|
|
|
|
|
|
|
您好,我用的是TMS320F28335,我最近做的项目中包含如下的一下can总线通信系统: A -DSP中有2个邮箱,标识符分别为:0x8000FFFF (发送邮箱);0x8FFFFFFF(接收邮箱)。 B-DSP中与A对应的也有2个邮箱,0x8000FFFF (接收邮箱);0x8FFFFFFF(发送邮箱)。 然后我是把A中的AD采样数据结果寄存器中的数字量发给B,用仿真器和B连接,来观察B对应的邮箱里的数据,观察接收是否正常。 把B中的一个数值常量整型25发送给A,让A稳定输出一25V电压值。 【问题是】, 一、如果让2个DSP中的上述的4个邮箱都工作时,用示波器观测can总线上的波形:木有任何波形,就是数据没有被传送; 二、如果分别让2个DSP中的2个邮箱,就是一个发,另一个DSP接收数据,是能正常工作的。 【我是这么想的】好像是 仲裁机制的问题,优先级高的一直在占用总线,而不会退出,优先级低的始终获取不了传送数据权限。 也不知道我这样认为对不对?您是怎么处理 在2块或者多块DSP,之间进行若干个邮箱之间进行数据通信的,怎么做才能让每个邮箱都有权获取总线特权,都可以实时的进行数据传输呢? 我的qq,1083176055@qq.com期待您的回复,谢谢。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yijie692 发表于 2018-10-10 17:29 不是太理解你的描述,我的理解是 CAN总线是串行总线,无论信息帧的优先级高低,只要有信息帧抢占了总线,要等该信息帧传输完毕,其他信息帧才能在竞争总线。 所以只要低优先级的信息在总线上传输过,应该一定能被接收的。 另外如果对信息帧的实时性要求不高的话,可以考虑在规定的时间片中传输信息帧。 简单的设计,如有10条周期100ms的信息要传输,可以将100ms划分为10个10ms,在每个10ms传输一个信息帧,每100ms为1个循环,以降低信息帧间竞争总线的概率。 复杂的设计应该参考TTCAN |
|
|
|
|
|
|
|
009712 发表于 2018-10-10 17:41 非常感谢您的回复。我是这样设计的,由于是实验,我就是发送“ABCDEFG”这样的字符,循环发送,以便于动态观察寄存器的值。目前我是用定时的发送模式,让低优先级的邮箱有机会赢得总线的使用权,但这样的话速度就下来了。最终我是要用于控制3个 DC/DC变换器 模块 之间的电压电流数据通信与传递控制命令。 相关程序字段如截图:另外我想问问您有关远程帧的问题,连接如下:http://bbs.21ic.com/icview-854385-1-1.html |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1757浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1724浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 13:40 , Processed in 1.246666 second(s), Total 79, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
31140