主题中讨论的其他器件:HALCOGEN、 ADS8922B
工具/软件:Code Composer Studio
大家好、
我目前正在处理一个项目、目前我遇到了一个问题、该问题已使我的进度停止。
首先、一些可能有助于故障排除的详细信息:
>相关系统组件:
--> CCSv7
--> HALCoGen v4.07
--> RM48
--> ADS8922B
>我要实现的目标的基本概述:
-->使用 RM48从菊花链配置中获取 ADC 转换
-->将转换存储在 microSD 卡上
>当前设置/配置:
->MIBSPI1/SPI1模块连接到 ADC 菊花链(这将是我用于向 ADC 发送数据/从 ADC 接收数据的模块)
---- >我使用的菊花链拓扑直接来自 ADS892xB 数据表;已经过验证
--> SPI 模块的波特率设置为400kHz
->NCS[3]配置为 GIO 以进行位拆裂(其余 SPI 引脚为 SPI 功能)
->MIBSPI1/SPI1模块引脚映射:
RM48引脚 -> ADC 引脚 -> 简要详细信息
---- >MIBSPI1NCS_3 -> NCS -> 根据数据表、所有3个 ADC 的 NCS 线路连接在一起
---- >MIBSPI1SIMO -> SDI -> SIMO 线连接到菊花链中第一个 ADC (x 轴)的 SDI 引脚
---- >MIBSPI1SOMI -> SDO-0 -> SOMI 线连接到菊花链中最后一个 ADC (z 轴)的 SDO-0引脚
---- >MIBSPI1CLK -> SCLK -> 根据数据表、所有3个 ADC 的 SCLK 线路连接在一起
---- >GIOA_5 -> CONVST -> 所有3个 ADC 的 CONVST 线路根据数据表连接在一起
---- >每个 ADC 的每个 nRST 和 RVS 引脚都连接到 GPIO
问题:
我一直使用 Saleae 逻辑分析仪来观察相关 SPI 线路之间的通信。 我目前能够查看和验证我正在发送的数据。 我还不断从菊花链中获得某种垃圾数据响应("垃圾"意味着我目前没有将信号馈送到 ADC 进行转换、因此我得到的响应是随机值)。 我现在要做的只是成功地将我正在获取的"垃圾"存储到缓冲区中。 我正在使用 spiTransmitAndReceive()函数发送/接收数据。 **正在发送源缓冲区数据并已进行验证,但目标缓冲区最终全部为1 (这通常表示没有连接),而不是在 MISO 行上看到的内容**。
我的测试代码:
int main (空)
{
/*用户代码开始(3)*/
/*启用中断请求*/
_enable_IRQ ();
/*模块初始化*/
rtiSetup();//初始化 RTI 模块
PinLeets();//初始化 ADC 引脚电平
sciInit();//初始化 SCI (UART)模块
mibspiInit();//初始化 MibSPI 模块
spiInit();//初始化 SPI 模块
gioInit();//初始化 GIO 模块
adcInit();//初始化 ADC 模块
/*定义 CONVST 位*/
uint32 CONVST = 5;
//
//开始与 SPI 兼容的代码
//
spiDAT1_t CONFIG1;
CONFIG1.CS_HOLD = false;
CONFIG1.WDEL = true;
CONFIG1.DFSEL = SPI_FMT_0;
CONFIG1.CSNR = SPI_CS_3;
/*发送 NOP 命令以提供22*N (66)个周期*/
/*有关可接受命令的表,请参阅数据表*/
//TODO:验证尝试接收数据时是否应发送
UINT16 NOP[6]={0};
/*接收缓冲器*/
uint16 rxBuff[6]={0};
/*启动 UART 终端用户界面*/
// TexIn_UI();
while (1)
{
/*数据传输测试*/
/*------------ *
/*转换数据*/
//将 CONVST 拉为高电平以启动转换
gioSetBit (gioPORTA、CONVST、1);
//延迟
_delay_cycles (1);
//拉 CONVST LO 以停止转换
gioSetBit (gioPORTA、CONVST、0);
//延迟
_delay_cycles (10);
/*------------ *
/*[F]*/
/*直接从数据表中删除第29-30页*/
// 1)将 CS 拉低以启动数据传输帧
// CS -> LO
gioSetBit (spiPORT1、SPI_PIN_CS3、0);
// 2)提供22*N 时钟,其中 N 是菊花链中的设备数
//发送66位数据
// 11位突发
//使用 spiTransmitAndReceiveData()????
TransmitAndReceiveData (spiREG1、&config1、6、NOP、rxBuff);
// 3)将 CS HI 拉至结束数据传输帧
// CS ->高
gioSetBit (spiPORT1、SPI_PIN_CS3、1);
// 4)延迟
_delay_cycles (10);
}
/*用户代码结束*/
}
问题:
> while (1)循环中的代码是否预计会导致循环每次迭代的单次转换? (时间可能是个问题?)
>完成单次转换后,如何将该数据存储到接收缓冲区(rxBuff)中?
>尝试从外部设备接收数据时是否需要中断? 或者,为了成功接收数据,我是否只能使用 POLLING 函数 spiTransmitAndReceiveData()?
总之:
>我将使用默认的 ADC 配置(到目前为止、如有必要、可能会更改)
>我已验证发送的数据符合我的预期
>我从菊花链中获得某种类型的响应(正如萨莱阿所观察到的)。 然而、这个数据还未被验证、并且我没有成功地将数据存储到接收缓冲器中
我不能确定我现在所遗漏的是什么。 我的直觉告诉我、与外部 ADC 交谈的概念与将两个 SPI 模块设置为主和从、并在两个模块之间发送数据(外部回送)的概念相同。 我的直觉是错误的、或者我尝试执行我的想法是错误的-目前还不确定。
一如既往、感谢您的参与和考虑!