完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
[tr]我在TL138/6748/1808-EasyEVM-A3 开发板上,SPI0和SPI1互相通信,采用的三线模式。
SPI主机收不到数据。SPI0和SPI1互换主从也不行。下面是我的程序 #include "soc_C6748.h" #include "hw_psc_C6748.h" #include "spi.h" #include "psc.h" #include "hw_types.h" #include "hw_syscfg0_C6748.h" #include /****************************************************************************/ /* */ /* 宏定义 */ /* */ /****************************************************************************/ #define SIMO_SOMI_CLK 0x00000E00 #define CHAR_LENGTH 0x08 #define BufferSize 8 char SPI0_Buffer_Tx[BufferSize] = {0x01,0x02,0x04,0x08,0x08,0x08,0x08,0x08}; char SPI1_Buffer_Tx[BufferSize] = {0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18}; char SPI0_Buffer_Rx[BufferSize], SPI1_Buffer_Rx[BufferSize]; /****************************************************************************/ /* */ /* 函数声明 */ /* */ /****************************************************************************/ void PSCInit(void); void GPIOBankPinMuxSet(void); void SPI1Init(void); void SPI0Init(void); void SPITest(void); /****************************************************************************/ /* */ /* 主函数 */ /* */ /****************************************************************************/ int main(void) { PSCInit(); // 管脚复用配置 GPIOBankPinMuxSet(); // SPI1 初始化 SPI1Init(); // SPI0 初始化 SPI0Init(); // 测试 SPITest(); while(1); } /****************************************************************************/ /* */ /* PSC 初始化 */ /* */ /****************************************************************************/ void PSCInit(void) { // 使能 SPI 模块 PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_SPI1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); } /****************************************************************************/ /* */ /* SPI初始化 */ /* */ /****************************************************************************/ void SPI1Init(void) { unsigned int pin_s = SIMO_SOMI_CLK; SPIReset(SOC_SPI_1_REGS); SPIOutOfReset(SOC_SPI_1_REGS); // 配置 SPI为从模式 SPIModeConfigure(SOC_SPI_1_REGS, SPI_MASTER_MODE); // 配置SPI 时钟 SPI bus speed is 20000000Hz SPIClkConfigure(SOC_SPI_1_REGS, 150000000, 20000000, SPI_DATA_FORMAT0); // SPI管脚选择 , 3线模式 SPIPinControl(SOC_SPI_1_REGS, 0, 0, &pin_s); // 配置 SPI 发送时 MSB 优先 SPIShiftM***First(SOC_SPI_1_REGS, SPI_DATA_FORMAT0); // 设置字符长度 SPICharLengthSet(SOC_SPI_1_REGS, CHAR_LENGTH, SPI_DATA_FORMAT0); // 使能 SPI SPIEnable(SOC_SPI_1_REGS); } void SPI0Init(void) { unsigned int pin_s = SIMO_SOMI_CLK; SPIReset(SOC_SPI_0_REGS); SPIOutOfReset(SOC_SPI_0_REGS); // 配置 SPI为主模式 SPIModeConfigure(SOC_SPI_0_REGS, SPI_SLAVE_MODE); // 配置SPI 时钟 SPI bus speed is 20000000Hz SPIClkConfigure(SOC_SPI_0_REGS, 150000000, 20000000, SPI_DATA_FORMAT0); // SPI管脚选择 , 3线模式 SPIPinControl(SOC_SPI_0_REGS, 0, 0, &pin_s); // 配置 SPI 发送时 MSB 优先 SPIShiftM***First(SOC_SPI_0_REGS, SPI_DATA_FORMAT0); // 设置字符长度 SPICharLengthSet(SOC_SPI_0_REGS, CHAR_LENGTH, SPI_DATA_FORMAT0); // 使能 SPI SPIEnable(SOC_SPI_0_REGS); } /****************************************************************************/ /* */ /* 管脚复用配置 */ /* */ /*****************************************************************************/ void GPIOBankPinMuxSet(void) { // SPI0 PINMUX enable CLK、SOMI、SIMO HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(3)) |= 0x00001101; HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(3)) &= 0xffff11f1; // SPI1 PINMUX enable CLK、SOMI、SIMO HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) |= 0x00110100; HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) &= 0xff11f1ff; } /****************************************************************************/ /* */ /* SPI 联通测试 */ /* */ /*****************************************************************************/ void SPITest(void) { int m; char Tx_Idx = 0, Rx_Idx = 0; printf("test start n"); /* Transfer procedure */ while(Tx_Idx < BufferSize) { // printf(" .....n"); /* Wait for SPI1 Tx buffer empty */ while( HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & (0x20000000)); /* Send SPI0 data */ SPITransmitData1(SOC_SPI_0_REGS,SPI0_Buffer_Tx[Tx_Idx] ); /* Send SPI1 data */ SPITransmitData1(SOC_SPI_1_REGS,SPI1_Buffer_Tx[Tx_Idx] ); /* Wait for SPI0 data reception */ while( HWREG(SOC_SPI_0_REGS + SPI_SPIBUF) & (0x80000000)); /* Read SPI0 received data */ SPI0_Buffer_Rx[Rx_Idx] = SPIDataReceive(SOC_SPI_0_REGS); /* Wait for SPI1 data reception */ while( HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & (0x80000000)); /* Read SPI1 received data */ SPI1_Buffer_Rx[Rx_Idx] = SPIDataReceive(SOC_SPI_1_REGS); Tx_Idx++; Rx_Idx++; } printf("compare value n"); char i; for( i = 0; i < BufferSize; i++) { printf(" %d , %dn ",SPI0_Buffer_Rx [/tr] |
|
相关推荐
13个回答
|
|
|
我在STM32开发板上也做过类似的实验,来验证SPI通信。不知道什么原因,不知道什么原因,从机发出的一直是0. 会不会是我的从机程序有问题,大家要是有更好的从机程序,可以贴出来共享下。用开发板自己的SPI互相通信,验证起来很方便。
大家也可以拿我的程序试一下 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C6748的SPI1作为从机和STM32的SPI通信,依然是这种情况,从机发的数据一直为0,所以我希望哪位高手能够贴出一个标准的SPI从机三线模式的例程出来,让大家学习一下 |
|
|
|
|
|
|
|
|
|
|
|
.pcb{margin-right:0}
C6748DSP的SPI1作为从机,和一个STM32的SPI通信,采用三线模式。 DSP 的SPi的SCk,MOSI正常,接收到了数据,数据也正确。但是MISO引脚上却 没有数据,示波器也测不到波形。非常不理解,感觉理论上不可能,正常情况下发送和接收是同时进行的,既然接收到了数据也应该发送出数据的。 请问human 这种情况会是什么原因导致的。实在想不通哪里搞错了r |
|
|
|
|
|
|
|
|
|
|
|
貌似没有遇到过这个问题..... 这条语句是查询接收有效位 为1代表没有 数据没有接收到.......... 可能是连接问题 建议测下 SPI 时序 使用逻辑分析仪 示波器什么的 r |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
我的程序还是有问题,今天对自己的程序作了少许改动,从新测试了程序。 可以通信了,先前从机发不出数据的问题基本解决了。 但是,主机或是从机如果有数据的最高位是1,比如0x80,0xff,0xad,程序就会卡在接收判断的那个while处。 ( while( HWREG(SOC_SPI_0_REGS + SPI_SPIBUF) & (0x80000000)); ) 我是用杜邦线将开发板上的SPI连到一起的,是不是杜邦线产生的影响。或者是SPI时序设置的影响。 貌似没有遇到过这个问题.....[attachimg]1054[/attachimg] 这条语句是查询接收有效位 为1代表没有 数据接收到.......... 可能是连接问题 建议测下 SPI 时序 使用逻辑分析仪 示波器什么的 |
|
|
|
|
|
HWREG(SOC_SPI_0_REGS + SPI_SPIBUF) & (0x80000000)楼主,,我是新手学习,,我最近、也是在学习使用SPI,,就是这个语句中这个0X800000000的作用是啥啊??
|
|
|
|
|
只有小组成员才能发言,加入小组>>
【创龙TLT113-MiniEVM开发板试用体验】相关开发过程的体验,以及与毫米波雷达的联调
925 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】--MQTT通讯
926 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】问题4 ubuntu镜像,opencv不能正常工作??
1012 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】10、 Qt实现ADC采集显示和内部温度曲线监控
1461 浏览 0 评论
【创龙TLT113-MiniEVM开发板试用体验】U盘读写速度测试教程
1831 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】问题1 更换到Ubuntu镜像后,USB识别不了外设
471浏览 1评论
【创龙TL3562-MiniEVM开发板试用体验】1、从系统启动卡制作开始
720浏览 1评论
【创龙TL3562-MiniEVM开发板试用体验】Grove移植4之BUTTON
325浏览 0评论
【创龙TL3562-MiniEVM开发板试用体验】--开发板外设与接口测试
813浏览 0评论
1127浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 16:01 , Processed in 1.457054 second(s), Total 98, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2388