modbus移植说明.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
modbus移植说明

Modbus向MSP430F149上的移植步骤FreeModbus 的MSP430 版本的demo 是在GCC 平台,现移植到IAR 上,版本5.3。先说几点在GCC平台移植到IAR平台要改的几处地方1.先按照如图所示在IAR中建立好工程文件以及工程目录2.在system文件夹下建立DCO.C文件配置系统时钟,由于一般使用430单片机的外部8M晶振,因此此处我们自己写的函数只要和作者的留的接口对上即可。DCO.C文件代码如下:#include ../port/port.h#include dco.h/* ----------------------- Start implementation -----------------------------*/char cTISetDCO( int delta ){ char z,result; /*------选择主系统时钟为8MHZ -------*/ BCSCTL1 = ~XT2OFF; //打开XT2高频振荡器 do { IFG1 = ~OFIFG; //清除振荡器失效标志 for (z = 0xFF; z 0; z--); //等待8MHZ晶振起振 } while ((IFG1 OFIFG)); //判断晶振失效标志是否依然存在 BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频振荡器 result = TI_DCO_NO_ERROR; return(result);}。前面说的与作者的留的接口对接,也就是返回值为char类型的TI_DCO_NO_ERROR即可。3. 官方demo 使用的MCU 为MSP430F169,我用的开发板是F149 因此要更改相应的库函数。文件port.h.更改为:/* ----------------------- Platform includes --------------------------------*/#include msp430x14x.h#if defined (__GNUC__)#include signal.h#endif#undef CHARPortserial.c 中usOldSR = _DINT( )程序,_DINT()是没有返回值的所以编译会报错,将该部分程序更改为这样文件:Portserial.c---EnterCriticalSection( void )更改为:voidEnterCriticalSection( void ){USHORT usOldSR;if( ucCriticalNesting == 0 ){#if defined (__GNUC__)usOldSR = READ_SR;_DINT( );#else// usOldSR = _DINT( );#endif// ucGIEWasEnabled = usOldSR GIE ? TRUE : FALSE;_DINT( );ucGIEWasEnabled = TRUE;}ucCriticalNesting++;}文件:Portserial.c--- ExitCriticalSection( void )更改为:voidExitCriticalSection( void ){ucCriticalNesting--;if( ucCriticalNesting == 0 ){if( ucGIEWasEnabled ){ucGIEWasEnabled = FALSE;_EINT( );}}}更改中断服务函数,原程序的中断服务函数格式不能在IAR 中使用,因此要更改为IAR格式文件:portserial.c---prvvMBSerialRXIRQHandler( void )更改为:#pragma vector = USART0RX_VECTOR__interruptvoidprvvMBSerialRXIRQHandler( void ) //__interrupt[USART0RX_VECTOR]{DEBUG_TOGGLE_RX( );pxMBFrameCBByteReceived( );}文件:portserial.c--- prvvMBSerialTXIRQHandler ( void )更改为:#pragma vector = USART0TX_VECTOR__interruptvoidprvvMBSerialTXIRQHandler( void ) // __interrupt[USART

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档