Codewarrior IDE 快速入门 本章我们以 Codewarrior HC08 V3.1 为例, 创建一个工程, 编辑源文件, 编译后进行调试 1 创建新项目 打开 codewarrior IDE 后, 出现如图 2.1 的界面 在 File 菜单中选择 New 图 2.1 codewarrior 在弹出的新窗口中, 选择 HC(S)08 New Project Wizard, 在 Project Name 框中, 输入项目的名称 在 Location 框中, 可以指定这个项目保存在哪个文件夹中 如图 2.2 所示 然后选择 OK 按钮, 进入下一步 图 2.2 新建项目 在 New Project Wizard Page1 中, 选择 MCU 的类型 比如我们在这里选择 MC68HC908GZ60, 如图 2.3 所示 然后选择 Next 按钮, 进入下一步
图 2.3 选择 在 New Project Wizard Page2 中, 选择编程语言的类型 如图 2.4 所示, 点击 Next 图 2.4 选择编程语言 在 New Project Wizard Page3 中, 选择是否采用 Processor Expert 如图 2.5 所示 图 2.5 选择 Processor Expert 在 New Project Wizard Page4 中, 选择是否采用 PC-lint 如图 2.6 所示
图 2.6 选择 PC-lint 在 New Project Wizard Page5 中, 选择启动程序类型 如图 2.7 所示 图 2.7 选择启动程序类 在 New Project Wizard Page6 中, 选择浮点数类型 如图 2.8 所示 图 2.8 选择浮点数类型 在 New Project Wizard Page7 中, 选择存储器类型 如图 2.9 所示
图 2.9 选择存储器类型 在 New Project Wizard Page8 中, 选择硬件仿真连接器类型 如图 2.10 所示 图 2.10 选择硬件仿真连接器 最后,Codewarrior IDE 就创建了一个新项目 如图 2.11 所示 图
2 编辑源文件 如图 2.12 所示, 在左边 Lab1.mcp 下面的选择框中, 选择目标 P&E FCS(Full Chip Simulation), 在 Files 一栏中, 打开 Sources 文件夹,Codewarrior IDE 已经自动生成一个 main.c 文件, 然后打开这个文件, 在右面的编辑窗口中, 编辑源代码 图 2.12 Codewarrior IDE 窗口这个程序利用基础时钟模块产生 1ms 的中断, 在中断服务程序中计数, 到 1000 次时, 对 1 秒的标志位置位 在主程序循环中, 查询此标志位, 即相当于每隔 1 秒钟将 Port B,0 和 1 口的电平翻转一次 Lab1.mcp main.c 程序清单 ------------------------------------------------------------------------------------------------------------ #include <hidef.h> /* for EnableInterrupts macro */ #include <MC68HC908GZ60.h> void TBM_Init(void); word TimerCounter = 0; byte Flag1s = 0; // 主函数 void main(void) // 时钟初始化函数声明 // 定义一个全局变量, 用来做时钟计数 //1 秒的标志位
CONFIG1 = CONFIG1_COPD_MASK; // 关闭看门狗 DDRB = (DDRB_DDRB0_MASK DDRB_DDRB1_MASK); //B 口 0,1 为输出 PTB = (PTB_PTB0_MASK PTB_PTB1_MASK); } TBM_Init(); // 时钟初始化 EnableInterrupts; /* enable interrupts */ /* include your code here */ for(;;) if(flag1s) // 时间到 1 秒了吗? PTB_PTB0 = ~PTB_PTB0; //B 口电平翻转 PTB_PTB1 = ~PTB_PTB1; Flag1s = 0; } // RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave this function */ // 时钟初始化函数 void TBM_Init(void) // 时基中断使能, 时基中断标志位清 0, 外部晶振 8MHZ, 时钟中断频率 8MHz/8192 1ms TBCR = (TBCR_TBIE_MASK TBCR_TACK_MASK TBCR_TBR0_MASK); TBCR_TBON = 1; // 时钟启动 } // 基本时钟溢出中断函数, 每 1ms 中断一次 void interrupt 17 Int_TBM(void) // 基本时钟的中断向量号为 17, 地址 :$FFDC-FFDD; TimerCounter++; if(timercounter==1000) // 计时到 1s? Flag1s = 1; TimerCounter = 0; // 计数器清零 } TBCR_TACK = 1; // 时基中断标志位清 0 } ------------------------------------------------------------------------------------------------------------
3 编译 (Make) 编辑完源程序后, 点击 codewarrior IDE 工具栏上的 Make 图标 ( 或按 F7 键 ), 会编译和链接项目 如图 2.13 所示 标 图 2.13 Make 图 如果源程序有错误,IDE 会在 Errors & Warnings 窗口中显示错误和警告信息, 如图 2.14 所示 改正错误后, 重新编译, 直到没有错误为止 图 2.14 编译错误和警告窗口 4 仿真和调试 (Simulate & Debug) 点击 codewarrior IDE 工具栏上的 Debug 图标 ( 或按 F5 键 ), 对项目进行仿真调试 如图 2.15 所示 图 2.15 调试图标 此时, 会弹出另外一个窗口, 如图 2.16 所示 注意现在打开的目标是 P&E FCS, 即完全软件仿真 在 PEDebug 菜单中, 可以发现 :Mode: Full Chip Simulation 1) 完全软件仿真 (Full Chip Simulation) 这种方式, 可以在硬件目标板还没准备好的情况下, 先用软件仿真的功能, 验证大部分程序的控制功能, 逻辑顺序等
图 2.16 仿真和调试窗口 在调试窗口中, 如图 2.17 所示的工具条上, 从绿色箭头到最后一个红圈黑箭头一共 7 个图标, 分别表示 : 开始 / 继续 (F5), 单步进入 (F11), 单步跳过 (F10), 单步跳出, 汇编语言单步, 停止 (F6), 复位 图 2.17 调试工具 在 Source 窗口中, 显示的是源程序, 在 main 函数中第二条语句开头, 点击鼠标右键, 在弹出的菜单中选择 Set Breakpoint 来设置断点 按 F5 键开始执行, 程序会运行直到断点处 Data1 窗口中显示的是 main 模块中用到的寄存器及全局变量的值 按 F10 键单步执行, 观察程序运行到什么位置, 和此时 Data1 窗口中相应的寄存器或变量的值 在 PTB_PTB0 = ~PTB_PTB0; 语句前再设一个断点, 然后按 F5 键继续执行, 程序一直运行到断点处停下来 观察 PTB 寄存器 Bit0 的变化, 然后继续 F5 键继续执行,PTB 第 0 位的值会不停地在 0 和 1 之间变化 如图 2.18 所示
通过完全软件仿真, 我们已经验证程序的正确性, 下一步我们要和硬件连起来, 进行硬件仿真 现在关闭这个调试窗口, 回到 Codewarrior IDE 窗口中 图 2.18 软件仿真窗口 2) 在线仿真和下载程序 (In-Circuit Debug/Programming) 这种方式是将程序下载到目标板上, 然后在硬件 MCU 上运行程序, 通过 Multilink 接口来控制程序的运行 在 Codewarrior IDE 窗口中, 在左边 Lab1.mcp 下面选择框中, 选择 P&E ICD 目标, 然后编译 将 P&E USB Multilink08 将 PC 机和目标板 (DEMO908GZ60) 连起来, 如图 2.19 所示 然后按 F5 键进入调试 USB 目标板 DEMO908GZ60 Multilink 接口 16 引脚 图 2.19 硬件仿真连接
首先弹出的是目标连接和密码输入窗口 如图 2.20 所示 在这个窗口中, 需要在 Target Hardware Type 中选择仿真工具类型, 这里我们的仿真工具是 USB Multilink08, 所以选择 class 7 然后在下面的几个选项中, 分别选择 USB 端口,MCU 类型, 目标板的电源, 时钟源 如果需要加密的话, 还可以密码, 如果不需要, 则选择忽略 最后还要检查一下目标板上 Multilink08 的接线是否和此窗口右上方的接线是否一致 当一切选好以后, 点击 Contact taget with these setting 按钮 图 2.20 连接和密码窗口 注意 : 目标板不用上电 如果硬件没有错误, 就会弹出图 2.21 的窗口, 选择 yes, 将会把程序下载到 MCU 中 图 2.21 擦除和编程窗口然后会弹出 True Time Simulator & Real Time Debugger 调试窗口, 如图 2.22 所示 按 F10 键单步执行, 在 Soureces 窗口中, 出现 main 函数以后, 在 PTB_PTB0 = ~PTB_PTB0; 语句前设一个断点, 然后按 F5 键继续执行, 程序一直运行到断点处停下来 观察 PTB 寄存器 Bit0 的变化, 然后继续 F5 键继续执行,PTB 第 0 位的值会不停地在 0 和 1 之间变化 此时如果用示波器观察 PTB0 和 PTB1 引脚的电平, 发现在断点执行前后, 电平会翻转一次 然后, 在 PTB_PTB0 = ~PTB_PTB0; 语句前, 点右键, 在弹出菜单中将断点删除 按 F5 键继续执行, 此时程序将一直运行, 用示波器观察 PTB0 和 PTB1 引脚的电平, 发现电平会周期性翻转
图 2.22 调试窗口 将 USB Multilink08 从目标板上拔掉, 然后单独给目标板上电后, 用示波器观察 PTB0 和 PTB1 引脚, 电平会每隔 1 秒翻转一次 至此, 通过上述这个简单的例子, 我们可以利用 Codewarrior IDE 快速地建立一个基于 HC08 系列 MCU 的项目, 并能很方便地进行编译和调试 在以后的章节中, 还要对 Codewarrior IDE 更多的功能进行阐述