完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
10个回答
|
|
你好,
MIBSPI相对于标准SPI来说,功能上差别不是很大,简单点说就是增加了一个buffer,同时支持transfer group的工作方式。同时MIBSPI可以工作在标准SPI的模式,他们的管脚定义都是一模一样的。 针对于你的应用,需要实现2个MCU进行通信,通信的数据时十几个字节,我建议你还是采用MIBSPI的工作方式。因为在这种大数据吞吐量的工作模式下,MIBSPI会比SPI的性能更好。 Ken BR, KEN |
|
|
|
Hi Liang,
MibSPI在标准SPI模式工作时,可以通过SPIDATA0来发送数据,但还是建议你使用SPIDATA1来发送,因为在SPIDATA1中可以配置一起数据格式。 在MibSPI模式下,与标准SPI相比,有一个传输组的概念( TG),也就是你可以事先配置好发送的传输组、接收的传输组,这样可以连续发送和接收多个数据,对于多字节的数据通讯很有帮助。此外,TG除了可以用软件也控制发送,还可以由硬件的一些事件来触发传输。另外,MibSPI还支持DMA。 更详细的说明,请参考TRM。 Regards, Jay |
|
|
|
小Qhhui 发表于 2018-6-21 01:27 多谢解答。 另,目前我在用标准SPI方式调试。关于SPI的“接收/发送中断”有些疑惑: 使用HalCoGen工具时,发现SPI2模块的中断使能TXINT和RXINT只能二者择其一,中断线可以自由选择Low Level/High Level。由此引起我对接收/发送中断的疑问。我的理解如下: 发送中断使能后,在TXINTFLG置1后产生中断,即TXBUF为空的时间点(=数据刚移到shift Register=移位操作前):在中断函数里将源数据写入DAT1; 接收中断使能后,在RXINTFLG置1后产生中断,即数据被移到SPIBUF的时间点(=移位操作后):在中断函数里将接收数据写入目标数据区。 以主机为例,虽然发送数据的同时也接收从机数据,但从时间上来看,主机的接收中断和发送中断产生的时间点应该是不同的,所以发送/接收中断可以选择同一条中断线,High Level或Low Level。 不知道上面的理解是否正确?那么,HalCoGen工具为什么只能二者择其一呢? 一般来讲,RXINT、TXINT和其他中断的中断线如何选择更合适?哪个为level 0,哪个为level 1? 多谢。 |
|
|
|
你好,请问怎样用两个mibspi通信,有没有例子啊 ,发我一份谢谢!
|
|
|
|
HalcoGen里好像有例程吧?而且它会自动生成一些基本函数的,可以参考。 |
|
|
|
我用的RM950的开发板,用mibspi与两个CPU通信时,发现数据一直不能发送成功。我是用halcogen生成的代码。 //master void main(void) [ /* USER CODE BEGIN (3) */ uint16 tx[10] = [1,2,3,4,5,6,7,8,9,10]; uint16 rx[10] = [0]; mibspiInit(); //mibspiGetData(mibspiREG5,0,&data[0]); //mibspiEnableLoopback(mibspiREG1,Analog_Lbk); mibspiSetData(mibspiREG5 0, tx); mibspiTransfer(mibspiREG5, 0); while(!(mibspiIsTransferComplete(mibspiREG5,0))); mibspiGetData(mibspiREG5,0,rx); while(1); /* USER CODE END */ ] //slave void main(void) [ /* USER CODE BEGIN (3) */ uint16 rx[10] = [0]; mibspiInit(); while(1)[ mibspiGetData(mibspiREG5,0,rx); ] while(1); /* USER CODE END */ ] 一直接收不到数据啊!!!!真急人,主要帮我看看slave的接收函数是否正确????????感激涕零!!!!!!!! |
|
|
|
bleupealike 发表于 2018-6-21 02:21 ron, salve端的函数不能单单只用一个接收函数。 另外需要加入mibspiSetData()和mibspiTransfer()。同时接收之前还需要加入类似于while(mibspiIsTransferComplete(mibspiREG1, 0)==1)的条件判断语句,不然接收端数据时不会成功的。 Ken BR, KEN |
|
|
|
lining870815844 发表于 2018-6-21 02:31 //master void main(void) [ /* USER CODE BEGIN (3) */ uint16 tx[8] = [0xAAAA,0xAAAA,0xAAAA,0xAAAA,0xAAAA]; uint16 rx[8] = [0]; mibspiInit(); mibspiSetData(mibspiREG5,0,tx); mibspiTransfer(mibspiREG5,0); while(mibspiIsTransferComplete(mibspiREG5,0) ==FALSE) [ ; ] mibspiGetData(mibspiREG5,0,rx); while(1); /* USER CODE END */ ] //slave void main(void) [ /* USER CODE BEGIN (3) */ uint16 tx[16] = [1,2,3,4,5,6,7]; uint16 rx[16] = [0]; mibspiInit(); mibspiSetData(mibspiREG5,0,tx); mibspiTransfer(mibspiREG5,0); while(mibspiIsTransferComplete(mibspiREG5,0)==FALSE )//让从等待 [ ; ] mibspiGetData(mibspiREG5,0,rx); while(1); /* USER CODE END */ ] 还是接收不到数据啊????急人,,,谢谢 |
|
|
|
Hi ron, 两个方面需要再确认一下: 1. 硬件连线方面,MOSI和MOSI相连,MISO和MISO相连,CS和CLK连好。另外注意CS具体选了哪根信号线,在主机和从机相应的寄存器里面都是设置对的CS信号。 2. 主机从机发送和接收的数据长度要一致,注意编程的规范性。 希望这些对你有点帮助 ken BR, KEN |
|
|
|
lining870815844 发表于 2018-6-21 02:45 现在数据能接收成功,但是只RxBuf有数据,但是缓冲ram没数据? 怎样设置接收缓冲? 谢谢! |
|
|
|
只有小组成员才能发言,加入小组>>
537 浏览 1 评论
390 浏览 1 评论
589 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
838 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
689 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
139浏览 29评论
753浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
294浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
251浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
101浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 05:31 , Processed in 0.973274 second(s), Total 65, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号