主题中讨论的其他部件: Energia, TLV5618A
工具/软件:Code Composer Studio
我正在使用计时器32创建延迟(所需的延迟为50us), 延迟时间随着我减少计时器寄存器中的计数而减少, 但是在特定的计数之后,延迟保持在某个值上,比如128us,如何使用 48MHz和timer32的DCO频率获得20us或更低的延迟?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我正在使用计时器32创建延迟(所需的延迟为50us), 延迟时间随着我减少计时器寄存器中的计数而减少, 但是在特定的计数之后,延迟保持在某个值上,比如128us,如何使用 48MHz和timer32的DCO频率获得20us或更低的延迟?
您好Evan:
我解决了之前遇到的问题,
1)我用timer32编写了一个代码,在具有编程延迟的样本上进行ADC
2)程序中的计数值决定延迟
3)代码有效,直到出现一定的延迟
4)我发现额外的延迟 是 由于ADC的转换时间和程序的剩余部分执行所需的时间(我删除了程序的其他部分,如ADC和UART, 程序正常 ,有所需的延迟值)
我现在需要一些关于如何减少代码另一部分造成的这种延迟的建议
我还附上了我使用的代码
Gopalakrishnan,
我首先看一下如何提高UART的波特率。您使用的是9600波特,比11.52万波特低得多。 这可能会有帮助,但关于时间安排,我不确定这是否仍能让您进入您正在寻找的窗口。
/* UART配置参数。 这些配置参数 *使eUSCI成为UART模块,以11.52万波特率运行。 这些 *值是使用TI提供 的在线计算器*计算得出的: * software-dl.ti.com/.../index.html */ const eUSI_UART_Config uartConfig ={ EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK时钟源 13, // BRDIV = 13 0, // UCxBRF = 0 37岁 // UCXBRS = 37 EUSCI_A_UART_NO_PARity, //不奇偶校验 EUSCI_A_UART_MSB_FIRST, // MSB优先 EUSCI_A_UART_ON_STOP_BIT, //一个停止位 EUSCI_A_UART_MODE, // UART模式 EUSCI_A_UART_ORTS_Ooversampling_BAUDRATE_generation // Oversampling };
如果这不起作用,我会调整代码以继续使用11.52万波特,但删除浮点到字符串转换数学运算,看看这在您的窗口中是否起作用。 最后,如果这不起作用,我会考虑在中断服务例程之外删除UART_TransmitData,而是在您的While中返回LPMx模式之前进行传输(1)。 请告诉我这是否有帮助。
Evan,
Iam Clear with the baud rate problem and I modified the codes... I must have 30 samples per cycle ... or least of 20 samples per cycle ...(Iam清除波特率问题,我修改了代码...我每个周期必须有30个样本...
谢谢你
您好Evan:
我尝试过坞站灯,它工作正常,我还有另一个疑问...在我尝试读取阵列数据时上传的代码中,如下所示,
resultsBuffer[resPos]=(curADCResult * 3.3)/1.6384万;
d=redultsBuffer[resPos];
我经常发现d处的值为0,因为此时从ADC中获取的值,可能是什么问题?
我来自印度,从9点到17点工作,在工作时间内,有没有其他办法无法获得帮助?
谢谢!
您好,Gopalakrishnan,
请查看此线程所附的代码。 我和我的一位同事坐下来,创建了一个简单的示例,说明您希望以44khz的速率跑步。 已进行了许多更改,请检查备注以了解更改。
我们还希望您更新驱动程序库并确保您使用的是Red MSP432 LaunchPad。 对较新版本的driverlib进行了许多更改,Red LaunchPad包含Rev C芯片,其中包含许多错误修复。
此代码将以原始十六进制值发送您的ADC字节,从这里我将研究您是否仍然可以使用更高的波特率(当前为1Mbaud)进行数学运算。 您可以根据需要利用ARM浮点处理单元(FPU)更快地完成数学运算,而不是在CPU上使用手动数学运算。 这可以通过CMSIS DSP库完成。 有关详细信息,请参阅此应用手册:
代码作为"Customer.c"附加
Evan,
我现在可以使用代码清除。现在我想知道以下内容是否有效?
D=((curADCResult*ADC384)*1000; 3.3
MAP_UART_HESDData(EUSI_A0_base,(uint8_t)d);
我尝试在这里执行的操作是传输以毫伏为单位的实际电压值,
如果我发送此信息并通过docklight进行可视化,我将获得什么价值?
要获得整数输出,应向docklight提供的实际值是多少?
此致
Gopalakrishnan
Evan,
我问前一个问题是因为在一个示例程序中,他们将参考电压设置为默认电压(1.2 v),但他们使用3.3 来标准化ADC值...为什么要这样做??
MAP_ADC14_configureConversionMemory (ADC_MEM0,ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A0,FALSE);
curADCResult = MAP_ADC14_getResult(ADC_MEM0);
normalizedADCRes =(curADCResult * 3.3)/ 1.6384万;
上述代码是名为ADC14_single转换重复的示例的一部分
谢谢,此致
您好,Evan:
我尝试修改代码,就像我在做一定数量的样本,然后传输它们,这样我就可以避免前一种情况下发生的延迟。这很有效...但我有两个问题
1)以前,我使用UINT8_MAX 作为结果缓冲数组,在缓冲数组中,iam应该存储ADC结果,由于数组被定义 为256的大小,现在,我修改的代码一次发送200个值, 现在我想增加数组大小,并通过将数组大小设置为resultsBuffer[UINT16_MAX]来增加在实例中发送的样本数,当我使用此参数时,它显示“我内存不足”,如何解决此问题? 下图是错误
2)在代码中,保存200个样本后,我将中断计时器,以发送存储的数据。我想再次启动计时器以再次执行相同的过程,但计时器在一个周期后停止, 如何纠正此问题?/我还附上了code..please帮助解决这些问题。
thankse2e.ti.com/.../code-gopal.txt 及此致
Gopalakrishnan
(您的答案将被验证;-) )
您好Evan:
我尝试使用示例代码,我尝试将UART接收部件与SPI部件连接起来,以便与外部生产的DAC硬件通信,在此之前,我将解释我实际需要什么,
1)以前我们讨论过模拟信号的ADC采样,现在我在一个MSP中有一个ADC数据
2)此数据必须发送到外部连接了DAC的另一MSP
3)接收MSP应通过SPI将接收到的数据发送到DAC单元
这是我的目标。
现在,
我附上了我尝试过的守则,以下是我的疑问
1)是否可以在同一电路板中为UART和SPI使用相同的时钟源SMCLK
2)我们已转移ADC值,并且一次发送8位,现在如果我接收数据并将其发送到DAC,它是否会影响系统?? (代码customer.c)
3)如何以二进制形式将14位ADC值 从MSP 1发送到MSP 2?
请帮助我更正上述代码。
谢谢,此致,
Gopalakrishnan