完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
您好:
在用SPI DMA SLAVE 方式与设备传输时,大概率出现数据传输错误,感觉像是CLK不匹配导致。现在MASTER SPI CLK是12M,SLAVE方式时CLK 应该与MASTER同步。cc3200对时钟有什么要求么?需要连续时钟吗?有没有特殊的同步机制。下面是spi的初始化代码,麻烦帮忙看看有什么问题,谢谢。 MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI), SPI_IF_BIT_RATE,mode,SPI_SUB_MODE_3, (chip_select | SPI_4PIN_MODE | SPI_TURBO_OFF | SPI_CS_ACtiVELOW | SPI_WL_8)); MAP_SPIIntRegister(GSPI_BASE,interrupt_handler); MAP_SPIFIFOLevelSet(GSPI_BASE, 1, 1); MAP_SPIFIFOEnable(GSPI_BASE, SPI_RX_FIFO); MAP_SPIFIFOEnable(GSPI_BASE, SPI_TX_FIFO); MAP_SPIDmaEnable(GSPI_BASE,SPI_RX_DMA); MAP_SPIDmaEnable(GSPI_BASE,SPI_TX_DMA); MAP_SPIWordCountSet(GSPI_BASE, SPI_DMA_MAX_LENGTH); MAP_SPIIntEnable(GSPI_BASE, SPI_INT_EOW); MAP_SPIEnable(GSPI_BASE); SPI_DMA_MAX_LENGTH 为1024; Transfer的设置: MAP_SPIDisable(GSPI_BASE); UDMASetupTransfer(UDMA_CH30_GSPI_RX, UDMA_MODE_BASIC, dma_size, UDMA_SIZE_8, UDMA_ARB_1, (void *) (GSPI_BASE + MCSPI_O_RX0), UDMA_SRC_INC_NONE, rx, UDMA_DST_INC_8); UDMASetupTransfer(UDMA_CH31_GSPI_TX, UDMA_MODE_BASIC, dma_size, UDMA_SIZE_8, UDMA_ARB_1, tx, UDMA_SRC_INC_8, (void *) (GSPI_BASE + MCSPI_O_TX0), UDMA_DST_INC_NONE); MAP_SPIEnable(GSPI_BASE); |
|
相关推荐
4个回答
|
|
作为主机模式应该没有大问题吧?是全错误呢,还是偶尔错误。你降低一下CLK试试有没有改观。
其中TI给的有那个例程,看看有没有类似的例子,我知道有个主机模式的例子。没试过从机,最近重装没安装那个软件。 |
|
|
|
可以参考一个SPI DMA的例子,
https://github.com/severin-kacianka/cc3200_dma_spi_example/ cc3200_dma_spi_example Here are two examples that show how to use SPI with DMA and FIFO on the CC3200. I hope that they are a useful starting point for anyone, who wants to work on SPI and DMA in the future. The examples are compiling fine on Linux with gcc 4.9.3 from http://launchpad.net/gcc-arm-embedded. All you need to change is the path for the SDK in the Makefile. The hardware setup is similar to the SPI example in the SDK: just connect two CC3200 via cable (Pins GND, P05, P06, P07 and P08). I have set the following jumpers: J6, J7, J8. J9. J10, J11, J12, J13. simple_spi_transfer is an example of an SPI transfer without DMA and FIFO. The master sends a buffer to the slave, reads it back in the next transfers and verifies the checksums. transfer_1024_byte implements a simple SPI/DMA transfer that will transfer 1024 (or whatever DMA_SIZE is set to) bytes from the master to the slave and back. It then calculates the buffer's CRC checksum and (on the master) compares the send checksum to the received checksum. transfer_64k shows how to transfer a 64k buffer from the master to the slave and back again. windows contains a Makefile send to me by Matt van de Werken that also works using the Launchpad tools in a Cygwin enviroment |
|
|
|
潘涛12345 发表于 2018-6-21 02:11 谢谢,dma可以跑通,最后查出来是飞线干扰的问题 |
|
|
|
asa1253 发表于 2018-6-21 02:27 谢谢,dma可以跑通,最后查出来是飞线干扰的问题 |
|
|
|
只有小组成员才能发言,加入小组>>
348 浏览 1 评论
543 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
786 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
658 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1140 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
76浏览 29评论
251浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
261浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
209浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
67浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 15:09 , Processed in 0.845330 second(s), Total 51, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号