完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的应用程序需要在从属模式下通过 LPSPI 端口从外部 A/D 转换器接收数据。A/D 转换器将 LPSPI2 的 PCS0 驱动为低电平,并使用 SCK 和 SIN 将数据计时到 RT1176。不会使用 RT1176 SOUT。所有 GPIO 引脚都已使用,因此我无法为 SOUT 分配引脚。我希望我可以在输入 SIN 并通过 CFGR1[PINCFG] 输出的情况下使用半双工,但为了避免争用,我不希望 SIN 在输出方向上。
有人可以确认我可以通过设置 TCR 中的 TXMSK 位强制 SIN 始终为半双工模式的输入吗? 我已经多次阅读 RT1170 参考手册中的第 70 章 LPSPI 部分。我花了一段时间才意识到,在使用半双工模式时,TXMSK=1 使 SIN 保持在输入方向。如果我有这个错误,请告诉我。 如果有描述 LPSPI 半双工如何工作的应用说明,也请告诉我。 // LPSPI SIN 引脚,该引脚必须始终为输入。切勿在其数据 LPSPI 连接上传输 // 到 ADC。 slaveConfig.pinCfg = kLPSPI_SdiInSdiOut; // 我们不会输出任何东西 slaveConfig.dataOutConfig = kLpspiDataOutTristate; // 三态数据输出 // 初始化 LPSPI 从接口。 // 请注意,slaveConfig.whichPcs 中的 PCS#(外设片选) // 仅用于配置极性。PCS# 选择 // 必须在下面单独完成。 LPSPI_SlaveInit (ADC_DATA_LPSPI_SLAVE_BASEADDR, &slaveConfig); //清除缓冲区以在 ISR 中通过 LPSPI 接收 ADC 数据。 for (unsigned i = 0; i < SLAVE_RX_DATA_MAX; i++) { _slaveRxData = 0; } // 设置 Receiver FIFO water mark 以便 LPSPI 仅在有完整数据包时中断。 // 有关详细信息,请参阅 LPSPI2_IRQHandler() 顶部的注释。 #define ADC_DATA_RECEIVE_WATERMARK (16-1) // 当有 16 个字节时中断。即大于15. LPSPI_SetFifoWatermarks(ADC_DATA_LPSPI_SLAVE_BASEADDR, 0, ADC_DATA_RECEIVE_WATERMARK); // 当 xmit FIFO 为空时禁用 LPSPI“停止传输”以防止传输 FIFO 欠载错误。 // 注意这可能是 N/A,因为在从属模式下运行,但是 NXP 的从属演示代码 // 接收是这样做的,所以现在复制它。 LPSPI_Enable(ADC_DATA_LPSPI_SLAVE_BASEADDR, false); ADC_DATA_LPSPI_SLAVE_BASEADDR->CFGR1 &= (~LPSPI_CFGR1_NOSTALL_MASK); LPSPI_Enable(ADC_DATA_LPSPI_SLAVE_BASEADDR,真); //刷新 FIFO,清除状态,禁用所有 LPSPIx 中断。 LPSPI_FlushFifo(ADC_DATA_LPSPI_SLAVE_BASEADDR,真,真); LPSPI_ClearStatusFlags(ADC_DATA_LPSPI_SLAVE_BASEADDR,kLPSPI_AllStatusFlag); LPSPI_DisableInterrupts(ADC_DATA_LPSPI_SLAVE_BASEADDR,kLPSPI_AllInterruptEnable); // 选择数据准备就绪时 ADC 将驱动为低电平(及其 ODR 输出)的 PCS#。 LPSPI_SelectTransferPCS(ADC_DATA_LPSPI_SLAVE_BASEADDR, ADC_DATA_LPSPI_SLAVE_PCS); // 设置为半双工,因此可以将通常作为 SDO 输出的 GPIO // 用于其他目的。仅从 ADC 接收。需要禁用传输方向。 ADC_DATA_LPSPI_SLAVE_BASEADDR->TCR |= LPSPI_TCR_TXMSK_MASK; // 为 LPSPI 外设启用 NVIC(嵌套向量中断控制器)。 启用IRQ(ADC_DATA_LPSPI_SLAVE_IRQN); // TCR 也共享 FIFO,因此在启用中断之前等待 TCR 写入。 而 (LPSPI_GetTxFifoCount(ADC_DATA_LPSPI_SLAVE_BASEADDR) != 0) { ; } //启用帧完成和接收中断。 LPSPI_EnableInterrupts(ADC_DATA_LPSPI_SLAVE_BASEADDR, (kLPSPI_FrameCompleteInterruptEnable | kLPSPI_RxInterruptEnable)); |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1906个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36358 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4395 浏览 0 评论
6050 浏览 1 评论
6763 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4212 浏览 0 评论
619浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
614浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
605浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
796浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:40 , Processed in 1.030096 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号