您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 04章仿真调试及C语言编程
重庆大学通信工程学院任勇第4章仿真、调试及C语言编程不使用仿真器传统的单片机硬件调试往往采用价格不菲的仿真器,借用仿真器的MCU实现并不完全的仿真,最后才擦写芯片固化程序;而如今的S12(X)系列MCU都已采用了内置的可以反复擦写10万次以上的Flash存储区,并且支持在线调试系统、在线下载程序,使得单片机的开发调试更为方便快捷。使用单线背景调试模式(BDM)4.1S12X开发板使用Freescale大学计划配备的XDT512开发板套件:核心开发板+目标开发板(二者通过接插口J1相连接)核心板------在MC9S12XDT512MCU(与MC9S12DG128兼容)最小系统基础上整合了基本的输入/输出接口、2个按键开关、4个拨位开关、4个LED灯、1个电位器分压电路、1个光敏电路、SCI串行通信电路、CAN总线通信电路、BDM调试端口等;晶振频率为4MHz;目标板------扩展的接口、面包板、集成的USB-BDM调试器等;开发板套件通过一根连接目标板方形USB接口的线缆连接至PC机的USB接口;供电通过外接9V电源或直接由PC机的USB供电;重庆大学通信工程学院任勇目标板→核心板↓核心板接口资源↓重庆大学通信工程学院任勇核心板与目标板的连接插口(J1)引脚定义→PC机开发板(用户板)BDM调试器CWIDEUSB重庆大学通信工程学院任勇4.2集成开发环境CodeWarriorCodeWarrior---简称CW一种国际通用的软件集成开发环境(IDE),联合子公司Metrowerks开发;支持Freescale所有微控制器;支持不同的操作系统,如Windows、Macintosh、Linux等;支持汇编语言,以及C/C++、Java高级语言;支持各种调试、仿真功能;包括多个功能模块:编辑器、编译器、源码浏览器、搜索引擎、构造系统、调试器、工程管理器;各种版本:特别版、标准版和专业版,特别版是免费的、用于教学目的,后两种须付费;授权文件和功能限制有区别;本课程使用CodeWarriorforS12(X)5.1Special(特别版)安装:与常规Windows软件一样,按安装向导一步步进行即可使用:找到并运行CodeWarriorIDE重庆大学通信工程学院任勇4.2.1开发入门1.建立工程文件选择FileNew重庆大学通信工程学院任勇NewProjectWizard–器件型号与调试连接类型选择:(1)选MCU型号,如MC9S12XDT512(2)选调试连接工具,此处加选TBDML或P&EMultilink;(若使用连接到核心板BDM口的商用BDM调试器,则选择TBDML)(纯软件仿真选FullChipSimulation)NewProjectWizard–XGate设置:在不启用XGATE模块的情况下,此处选择“SingleCore”。重庆大学通信工程学院任勇NewProjectWizard–工程参数:(1)选编程语言,此处选RelocatableAssembly;(若用C、C++,可变/加选)(2)输入工程的名字,如RunED选择存放位置,如E:\CodeCW\RunLED重庆大学通信工程学院任勇NewProjectWizard的其它页用默认(C编程的存储器模式在程序量小于64K时选择Small)最后点完成,结束新工程的建立。以后通过Fileopen,选.mcp即可重新打开这个工程。重庆大学通信工程学院任勇2.左栏内是CW系统自动生成的各种文件,其中用户需要修改、开发的应用程序是sources中的main.asm文件;点开后是一个自动生成的例子程序框架,保留前面部分,在汇编工程main.asm文件中提示“Inserthereyourdatadefinition”的地方修改、加入数据变量,在提示“Codesection”的地方、“Entry”之后修改、加入代码。重庆大学通信工程学院任勇或者,在C工程main.c文件中提示“putyourowncodehere”的地方修改、加入程序代码。重庆大学通信工程学院任勇编辑main.asm文件,主要将INCLUDE‘mc9s12xdt512.inc’之后的替换成自己的代码,例如。一个需要关心的文件是自动生成的.prm链接文件,主要是代码地址定位信息;其中最后:VECTOR0Entry给出了复位向量地址是标号Entry的地址,而Entry在main.asm中,也就意味着复位后首先执行main.asm文件中的内容。另一个需要关心的文件是自动生成的.inc包含文件,主要是内存映像地址和寄存器地址的别名定义。重庆大学通信工程学院任勇3.编译程序点选Make(或F7)---进行编译和链接项目,如果源程序有错误,CWIDE会弹出错误或警告信息。按提示修改,重新编译,直到没有错误为止,为通过。(自动存盘)4.2.2完全软件仿真和调试首先:设置ProjectSetdefaultTargetFullChipSimulation点选Debug(或F5)---在没有开发板的情况下,可进行软件仿真;也可在用板、制板之前的程序逻辑正确性验证。在弹出的True-TimeSimulator&Real-TimeDebugger窗口软件中进行各种信息观察和调试操作。其中Source中的源程序行,右击可设置断点、执行到光标处等;调试运行:开始/继续、单步运行、跨步运行、单步跳出、汇编单步、停止、复位;调试观察:程序存放位置、寄存器值、运行位置、内存区域值等;各寄存器值、内存区域值均可双击,进行手工编辑;还可使用方便的右键功能;Component菜单Open选择并设置一些仿真部件可进行模拟实验。例选Io-led,为使该部件和程序对应,在部件图形上右击setup设置:数据寄存器PORT为PORTB,其地址DDR为01此时,全速运行程序,可看到8只LED灯的跑马灯效果。重庆大学通信工程学院任勇一些图例---仿真与调试界面:未接BDM时:led仿真效果:运行方式:重庆大学通信工程学院任勇4.2.3BDM程序下载与在线调试首先:设置ProjectSetdefaultTargetTBDML或P&EMultilinkCycloneProBDM调试器硬件连接---一端接PC机USB接口,另一端插接在板上的BDM插针口(别反),PC机会自动识别安装此设备。都通电,可带电插拔。同样点选Debug(或F5)---进入在线调试环境后,功能和方法与软件仿真完全相同,如运行/停止、单步、复位等,但已是针对板的实时、在线的调试运行。其间弹出的“LOADERWARNING”按OK,“SetDerivative”选择为MC9SXDT512,还可能要进行菜单MultilinkUnsecure操作(出现的询问参数依次填入60、9)…。最后正确的状态应是Source栏内有程序代码。重新编译过的工程可以再次点选Debug重新进入调试窗口;也可以在调试窗口的连接器Multilinkload中直接调入新的目标文件Multilink*.abs,它可在工程所在的文件夹下的bin子目录中找到。上述过程实际已完成对MCUNVM的擦除和程序下载,并可以在线调试或脱机运行了。注:CW功能庞杂,其它深入操作须在实践中摸索。重庆大学通信工程学院任勇•4.3使用C语言的开发---自学及边用边回顾为主同汇编语言编程一样,C语言编程同样大量涉及寄存器、位操作和数据变量,但用C语句较汇编语句简洁,也能保证高效率,例如:unsignedcharbPortA=PORTA;//定义bPortA变量,并将A口状态赋给bPortA变量PORTA=0xFF;//将0xFF赋给A口,PORTA将全为高电平TSCR1&=0xDF;//对TSCR1寄存器进行位与操作if((bits&0x10)!=0)//测试bits变量的第4位是否为1if(bits&0x10)//功能同上if(bits&(14))//功能同上while((bits&0x80)!=0x80);//循环测试bits的最7位,直至最7位变为1PORTA|=(17);//PORTA的第7位置1PORTA&=~(17);//PORTA的第7位清0PORTB^=0x80;//PORTB的与10000000b异或,即第7位取反PORTB=~PORTB;//PORTB按位取反if((PORTA&0x81)==0)//检查PORTA第7位、0位是否都为0#defineEnableSCIReInt()SCICR2|=(15)//宏定义,位置1,开放SCI接收中断#defineDisableSCIReInt()SCICR2&=~(15)//宏定义,位清0,禁止SCI接收中断memcpy((void*)0x2011,(void*)0x2000,8);//拷贝0x2000开始的存储器单元的8个字节的内容到0x2011开始的存储器单元中重庆大学通信工程学院任勇CW给定的头文件已经将最常用的一些无符号变量类型做了类型名简化替换:typedefunsignedcharbyte;typedefunsignedintword;typedefunsignedlongdword;在用户C程序中,就用byte代替unsignedchar,word代替unsignedshort等等,这与WindowsVisualC/C++的规范是类似的。稍有不同的是,int类型变量的数据长度在CW开发环境中为2个字节,在VisualC/C++开发环境中则为4个字节。类型\长度8位16位32位64位char√short√int√long√longlong√enum√float√double√longdouble√longlongdouble√CW中C变量的类型与长度定义Freescale字节序排布:bigendian模式高字节在低地址。非littleendian重庆大学通信工程学院任勇4.4基于CodeWarrior编程开发实践输入输出控制的汇编实例:【例4-1】重庆大学通信工程学院任勇有中断的程序安排【例4-2】在整个源程序的末尾声明中断子程序的所对应的向量地址,格式如例;该程序实现当IRQ引脚电平有下降沿时触发跑马灯显示,按PP口0位键后恢复等待。重庆大学通信工程学院任勇C语言程序实例【例4-4】8个LED灯切换亮出,形成来回跑动形式的跑马/流水灯效果。重庆大学通信工程学院任勇C语言程序实例并有中断注意1:本例要在工程对应的prm文件最后添加一行中断向量位置定义:VECTOR8Timer0_ISR或VECTORADDRESS0xFFEETimer0_ISR简单些直接将中断函数名写成interrupt8voidTimer0_ISR(),这样就不必再在prm文件中声明。注意2:#pragmaCODE_SEGNON_BANKED//中断服务函数定位声明
本文标题:04章仿真调试及C语言编程
链接地址:https://www.777doc.com/doc-3051065 .html