F²MC-8L/16LX/FR FAMILY

Similar documents
Microsoft Word - mcu-an z-10.doc

Microsoft Word - mcu-an z-10.doc

Microsoft Word - mcu-an z-11.doc

Microsoft Word - mcu-an z-10.doc

F²MC-8L/16LX/FR FAMILY

F²MC-8L/16LX/FR FAMILY

Microsoft Word - MSP430 Launchpad 指导书.docx

行业

F²MC-8L/16LX/FR FAMILY

F²MC-8L/16LX/FR FAMILY

行业

行业

Microsoft Word - mcu-an z-10.doc

行业

Huawei Technologies Co

行业

第十四章 STC单片机比较器原理及实现

目录

JLX

PowerPoint 演示文稿

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc

Microsoft Word - MAN2011A_CH_RTT.doc

Microsoft Word - mcu-an z-11.doc

C语言的应用.PDF

F²MC-8L/16LX/FR FAMILY

PTS7_Manual.PDF

P4i45GL_GV-R50-CN.p65

邏輯分析儀的概念與原理-展示版

行业

STM32 for sensorless vector control

bingdian001.com

行业

Application Note Format

untitled

12232A LED LED LED EL EL CCFL EL CCF

untitled

外围器件-new.cdr

Microsoft PowerPoint - STU_EC_Ch08.ppt

Microsoft Word - ~ doc

P4VM800_BIOS_CN.p65

学习MSP430单片机推荐参考书

ebook122-11

极客良品 -CC3200xx wifi 学习板 -PWM 实验 CC32xx-PWM 实验 片内定时器功能介绍 ( 使用的 mcu 外设和上一个节内容是一样的 ) 该 CC320 包含 4 个 32 位用户可编程通用定时 (GPTA0~3 或有文档标注为 TIMERA0~3),GPT 可以用于对具有

F²MC-8L/16LX/FR FAMILY

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

audiogram3 Owners Manual

<4D F736F F D A F E45BDA8C1A2B9A4B3CCBFAAB7A2BBB7BEB3CFEABDE22E646F63>

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

AN INTRODUCTION TO PHYSICAL COMPUTING USING ARDUINO, GRASSHOPPER, AND FIREFLY (CHINESE EDITION ) INTERACTIVE PROTOTYPING

P4V88+_BIOS_CN.p65

操作指导手册

B 6 A A N A S A +V B B B +V 2

2. initial always initial always 0 always initial always fork module initial always 2 module clk_gen_demo(clock1,clock2); output clock1,clock2; reg cl

Model P53 pH-ORP Analyzer CH.doc

CC213

中文手册

第一章

untitled

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

IC芯片自主创新设计实验

C/C++ - 文件IO

38 诚 信 始 于 入 口 从 入 口 处 着 手 打 好 律 师 队 伍 建 设 的 诚 信 基 础 / 刘 彦 平 4 0 我 国 证 券 公 司 治 理 缺 陷 的 根 源 及 其 出 路 / 黄 运 成 曹 里 加 李 畅 4 3 中 止, 因 为 什 么? 被 告 人 胡 鹏 等 五 人

第 卷 第 期 年 月 半 导 体 学 报! " # $%&'%' $!&' #% #$1 /#1 $'! / ?/ ?/ / 3 0,?/ ) * +!!! '!,!! -. & ' $! '! 4% %&1)/1(7%&)03 (% )

SDP

F²MC-8L/16LX/FR FAMILY

PowerPoint 演示文稿

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

Microsoft Word - AN3259C

Andes Technology PPT Temp

Microsoft Word - T12_T13_AD_PECÀý³Ì½éÉÜ.doc

行业

STC15W4K60S4系列增强型PWM波形发生器应用

版本说明书

c_cpp

中国生态文明奖先进集体和先进个人建议吊单公示

投 入 建 设 经 费 3600 万 元, 立 项 建 设 19 个 研 究 生 公 共 实 验 课 程 教 学 平 台, 依 托 实 验 课 程 平 台 开 设 研 究 生 实 验 课 程 109 门, 系 统 训 练 并 提 升 了 研 究 生 知 识 应 用 能 力 工 程 认 知 能 力,

(Microsoft Word - \277\357\262\325\252\272\246\322\266q.doc)

【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课


國立嘉義高中 103 學年度第 1 學期第 6 次行政會議紀錄 日期時間 103 年 12 月 15 日(星期一) 時間 08:30~ 地點 旭陵樓 3 樓第 1 會議室 主席 黃校長義春 紀錄彙整 葉國宗 參加人員 如簽到表 壹 主席報告 1.今天上午 11:30 要出發至溪湖高中進行 104 學

1 TPIS TPIS 2 2

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

Microsoft Word - ISSFA-0109_B_SM59264_WDT_ APN_TC_.doc

2_dvdr3380_97_CT_21221b.indd

Microsoft Word - mcu-an z-10.doc

MICROCHIP EVM Board : APP APP001 PICmicro Microchip APP001 40pin PDIP PICmicro Design Tips Character LCM Temperature Sensor Application I/O Pi

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

CM ZT1

9 什 么 是 竞 争 与 冒 险 现 象? 怎 样 判 断? 如 何 消 除?( 汉 王 笔 试 ) 在 组 合 逻 辑 中, 由 于 门 的 输 入 信 号 通 路 中 经 过 了 不 同 的 延 时, 导 致 到 达 该 门 的 时 间 不 一 致 叫 竞 争 产 生 毛 刺 叫 冒 险 如

MSP430单片机简介

Microsoft Word - IRFWX-A078_A_SM59R08A2_SM59R16A2_IIC APN_SC_.doc

F²MC-8L/16LX/FR FAMILY

行业

行业

51 C 51 isp 10 C PCB C C C C KEIL

程式人雜誌

INCF SEC1,F ; 將 SEC1+1 作查表取回對應數字 MOVF SEC1,W banksel STRING1 banksel PORTB RETFIE run_sec2: MOVF SEC2,W SUBLW.5 GOTO run_min ; 將秒個位數歸 0 CLRF SEC1 MOVL

775i65PE_BIOS_CN.p65

2 12

Transcription:

富士通半导体 ( 上海 ) 有限公司应用笔记 MCU-AN-500077-Z-12 F²MC-8FX 家族 8 位微型控制器 MB95430 系列 16 位 FRT 和 OCU 应用笔记

修改记录 修改记录 版本日期作者修改记录 1.0 2010-03-12 Kevin. Lin 初稿 1.1 2010-04-12 Kevin. Lin 更新 1.2 2010-09-27 Kevin. Lin 更新源代码 本手册包含 35 页 1. 本文档记载的产品信息及规格说明如有变动, 恕不预先通知 如需最新产品信息和 / 或规格说明, 联系富士通销售代表或富士通授权经销商 2. 基于本文档记载信息或示意图的使用引起的对著作权 工业产权或第三方的其他权利的侵害, 富士通不承担任何责任 3. 未经富士通明文批准, 不得对本文档的记载内容进行转让 拷贝 4. 本文档所介绍的产品并不旨在以下用途 : 需要极高可靠性的设备, 诸如航空航天装置 海底中继器 核控制系统或维系生命的医用设施 5. 本文档介绍的部分产品可能是 外汇及外贸管理法 规定的战略物资 ( 或专门技术 ), 出口该产品或其中部分元件前, 应根据该法获得正式批准 版权 2009 富士通半导体 ( 上海 ) 有限公司 MCU-AN-500077-Z-12- 第 2 页

目录 目录 修改记录... 2 目录... 3 1 概要... 5 2 16 位 OCU 和 FRT 的特性... 6 2.1 OCU 和 FRT 的结构图... 6 2.2 OCU 和 FRT 记数器... 8 2.2.1 与输出比较单元相关的寄存器... 8 2.2.2 与定时器相关的寄存器... 8 2.3 OCU 的引脚设置... 9 2.4 与电压比较器的关系... 9 2.5 中断... 9 2.5.1 定时器中断... 9 2.5.2 OCU 中断... 10 3 软件操作... 11 3.1 设置程序... 11 3.1.1 16 位定时器... 11 3.1.2 输出比较单元... 11 3.2 操作模式... 12 3.2.1 有相位差的输出脉冲序列... 12 3.2.2 有死区时间的脉冲序列... 14 3.2.3 输出 PWM... 16 4 部分位的影响... 18 4.1.1 EOCS_BTSn... 18 4.1.2 OCMCR_CMPMDn... 19 MCU-AN-500077-Z-12 - 第 3 页

目录 4.1.3 OCMCR_FDENn (n= 0, 1)... 20 5 更多信息... 22 6 附录... 23 6.1 图表索引... 23 6.2 范例代码... 24 MCU-AN-500077-Z-12- 第 4 页

第 1 章概要 1 概要 本文档介绍了 16 位定时器和输出比较单元的功能及配置方法, 同时给出了相关代码 MCU-AN-500077-Z-12 - 第 5 页

第 2 章 16 位 OCU 和 FRT 的特性 2 16 位 OCU 和 FRT 的特性 本章介绍了 OCU 和 FRT 的特性 2.1 OCU 和 FRT 的结构图 16 位输出比较单元用于生成脉冲序列 它包括一个 16 位定时器, 两个比较寄存器, 两个比较缓冲寄存器, 两个比较输出引脚, 以及多个控制寄存器 如果烧入比较寄存器的值与 16 位定时器的计数值匹配, 引脚的输出水平将被触发, 产生中断 图 2-1 显示了 16 位 OCU 的结构图 图 2-1:OCU 结构图 MCU-AN-500077-Z-12- 第 6 页

第 2 章 16 位 OCU 和 FRT 的特性该 16 位定时器包括一个 16 位上 / 下计数器, 一个比较清除缓冲寄存器, 以及一个控制状态记数器 定时器的计数值用作输出比较单元的时基 图 2-2 显示了 16 位定时器的结构图 图 2-2:FRT 结构图 MCU-AN-500077-Z-12 - 第 7 页

第 2 章 16 位 OCU 和 FRT 的特性 2.2 OCU 和 FRT 记数器 2.2.1 与输出比较单元相关的寄存器 OCU 模块有两个通道 :OUT0 和 OUT1 每个通道有一个 16 位输出比较寄存器和一个 16 位缓冲寄存器 输出寄存器和缓冲寄存器位于同一地址 输出寄存器为只读 ; 缓冲记数器只写 用户可以使用 2.2.2 节中介绍的方法访问这两种寄存器 表 2-1 列出了与输出比较单元相关的寄存器 表 2-1:OCU 寄存器 寄存器名 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 缺省值 OCCP0/B0 H OCCP0/B0 L OCCP1/B1 H OCCP1/B1 L 输出比较寄存器 0 / 缓冲寄存器 0 H b 00000000 输出比较寄存器 0 / 缓冲寄存器 0 L b 00000000 输出比较寄存器 1 / 缓冲寄存器 1 H b 00000000 输出比较寄存器 1 / 缓冲寄存器 1 L b 00000000 OCSL ICP1 ICP0 ICE1 ICE0 -- -- CST1 CST0 b 00000000 OCSH -- CMOD 0 OTE11 OTE10 OTE01 OTE00 OTD1 OTD0 b 01000000 EOCS HW_S TOP -- BTS1 BUF1 -- -- BTS0 BUF0 b 00000000 OCMCR -- FDEN1 INV1 CMPMD 1 -- FDEN0 INV0 CMPMD 0 b 00000000 OCUOC -- -- -- -- -- OCSTPSEL b 00000000 2.2.2 与定时器相关的寄存器 表 2-2 列出了与定时器相关的寄存器 表 2-2:FRT 寄存器 寄存器名 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit1 Bit 0 缺省值 CPCLRH 定时器比较清除寄存器寄存器 H b 11111111 CPCLRL 定时器比较清除寄存器 L b 11111111 CPCLRBH 定时器比较清除缓冲寄存器 H b 11111111 MCU-AN-500077-Z-12- 第 8 页

第 2 章 16 位 OCU 和 FRT 的特性 CPCLRBL 定时器比较清除缓冲寄存器 L b 11111111 TCCSL IVF IVFE 中止 模式 CLR CLK2 CLK1 CLK0 b 00000000 TCCSH -- FSEL -- -- -- -- -- -- b 01000000 ETCCSL -- -- CNTDIR -- BFE IRQZF IRQZE CNTMD b 00000000 ETCCSH -- CIMS2 CIMS1 CIMS0 -- ZIMS2 ZIMS1 ZIMS0 b 00000000 比较清除缓冲寄存器 (CPCLRBH/L) 和比较清除记数器 (CPCLRH/L) 位于同一地址 比较清除缓冲寄存器为只写寄存器 ; 比较清除寄存器为只读寄存器 两者都是 16 位寄存器, 可使用以下方法进行读写 使用 16 位访问指令读写 ( 例如 MOVW ) 首先使用字节访问指令读写高位, 然后读写低位 ( 例如 MOV ) 2.3 OCU 的引脚设置 OCU 模块有两对输出 PG0 或 P70 可配置为 OUT0,PG1 或 P73 可配置为 OUT1, 如下所示 SYSC2_OUTSEL0 = 0 : OUT0 -- P70. SYSC2_OUTSEL0 = 1 : OUT0 -- PG0. SYSC2_OUTSEL1 = 0 : OUT1 -- P73. SYSC2_OUTSEL1 = 1 : OUT1 -- PG1. 为输出比较信号, 用户应通过 OCSH_ OTEn 启用通道 ; 否则引脚状态将由 GPIO 或其他外围 设备控制 建议在禁用 OCU 通道前, 初始化引脚至安全状态 2.4 与电压比较器的关系 如果 OTE00,OTE 01(OTE10,OTE11) 设置为 11,OCU 模块可由电压比较器输出停止 用户可通过配置寄存器 OCUOC, 选择停止 OCU 输出的比较器和边沿方向 2.5 中断 2.5.1 定时器中断 对于 FRT, 如果首先启用中断, 根据设置的不同, 中断请求将在零检测或比较清除点发生 用户可通过设置 ETCCSH 寄存器多次匹配中断标志 MCU-AN-500077-Z-12 - 第 9 页

第 2 章 16 位 OCU 和 FRT 的特性 2.5.2 OCU 中断 OCU 的每个通道都有一个中断 输出比较发生时, 设置中断标志 如果启用中断, 中断的优先级应在 vector.c 文件中设置 下表列出了中断向量 表 2-3: 中断向量 中断源中断请求编号中断优先级设置寄存器向量表地址 记数器设置位高位低位 输出比较 ch0 与匹配输出比较 ch1 与匹配 IRQ07 ILR07 L07 [1:0] FFECH FFEDH IRQ08 ILR08 L08 [1:0] FFEAH FFEBH 16 位定时器 IRQ14 ILR14 L14 [1:0] FFDEH FFDFH MCU-AN-500077-Z-12- 第 10 页

第 3 章软件操作 3 软件操作 本章介绍了输出比较单元的软件操作 OCU 有一个用于提供时基的 16 位定时器, 设置该定时器是先决条件 本文档给出了 FRT 的 范例代码 参见 16 位定时器 了解关于该定时器的更多信息 3.1 设置程序 3.1.1 16 位定时器通过 TCCSL_CLK0~CLK2 设置定时器计数时钟通过 ETCCSL_CNTMD 选择 FRT 计数模式烧写比较清除值至 CPCLRH/L 通过 TCCSL_CLR 清除定时器计数器如有必要, 启用缓冲器如有必要, 启用溢出或过零中断如有必要, 设置溢出或过零中断标志配置 OCU 后, 启用定时器 3.1.2 输出比较单元选择输出引脚烧写输出比较值至 OCCP0 和 OCCP1 通过 OCMCR_CMPMDn 设置比较匹配输出如有必要, 启用输出比较缓冲器如果缓冲器由 EOCS_BTSn 启用, 选择数据传送点通过 OCSH_CMOD0 为通道 1 定义比较输出模式使用 OCSH_OTDn 选择输出比较引脚的初始水平如有必要, 选择硬件停止触发器来源如有必要, 启用中断通过 OCSH_OTE 启用输出比较引脚通过 OCSL_CSTn 启用输出比较操作 MCU-AN-500077-Z-12 - 第 11 页

第 3 章软件操作 3.2 操作模式 3.2.1 有相位差的输出脉冲序列 图 3-1 显示了有相位差的脉冲序列 图 3-1: 有相位的差脉冲序列 如图 3-1 所示,OUT0 和 OUT1 的周期和占空比相同, 但上升沿和下降沿发生的点不同 上升沿间的不同就是相位差 为输出期望的序列,16 位定时器在向上计数模式下运行 如果时钟输入相同, 比较清除记数器的值将决定脉冲序列的周期 用户可通过烧写不同的值至寄存器 CPCLRH/L, 修改比较清除记数器的值 OCCP0 和 OCCP1 的不同造成脉冲序列的相位差 下式用于计算周期 ( 向上计数模式 ) Period =2* (1/MCLK)*(1/Pre-scale)*CPCLRH/L. (3-1) 预分频为 16 位定时器的预分频 因此, CPCLRH/L = Period*MCLK*Pre-scale/2. (3-2) 如果 : FCH = 4M, MCLK =4M, 频率 = 20k, 预分频 =1/4 则有 : CPCLH/L = 25 MCU-AN-500077-Z-12- 第 12 页

第 3 章软件操作 初始化图 3-2 中的代码说明了配置 FRT 和 OCU 模块的步骤 P70 和 P73 用作输出引脚, 定时器处于向上计数模式, 预分频为 1 :4, 缓冲器被启用 16 位定时器和 OCU 功能在初始化代码中被禁用 注意 : 务必在启用比较操作之前, 写一个值至比较寄存器 图 3-2: 初始化代码 MCU-AN-500077-Z-12 - 第 13 页

第 3 章软件操作 3.2.2 有死区时间的脉冲序列有死区时间的脉冲序列通常用于驱动 H 桥 OCU 不能输出两个通道的 PWM 信号, 但可以改变两个脉冲序列的频率 因此,PFM 方法对于驱动 H 桥非常有用 图 3-3 显示了波形 CPCLRH/L 可通过式 (3-2) 算出, 脉冲序列的占空比为 50% 图 3-3: 有失效时间的脉冲序列死区时间的计算如下 : Dead Time = (OCCP0-OCCP1) *(1/MCLK)*(1/Pre-scale) 改变 OCCP0-OCCP1 的值将改变死区时间 MCU-AN-500077-Z-12- 第 14 页

第 3 章软件操作 初始化 16 位定时器处于上 / 下模式 CPCLRH/L 的缺省值为 0XFFFF OCCP0 和 OCCP1 分别烧写 为 0XAAAA 和 0X5555, 该值的不同导致死区时间的产生 图 3-4 显示了初始化代码 图 3-4: 有死区时间的脉冲序列的初始化 MCU-AN-500077-Z-12 - 第 15 页

第 3 章软件操作 3.2.3 输出 PWM OCSH_CMOD0 位设置为 1 时,OCU 模块可通过 OUT1 产生一个通道的 PWM 图 3-5 显示 了 PWM 信号波形 图 3-5:PWM 信号波形周期的计算公式如下 : Period = (1/MCLK)*(1/Pre-scale)*CPCLRH/L (3-3) 预分频是 16 位定时器的预分频因此, CPCLRH/L = Period*MCLK*Pre-scale (3-4) 如果 16 位定时器处于上 / 下模式, 应使用式 (3-1) 计算周期 改变 OCCP0 的值将改变占空比 保持 OCCP1 不变, 修改 OCCP0 为 0XFFFF,OUT1 的占空比将变大 MCU-AN-500077-Z-12- 第 16 页

第 3 章软件操作 初始化在该模式下, 输出通道 1 配置为与比较记数器 0,1 匹配时反向 改变 OCCP0 的值将改变 PWM 波形的占空比 图 3-6 显示了 PWM 的初始化代码 图 3-6:PWM 的初始化代码 MCU-AN-500077-Z-12 - 第 17 页

第 4 章部分位的影响 4 部分位的影响 4.1.1 EOCS_BTSn EOCS_BTSn 决定了启用缓冲器功能时, 输出比较缓冲器寄存器的值转移至输出比较寄存器的时间点 EOCS_BTSn = 0, 转移发生在 FRT 的过零点 图 4-1: 过零点的转移 EOCS_BTSn = 1, 转移发生在 FRT 的溢出点 图 4-2: 在溢出点转移 MCU-AN-500077-Z-12- 第 18 页

第 4 章部分位的影响 4.1.2 OCMCR_CMPMDn 启用引脚输出时, 该位用于在匹配发生后立即改变引脚的输出水平 OCMCR_CMPMDn = 0 在该模式下, 引脚水平与之前的值相反 因此, 需注意引脚的初始水平 图 4-3 显示了信号波形 图 4-3:CMPMDn=0 的信号波形 OCMCR_CMPMDn = 1 16 位定时器处于向上计数模式时, 输出引脚水平设置为 1;16 位定时器处于向下计数模式时, 输出引脚水平被清除 该模式不考虑输出引脚的初始值 MCU-AN-500077-Z-12 - 第 19 页

第 4 章部分位的影响 图 4-4:CMPMDn= 1 的信号波形 4.1.3 OCMCR_FDENn (n= 0, 1) 该位用于 ch0 或 ch1 的满占空比功能 FDENn = 0 时, 满占空比功能特性被禁用 FDENn =1 时, 满占空比功能特性被启用 ( 必须设置 OCSH_CMOD0 = 0) 如果 FDENn = 0, 16 位定时器的值与比较寄存器 (OCCPn) 匹配时, 触发输出水平 如果 FDENn =1, 且 COMD0=0, OCCPn= 0 时,OCU 的输出与 16 位定时器的值无关 OUTn = OCMCR_INVn 0<OCCP0<CPCLR 时, OCU 的输出取决于 CMPMDn 位 OCCP0>= CPCLR 时, OCU 的输出取决于比较清除事件的 OCU 比较标志 如果 CMP_FLAG =0,OUTn =-OCMCR_INVn 如果 CMP_FLAG =1, OUTn 不变 MCU-AN-500077-Z-12- 第 20 页

第 4 章部分位的影响 CMP_FLAG 由比较匹配事件设置, 由比较清除事件重置 图 4-5 显示了 FDEN =1,CMPMD0= 0,INV0 = 0 时的信号波形 图 4-5: 满占空比的信号波形 MCU-AN-500077-Z-12 - 第 21 页

第 5 章更多信息 5 更多信息 关于富士通半导体更多的产品信息, 请访问以下网站 : 英文版本地址 : http://www.fujitsu.com/cn/fsp/services/mcu/mb95/application_notes.html 中文版本地址 : http://www.fujitsu.com/cn/fss/services/mcu/mb95/application_notes.html MCU-AN-500077-Z-12- 第 22 页

第 6 章附录 6 附录 6.1 图表索引表 2-1:OCU 寄存器... 8 表 2-2:FRT 寄存器... 8 表 2-3: 中断向量... 10 图 2-1:OCU 结构图... 6 图 2-2:FRT 结构图... 7 图 3-1: 有相位的差脉冲序列... 12 图 3-2: 初始化代码... 13 图 3-3: 有失效时间的脉冲序列... 14 图 3-4: 有死区时间的脉冲序列的初始化... 15 图 3-5:PWM 信号波形... 16 图 3-6:PWM 的初始化代码... 17 图 4-1: 过零点的转移... 18 图 4-2: 在溢出点转移... 18 图 4-3:CMPMDn=0 的信号波形... 19 图 4-4:CMPMDn= 1 的信号波形... 20 图 4-5: 满占空比的信号波形... 21 MCU-AN-500077-Z-12 - 第 23 页

第 6 章附录 6.2 范例代码 Project1: Pulse sequences with phase difference #include "mb95430.h" /*------------------------------------------------------------------------- ------ Name : InitFRTandOCU () Function Input Output : Initialize the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void InitFRTandOCU (void) SYSC2_OUTSEL0 = 0; SYSC2_OUTSEL1 = 0; DDR7_P70 = 1; DDR7_P73 = 1; PDR7_P70 = 0; PDR7_P73 = 0; // select OUT0 output pin // select OUT1 output pin // OUT0 output // OUT1 output // OUT0 output 0 first // OUT1 output 0 first TCCSH = 0x40; TCCSL = 0x2A; // count clock have no division // clear timer // disable timer first // count clock=1/4*mclk ETCCSH = 0x0; ETCCSL = 0x08; // no interrupt mask // up count mode // interrupt disabled CPCLRH = 0xFF; CPCLRL = 0xFF; // write upper register first // then down register MCU-AN-500077-Z-12- 第 24 页

第 6 章附录 OCSL = 0x00; operation first // disable compare OCSH = 0x00; // initialize ch0&ch1 to 0 // disable output // ch1 reverses upon comp reg1 EOCS = 0x11; // buffer enabled // transfer data at zero point OCCP0H = 0xBF; OCCP0L = 0xFF; // write upper register first // then down register OCCP1H = 0x7F; OCCP1L = 0xFF; /*------------------------------------------------------------------------- ------ Name : EnableFRTandOCU () Function Input Output : Enable the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void EnableFRTandOCU (void) TCCSL_CLR = 1; // clear FRT counter /* take care here, strongly recommend to write 0 to TCDTH/L!!!! */ TCDTH = 0; TCDTL = 0; MCU-AN-500077-Z-12 - 第 25 页

第 6 章附录 OCSH = 0x28; enabled // output channels are // if HW_STOP=0 OCSL_CST0 = 1; operation OCSL_CST1 = 1; operation // enable output compare0 // enable output compare1 TCCSL_STOP = 1; // start free-run timer counting /*------------------------------------------------------------------------- ------ Name : DisableFRTandOCU () Function Input Output : Disable the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void DisableFRTandOCU(void) OCSH = 0; // output channels are disabled // the pin are controlled by GPIO TCCSL_STOP = 0; // stop free-run timer counting OCSL_CST0 = 0; // disable operation OCSL_CST1 = 0; /* delay */ void Delayms (unsigned char cnt_dly) unsigned char i; for(; cnt_dly > 0 ; cnt_dly-- ) MCU-AN-500077-Z-12- 第 26 页

第 6 章附录 for(i = 250 ; i > 0 ; i-- ) main() DI(); SYCC = 0x01; InitFRTandOCU (); // disable interrupt // MCLK = (1/4)*8M // enable interrupt EI(); while(1) EnableFRTandOCU (); Delayms(100); DisableFRTandOCU (); Delayms(100); MCU-AN-500077-Z-12 - 第 27 页

第 6 章附录 Project 2: Output Pulse Sequences with Dead Time #include "mb95430.h" /*------------------------------------------------------------------------- ------ Name : InitFRTandOCU () Function Input Output : Initialize the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void InitFRTandOCU (void) SYSC2_OUTSEL0 = 0; SYSC2_OUTSEL1 = 0; DDR7_P70 = 1; DDR7_P73 = 1; PDR7_P70 = 0; PDR7_P73 = 0; // select OUT0 output pin // select OUT1 output pin // OUT0 output // OUT1 output // OUT0 output 0 first // OUT1 output 0 first TCCSH = 0x40; TCCSL = 0x2A; // count clock have no division // clear timer // disable timer first // count clock=1/4*mclk ETCCSH = 0x0; ETCCSL = 0x08; // no interrupt mask // up count mode // interrupt disabled CPCLRH = 0xFF; CPCLRL = 0xFF; // write upper register first // then down register MCU-AN-500077-Z-12- 第 28 页

第 6 章附录 OCSL = 0x00; operation first // disable compare OCSH = 0x40; // initialize ch0&ch1 to 0 // disable output // ch1 reverses upon comp reg0,1 EOCS = 0x11; // buffer enabled // transfer data at zero point OCCP0H = 0xBF; OCCP0L = 0xFF; // write upper register first // then down register OCCP1H = 0x7F; OCCP1L = 0xFF; /*------------------------------------------------------------------------- ------ Name : EnableFRTandOCU () Function Input Output : Enable the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void EnableFRTandOCU(void) TCCSL_CLR = 1; // clear FRT counter /* take care here, strongly recommend to write 0 to TCDTH/L!!!! */ TCDTH = 0; TCDTL = 0; OCSH = 0x68; enabled // output channels are MCU-AN-500077-Z-12 - 第 29 页

第 6 章附录 // if HW_STOP=0 OCSL_CST0 = 1; operation OCSL_CST1 = 1; operation // enable output compare0 // enable output compare1 TCCSL_STOP = 1; // start free-run timer counting /*------------------------------------------------------------------------- ------ Name : DisableFRTandOCU () Function Input Output : Disable the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void DisableFRTandOCU (void) TCCSL_STOP = 0; // stop free-run timer counting OCSH = 0x80; disabled // output channels are // the pin are controlled by GPIO OCSL_CST0 = 0; // disable operation OCSL_CST1 = 0; /*delay*/ void Delayms (unsigned char cnt_dly) unsigned char i; for(; cnt_dly > 0 ; cnt_dly-- ) for(i = 250 ; i > 0 ; i-- ) MCU-AN-500077-Z-12- 第 30 页

第 6 章附录 main() DI(); SYCC = 0x01; InitFRTandOCU (); // disable interrupt // MCLK = (1/4)*8M // enable interrupt EI(); while(1) EnableFRTandOCU (); Delayms(100); DisableFRTandOCU (); Delayms(100); MCU-AN-500077-Z-12 - 第 31 页

第 6 章附录 Project 3: Output PWM #include "mb95430.h" /*------------------------------------------------------------------------- ------ Name : InitFRTandOCU () Function Input Output : Initialize the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void InitFRTandOCU(void) SYSC2_OUTSEL0 = 0; SYSC2_OUTSEL1 = 0; DDR7_P70 = 1; DDR7_P73 = 1; PDR7_P70 = 0; PDR7_P73 = 0; // select OUT0 output pin // select OUT1 output pin // OUT0 output // OUT1 output // OUT0 output 0 first // OUT1 output 0 first TCCSH = 0x40; TCCSL = 0x2A; // count clock have no division // clear timer // disable timer first // count clock=1/4*mclk ETCCSH = 0x0; ETCCSL = 0x08; // no interrupt mask // up count mode // interrupt disabled CPCLRH = 0xFF; CPCLRL = 0xFF; // write upper register first // then down register MCU-AN-500077-Z-12- 第 32 页

第 6 章附录 OCSL = 0x00; operation first // disable compare OCSH = 0x40; // initialize ch0&ch1 to 0 // disable output // ch1 reverses upon comp reg0,1 EOCS = 0x11; // buffer enabled // transfer data at zero point OCCP0H = 0xBF; OCCP0L = 0xFF; // write upper register first // then down register OCCP1H = 0x7F; OCCP1L = 0xFF; /*------------------------------------------------------------------------- ------ Name : EnableFRTandOCU () Function Input Output : Enable the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void EnableFRTandOCU(void) TCCSL_CLR = 1; // clear FRT counter /* take care here, strongly recommend to write 0 to TCDTH/L!!!! */ TCDTH = 0; TCDTL = 0; OCSH = 0x68; enabled // output channels are MCU-AN-500077-Z-12 - 第 33 页

第 6 章附录 // if HW_STOP=0 OCSL_CST0 = 1; operation OCSL_CST1 = 1; operation // enable output compare0 // enable output compare1 TCCSL_STOP = 1; // start free-run timer counting /*------------------------------------------------------------------------- ------ Name : DisableFRTandOCU () Function Input Output : Disable the Free-Run Timer and OCU module --------------------------------------------------------------------------- -----*/ void DisableFRTandOCU(void) TCCSL_STOP = 0; // stop free-run timer counting OCSH = 0x80; disabled // output channels are // the pin are controlled by GPIO OCSL_CST0 = 0; // disable operation OCSL_CST1 = 0; /*delay*/ void Delayms (unsigned char cnt_dly) unsigned char i; for(; cnt_dly > 0 ; cnt_dly-- ) for(i = 250 ; i > 0 ; i-- ) MCU-AN-500077-Z-12- 第 34 页

第 6 章附录 main() DI(); SYCC = 0x01; InitFRTandOCU (); // disable interrupt // MCLK = (1/4)*8M // enable interrupt EI(); while(1) EnableFRTandOCU (); Delayms(100); DisableFRTandOCU (); Delayms(100); MCU-AN-500077-Z-12 - 第 35 页