8个职位/ 0个新职位
最后发表
kqtrinh
离线
最后看到:2个星期前
加入:2016-08-24 00:17
GPIO管脚分配

你好,

在我们的FW产品应用中,我们需要能够同时使用UART1和UART2以及SPI Flash访问。UART1和UART2将用于与外部设备进行通信,每个设备都连接到另一端的UART线路上。我的问题是:

1.我能在GPIO引脚上配置并分配这三个引脚吗(据我所知,有10个GPIO引脚可供配置)?如果是这样,如何?
2.至于SPI gpio引脚分配的Flash访问,我需要能够读/写/擦除Flash从580处理器。我读了关于SPI Flash的文档和论坛,我仍然困惑580是否应该是主或从。我认为它应该是类似于spi_flash示例应用程序的Master。

谢谢,
——潘文凯

设备:
MT_dialog
离线
最后看到:5个月4个小时前
工作人员
加入:2015-06-08 34
嗨kqtrinh,

嗨kqtrinh,

1.是的,你可以将你的引脚配置到任何你想要的gpio功能,你说有10个gpio可用来配置是什么意思?qfn40包有3个端口,48包有4个端口。请检查数据表。两个UART模块是相同的,它们可以分配和配置在不同的gpio相同的单一SPI模块。此外,在不同的引脚上的外设的分配是由GPIO_ConfigurePin()和PID_UART1_RX / PID_UART2_RX / PID_SPI_DI等相应的功能完成的。

2.如果SPI模块应该是主人或奴隶取决于您的应用程序,SPI模块可以在两种模式下运行,如果你的SPI设备你想连接闪存那么580应该是一个大师的SPI总线和flash应该是奴隶。

由于MT_dialog

kqtrinh
离线
最后看到:2个星期前
加入:2016-08-24 00:17
这是我从

这是我从v3.3数据表中得到的:

数字接口
通用I/ o: 14 (WLCSP34包),
24 (QFN40包装)、32 (QFN48包装)

它是指每580种封装类型的引脚数。然而,当阅读gpio.h中的代码时,我看到了GPIO_PORT的emuns多达4个端口。我们将在你的设计中使用WLCSP34包装。这个包有3或4个端口,我猜?

看看spi_flash的示例代码,它对UART2和SPI使用GPIO端口0。尽管由于我的调试连接处于SPI模式,我无法看到通过UART2打印到控制台的文本输出,但我假定它是工作的。当我在UART模式,文本被打印到Tera Term,但然后读/写SPI Flash成为禁用。

我有FTDI串行到UDB电缆,并遵循一些文档中描述的连接。我似乎无法让SPI和UART同时为这个应用程序工作。

谢谢,
——潘文凯

MT_dialog
离线
最后看到:5个月4个小时前
工作人员
加入:2015-06-08 34
嗨kqtrinh,

嗨kqtrinh,

数据表表明可用的GPIO取决于芯片包,因此您应该选择一个满足您需要的包。WLCSP34具有在数据表中指示的引脚,这意味着端口0和1具有在数据表中指示的相应引脚。端口2仅用于QFN40/48,端口3用于QFN48(如注释所示,在DS_V3.3上的第5页)。

关于示例代码上的UART和SPI功能,这是因为代码读取和写入SPI,然后将输出打印到UART,处理器没有办法同时被SPI和UART进程使用。580不是一个多线程系统。

由于MT_dialog

kqtrinh
离线
最后看到:2个星期前
加入:2016-08-24 00:17
我知道580不是a

我知道580不是一个多线程系统。但是spi_flash程序不是一个多线程应用程序。它似乎是按顺序执行每个函数的(无论是SPI flash访问还是UART输出到控制台)。两个线程不能同时进行flash访问和UART写入。

我认为我看不到控制台打印的问题是因为我在SPI模式而不是UART模式。通过SPI模式,我的意思是J4报头根据J4报头最右边的打印引脚图跳转,而UART模式意味着J4根据它旁边的引脚图跳转。这就是为什么我提到了FTDI电缆,建议在一些文档中使用SPI模式,以查看控制台输出。但是我不能让它工作。

如果spi_flash程序做的事情是不可能的,为什么要这样设计和编写它呢?这个示例应用程序中的功能正是我需要在我们的自定义HW中实现的。我需要从Flash读取数据,并将其推到UART接口,到另一端的另一个设备来消费。你是说这是不可能的?

谢谢,
——潘文凯

MT_dialog
离线
最后看到:5个月4个小时前
工作人员
加入:2015-06-08 34
嗨kqtrinh,

嗨kqtrinh,

为了操作读写UART的spi flash和打印你需要连接适当的跳投和别针,所以你应该能够按照图在身旁阁下头连接的spi flash,为了要打印的数据你需要将一个跳投P04端口。如果您这样做,您应该看到SPI事务生成的数据(没有外部FTDI,使用板载ATMEL处理器(不需要额外的代码或修改来做到这一点——只需要插入额外的跳线)。

关于我上面提到的线程,是为了明确你不能在同一时间与两个外围设备进行交易。

由于MT_dialog

kqtrinh
离线
最后看到:2个星期前
加入:2016-08-24 00:17
好的,明白了。

好的,明白了。

使用DSPS外围模式代码库,它使用UART1将文本发送到控制台,以便从电话中显示。

如前所述,我们的应用程序需要580处理器向附加到UART1和UART2的设备发送命令消息。我有peripheral_init_setup.c代码,有以下配置使用UART1, UART2和SPI:

空白GPIO_reservations(空白)

/*
*全球GPIOs预留
*/
Reserve_gpio (uart1_tx, gpio_uart1_tx_port, gpio_uart1_tx_pin, pid_uart1_tx);
Reserve_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);
Reserve_gpio (uart2_rx, gpio_uart2_rx_port, gpio_uart2_rx_pin, pid_uart2_rx);

Reserve_gpio (spi_en, spi_gpio_port, spi_cs_pin, pid_spi_en);
spi_clk, spi_gpio_port, spi_clk_pin, pid_spi_clk
spe_gpio (spi_do, spi_gpio_port, spi_do_pin, pid_spi_do);
Reserve_gpio (spi_di, spi_gpio_port, spi_di_pin, pid_spi_di);

#如果(UART_HW_FLOW_ENABLED)
Reserve_gpio (uart1_rts, gpio_uart1_rts_port, gpio_uart1_rts_pin, pid_uart1_rtsn);
Reserve_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_configurein (GPIO_UART1_TX_PORT, GPIO_UART1_TX_PIN, OUTPUT, PID_UART1_TX, false);
GPIO_ConfigurePin(GPIO_UART1_RX_PORT, GPIO_UART1_RX_PIN, INPUT_PULLUP, PID_UART1_RX, false);

//为QPI2启用UART2
gpio_configurein (GPIO_UART2_TX_PORT, GPIO_UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);
GPIO_ConfigurePin(GPIO_UART2_RX_PORT, GPIO_UART2_RX_PIN, INPUT_PULLUP, PID_UART2_RX, false);

#如果(UART_HW_FLOW_ENABLED)
GPIO_ConfigurePin(GPIO_UART1_RTS_PORT, GPIO_UART1_RTS_PIN, OUTPUT, 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, OUTPUT, 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, OUTPUT, PID_SPI_EN, true);
GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_CLK_PIN, OUTPUT, PID_SPI_CLK, false);
GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_DO_PIN, OUTPUT, PID_SPI_DO, false);
GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_DI_PIN, INPUT, PID_SPI_DI, false);

如果我想与附加到UART1或UART2的设备通信,我如何切换到正确的UART通道?

谢谢,
——潘文凯

MT_dialog
离线
最后看到:5个月4个小时前
工作人员
加入:2015-06-08 34
嗨kqtrinh,

嗨kqtrinh,

请不要在不相关的主题上发布额外的问题,对于一个新的问题,你总是可以创建一个新的线程。

关于您的问题,UART和UART2模块使用不同的驱动程序为每个UART模块设置不同的寄存器,例如,在DSPS中,应用程序使用的UART使用uart_sps_init()初始化UART。此外,DSPS使用UART2来打印一些调试消息,因此,如果您有CFG_PRINTF_UART2,那么UART2模块将由uart2_init()函数初始化。因此,对于每个uart模块,都有相应的驱动程序控制相应的uart寄存器。

由于MT_dialog