我需要在DSPS外设模式应用程序运行时同时使用UART1和UART2。
基本上在我们的设计中,我们将有两个设备连接到UART1和UART2串行总线。对于当前的dsp源代码,如何使用UART1和UART2是在编译时通过CFG_PRINTF_UART2标志确定的。如果设置了CFG_PRINTF_UART2,则使用UART2驱动程序。如果不是,将使用UART1将消息发送到控制台。
UART1或UART2可以被选择和调用传递消息到附加设备(通过GPIO引脚分配)?我不需要在任何给定的时间调用它们,只要它们可以按顺序被选择和调用。
谢谢,
- khai
设备:
凯瑟你好,
谢谢你到达我们。我正在调查您的查询,并在找到解决方案时更新您。
问候,
信用证
我继续并在da1458x_config_basic.h中插入下面的#define,以查看是否可以按照原来的方式运行DSPS,以便它将文本从电话发送到Tera Term控制台。
#define cfg_printf.
#define cfg_printf_uart2.
我还在下面的UART_TX_CALLBACK()中更改了USER_SPS_SCHEDULER.C文件中的行
uart_sps_write()到uart2_write(),因此它将调用UART2驱动程序来将消息写出来。
静态void UART_TX_CALLBALL(UINT8_T RES)
{
静态uint8_t大小= 0;
uint8_t * peripheral _tx_ptr = NULL;
//函数从uart传输isr或应用程序被调用时,它不运行
开关(res)
{
案例UART_STATUS_OK:
//获取数据和指针
size = user_periph_pull(&periph_tx_ptr,size);
打破;
案例UART_STATUS_INIT:
size = user_buffer_read_address(&ble_to_periph_buffer,&periph_tx_ptr,tx_callback_size);
打破;
默认:
assert_error(0);//错误:从未知来源调用回调
}
//如果有可用的数据,发送数据通过periph
如果(大小> 0)
{
UART2_WRITE(PERIPH_TX_PTR,SIZE,&UART_TX_CALLBALL);
/ / uart_sps_write (periph_tx_ptr、大小&uart_tx_callback);
返回;
}
//在缓冲区中没有数据,所以回调完成
callbackbusy = false;
}
没有什么是没有写成控制台。FW不显示任何错误。如果您不介意,您可以尝试上面的代码,看看你是否可以看到相同的结果。
谢谢,
- khai
凯瑟你好,
将数据写入UART的最新问题应该是由于引脚配置造成的。为了查看配置,我需要查看实现。上传你的项目以供审查是否可行?
另外,是基于SDK5.0.2还是SDK5.0.3的DSP?你能崇拜这个吗?
问候,
信用证
确定。我使用SDK 5.04。
谢谢,
- khai
凯瑟你好,
您是否可以验证此应用程序使用哪种devkit?
和FYI,您正在处理的DSP(如果我参考右侧)是基于我们的SDK5.0.3版本。
问候,
信用证
基本的设备
潘文凯,
如何将UART连接到控制台。是通过车载USB还是使用额外的硬件?
问候,
Leepeng
我正在使用SPI引脚配置J4连接器的第二个右侧的基本套件上,使用P0_4跳转,因此我可以获得控制台打印(使用此设置,因为我正在测试SPI闪存读/写和打印到控制台。我相信SPI_FLASH正在使用UART2进行控制台打印。
谢谢,
- khai
潘文凯,
因此,在代码中,我看到您同时启用了uarts (UART1和UART2)。您是否试图通过USB连接使用两种uarts进行编写?
您只能通过板载USB使用其中一个uart,为了同时使用它们,您需要另一个FTDI转换器,以便您可以连接到USB。
你能确认你的第二个问题是只需要UART2还是UART1吗?
问候,
信用证
你可以看到我想做什么。我试图使用uart2_write()而不是uart_sps_write()来将消息写入控制台,它不能工作。我只是在测试是否可以通过我的设置看到uart2_write输出到控制台。本质上,我需要UART1和UART2在我们的设计中工作。
以下三种情况中的一种可能在任何给定的时间发生。
1.消息UART1
2.消息UART2
3.消息发送给两个UARTs(如果我不能在一个写调用中发送给两个,那么我按顺序发送它们是可以的)
通过简单地将uart2_write()替换为uart2_write(),为什么它不能工作(没有看到文本消息的控制台打印),因为我已经为UART2配置了GPIO端口和引脚分配。现在,我只是在测试UART2。
完成这些操作后,我需要连接另一条FTDI电缆,以查看到UART1和UART2的控制台输出。我确实有电缆但无法按照一位医生的指示让它工作。如果你能告诉我怎么做,我将非常感激。我迟早需要这样做来检查连接。
谢谢,
- khai
凯瑟你好,
我已经审查了该项目,UART2正在工作。所以这里是您必须使用UART2写入串行终端的设置。
为了连接UART2,您需要将port0_4和port0_5分配给UART端口和PIN in user_periph_setup.h,以便引脚FTDI引脚连接到UART2。
注意:确保你禁用这些相同的引脚为UART1,因为会有分配冲突。
并且,在Basic DevKit上,在UART配置中配置baord。
使用UART2_WRITE()函数将数据写入终端。
问候,
信用证
嗨LC,
如果你对我的项目做了关于GPIO设置的更改,请发送给我你所做的使UART2工作的差异。我很难按照你回复的信息中的指示去做。
但是,请执行您所建议的内容只会使UART2写入和禁用UART1。我的目标是能够在任何给定时间发送给UART1,UART2或两者的消息?可以配置UART1和UART2,以便在运行时使用它们?那是我的原始问题。我需要能够做到:
1.信息到UART1从手机应用程序
2.从手机应用程序到UART2的消息
3.message to both UARTs从手机应用程序(如果我不能发送到两个在一个写调用,那么它是ok的,我发送他们顺序)
谢谢,
- khai
凯瑟你好,
我正在查询您的查询,同时使用两个UART。我首先审查了你的UART2问题,看看为什么UART2不起作用。我正在向您上传项目和差异,请参阅此线程。话虽如此,我正在探索同时使用案例,并将更新您。
注意:修改可以在语句前用注释“CHANGES”标识。
问候,
信用证
嗨LC,
谢谢你帮我找到解决办法。你有关于这个话题的最新进展吗?
谢谢,
- khai
凯瑟你好,
是的,您可以同时使用这两种uart。你要做的就是定义"cfg_printf_uart2.“正如你现在所做的那样。引脚定义和预订都是好的。UART1上(0_4,0_5)和UART2上(1 _2, 1 _3).
然而,对于UART1您需要使用该功能uart_write ()和UART2使用功能uart2_write ()如文件中定义的那样“uart.h”
您可以使用UART1的Onbord FTDI连接和UART2的外部FTDI。
如果您对此有任何疑问,请告诉我。
问候,
信用证
好了,好了。我明天会尝试一下,让你知道。你在我发给你的DSP项目上尝试过吗?此外,如何将外部FTDI电缆连接到J4标题?如果你可以通过如何跳过J4标题来跳过uart1和uart2的编写控制台输出,这将是很棒的。
谢谢,
- khai
确定……
是的,我用你发给我们的项目做了测试。
所以,J4上的连接是这样的:
Header_pin11……port0_pin4 (UTX)连接FTDI T_RxD(根据原理图)
header_pin13 ... port0_pin5(urx)连接到ftdi t_txd(根据原理图)
header_pin5 ... port1_pin3(分配给UTX)连接到FTDI T_RXD(另一个基本套件)
Header_pin6……port1_pin2(分配给URX)连接到FTDI T_TXD(另一个BASIC套件)
注意:如果您没有其他基本套件,则需要使用任何兼容的FTDI转换器
在连接和断开事件时,我尝试将一些数据写入UART和UART2。
问候,
信用证
嗨LC,
所以我删除所有的函数调用引用在uart_sp .h到调用在uart.h在user_sps_scheduler.c?uart_sps.c和uart.c之间的区别是什么?为什么DSPS不简单地使用uart.c函数调用控制台读/写,而是创建自己的uart_sps.c?
谢谢,
- khai
嗨LC,
我只是有时间开始寻找连接外部FTDI电缆的第二个UART输出。我有在UM-B- 38文档8.1节描述的FTDI电缆基本套件的硬件设置。
我每张附图订购了这个确切的电缆。但是,不,我正在看它,我仍然无法弄清楚跳出J4标题以获得UART1和UART2控制台输出。我的问题是:
1.我的板目前是基于UART模式的跳跃,每个示意图旁边的J4头。这允许我在运行DSPS外设FW时使用UART1编写控制台输出。现在,我已经在(1_2,1_3)上添加了UART2 GPIO配置。我有外部FTDI电缆,如何使用该电缆输出UART2数据?
2.FTDI转换器电缆有6根线。根据您上面的指示,
header_pin5 ... port1_pin3(分配给UTX)连接到FTDI T_RXD(另一个基本套件)
Header_pin6……port1_pin2(分配给URX)连接到FTDI T_TXD(另一个BASIC套件)
我是否只需将6根FTDI电缆Rx(黄色线)中的2根线连接到基本套件的第5脚,并将Tx(橙色线)连接到第6脚?为了清楚起见,我附上了电缆连接的图片。
谢谢,
- khai
嗨LC,
请您回复我的问题。直到我再次得到你的帮助,我暂时陷入困境。
谢谢,
- khai
凯瑟你好,
对于您的第一个问题,DSP是串行数据传输的蓝牙版本。因此,它包括像UART_SPS_WRITE()这样的函数,以将数据置于蓝牙或通过蓝牙接口接收数据。如果查看实现,UART_WRITE()和UART_SPS_WRITE()具有类似的实现,只有前者就是写入外围设备,稍后正在通过BLE发送数据。
您不需要用uart_write()替换uart_sps_write()。相反,如果希望将数据写入uart或uart2外设,只需为各自的uart实现一个回调函数。
问候,
信用证
凯瑟你好,
1.我的板目前是基于UART模式的跳跃,每个示意图旁边的J4头。这允许我在运行DSPS外设FW时使用UART1编写控制台输出。现在,我已经在(1_2,1_3)上添加了UART2 GPIO配置。我有外部FTDI电缆,如何使用该电缆输出UART2数据?
首先,使用PCB上打印的配置,您可以使用UART1通过连接到Devkit的Mini-USB将数据写入PC / Mac上的串行端子。
现在您可以使用FTDI电缆连接到DevKit上的UART2,并将电缆的另一端连接到您的PC/MAC。打开终端的2个单独实例以连接到每个端口,您将能够通过UART1和UART2进行通信。
2.FTDI转换器电缆有6根线。根据您上面的指示,
header_pin5 ... port1_pin3(分配给UTX)连接到FTDI T_RXD(另一个基本套件)
Header_pin6……port1_pin2(分配给URX)连接到FTDI T_TXD(另一个BASIC套件)
我是否只需将6根FTDI电缆Rx(黄色线)中的2根线连接到基本套件的第5脚,并将Tx(橙色线)连接到第6脚?为了清楚起见,我附上了电缆连接的图片。
对于连接,您需要将发送,接收和GND连接到FTDI转换器。请确保Connected Connected Connect,否则不会进行沟通。即将到来的传输和接收,命名约定可能有时会令人困惑,因此只需将基本套件上的TX连接到FTDI上的RX和RX上的基本套件上的RX到FTDI上的TX。如果您认为没有通信只会交换TX和RX线。
这应该能解决你的问题。如果你有任何问题,请让我知道。再次感谢大家的耐心等待。
最好的
信用证
你好,信用证,
谢谢你的提示。与外部FTDI电缆TX和RX线的物理连接现在连接到J4 GPIO引脚。我现在能够通过一个问题来获得UART打印到控制台。UART1输出到TERATERM现在已损坏,UART2输出很好。UART1是板载串行输出,而UART2是FTDI连接。
如果你不介意,请使用我发给你的原始项目样品开始。然后应用这个附加到项目的新的user_sps_scheduler.c文件。构建代码并将其加载到580 Basic Kit中。在手机上运行dsp Android应用程序,并发送一些短信。您将看到UART1输出(uart_sps_write())已损坏,而UART2输出(uart2_write())完好。
根据您的建议(附加代码),我创建了一个回调函数UART_BOTH_TX_CALLBACK()来写入UART1和UART2。这是您可以帮助为什么可以帮助的地方。该函数下面粘贴讨论:
静态void UART_BOTH_TX_CALLBALL(UINT8_T RES)
{
静态uint8_t大小= 0;
uint8_t * peripheral _tx_ptr = NULL;
//函数从uart传输isr或应用程序被调用时,它不运行
开关(res)
{
案例UART_STATUS_OK:
//获取数据和指针
size = user_periph_pull(&periph_tx_ptr,size);
打破;
案例UART_STATUS_INIT:
size = user_buffer_read_address(&ble_to_periph_buffer,&periph_tx_ptr,tx_callback_size);
打破;
默认:
assert_error(0);//错误:从未知来源调用回调
}
//如果有可用的数据,发送数据通过periph
如果(大小> 0)
{
UART_SPS_WRITE(PERIPH_TX_PTR,SIZE,NULL);
UART2_WRITE(PERIPH_TX_PTR,SIZE,&UART_BOTH_TX_CALLBALL);
}
//在缓冲区中没有数据,所以回调完成
both_tx_callbackbusy = false;
}
正如您所看到的,它与UART_TX_CALLBACK()非常相同。现在我从外围FIFO读出邮件后,我拨打了UART_SPS_WRITE()和UART2_WRITE()并提供相同的消息指针和大小。但是,对于UART_SPS_WRITE(),我将它传递一个null回调,以防止回调在uart2_write()下次左右再次调用,我用一个有效的回调函数名称uart_both_tx_callback。
我将压缩整个项目,所以你可以简单地启动它,并帮助我检查它。
谢谢,非常感谢。
- khai
顺便说一下,我向Teraterm打开了两个UART输出。
连接了TERA终端输出的屏幕捕获。COM5(板载串行连接)是UART1和COM4(外部FTDI电缆连接)是UART2
凯瑟你好,
我正在调查你的项目来运行它。现在,我对你的屏幕截图感到困惑。查看terterm输出,它似乎可以同时使用UART1和UART2。问题是解决了还是仍然存在?
最好的
信用证
它没有完全打印出文本。必须打印相同的文本,因为我向UART发送了相同的文本
凯瑟你好,
我已经运行了你的项目在一个基本的DevKit这里,它看起来工作良好。我没有对你的项目做任何改变,我只是编译和运行相同的代码。
从你的设置到我的唯一变化是,我使用另一个DevKit而不是UART2上的FTDI转换器。根据你的观察,UART2对你来说没有任何问题,对吗?
我不确定在这种背景下你身边的错误是什么,因为它正在努力。我想请您再次验证您的设置,以确保正确的位置。
我正在送你我的捕获......
最好的
信用证
嗨LC,
现在我只需将回调函数名提供给uart_sps_write()并将NULL提供给uart2_write(),就可以让它工作了,如下所示,这与前面的场景相反。我不明白它是如何工作的,现在与我以前有。如果你能解释原因,那就太好了。
如果(大小> 0)
{
uart_sps_write (periph_tx_ptr、大小&uart_both_tx_callback);
UART2_WRITE(PERIPH_TX_PTR,SIZE,NULL);
}
凯瑟你好,
不幸的是,我看不出有什么区别,因为这两种方法对我都有效。
最好的
信用证
算了。情况下关闭。谢谢你的病人。
不客气如果您以后遇到任何问题,请让我们知道。
最好的
信用证
嗨LC,
UART事务大小在tx_callback_size = 16字节中指定。这个尺寸可以更大吗?每次转移爆发的小爆发的原因是什么?
我问的原因是,我需要将固件转移到连接到UART1和UART2的外部设备,以便它们引导。所以设备FW是20K字节。
谢谢,
- khai
嗨LC,
我正在遇到使用这段代码的奇怪行为,我已经使用了UART1和UART2。当FW直接从Keil调试器加载到Sysram时,所有内容都正常工作正常。您自己尝试并运行了此代码并验证了它的工作。
现在,当我开始使用SmartSnippets flash相同的FW到基本套件上的SPI flash,并从flash启动,上电后,FW似乎没有从flash正确下载到SysRAM。我这么说的原因是手机应用程序将无法找到它的礼物。下面是复制的步骤:
1.将跳线放在基本套件的J4标题上以为SPI模式配置它
2.使用SmartSnippet闪烁您将我的DA FW到基本的KIT SPI Flash
3.将外部FTDI电缆Tx/Rx连接到UART2引脚P1_2和P1_3(如果在控制台中看不到文本,请将其互换)
4.发射2个Tera终端,一个用于板载串行连接,另一个用于外部FTDI电缆连接。板载连接为UART1, FTDI为UART2
5.循环电源的基本套件,如果它是目前插电
6.在手机上启动DSPS手机应用程序。应用程序应该找不到名称为NearEye的基本套件(我改变了这个名称以反映我们的预期HW)
但是,如果将用于UART2连接的FTDI电缆从电路板上移除(移除Tx/Rx引脚),则电路板上的循环电源将允许手机应用程序再次找到它。现在将FTDI电缆重新连接到板Tx/Rx引脚将允许UART1和UART2按预期的功能。
如果它没有立即发生,请再次重复步骤3-6。它看起来好像在DA FW中配置UART2要使用从Flash加载到失败。
希望你能重现这个问题。
先谢谢你,
- khai
凯瑟你好,
的tx_callback_size.是基于硬件FIFO配置的UART和16字节是它的最大值。
对于你的第二个问题,我将在建议的情况下在董事会上尝试。不幸的是,我现在无法访问基本的devkit。我会尝试一下并回复你。
最好的
信用证
附件是源代码的压缩文件,以防您没有在您的系统中保存以前的项目。
凯瑟你好,
我已经尝试从闪存时从闪存中运行项目。在这里,我有一个澄清,你是如何安排Devkit的跳线J4和j6的跳跃者的。在SPI模式下配置电路板时,您基本上断开UART1。确保通过J4_11,J4_12和引脚J6_1,J4_13和J4_14连接了UART1,应通过3针跳线而不是2个引脚连接。这样你就可以使用uart以及spi。但是,我建议谨慎,因为你也是连接外围设备的essentail。相反,如果这更灵活,您也可以使用第二个外部FTDI转换器。
来到项目,我看到了一些问题,从你最近上传的项目。但是,项目的前一个版本在flash上也能正常运行。因此,我建议您检查您的项目,以了解可能与正常操作冲突的任何更改。
注意:在你最新的项目版本中也有一个函数命名/引用错误。请在上传项目之前检查这些。
最好的
信用证
嗨LC,
谢谢你调查我的问题。你提到了J6跳伞者。我在Basic DevKit中找不到J6。附加的(\v5.1.50.2.org\BasicKit-SPI-UART1-UART2.jpg)是板的快照,目前跳跃的UART1和UART2与SPI。如您所见,FTDI黑色、橙色和黄色的电线是外部UART2连接。通过这种跳跃配置,我能够毫无问题地获得SPI和UART1。UART2和FTDI连接被添加到J4标题的顶部。在没有FTDI连接的情况下,从闪存引导或直接加载到SysRAM工作正常,正如我在上面的步骤中所解释的那样。
关于我目前的项目与之前的项目之间的差异,GPIO端口/引脚分配相同。唯一的区别是,当前项目添加了一些SPI flash包装器代码,用于我们自己的应用程序开发。
是的,您是在项目命名/参考错误中正确的。对于那个很抱歉。我已经修复了错误,这是最新的。
谢谢,
- khai
文件超过10MB的图像。我把devkit映象封闭在这里。
凯瑟你好,
跳投者J6是在J4侧面有2个引脚的那个。这在你的DevKit设置图像中也很明显,我正在上传J6的高亮部分。
注意:只需要3个引脚跳线,以便将UART RX与FTDI和MISO连接。直到您需要此PIN的时间,即使没有此,您的设置也是如此。
我再次运行最新的项目,我注意到有问题。但要再次强调,我还使用与同样的设置运行您以前的项目版本。我强烈相信您到目前为止所做的一些更改可能与应用程序相互冲突。我建议您参考您的预见版本,并查看是否面临任何问题。如果您没有看到任何问题,那么从步骤中开始,逐步更改,以检查引起此问题的添加。
最好的
信用证
由于信用证。
我没有SPI PINS连接被称为J6
如果你不介意的话,你能把我之前的项目压缩一下吗?这样我可以比较一下。
你用3针跳线连接J4和J6来测试我的项目吗?
谢谢,
- khai
你能把你的板子拍下来,我好比较一下吗?
凯瑟你好,
因此,建立J4和J6以适应这种不同的配置。我正在上传你以前的项目。您可以尝试使用与连接设置进行测试,这是我的工作。我已经用3个引脚连接器测试了这个项目,除非您正在从我认为您正在做的终端发送数据,否则这不会影响。所以请使用您当前的设置。
最好的
信用证
信用证,
我测试了你回来的工作项目。结果是一样的。DSPS应用程序无法发现从闪存引导时发现设备(附近),但在从Keil上传到RAM时发现OK。
谢谢,
- khai
凯瑟你好,
我下载了我已经发给了你的完全相同的副本,建造了代码,并使用SmartSnippets SPI Flash程序员将图像刻录到闪存。我有2个TERA术语终端,为各个COM端口打开。在编程闪光灯后,刚刚进行了一个电路板重置,我能够在DSP应用中看到设备,并能够通过UART1和UART2将数据发送到正在写入TERA术语终端的设备。
我不确定你身边出了什么问题。我正在使用先前在“Basickit-SPI-UART1-UART2”图像中显示的相同精确配置。您可以提出Devkit,SmartSnippet和终端输出图像。这样,我可以检查是否有任何问题。
最好的
信用证
谢谢你再做一次测试,LC。
我想说的是DSPS App发现设备的问题是间歇性的。该应用程序能够在前几次检测到它。每次它检测到设备时,我都懒得给它发短信(我知道它会工作的)。我只是简单地回收电源(拔下USB线而不是重置),然后启动手机应用程序再次检测它。你会发现,应用程序将不再看到设备。请帮我试试。我不确定是什么引起的间歇性。
问题:
1.你是否使用FTDI外部电缆连接其他UART ?
2.你跳J4和J6的方式和我一样吗?
3.您是否将Tera终端波特设置为115200并流量控制到Xon / Xoff?
谢谢,
- khai
凯瑟你好,
所以,我明白你是电力骑行,但必须注意一些步骤,以确保电动过程是正确的。
1.当板下电时,不应该有一些外部电源连接到引脚上,如连接到UART2的FTDI转换器,这会在引脚上留下一些残留物,可能是一个问题
2.当你上电时,建议做一个RESET,以确保适当的输入电压的处理器,这是需要引导过程是正确的。
没有硬件复位,我们不能确保启动过程将是在系统上电后。这在大多数情况下是有效的,但并非总是如此。如果你用的电池能够以所需的速度提供所需的电压,那么它几乎可以一直工作而不需要重置。
请尝试这些步骤,看看问题是否已解决。
最好的
信用证
好的。使用FTDI电缆连接的电源循环后重置电路板似乎工作。
问题:
1.按下复位按钮是否从闪光到RAM重新下载FW?
2.是否有软件API可以从手机应用程序重置电路板?
谢谢,
- khai
凯瑟你好,
1.是的,它就像系统正在重新启动,但更受控制,输入供应是稳定的这种方式。
2.不可以,因为系统直到重置完成后才开始运行,所以您不能连接到该设备。因此,您不能在没有连接的情况下发出外部命令。
最好的
信用证
好的。那么告诉我在成功加载到sysRAM后,如何在FW上进行软件重置。我将创建一个协议接口从手机应用程序重置板发送它一个重置命令。
谢谢,
- khai
页面