查看: 1068|回复: 9

[经验分享] FreeModbus协议栈在LPC1768上的移植核心源代码

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

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2023-1-15 17:32:14 | 显示全部楼层 |阅读模式
    本帖最后由 jobszheng5 于 2023-1-15 20:37 编辑

    FreeModbus协议栈在LPC1768上的移植核心源代码
      本次上传的源代码为核心源代码,非整个工程包。
      核心源代码主要由portserial.c文件与porttime.c文件构成,其余文件均基于官方示例所直接拷贝。
    Portserial.c
      对于Portserial.c文件的移植,版主按移植要求使用中断接收与中断发送,即单字节触发模式。
    源代码如下:
    1. /* ----------------------- Start implementation -----------------------------*/
    2. void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable)
    3. {
    4.     /* If xRXEnable enable serial receive interrupts. If xTxENable enable
    5.      * transmitter empty interrupts.
    6.      */
    7.     if(xTxEnable == TRUE)
    8.     {
    9.         Chip_UART_TXEnable(LPC_UART0);
    10.         Chip_UART_IntEnable(LPC_UART0, UART_IER_THREINT);
    11.         Chip_UART_SetupFIFOS(LPC_UART0, (UART_FCR_FIFO_EN | UART_FCR_RX_RS |
    12.                                    UART_FCR_TX_RS | UART_FCR_TRG_LEV3));
    13.     }
    14.     else
    15.     {

    16.         Chip_UART_IntDisable(LPC_UART0, UART_IER_THREINT);
    17.         Chip_UART_TXDisable(LPC_UART0);
    18.     }

    19. }

    20. BOOL xMBPortSerialInit(UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity)
    21. {
    22.     return TRUE;
    23. }

    24. BOOL xMBPortSerialPutByte(CHAR ucByte)
    25. {
    26.     /* Put a byte in the UARTs transmit buffer. This function is called
    27.      * by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been
    28.      * called. */
    29.     uart_sendbyte_blocking(ucByte);
    30.     return TRUE;
    31. }

    32. BOOL xMBPortSerialGetByte(CHAR *pucByte)
    33. {
    34.     /* Return the byte in the UARTs receive buffer. This function is called
    35.      * by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
    36.      */
    37.     *pucByte = Chip_UART_ReadByte(LPC_UART0);
    38.     return TRUE;
    39. }
    复制代码



    Porttime.c
      对于Porttime.c文件的移植,使用了Time1定时器的通道0的匹配中断。按移植要求,设计产生50us的时间单位,具体时间间隔以传入参数而定。
    源代码如下:
    1. /* ----------------------- Start implementation -----------------------------*/
    2. BOOL xMBPortTimersInit(USHORT usTim1Timerout50us)
    3. {
    4.     Chip_TIMER_Init(LPC_TIMER1);
    5.     Chip_TIMER_Disable(LPC_TIMER1);
    6.     Chip_TIMER_PrescaleSet(LPC_TIMER1, 99);
    7.     Chip_TIMER_SetMatch(LPC_TIMER1, 0, 50 * usTim1Timerout50us - 1);
    8.     Chip_TIMER_MatchDisableInt(LPC_TIMER1, 0);
    9.     NVIC_SetPriority(TIMER1_IRQn, 1);
    10.     NVIC_EnableIRQ(TIMER1_IRQn);
    11.     return TRUE;
    12. }

    13. void vMBPortTimersEnable()
    14. {
    15.     /* Enable the timer with the timeout passed to xMBPortTimersInit( ) */
    16.     Chip_TIMER_ClearMatch(LPC_TIMER1, 0);
    17.     Chip_TIMER_MatchEnableInt(LPC_TIMER1, 0);
    18.     Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 0);
    19.     Chip_TIMER_Enable(LPC_TIMER1);
    20. }

    21. void vMBPortTimersDisable()
    22. {
    23.     /* Disable any pending timers. */
    24.     Chip_TIMER_Disable(LPC_TIMER1);
    25.     Chip_TIMER_MatchDisableInt(LPC_TIMER1, 0);
    26.     Chip_TIMER_ClearMatch(LPC_TIMER1, 0);
    27. }

    28. /* Create an ISR which is called whenever the timer has expired. This function
    29. * must then call pxMBPortCBTimerExpired( ) to notify the protocol stack that
    30. * the timer has expired.
    31. */
    32. // static void prvvTIMERExpiredISR(void)
    33. void TIMER1_IRQHandler(void)
    34. {
    35.     if (Chip_TIMER_MatchPending(LPC_TIMER1, 0))
    36.     {
    37.         Chip_TIMER_ClearMatch(LPC_TIMER1, 0);
    38.         (void)pxMBPortCBTimerExpired();
    39.     }
    40. }
    复制代码
    与非网23.png




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

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32035
    最后登录
    2024-4-26
    发表于 2023-1-16 09:17:47 | 显示全部楼层
    新年开篇,点赞,还是周末发,辛苦辛苦
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 00:06
  • 签到天数: 1941 天

    [LV.Master]伴坛终老

    61

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    17305
    最后登录
    2024-4-27
    发表于 2023-1-16 12:37:31 | 显示全部楼层
    新年开篇,点赞支持
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    43
    最后登录
    2024-2-19
    发表于 2024-1-25 19:44:11 | 显示全部楼层
    楼主厉害,我搞了几天,卡在中断发送环节,始终不能中断发送,毫无头绪。楼主帮下小弟啊,十分感谢。409170947@qq.com
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
     楼主| 发表于 2024-1-26 10:05:39 | 显示全部楼层
    eefocus_3955752 发表于 2024-1-25 19:44
    楼主厉害,我搞了几天,卡在中断发送环节,始终不能中断发送,毫无头绪。楼主帮下小弟啊,十分感谢。 ...

    嘿嘿,这个源代码可是收费的哟

    想想自己努力学习,多做实验,可以省下不少钱的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 270 天

    [LV.8]以坛为家I

    31

    主题

    2994

    帖子

    38

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5316

    活跃会员

    最后登录
    2024-4-26
    发表于 2024-1-26 11:24:53 | 显示全部楼层
    非常不错啊,以前自己也想搞,但是不知道如何下手,正好大佬去趟了一遍,后面有问题就请教你了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    43
    最后登录
    2024-2-19
    发表于 2024-1-30 09:08:49 | 显示全部楼层
    jobszheng5 发表于 2024-1-26 10:05
    嘿嘿,这个源代码可是收费的哟

    想想自己努力学习,多做实验,可以省下不少钱的。 ...

    也就是手里有个1766板子,闲暇的时候搞一下玩玩,做项目一直是FreeRTOS+STM32,再加上组态屏,LABVIEW做上位机
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
     楼主| 发表于 2024-1-30 10:13:42 | 显示全部楼层
    eefocus_3955752 发表于 2024-1-30 09:08
    也就是手里有个1766板子,闲暇的时候搞一下玩玩,做项目一直是FreeRTOS+STM32,再加上组态屏,LABVIEW做 ...

    您真是大户人家。
    组态屏我也可上不起,更不用说labview了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    43
    最后登录
    2024-2-19
    发表于 2024-2-6 08:41:58 | 显示全部楼层
    忽略了一个小细节,清0计数器后可以了,LPC1766的Modbus跑起来了,有需要参考的朋友,可以留下邮箱
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
     楼主| 发表于 2024-2-6 08:56:43 | 显示全部楼层
    eefocus_3955752 发表于 2024-2-6 08:41
    忽略了一个小细节,清0计数器后可以了,LPC1766的Modbus跑起来了,有需要参考的朋友,可以留下邮箱 ...

    真棒,真棒!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-28 03:32 , Processed in 0.137955 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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