查看: 1318|回复: 1

[原创] 重玩LPC1768——Uart串口输出

[复制链接]
  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2020-8-31 10:00:02 | 显示全部楼层 |阅读模式
    重玩LPC1768——Uart串口输出

    串口做为最古老的调试信息输出方式就是本次实验的目的。LPCopen库中将Uart的驱动与RingBuffer数据结构相结合,坦白讲,我还是不太喜欢。原因是其会影响到我的上层应用数据的缓冲处理。换句话说,LPCopen库自己增加的这层缓存将会导致我多一层数据拷贝。

    不过,本次实现仍然使用了官方的库,自己增加了一些封装而已。

    因为本次实验主要是实现uart0的输出,并且之后将使用该接口打印调试信息,所以将其定位为log输出功能。

    硬件上面,根据原理图所示,使用Uart0外设,引脚为P0.2与P0.3两个引脚,均为Func01功能。配置串口通讯协议参数为115200bps。

    uart0外设初始化源代码如下:

    1. void uart_init(void)
    2. {
    3.   Chip_GPIO_Init(LPC_GPIO);
    4.   Chip_IOCON_PinMux(LPC_IOCON, 0, 2, IOCON_MODE_INACT, IOCON_FUNC1);
    5.   Chip_IOCON_PinMux(LPC_IOCON, 0, 3, IOCON_MODE_INACT, IOCON_FUNC1);
    6.   /* Setup UART for 115.2K8N1 */
    7.   Chip_UART_Init(LPC_UART0);
    8.   Chip_UART_SetBaud(LPC_UART0, 115200);
    9.   Chip_UART_ConfigData(LPC_UART0, (UART_LCR_WLEN8 | UART_LCR_SBS_1BIT));
    10.   Chip_UART_SetupFIFOS(LPC_UART0, (UART_FCR_FIFO_EN | UART_FCR_TRG_LEV2));
    11.   Chip_UART_TXEnable(LPC_UART0);

    12.   /* Reset and enable FIFOs, FIFO trigger level 3 (14 chars) */
    13.   Chip_UART_SetupFIFOS(LPC_UART0, (UART_FCR_FIFO_EN | UART_FCR_RX_RS |
    14.                                    UART_FCR_TX_RS | UART_FCR_TRG_LEV3));

    15.   /* Enable receive data and line status interrupt */
    16.   Chip_UART_IntEnable(LPC_UART0, (UART_IER_RBRINT | UART_IER_RLSINT));

    17.   /* preemption = 1, sub-priority = 1 */
    18.   NVIC_SetPriority(UART0_IRQn, 1);
    19.   NVIC_EnableIRQ(UART0_IRQn);
    20. }
    复制代码

    相对来讲,依托于LPCOpen库的一层封装,程序在操控外设上面还是容易了不少,有效缩短了工程师在软件开发上的时间与精力。

    最后,附上log.c的接口设计源代码:

    1. /**
    2. ******************************************************************************
    3. * @file    jlog.c
    4. * @author  jobs
    5. * @version v0.00
    6. * @date    2020-08-30
    7. * @brief   using Uart0 to output the debug info.
    8. * @note   
    9. *
    10. ******************************************************************************
    11. */

    12. #include <string.h>
    13. #include "jlog.h"
    14. #include "ring_buffer.h"
    15. #include "bspuart.h"

    16. /* Transmit and receive ring buffers */
    17. STATIC RINGBUFF_T txring, rxring;

    18. /* Transmit and receive ring buffer sizes */
    19. #define UART_SRB_SIZE 128 /* Send */
    20. #define UART_RRB_SIZE 32  /* Receive */

    21. /* Transmit and receive buffers */
    22. static uint8_t rxbuff[UART_RRB_SIZE], txbuff[UART_SRB_SIZE];

    23. void jlog_init(void)
    24. {
    25.   uart_init();

    26.   /* Before using the ring buffers, initialize them using the ring
    27.      buffer init function */
    28.   RingBuffer_Init(&rxring, rxbuff, 1, UART_RRB_SIZE);
    29.   RingBuffer_Init(&txring, txbuff, 1, UART_SRB_SIZE);

    30. }

    31. void jlog_handler(void)
    32. {
    33.   /* Use default ring buffer handler. Override this with your own
    34.      code if you need more capability. */
    35.   uart0_irqb_handler(&rxring, &txring);
    36. }

    37. int32_t jlog_out(const char *mbuf, int16_t len)
    38. {
    39.   uart0_send_rb(&txring, mbuf, len);
    40. }


    41. /******************************** END OF FILE *********************************/
    复制代码








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

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    836

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3967
    最后登录
    2024-4-16
    发表于 2020-8-31 10:44:51 | 显示全部楼层
    温故知新 大神牛逼
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-20 16:59 , Processed in 0.107493 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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