大家好,
我打算用PC的串口进行DSP和Matlab之间传递数据,急求DSP读写PC串口的程序,我的板子是EVM6678L,CCS是v5.0.3版本。
非常感谢!
noaming:
BIOS-MCSDK-02-00-05-17\mcsdk_2_00_05_17\tools\post\evmc6678l这个例子,就是C6678通过串口向PC发送信息。
Melody Chen:
补充一下,Titan提供的例子是MSCDK的POST工具例程,POST是“上电自检程序”,详细解释在此:processors.wiki.ti.com/…/BIOS_MCSDK_2.0_User_Guide
POST主要是实现对板上的外设做一些简单的测试看是否运行正常,比如进行“External memory read/write test, NAND read test, UART write test, LED test”等,测试完后将测试结果写给UART。
所以可以参考在例程中(主要看src文件夹下的post.c)的post_write_uart函数,此函数既用于测试UART口,又用于将所有测试结果写给UART口。
Yang Lu:
回复 Melody Chen:
Melody您好,
感谢您的回复!我正在看post.c的例程,请问这个例程是不是只能写串口,是否可以读串口的数据呢?因为我的应用需要DSP和Matlab进行数据交换,所以既要写串口也要读串口。
谢谢!
noaming:
回复 Yang Lu:
Melody的描述非常准确。
读串口和写串口的函数都有,都来自MCSDK-02-00-05-17\pdk_C6678_1_0_0_17\packages\ti\platform\evmc6678l\platform_lib的函数库。你可以查看一下。
Yang Lu:
回复 Melody Chen:
Melody您好,
我在测试post的例程,例程可以成功运行并在串口上打印出结果,但是只能打印在USB的串口上,而不打印在RS-232的串口上面。我想通过RS-232的串口与Matlab传递数据,请问该如何设置呢?
谢谢!
noaming:
回复 Yang Lu:
板子上不是配备有一个跳冒,可以来选择USB串口和RS232串口吗?
Yang Lu:
回复 noaming:
Titan您好,
请问我想只用platform_uart_read和platform_uart_write函数该怎么运用?我加了很多头文件等,但是仍然不能把这两个函数单独使用,只有把整个post工程load进去才行,但post里面有很多我不需要的函数。请教一下我需要加载哪些文件才能使用这两个函数呢?
谢谢!
Melody Chen:
回复 Yang Lu:
platform_uart_read和platform_uart_write函数的定义是在需要函数库头文件platform.h里面。
您可以从
includes–>\pdk_C6678_1_0_0_17\packages\ti\platform\evmc6678l\platform_lib —->platform.h —->找到platform_uart_init, platform_uart_write和platform_uart_read
noaming:
回复 Melody Chen:
你好,Melody的说法很准确,其实POST用的就是
pdk_C6678_1_0_0_17\packages\ti\platform\evmc6678l\platform_lib 库,所以你只要把这个库的头文件和库文件加到你的工程路径中,就可以用了。
Yang Lu:
回复 noaming:
Titan您好,
我加了头文件和文件库,现在可以编译通过并运行了,但是我运行写串口程序,串口上只打印出所要写的第一个字母。如下是我的程序:
#include <string.h>
#include "ti\platform\platform.h"
#include "ti\platform\resource_mgr.h"
/* OSAL functions for Platform Library */
uint8_t *Osal_platformMalloc (uint32_t num_bytes, uint32_t alignment)
{
return malloc(num_bytes);
}
void Osal_platformFree (uint8_t *dataPtr, uint32_t num_bytes)
{
/* Free up the memory */
if (dataPtr)
{
free(dataPtr);
}
}
void Osal_platformSpiCsEnter(void)
{
/* Get the hardware semaphore.
*
* Acquire Multi core CPPI synchronization lock
*/
while ((CSL_semAcquireDirect (PLATFORM_SPI_HW_SEM)) == 0);
return;
}
void Osal_platformSpiCsExit (void)
{
/* Release the hardware semaphore
*
* Release multi-core lock.
*/
CSL_semReleaseSemaphore (PLATFORM_SPI_HW_SEM);
return;
}
int post_write_uart
(
char* msg
)
{
uint32_t i;
uint32_t msg_len = strlen(msg);
/* Write the message to the UART */
for (i = 0; i < msg_len; i++)
{
if (platform_uart_write(msg[i]) != Platform_EOK)
{
return -1;
}
}
return 0;
}
void main(void)
{
post_write_uart("HELLO");
}
其中OSAL部分我不清楚是什么意思,但是去掉的话不能编译通过。执行上述程序后,串口只打印H,而不是HELLO。请问这是为什么呢?
谢谢!