完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请问如何以查询的方式使用SPI收发数据?C6748
|
|
相关推荐
9 个讨论
|
|
现在CLK SIMO信号都是有的,CS也是有的,就是SOMI不正常,一直是高电平,而且rx读出来都是0x00 初始化程序是改自开发板: //** Configures SPI Controller static void SetUpSPI(void) [ unsigned char cs = 0x20;//0x04;****************** unsigned char dcs = 0x20;//0x04;****************** unsigned int val = SIMO_SOMI_CLK_CS5; SPIReset(SOC_SPI_0_REGS); SPIOutOfReset(SOC_SPI_0_REGS); SPIModeConfigure(SOC_SPI_0_REGS, SPI_MASTER_MODE); SPIClkConfigure(SOC_SPI_0_REGS, 150000000, 1000000, SPI_DATA_FORMAT0);//SCLK原为1M SPIPinControl(SOC_SPI_0_REGS, 0, 0, &val); SPIDefaultCSSet(SOC_SPI_0_REGS, dcs); /* Configures SPI Data Format Register */ SPIConfigDataFmtReg(SPI_DATA_FORMAT0); /* Selects the SPI Data format register to used and Sets CSHOLD * to assert CS pin(line) */ SPIDat1Config(SOC_SPI_0_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs); /* map interrupts to interrupt line INT1 */ SPIIntLevelSet(SOC_SPI_0_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL); /* Enable SPI communication */ SPIEnable(SOC_SPI_0_REGS); ] //** Configures Data Format register of SPI static void SPIConfigDataFmtReg(unsigned int dataFormat) [ /* Configures the polarity and phase of SPI clock */ SPIConfigClkFormat(SOC_SPI_0_REGS,(SPI_CLK_POL_HIGH | SPI_CLK_INPHASE),dataFormat);//SPI_CLK_POL_HIGH SPI_CLK_OUTOFPHASE //SPIConfigClkFormat(SOC_SPI_0_REGS,(SPI_CLK_POL_LOW | SPI_CLK_INPHASE),dataFormat); /* Configures SPI to transmit MSB bit First during data transfer */ SPIShiftM***First(SOC_SPI_0_REGS, dataFormat); /* Sets the Charcter length */ SPICharLengthSet(SOC_SPI_0_REGS, CHAR_LENGTH, dataFormat); ] //** Enables SPI Transmit and Receive interrupt.** Deasserts Chip Select line. static void SpiTransfer(void) [ SPIIntEnable(SOC_SPI_0_REGS, (SPI_RECV_INT | SPI_TRANSMIT_INT)); while(flag); flag = 1; /* Deasserts the CS pin(line) */ SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 0x20); ] //** Data transmission and receiption SPIIsr void SPIIsr(void) [ unsigned int intCode = 0; IntEventClear(SYS_INT_SPI0_INT); intCode = SPIInterruptVectorGet(SOC_SPI_0_REGS); while (intCode) [ if(intCode == SPI_TX_BUF_EMPTY) [ SPITransmitData1(SOC_SPI_0_REGS, tx_data); SPIIntDisable(SOC_SPI_0_REGS, SPI_TRANSMIT_INT); ] if(intCode == SPI_RECV_FULL) [ rx_data = (short)SPIDataReceive(SOC_SPI_0_REGS); flag = 0; SPIIntDisable(SOC_SPI_0_REGS, SPI_RECV_INT); ] intCode = SPIInterruptVectorGet(SOC_SPI_0_REGS); ] ] |
|
|
|
|
|
zsyat 发表于 2018-8-2 07:11 你单步调试一下这个函数,看看是什么情况 while (intCode) [ if(intCode == SPI_TX_BUF_EMPTY) [ SPITransmitData1(SOC_SPI_0_REGS, tx_data); SPIIntDisable(SOC_SPI_0_REGS, SPI_TRANSMIT_INT); ] if(intCode == SPI_RECV_FULL) [ rx_data = (short)SPIDataReceive(SOC_SPI_0_REGS); flag = 0; SPIIntDisable(SOC_SPI_0_REGS, SPI_RECV_INT); ] intCode = SPIInterruptVectorGet(SOC_SPI_0_REGS); ] ] |
|
|
|
|
|
zsyat 发表于 2018-8-2 08:04 你好,要使用SPI接口的不同的spi设备,需要使能不同的cs信号。可以通过SPI Default Chip Select Register (SPIDEF)来使能不同的片选信号。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
336 浏览 1 评论
529 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
774 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
651 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1130 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
58浏览 29评论
142浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
252浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
201浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
57浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 11:01 , Processed in 1.225878 second(s), Total 84, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号