6621E 的串口0 特殊串口,输出有限制, 输出频率不能随意设置(如不能输出115200,9600,460800)。 应用中建议只当作 打印功能使用。可选配置如下面所示 /* baud_rates[]={1000,2000,4000,5000,10000,20000,25000,50000,100000,500000,1000000} mode smod_val baud_rate UART_EX_MD_2 SMOD_1 1000000 UART_EX_MD_2 SMOD_0 500000 UART_EX_MD_1 x 1000~500000 UART_EX_MD_3 x 1000~500000 */ (1)使用UART0,需要包含头文件 #include "uart_ex.h"
uart_ex_cfg_t uart0_cfg = { .baud_rate = 500000, // 500Kbps .mode = UART_EX_MD_3, .tb80_val = TB80_HIGH, //Tx Enable .rb80_val = RB80_HIGH, //Rx Enable .smod_val = SMOD_0, //uncare if .mode=Ex_Md_3 .rx_cb = NULL, //Polling Mode .tx_cb = NULL, //Polling Mode }; (3)初始化GPIO 及打开UART0 #define PIN_UART0_TX 5 #define PIN_UART0_RX 6 // UART0 pinmux_config(PIN_UART0_TX, PINMUX_UART0_SDA_O_CFG); pinmux_config(PIN_UART0_RX, PINMUX_UART0_SDA_I_CFG); pmu_pin_mode_set(BIT_MASK(PIN_UART0_TX), PMU_PIN_MODE_PP); pmu_pin_mode_set(BIT_MASK(PIN_UART0_RX), PMU_PIN_MODE_PU); ....初始化和Restore 处均使用下列语句打开UART0 uart_ex_open(HS_UART0, &uart0_cfg); (4) 修改retarget.c #include "uart_ex.h" 修改输出函数 /********************************************************************* * MACROS */ #define RETARGET_UART (HS_UART0) void ser_write(const char *ptr, int len) { #ifdef CONFIG_SEGGER_RTT len = SEGGER_RTT_Write(0, ptr, len); #else for (; len > 0; --len, ++ptr) { if (*ptr == '\n') uart_ex_send_block(RETARGET_UART, (const uint8_t *)"\r", 1); //uart 0 uart_ex_send_block(RETARGET_UART, (const uint8_t *)ptr, 1); //uart 0 // uart_send_block(RETARGET_UART, (const uint8_t *)"\r", 1); //uart1 // uart_send_block(RETARGET_UART, (const uint8_t *)ptr, 1); //uart1 } #endif } (5) 定时打印测试输出 static void simple_timer_handler(co_timer_t *timer, void *param) { // wdt_keepalive(); // pmu_dump(printf); static int t; log_debug("\nrun..%d",t++); } (6)运行及测试输出Log -串口接收工具,自定义波特率为 500K -逻辑分析仪自动检测出串口波特率为500K, 和代码设置一致。 (7)附件参考代码及测试BIN (6621EVB) |