- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 如何用RMAN恢复一个DROP TRUNCATE DML误操作的表.doc
- 读写译Fresh start - 刘倩 王畇.ppt
- 2008年中考英语分册总复习(八).doc
- 初三英语期终复习检测试题(2008`12).doc
- 2013八上Unit5基础试题及答案.doc
- 2014年春福师大学英语2一答案.docx
- 2013中译提高练习.docx
- 4-Star精密台式钠度计 钠离子浓度计.doc
- 59store客户满意度调查.doc
- 2014年3月英语作业答案.doc
- 大学生职业规划大赛《新闻学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《应用统计学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《中医学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《信息管理与信息系统专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《汽车服务工程专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《水产养殖学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《市场营销专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐表演专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
文档评论(0)