查看: 217|回复: 0

[原创] 【LPC860-max板卡试用】SWM 功能试验

[复制链接]
  • TA的每日心情
    奋斗
    4 小时前
  • 签到天数: 595 天

    [LV.9]以坛为家II

    51

    主题

    2225

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7072
    最后登录
    2024-4-28
    发表于 2024-1-8 17:57:28 | 显示全部楼层 |阅读模式
    本帖最后由 andeyqi 于 2024-1-8 18:24 编辑

    关于LPC 系列的 SWM IP功能描述论坛有详细的介绍的帖子(LPC800前生今世 第六章-开关矩阵(SWM: Switch Matrix)),我们基于这篇文档的基础上进行试验,参考官方的(How to Set Up LPC860 Switch Matrix Demo)文件,在LPC860的板子上验证SWM功能。以下为swm IP的框图。
    swm_block.png

    • 实验1:  同一功能映射不同引脚试验

    实验方法:
    配置uart0分别映射到P0_24/PO_25 及P1_16/P1_17这组GPIO端口 ,基于之前实现的RT-thread(【LPC860-max板卡试用】rt-thread 最小系统适配) 的基础上,添加swm 命令用于触发swm 切换uart0的输出pin脚,实现串口的切换,期待切换成功后在新切换的串口上输出信息。

    1. #include <rtdevice.h>
    2. #include <board.h>
    3. #include <drivers/pin.h>
    4. #include "fsl_common.h"
    5. #include "fsl_gpio.h"
    6. #include "fsl_iocon.h"
    7. #include "fsl_swm.h"
    8. #include "pin_mux.h"

    9. static void _swm_cmd(int argc, char *argv[])
    10. {
    11.   static int i = 0;
    12.   
    13.   /* Enables clock for switch matrix.: enable */
    14.   CLOCK_EnableClock(kCLOCK_Swm);
    15.   
    16.   if(i%2 == 0)
    17.   {
    18.         /* USART0_TXD connect to P1_17 */
    19.     SWM_SetMovablePinSelect(SWM0, kSWM_USART0_TXD, kSWM_PortPin_P0_24);

    20.     /* USART0_RXD connect to P1_16 */
    21.     SWM_SetMovablePinSelect(SWM0, kSWM_USART0_RXD, kSWM_PortPin_P0_25);   
    22.   }
    23.   else
    24.   {
    25.           /* USART0_TXD connect to P1_17 */
    26.     SWM_SetMovablePinSelect(SWM0, kSWM_USART0_TXD, kSWM_PortPin_P1_17);

    27.     /* USART0_RXD connect to P1_16 */
    28.     SWM_SetMovablePinSelect(SWM0, kSWM_USART0_RXD, kSWM_PortPin_P1_16);
    29.   }
    30.   

    31.     /* Disable clock for switch matrix. */
    32.     CLOCK_DisableClock(kCLOCK_Swm);
    33.   
    34.     i++;
    35.     rt_kprintf("swm check done.\n");
    36. }
    37. MSH_CMD_EXPORT_ALIAS(_swm_cmd, swm, swm [option]);
    复制代码

    添加swm测试命令,在当前终端输入swm 命令后,期待切换终端窗口,并打印"swm check done." 日志,运行结果如下,已经按照期待的方式进行端口切换了。
    20240108-142631.gif


    • 实验2:  同一端口映射不同外设试验
    实验方法:
    将P1_17 分别映射到UART0的TXD 及 URAT1 的RXD 功能,这样形成本地回环UART0 输出的数据接到URAT1 ,然后UART1打印输出接收到的数据,期待两个串口输出一致。
    初始化时配置串口如下:

    uart1_init.png


    添加uart1测试命令初始化uart1,然后在uart1 接收中断中输出接收到的数据回显输出,测试代码如下:

    1. status_t shell_uart_init(void)
    2. {
    3.     usart_config_t usartConfig;
    4.     status_t status;

    5.     /* Select the main clock as source clock of USART0 (debug console) */
    6.     CLOCK_Select(kUART1_Clk_From_MainClk);
    7.     RESET_PeripheralReset(kUART1_RST_N_SHIFT_RSTn);

    8.     /* config usart struct */
    9.     USART_GetDefaultConfig(&usartConfig);
    10.     usartConfig.baudRate_Bps = BOARD_DEBUG_USART_BAUDRATE;
    11.     usartConfig.parityMode = kUSART_ParityDisabled;
    12.     usartConfig.stopBitCount = kUSART_OneStopBit;
    13.     usartConfig.enableRx = true;
    14.     usartConfig.enableTx = true;

    15.     /* init usart */
    16.     status = USART_Init(USART1, &usartConfig, BOARD_DEBUG_USART_CLK_FREQ);

    17.     if (kStatus_Success != status)
    18.     {
    19.         return status;
    20.     }

    21.     /* enable usart rx interrupts */
    22.     USART_EnableInterrupts(USART1, kUSART_RxReadyInterruptEnable | kUSART_RxNoiseInterruptEnable);
    23.     NVIC_EnableIRQ(USART1_IRQn);
    24.    
    25.     return status;

    26. }

    27. void USART1_DriverIRQHandler(void)
    28. {
    29.     uint8_t data = 0;

    30.     if(USART_GetStatusFlags(USART1)&kUSART_RxReady)
    31.     {
    32.         data = USART1->RXDAT;
    33.         USART_WriteBlocking(USART1,(uint8_t *)&data,1);
    34.     }
    35. }


    36. static void uart1init(int argc, char *argv[])
    37. {
    38.     shell_uart_init();
    39.     rt_kprintf("uart1 init.\n");
    40. }
    41. MSH_CMD_EXPORT_ALIAS(uart1init, uart1, swm [option]);
    复制代码
    烧写验证查看是否符合预期:

    20240108-173411.gif


    输入uart1 命令后两个串口输出保持一致,从而验证swm 路由功能符合预期。




    ****参考资料****

    AN14025.pdf (1.46 MB, 下载次数: 0)



    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 14:16 , Processed in 0.123942 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表