完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在项目中用到了贵公司的tms320c6747 dsp芯片,现在需要用到spi的dma功能,但是一直没有调通。
我用的spi口是spi0,初始化流程以及dma初始化流程如下,调试过程中调用spi dma一直没有被正确触发,是因为spi初始化不正确还是spi0dmasenddata里面的spi dma通道配置不正确?麻烦帮忙看看。多谢了! spi0初始化流程: void SetupSPI0() [ SPI0_SPIGCR0 = 0; // Reset the SPI by clearing the RESET bit // in the SPI global control register 0 (SPIGCR0) to 0 delay(100); SPI0_SPIGCR0 = 0x01; // Take the SPI out of reset by setting SPIGCR0.RESET to 1. SPI0_SPIGCR1 = 0x00000003; // MASTER MODE. SPI0_SPIPC0 = (1 << 11) | // SPIx_SOMI pin is a SPI functional pin. (1 << 10) | // SPIx_SIMO pin is a SPI functional pin. (1 << 9) | // SPIx_CLK pin is a SPI functional pin. 0; // SPIx_SCS[n] pin is a GPIO functional pin. SPI0_SPIPC1 = 1; // SPIx_SCS[n]管脚方向为输出. SPI0_SPIDAT1 = 0 | (1 << 28); // The chip select signal is held active SPI0_SPIFMT0 = 0 | (1 << 16) | // SPI clock delay. (4 << 8) | // SPI clock frequency = SPI module clock/(PRESCALE + 1) 8; // SPI data word length. SPI0_SPIDELAY = 0 | (8 << 24)| // C2TDELAY (8 << 16); // T2CDELAY SPI0_SPIGCR1 |= (1 << 24); // SPI enable. SPI0_SPIINT0 =0x10000;//使能DMA传输 ] 调用spi dma的方法: #define CSL_EDMA3_CHA_SPI0_TX 15 #define SPI0_TX_TCC 3 void spi0DmaSendData(u8 *pData, u32 len) [ //清除之前可能存在的错误状态 edma3ccRegs->SECR = (u32)0x1 << CSL_EDMA3_CHA_SPI0_TX; //clear previous bit CSL_EDMA3_CHA_UART0_RX to enable edma channel CSL_EDMA3_CHA_UART0_RX edma3ccRegs->SECR = (u32)0x1 << CSL_EDMA3_CHA_SPI0_TX; //clear previous bit CSL_EDMA3_CHA_UART0_RX to enable edma channel CSL_EDMA3_CHA_UART0_RX edma3ccRegs->ECR |= (u32)0x1 << CSL_EDMA3_CHA_SPI0_TX; //clear event CSL_EDMA3_CHA_UART0_RX edma3ccRegs->EMCR = (u32)0x1 << CSL_EDMA3_CHA_SPI0_TX; //clear previous events in channel CSL_EDMA3_CHA_UART0_RX edma3ccRegs->IECR |= (u32)0x1 << SPI0_TX_TCC; // PaRAM parameter edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].OPT = 0x6| (1<<20) |(SPI0_TX_TCC<<12); edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].SRC = (u32)pData; edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].A_B_CNT = (len<<16)|0x1; edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].DST = (u32)&SPI0_SPIDAT1; edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].CCNT = 1; edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].LINK_BCNTRLD = 0xffff; // UART2_BUFBAK_BASE 's address edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].SRC_DST_BIDX = 0x1; edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].SRC_DST_CIDX = (len<<16); //设置中断以及使能DMA edma3ccRegs->DRA[1].DRAE |= (u32)0x1 << SPI0_TX_TCC; edma3ccRegs->IESR |= (u32)0x1 << SPI0_TX_TCC; //设置IER的第TCCbit为1,使能传输完毕中断 edma3ccRegs->EESR = (u32)0x1 << CSL_EDMA3_CHA_SPI0_TX; edma3ccRegs->ESR = (u32)0x1 << CSL_EDMA3_CHA_SPI0_TX; ] 调用方式: u8 testreg[10]; spiDmaSendData((u8*)testreg,5); 现象: 调用spiDmaSendData函数后,我在ccs的watch窗口里面已经看到spi dma完成了,因为edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_SPI0_TX].CCNT=0了。 但是spi的管脚没有任何数据输出,用示波器量从spi0DmaSendData调用到dma完成(可以在edma3cc中断处理函数里看到)这段时间,没有量到任何有效的clock和spi_simo 我的问题是: 请问为何dma没有被正确的触发,是因为spi初始化不正确还是spi0dmasenddata里面的spi dma通道配置不正确? 多谢您的解答!!!! |
|
相关推荐
3 个讨论
|
|
7jfsdfsdf 发表于 2018-8-7 06:26 测试了好长时间,最后修改了edma3cc->opt= = 0x6为0x04,可以dma发送了 但是很不解,这个和数据手册上说的源/目的地址对应方式是不对应的,难道是ti的数据手册写错了? |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
694 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
605 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1065 浏览 1 评论
757 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
529 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
171浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
133浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
129浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
126浏览 12评论
GD32F303RCT6配置PA4 ADC引脚,将PA2代替key功能,PA2连接时无法实现预期功能,为什么?
64浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 20:02 , Processed in 0.873638 second(s), Total 62, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号