你好,
在我们的FW产品应用程序中,我们需要能够同时使用UART1和UART2以及SPI闪存访问。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\u端口的emuns,正如您所说的,它最多有4个端口。我们将在您的设计中使用WLCSP34包。我想这个软件包有3个或4个端口吗?
查看spiïu flash的示例代码,它将GPIO端口0用于UART2和spi。尽管由于我的调试连接处于SPI模式,我看不到通过UART2打印到控制台的文本输出,但我认为它可以工作。当我在UART模式下时,文本被打印到Tera Term,但是读/写SPI Flash被禁用。
我有FTDI串行到UDB电缆,并遵循一些文件中描述的连接。我似乎不能让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头最右边打印的pin图跳转,而UART模式意味着J4根据它旁边的pin图跳转。这就是为什么我提到了FTDI电缆,当处于SPI模式时,建议在某些doc中使用FTDI电缆来查看控制台输出。不过,我没法让它工作。
如果SPI_FLASH计划做的是一个不可能的事情,为什么它被设计和编码了?此示例应用程序中的功能正是在我们的自定义HW中实现的。我需要从Flash读取数据,然后将其推到UART接口,另一端占用另一个设备。你说这是不可能的吗?
谢谢,
- khai
嗨kqtrinh,
为了操作对spi flash的读写操作和从UART打印,您必须连接适当的跳线和引脚,因此您应该能够按照j4头旁边的图表连接spi flash,为了打印数据,您需要在P04端口上放置一个跳线。如果您这样做,您应该看到由SPI事务生成的数据(没有外部FTDI,通过使用板载ATMEL处理器(不需要额外的代码或修改,只需插入额外的跳线)。
关于上面提到的线程,是为了清楚地表明您无法同时与两个外围设备进行交易。
谢谢mt_dialog.
好的,现在明白了。
使用DSP外设模式代码库,它使用UART1将文本发送到控制台以供电话显示。
如前所述,我们的应用程序需要580处理器向连接到UART1和UART2的设备发送命令消息。我有一个peripheral\u init\u setup.c代码,它具有以下使用UART1、UART2和SPI的配置:
void gpio_reservations(无效)
{
/*
*全局保留GPIOs保留
* /
保留_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\ U EN、SPI\ U GPIO\ U端口、SPI\ U CS\ U引脚、PID\ U SPI\ U EN);
保留_GPIO(SPI_CLK,SPI_GPIO_PORT,SPI_CLK_PIN,PID_SPI_CLK);
保留GPIO(SPI\ U DO、SPI\ U GPIO\ U端口、SPI\ U DO\ U引脚、PID\ U SPI\ U 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 Map端口引脚
*
*映射UART和SPI端口引脚和GPIO端口
****************************************************************************************
* /
void set_pad_functions(void)//设置GPIO端口功能模式
{
//为qpi1启用uart2
GPIO\ U配置引脚(GPIO\ U UART1\ U TX\端口、GPIO\ U UART1\ U TX\引脚、输出、PID\ U UART1\ U TX、false);
GPIO\ U配置引脚(GPIO\ U UART1\ U RX\端口、GPIO\ U UART1\ U RX\引脚、输入\上拉、PID\ U UART1\ U RX、false);
//为QPI2启用UART2
GPIO\ U配置引脚(GPIO\ U UART2\ U TX\端口、GPIO\ U UART2\ U TX\引脚、输出、PID\ U UART2\ U TX、false);
GPIO\ U配置引脚(GPIO\ U UART2\ U RX\端口、GPIO\ U UART2\ U RX\引脚、输入\上拉、PID\ U UART2\ U RX、false);
#if(uart_hw_flow_enabled)
GPIO\ U配置引脚(GPIO\ U UART1\ U RTS\端口,GPIO\ U UART1\ U RTS\引脚,输出,PID\ U UART1\ U 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,
请不要在一个无关的主题上发布额外的问题,对于一个新的问题,你总是可以创建一个新的线程。
关于您的问题,UART和UART2模块使用不同的驱动程序,为每个UART模块设置不同的寄存器,例如,在DSP中,从应用程序使用的UART使用初始化UART的UART\ u sps\ u init()。另外,dsp使用UART2来打印一些调试消息,因此如果您有CFG\u PRINTF\u UART2,UART2模块将由UART2\u init()函数初始化。因此,对于每个uart模块,都有相应的驱动程序来控制相应的uart寄存器。
谢谢mt_dialog.