你好,
在我们的FW产品应用中,我们需要能够使用UART1和UART2以及SPI Flash访问。UART1和UART2将用于与外部设备通信,其中每个设备连接到另一端具有UART线路的设备。我的问题是:
1.我可以在GPIO引脚上配置和分配所有三个(据我所知,有10个GPIO引脚可用于配置)?如果是这样,怎么样?
2.对于Flash Access的SPI GPIO引脚分配,我需要能够从580处理器读取/写入/擦除闪存。我读到了DOC和关于SPI Flash的论坛,并且关于580是否应该是掌握或奴隶的剧本。我认为它应该是类似于SPI_FLASH示例应用程序的主人。
谢谢,
- khai
设备:
嗨kqtrinh,
1.是的,您可以将引脚配置为您想要的任何GPIO功能,您的意思是有10个GPIOS可用于配置?QFN40和48包分别具有3个港口。请检查数据表。两个UART模块是相同的,可以在不同的GPIOS上分配和配置,同样为单个SPI模块。此外,不同引脚上的外围设备的分配由GPIO_CONFIGUREPIN()和相应的函数pid_uart1_rx / pid_uart2_rx / pid_spi_di等完成。
2.如果SPI模块应该是主设备或从属取决于您的应用程序,则SPI模块可以在这两种模式下操作,如果您想要连接的SPI设备是闪存,那么580应该是SPI总线上的主机闪光灯应该是奴隶。
谢谢mt_dialog.
这就是我从V3.3数据表中获得的:
数字界面
通用I / O:14(WLCSP34包),
24(QFN40包),32(QFN48封装)
它正在谈论每个580包类型的引脚数。但是,在GPIO.h中读取代码时,我看到了GPIO_PORT的emuns,最多可在您所说的4个端口。我们将在您设计中使用WLCSP34包。此包是否有3或4个港口,我假设?
查看SPI_FLASH的示例代码,它使用GPIO端口0对于UART2和SPI。虽然由于我的调试连接处于SPI模式,但我无法看到打印为控制台的文本输出,但由于我的调试连接处于SPI模式,但我假设它工作了。当我处于UART模式时,文本被打印到TERA术语,但随后读取/写入SPI Flash变为禁用。
我有FTDI串行到UDB电缆,然后遵循一些DOC中描述的连接。我似乎无法获得SPI和UART同时为此应用程序工作。
谢谢,
- khai
嗨kqtrinh,
数据表表明可用的GPIO取决于芯片包,因此您应该选择涵盖您需求的包。WLCSP34具有在数据表中指示的引脚,即表示端口0和1,其中数据表中指示的相应引脚。端口2仅适用于QFN40 / 48,端口3为QFN48(DS_V3.3上的第5页,因为笔记表示)。
关于示例代码上的UART和SPI功能,这是因为代码读取和写入SPI,然后将输出打印到UART,因此处理器都无法通过Process SPI和UART使用处理器。580不是多线程系统。
谢谢mt_dialog.
我理解580不是多线程系统。但SPI_FLASH程序不是多线程应用程序。似乎依次执行每个函数(它是SPI Flash访问还是UART OUT到控制台)。没有同时的Flash访问和UART由两个线程写入。
我认为我没有看到控制台打印的问题是因为我处于SPI模式而不是UART模式。通过SPI模式,我的意思是根据J4标题的最右侧的打印针图跳转了J4报头,而UART模式意味着J4根据其旁边的PIN图跳转。这就是为什么我提到了建议在某些DOC中使用的FTDI电缆在SPI模式下看到控制台输出。然而,我无法完成这项工作。
如果SPI_FLASH计划做的是一个不可能的事情,为什么它被设计和编码了?此示例应用程序中的功能正是在我们的自定义HW中实现的。我需要从Flash读取数据,然后将其推到UART接口,另一端占用另一个设备。你说这是不可能的吗?
谢谢,
- khai
嗨kqtrinh,
为了操作读取并写入SPI闪存并从UART打印,您必须连接相应的跳线和引脚,因此您应该能够遵循J4标题旁边的图表,以连接SPI闪存,要打印数据的顺序,您需要在P04端口上放置跳线。如果您这样做,您应该看到SPI事务生成的数据(没有外部FTDI,通过使用车载Atmel处理器(无需额外代码或修改以执行此操作 - 只需插上额外的跳线)。
关于上面提到的线程,是为了清楚地表明您无法同时与两个外围设备进行交易。
谢谢mt_dialog.
好的,现在理解。
使用DSP外设模式代码库,它使用UART1将文本发送到控制台以供电话显示。
正如我之前提到的,我们的应用程序要求580处理器向附加到UART1和UART2附加的设备发送命令消息。我有peripheral_init_setup.c代码具有以下配置,使用UART1,UART2和SPI:
void gpio_reservations(无效)
{
/ *
*全球保留GPIO预订
* /
保留_GPIO(UART1_TX,GPIO_UART1_TX_PORT,GPIO_UART1_TX_PIN,PID_UART1_TX);
保留_GPIO(UART1_RX,GPIO_UART1_RX_PORT,GPIO_UART1_RX_PIN,PID_UART1_RX);
保留_GPIO(UART2_TX,GPIO_UART2_TX_PORT,GPIO_UART2_TX_PIN,PID_UART2_TX);
保留_GPIO(UART2_RX,GPIO_UART2_RX_PORT,GPIO_UART2_RX_PIN,PID_UART2_RX);
保留_GPIO(SPI_EN,SPI_GPIO_PORT,SPI_CS_PIN,PID_SPI_EN);
保留_GPIO(SPI_CLK,SPI_GPIO_PORT,SPI_CLK_PIN,PID_SPI_CLK);
保留_GPIO(SPI_DO,SPI_GPIO_PORT,SPI_DO_PIN,PID_SPI_DO);
保留_GPIO(SPI_DI,SPI_GPIO_PORT,SPI_DI_PIN,PID_SPI_DI);
#if(uart_hw_flow_enabled)
保留_GPIO(UART1_RTS,GPIO_UART1_RTS_PORT,GPIO_UART1_RTS_PIN,PID_UART1_RTSN);
保留_GPIO(UART1_CTS,GPIO_UART1_CTS_PORT,GPIO_UART1_CTS_PIN,PID_UART1_CTSN);
#endif / * uart_hw_flow_enabled * /
}
#endif // development_debug.
/ **
****************************************************************************************
* @brief地图端口引脚
*
*映射UART和SPI端口引脚和GPIO端口
****************************************************************************************
* /
void set_pad_functions(void)//设置GPIO端口功能模式
{
//为qpi1启用uart2
gpio_configurepin(gpio_uart1_tx_port,gpio_uart1_tx_pin,输出,pid_uart1_tx,false);
gpio_configurepin(gpio_uart1_rx_port,gpio_uart1_rx_pin,input_pullup,pid_uart1_rx,false);
//为QPI2启用UART2
gpio_configurepin(gpio_uart2_tx_port,gpio_uart2_tx_pin,输出,pid_uart2_tx,false);
gpio_configurepin(gpio_uart2_rx_port,gpio_uart2_rx_pin,input_pullup,pid_uart2_rx,false);
#if(uart_hw_flow_enabled)
gpio_configurepin(gpio_uart1_rts_port,gpio_uart1_rts_pin,输出,pid_uart1_rtsn,false);
gpio_configurepin(gpio_uart1_cts_port,gpio_uart1_cts_pin,input_pullup,pid_uart1_ctsn,false);
gpio_configurepin(gpio_uart2_rts_port,gpio_uart2_rts_pin,输出,pid_uart2_rtsn,false);
gpio_configurepin(gpio_uart2_cts_port,gpio_uart2_cts_pin,input_pullup,pid_uart2_ctsn,false);
#endif // uart_hw_flow_enabled.
//配置SPI Flash
gpio_configurepin(spi_gpio_port,spi_cs_pin,输出,pid_spi_en,true);
gpio_configurepin(spi_gpio_port,spi_clk_pin,输出,pid_spi_clk,false);
gpio_configurepin(spi_gpio_port,spi_do_pin,输出,pid_spi_do,false);
gpio_configurepin(spi_gpio_port,spi_di_pin,输入,pid_spi_di,false);
}
如果我想与附加到UART1或UART2的设备通信,如何切换到正确的UART频道?
谢谢,
- khai
嗨kqtrinh,
请不要向IrreleveAnt主题发布其他问题,对于您始终可以创建一个新线程的新问题。
关于您的问题,UART和UART2模块正在使用针对每个UART模块设置不同寄存器的不同驱动程序,例如在DSP中,从应用程序使用的UART使用初始化UART的UART_SPS_INIT()。DSP也使用UART2才能打印出一些调试消息,因此如果您拥有CFG_PrintF_UART2,则UART2_INIT()函数初始化UART2模块。因此,对于每个UART模块,有相应的驱动程序控制相应的UART寄存器。
谢谢mt_dialog.