471KB

The following document contains information on Cypress products.
Colophon
The products described in this document are designed, developed and manufactured as contemplated for general use,
including without limitation, ordinary industrial use, general office use, personal use, and household use, but are not
designed, developed and manufactured as contemplated (1) for any use that includes fatal risks or dangers that, unless
extremely high safety is secured, could have a serious effect to the public, and could lead directly to death, personal injury,
severe physical damage or other loss (i.e., nuclear reaction control in nuclear facility, aircraft flight control, air traffic control,
mass transport control, medical life support system, missile launch control in weapon system), or (2) for any use where
chance of failure is intolerable (i.e., submersible repeater and artificial satellite). Please note that Spansion will not be liable
to you and/or any third party for any claims or damages arising in connection with above-mentioned uses of the products.
Any semiconductor devices have an inherent chance of failure. You must protect against injury, damage or loss from such
failures by incorporating safety design measures into your facility and equipment such as redundancy, fire protection, and
prevention of over-current levels and other abnormal operating conditions. If any products described in this document
represent goods or technologies subject to certain restrictions on export under the Foreign Exchange and Foreign Trade Law
of Japan, the US Export Administration Regulations or the applicable laws of any other country, the prior authorization by the
respective government entity will be required for export of those products.
Trademarks and Notice
The contents of this document are subject to change without notice. This document may contain information on a Spansion
product under development by Spansion. Spansion reserves the right to change or discontinue work on any product without
notice. The information in this document is provided as is without warranty or guarantee of any kind as to its accuracy,
completeness, operability, fitness for particular purpose, merchantability, non-infringement of third-party rights, or any other
warranty, express, implied, or statutory. Spansion assumes no liability for any damages of any kind arising out of the use of
the information in this document.
®
®
®
TM
Copyright © 2013 Spansion Inc. All rights reserved. Spansion , the Spansion logo, MirrorBit , MirrorBit Eclipse ,
TM
ORNAND and combinations thereof, are trademarks and registered trademarks of Spansion LLC in the United States and
other countries. Other names used are for informational purposes only and may be trademarks of their respective owners.
Fujitsu Semiconductor (Shanghai) Co., Ltd.
Application Note
MCU-AN-500077-E-12
2
F MC-8FX FAMILY
8-BITMICROCONTROLLER
MB95430 SERIES
16-BIT FRT AND OCU
APPLICATION NOTE
16-BIT FRT AND OCU V1.2
Revision History
Revision History
Date
2010-03-12
2010-04-12
2010-09-27
Author
Kevin. Lin
Kevin. Lin
Kevin. Lin
Change of Records
V1.0, First draft
V1.1, Update by review
V1.2, Update the source code
This manual contains 29 pages.
1. The products described in this manual and the specifications thereof may be changed without prior notice.
To obtain up-to-date information and/or specifications, contact your Fujitsu sales representative or Fujitsu
authorized dealer.
2. Fujitsu will not be liable for infringement of copyright, industrial property right, or other rights of a third party
caused by the use of information or drawings described in this manual.
3. The contents of this manual may not be transferred or copied without the express permission of Fujitsu.
4. The products contained in this manual are not intended for use with equipment which requires extremely
high reliability such as aerospace equipments, undersea repeaters, nuclear control systems or medical
equipments for life support.
5. Some of the products described in this manual may be strategic materials (or special technology) as defined
by the Foreign Exchange and Foreign Trade Control Law. In such cases, the products or portions thereof
must not be exported without permission as defined under the law.
© 2009 Fujitsu Semiconductor (Shanghai) Co., Ltd.
MCU-AN-500077-E-12 – Page 2
16-BIT FRT AND OCU V1.2
CONTENTS
CONTENTS
REVISION HISTORY ................................................................................................. 2 1 INTRODUCTION ................................................................................................... 4 2 FEATURE OF 16-BIT OCU AND FRT ................................................................... 5 2.1 OCU and FRT Block Diagram ................................................................................... 5 2.2 OCU and FRT Registers ........................................................................................... 7 2.2.1 Registers Associated with Output Compare Unit .................................. 7 2.2.2 Registers Associated with Free-Run Timer ............................................ 7 2.3 Pins Setting of OCU .................................................................................................. 8 2.4 Relationship with Voltage Comparator ...................................................................... 8 2.5 Interrupt ..................................................................................................................... 8 2.5.1 Free-Run Timer interrupt ............................................................................. 8 2.5.2 OCU interrupt .............................................................................................. 8 3 SOFTWARE OPERATION..................................................................................... 9 3.1 Setting Procedure ..................................................................................................... 9 3.1.1 Free-Run Timer ........................................................................................... 9 3.1.2 Output Compare Unit .................................................................................. 9 3.2 Operation Mode ...................................................................................................... 10 3.2.1 Output Pulse Sequences with Phase Difference ...................................... 10 3.2.2 Output Pulse Sequences with Dead Time ................................................ 12 3.2.3 Output PWM.............................................................................................. 14 4 INFLUENCE OF SOME BITS .............................................................................. 16 4.1.1 EOCS_BTSn ............................................................................................. 16 4.1.2 OCMCR_CMPMDn ................................................................................... 17 4.1.3 OCMCR_FDENn (n= 0, 1) ........................................................................ 18 5 ADDITIONAL INFORMATION ............................................................................. 19 6 APPENDIX........................................................................................................... 20 6.1 List of Tables and Figures ....................................................................................... 20 6.2 Sample Code .......................................................................................................... 20 MCU-AN-500077-E-12 – Page 3
16-BIT FRT AND OCU V1.2
Chapter 1 Introduction
1 Introduction
This application note introduces the functions of 16-bit Free-Run Timer and Output Compare
Unit, and how to configure them. The related codes were also given in this application note.
MCU-AN-500077-E-12 – Page 4
16-BIT FRT AND OCU V1.2
Chapter 2 Feature of 16-bit OCU and FRT
2 Feature of 16-bit OCU and FRT
This chapter introduces the features of OCU and FRT.
2.1
OCU and FRT Block Diagram
The 16-bit Output Compare Unit is used for generation of pulse sequences. It consists of a
16-bit Free-Run Timer, two compare registers, one compare buffer register for each
compare register, two compare output pins, and several control registers. If the value written
to the compare register matches the 16-bit Free-Run Timer count value, the output level of
the pin can be toggled and an interrupt will occur.
Figure 2-1 shows the block diagram of 16-bit OCU.
Figure 2-1: OCU Block Diagram
MCU-AN-500077-E-12 – Page 5
16-BIT FRT AND OCU V1.2
Chapter 2 Feature of 16-bit OCU and FRT
The 16-bit Free-Run Timer consists of a 16-bit up/down counter, compare clear buffer
register and a control status register. The count values of this timer are used as the time
base of the Output Compare Unit.
Figure 2-2 shows the block diagram of 16-bit Free-Run Timer.
Figure 2-2: FRT block diagram
MCU-AN-500077-E-12 – Page 6
16-BIT FRT AND OCU V1.2
Chapter 2 Feature of 16-bit OCU and FRT
2.2
OCU and FRT Registers
2.2.1 Registers Associated with Output Compare Unit
The OCU module has two channels—OUT0, OUT1. Each of them has a 16-bit Output
Compare Register and a 16-bit Buffer Register. The Output Register and Buffer Register
locate at the same address. The Output Registers are read-only, and the Buffer Registers
are write-only. They can be accessed as the way mentioned in section 2.2.2.
Table 2-1 shows the Registers associated with the output compare unit.
Table 2-1: OCU Registers
Name
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit1
Bit 0
Default
Value
OCCP0/B0 H
Output Compare Register 0/ Buffer Register 0 H
b’00000000
OCCP0/B0 L
Output Compare Register 0/ Buffer Register 0 L
b’00000000
OCCP1/B1 H
Output Compare Register 1/ Buffer Register 1 H
b’00000000
OCCP1/B1 L
Output Compare Register 1/ Buffer Register 1 L
b’00000000
OCSL
ICP1
ICP0
ICE1
ICE0
--
--
CST1
CST0
b’00000000
OCSH
--
CMOD0
OTE11
OTE10
OTE01
OTE00
OTD1
OTD0
b’01000000
EOCS
HW_ST
OP
--
BTS1
BUF1
--
--
BTS0
BUF0
b’00000000
OCMCR
--
FDEN1
INV1
CMPMD1
--
FDEN0
INV0
CMPMD0
b’00000000
OCUOC
--
--
--
--
--
b’00000000
OCSTPSEL
2.2.2 Registers Associated with Free-Run Timer
Table 2-2 shows the Registers associated with the free-run timer.
Table 2-2: FRT Registers
Name
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit1
Bit 0
Default Value
CPCLRH
Timer Compare Clear Register H
b’11111111
CPCLRL
Timer Compare Clear Register L
b’11111111
CPCLRBH
Timer Compare Clear Buffer Register H
b’11111111
CPCLRBL
Timer Compare Clear Buffer Register L
b’11111111
TCCSL
IVF
IVFE
STOP
MODE
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
The compare clear buffer registers (CPCLRBH/L) exist at the same address as the compare
clear registers (CPCLRH/L). The compare clear buffer registers are write-only registers, and
the compare clear registers are read-only registers. Two of them are 16-bit registers, please
always use one of the following procedures to write or read them:
Use 16-bit access instructions to write or read them (Such as “MOVW”).
Use byte access instructions to write or read upper part first, and then lower part
(Such as “MOV”).
MCU-AN-500077-E-12 – Page 7
16-BIT FRT AND OCU V1.2
Chapter 2 Feature of 16-bit OCU and FRT
2.3
Pins Setting of OCU
The OCU module has two pairs of output. The PG0 or P70 can be configured as OUT0, and
the PG1 or P73 can be configured as OUT1. The configuration is as below:
SYSC2_OUTSEL0 = 0:
OUT0 -- P70.
SYSC2_OUTSEL0 = 1:
OUT0 -- PG0.
SYSC2_OUTSEL1 = 0:
OUT1 -- P73.
SYSC2_OUTSEL1 = 1:
OUT1 -- PG1.
In order to output the output compare signal, the user should enable the channels by
OCSH_OTEn; otherwise the pin status was controlled by GPIO or other peripherals. It is
also recommended to initialize the pin to a safe status before disable the OCU channels.
2.4
Relationship with Voltage Comparator
The OCU module can be stopped by voltage comparator output if OTE00, OTE 01(OTE10,
OTE11) are set as 11. The user can configure the register OCUOC to decide which voltage
comparator and what edge will stop the OCU.
2.5
Interrupt
2.5.1 Free-Run Timer interrupt
To FRT, the interrupt request will happen at the point of zero-detection or compare clear
depending on the setting if the interrupts were enabled first. The user also can mask the
interrupt for several matches by setting the ETCCSH register.
2.5.2 OCU interrupt
To OCU, each channel has an interrupt respectively. When output compare occurred, the
interrupt flag will be set.
If an interrupt is enabled, the priority of the interrupt should be set in the vector.c file. The
interrupt vectors are:
Table 2-3: Interrupt Vectors
Interrupt source
Interrupt request
no.
Interrupt level setting register
Register
Setting bit
Vector table address
Upper
Lower
Output compare
ch0 match
IRQ07
ILR07
L07[1:0]
FFECH
FFEDH
Output compare
ch1 match
IRQ08
ILR08
L08[1:0]
FFEAH
FFEBH
16-bit Free-Run
Timer
IRQ14
ILR14
L14[1:0]
FFDEH
FFDFH
MCU-AN-500077-E-12 – Page 8
16-BIT FRT AND OCU V1.2
Chapter 3 Software Operation
3 Software Operation
This chapter introduces the software operation of output compare unit.
The OCU have a 16-bit free-run timer which supplies the time base. To set the free-run timer
is prerequisite. In this AN, the sample code of FRT will be given. For more information about
free-run timer, please refer to the chapter”16-bit Free-run Timer”.
3.1
Setting Procedure
3.1.1 Free-Run Timer
Set the free-run timer count clock by TCCSL_CLK0~CLK2.
Select the count mode of FRT by ETCCSL_CNTMD.
Write the compare clear value to CPCLRH/L.
Clear the free-run timer counter by TCCSL_CLR.
Enable compare clear buffer if necessary.
Enable compare clear or zero detection interrupts if necessary.
Set compare clear or zero detection interrupts mask if necessary.
Enable the timer after OCU has been configured.
3.1.2 Output Compare Unit
Select output pin.
Write the output compare value to OCCP0 and OCCP1.
Set the compare match output by OCMCR_CMPMDn.
Enable output compare buffer if necessary.
Select the data transfer point if the buffer is enabled by EOCS_BTSn.
Define compare output mode for channel 1 by OCSH_CMOD0.
Select the Initial level of the output compare pins by OCSH_OTDn.
Select the Hardware Stop trigger source if necessary.
Enable the interrupts if necessary.
Enable the output compare pins by OCSH_OTE.
Enable the output compare operation by OCSL_CSTn.
MCU-AN-500077-E-12 – Page 9
16-BIT FRT AND OCU V1.2
Chapter 3 Software Operation
3.2
Operation Mode
3.2.1 Output Pulse Sequences with Phase Difference
Figure 3-1 shows the pulse sequences with phase difference.
Figure 3-1: Pulse Sequence with Phase Difference
See the Figure 3-1, the OUT0 and OUT1 have the same period and duty, but the raising
edge and falling edge happened at different point. The difference between the raising edges
is phase difference. In order to output the desired sequences, the free-run timer operates in
up-count mode. Suppose the same clock input, the compare clear register value decides the
period of the pulse sequence. The user can modify the compare clear register value by
writing different value to the register CPCLRH/L. The difference of OCCP0 and OCCP1
produces the phase difference of the pulse sequences.
The period (up-count mode) can be calculates by the formula below:
Period =2* (1/MCLK)*(1/Pre-scale)*CPCLRH/L.
(3-1)
Pre-scale: free-run timer pre-scale.
So,
CPCLRH/L = Period*MCLK*Pre-scale/ 2.
Suppose:
FCH = 4M, MCLK =4M, frequency = 20k, Pre-scale =1/4.
Then:
CPCLH/L = 25.
MCU-AN-500077-E-12 – Page 10
(3-2)
16-BIT FRT AND OCU V1.2
Chapter 3 Software Operation
■
Initialization
The code in Figure 3-2 shows the example step required to configure the FRT and OCU
module. P70 and P73 are selected as the output pins. The Free-Run Timer is in up-count
mode. The pre-scale is 1:4. Buffer is enabled. The Free-Run Timer and OCU function are all
disabled at first in initialization code.
Note: Ensure that a value is written to the compare registers before enable the compare
operation
Figure 3-2: Initialization Code
MCU-AN-500077-E-12 – Page 11
16-BIT FRT AND OCU V1.2
Chapter 3 Software Operation
3.2.2 Output Pulse Sequences with Dead Time
Pulse sequence with dead time is usually used to drive H-bridge. The OCU can’t output two
channels of PWM signal, but it can change the frequency of the two pulse sequence easily.
So, it is useful for PFM method in H-bridge driving. Figure 3-3 shows the waveform.
The CPCLRH/L is available through the formula (3-2). The duty of the pulse sequences are
50%.
Figure 3-3: Pulse Sequences with Dead Time
Dead time can be calculated like this
Dead Time = (OCCP0-OCCP1) *(1/MCLK)*(1/Pre-scale)
Changing the value of OCCP0-OCCP1 will change the dead time.
MCU-AN-500077-E-12 – Page 12
16-BIT FRT AND OCU V1.2
Chapter 3 Software Operation
■
Initialization
In this mode, the Free-Run Timer is in up/down mode. The value of CPCLRH/L is default as
0XFFFF. The OCCP0 and OCCP1 are written as 0XAAAA and 0X5555 respectively that the
difference produces the dead time. Figure 3-4 shows the initialization code.
Figure 3-4: Initialization for Pulse Sequence with Dead Time
MCU-AN-500077-E-12 – Page 13
16-BIT FRT AND OCU V1.2
Chapter 3 Software Operation
3.2.3 Output PWM
The OCU module can generate one channel of PWM through OUT1 when the bit
OCSH_CMOD0 was set as 1. Figure 3-5 shows the PWM waveform.
Figure 3-5: PWM Waveform
The period can be calculated as:
Period = (1/MCLK)*(1/Pre-scale)*CPCLRH/L.
(3-3)
Pre-scale: free-run timer pre-scale.
So,
CPCLRH/L = Period*MCLK*Pre-scale
(3-4)
If the Free-Run Timer is in up/down mode, the period will be calculated by formula (3-1).
The duty will be changed when change the value of OCCP0. Keep the OCCP1 unchanged,
modify OCCP0 to 0XFFFF, the duty of the OUT1 will be larger.
MCU-AN-500077-E-12 – Page 14
16-BIT FRT AND OCU V1.2
Chapter 3 Software Operation
■
Initialization
The output channel 1 was configured as reversing upon a match with compare register 0, 1
in this mode. Changing the value of the OCCP0 will change the duty of PWM waveform.
Figure 3-6 shows the initialization code for PWM.
Figure 3-6: Initialization code for PWM
MCU-AN-500077-E-12 – Page 15
16-BIT FRT AND OCU V1.2
Chapter 4 Influence of Some Bits
4 Influence of Some Bits
4.1.1 EOCS_BTSn
EOCS_BTSn decide at which point the output compare buffer register value was transferred
to the output compare register when the buffer function is enabled.
■
EOCS_BTSn = 0, the transformation happened at zero-detection of FRT.
Figure 4-1: Transform at Zero-detection
EOCS_BTSn = 1, the transformation happened at compare-clear of FRT.
Figure 4-2: Transform at Compare Clear
MCU-AN-500077-E-12 – Page 16
16-BIT FRT AND OCU V1.2
Chapter 4 Influence of Some Bits
4.1.2 OCMCR_CMPMDn
This bit is used to change the pin output level immediately after a match occurred when pin
output is enabled.
■
OCMCR_CMPMDn = 0
In this mode, the pin level will reverse against previous value. So, the initial level of pin
should be taken care. Figure 4-3 shows the waveform.
Figure 4-3: Waveform for CMPMDn=0
■
OCMCR_CMPMDn = 1
In this mode, the output pin level will be set as 1 when Free-Run Timer is in the up-count,
and be cleared when Free-Run Timer is in down-count. The Initial value of the output pin will
not be concerned in this mode.
Figure 4-4: Waveform for CMPMDn= 1
MCU-AN-500077-E-12 – Page 17
16-BIT FRT AND OCU V1.2
Chapter 4 Influence of Some Bits
4.1.3 OCMCR_FDENn (n= 0, 1)
This bit is used for “Full duty range function” for ch0 or ch1.
When FDENn = 0, the Full duty range function feature is disabled.
When FDENn =1, the Full duty range function feature is enabled (Must set OCSH_CMOD0 =
0).
If FDENn = 0.
Output level toggles when a match of the Free-Run Timer Value with the compare register
(OCCPn) occurs.
If FDENn =1 and COMD0=0
When OCCPn= 0, then the output of OCU is independent of the Free-Run Timer value.
OUTn = OCMCR_INVn;
When 0<OCCP0<CPCLR
The output of OCU depends on CMPMDn bit.
When OCCP0>= CPCLR
The output of OCU depends on OCU compare flag at compare clear event.
If CMP_FLAG =0, then OUTn =-OCMCR_INVn.
If CMP_FLAG =1, then OUTn is no change.
CMP_FLAG is set at compare match event and reset at compare clear event.
Figure 4-5 shows the waveform when FDEN =1, CMPMD0= 0, INV0 = 0.
Figure 4-5: Waveform of Full duty range
MCU-AN-500077-E-12 – Page 18
16-BIT FRT AND OCU V1.2
Chapter 5 Additional Information
5 Additional Information
For more information on FUJITSU SEMICONDUCTOR products, please visit the following
websites:
English version:
http://www.fujitsu.com/cn/fsp/services/mcu/mb95/application_notes.html
Simplified Chinese Version:
http://www.fujitsu.com/cn/fss/services/mcu/mb95/application_notes.html
MCU-AN-500077-E-12 – Page 19
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
6 Appendix
6.1
List of Tables and Figures
Table 2-1: OCU Registers ........................................................................................................ 7 Table 2-2: FRT Registers ......................................................................................................... 7 Table 2-3: Interrupt Vectors ..................................................................................................... 8 Figure 2-1: OCU Block Diagram .............................................................................................. 5 Figure 2-2: FRT block diagram ................................................................................................ 6 Figure 3-1: Pulse Sequence with Phase Difference .............................................................. 10 Figure 3-2: Initialization Code ................................................................................................ 11 Figure 3-3: Pulse Sequences with Dead Time ....................................................................... 12 Figure 3-4: Initialization for Pulse Sequence with Dead Time ............................................... 13 Figure 3-5: PWM Waveform .................................................................................................. 14 Figure 3-6: Initialization code for PWM .................................................................................. 15 Figure 4-1: Transform at Zero-detection ................................................................................ 16 Figure 4-2: Transform at Compare Clear ............................................................................... 16 Figure 4-3: Waveform for CMPMDn=0 .................................................................................. 17 Figure 4-4: Waveform for CMPMDn= 1 ................................................................................. 17 Figure 4-5: Waveform of Full duty range ............................................................................... 18
6.2
Sample Code
Project1: Pulse sequences with phase difference
#include "mb95430.h"
/*-----------------------------------------------------------------------------Name
: InitFRTandOCU ()
Function
: Initialize the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
void InitFRTandOCU (void)
{
SYSC2_OUTSEL0 = 0;
// select OUT0 output pin
SYSC2_OUTSEL1 = 0;
// select OUT1 output pin
DDR7_P70 = 1;
// OUT0 output
MCU-AN-500077-E-12 – Page 20
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
DDR7_P73 = 1;
// OUT1 output
PDR7_P70 = 0;
// OUT0 output 0 first
PDR7_P73 = 0;
// OUT1 output 0 first
TCCSH = 0x40;
// count clock have no division
TCCSL = 0x2A;
// clear timer
// disable timer first
// count clock=1/4*MCLK
ETCCSH = 0x0;
// no interrupt mask
ETCCSL = 0x08;
// up count mode
// interrupt disabled
CPCLRH = 0xFF;
// write upper register first
CPCLRL = 0xFF;
// then down register
OCSL = 0x00;
operation first
//
OCSH = 0x00;
disable
compare
// initialize ch0&ch1 to 0
// disable output
// ch1 reverses upon comp reg1
EOCS = 0x11;
// buffer enabled
// transfer data at zero point
OCCP0H = 0xBF;
// write upper register first
OCCP0L = 0xFF;
// then down register
OCCP1H = 0x7F;
OCCP1L = 0xFF;
}
/*-----------------------------------------------------------------------------Name
: EnableFRTandOCU ()
Function
: Enable the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
void EnableFRTandOCU (void)
{
TCCSL_CLR = 1;
// clear FRT counter
/*
MCU-AN-500077-E-12 – Page 21
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
take care here, strongly recommend to write 0 to TCDTH/L !!!!
*/
TCDTH = 0;
TCDTL = 0;
OCSH = 0x28;
enabled
//
output
channels
are
// if HW_STOP=0
OCSL_CST0 = 1;
operation
//
enable
output
compare0
OCSL_CST1 = 1;
operation
//
enable
output
compare1
TCCSL_STOP = 1;
// start free-run timer counting
}
/*-----------------------------------------------------------------------------Name
: DisableFRTandOCU ()
Function
: Disable the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
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-- )
{
for(i = 250 ; i > 0 ; i-- )
{
__wait_nop ();
__wait_nop ();
MCU-AN-500077-E-12 – Page 22
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
__wait_nop ();
__wait_nop ();
__wait_nop ();
__wait_nop ();
}
}
}
main()
{
__DI();
// disable interrupt
SYCC = 0x01;
// MCLK = (1/4)*8M
InitFRTandOCU ();
// enable interrupt
__EI();
while(1)
{
EnableFRTandOCU ();
Delayms(100);
DisableFRTandOCU ();
Delayms(100);
}
}
Project 2: Output Pulse Sequences with Dead Time
MCU-AN-500077-E-12 – Page 23
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
#include "mb95430.h"
/*-----------------------------------------------------------------------------Name
: InitFRTandOCU ()
Function
: Initialize the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
void InitFRTandOCU (void)
{
SYSC2_OUTSEL0 = 0;
// select OUT0 output pin
SYSC2_OUTSEL1 = 0;
// select OUT1 output pin
DDR7_P70 = 1;
// OUT0 output
DDR7_P73 = 1;
// OUT1 output
PDR7_P70 = 0;
// OUT0 output 0 first
PDR7_P73 = 0;
// OUT1 output 0 first
TCCSH = 0x40;
// count clock have no division
TCCSL = 0x2A;
// clear timer
// disable timer first
// count clock=1/4*MCLK
ETCCSH = 0x0;
// no interrupt mask
ETCCSL = 0x08;
// up count mode
// interrupt disabled
CPCLRH = 0xFF;
// write upper register first
CPCLRL = 0xFF;
// then down register
OCSL = 0x00;
operation first
OCSH = 0x40;
//
disable
compare
// initialize ch0&ch1 to 0
// disable output
// ch1 reverses upon comp reg0,1
EOCS = 0x11;
// buffer enabled
// transfer data at zero point
OCCP0H = 0xBF;
// write upper register first
OCCP0L = 0xFF;
// then down register
OCCP1H = 0x7F;
OCCP1L = 0xFF;
MCU-AN-500077-E-12 – Page 24
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
}
/*-----------------------------------------------------------------------------Name
: EnableFRTandOCU ()
Function
: Enable the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
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
// if HW_STOP=0
OCSL_CST0 = 1;
operation
//
enable
output
compare0
OCSL_CST1 = 1;
operation
//
enable
output
compare1
TCCSL_STOP = 1;
// start free-run timer counting
}
/*-----------------------------------------------------------------------------Name
: DisableFRTandOCU ()
Function
: Disable the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
void DisableFRTandOCU (void)
{
TCCSL_STOP = 0;
OCSH = 0x80;
disabled
// stop free-run timer counting
//
output
channels
are
// the pin are controlled by GPIO
MCU-AN-500077-E-12 – Page 25
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
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-- )
{
__wait_nop ();
__wait_nop ();
__wait_nop ();
__wait_nop ();
__wait_nop ();
__wait_nop ();
}
}
}
main()
{
__DI();
// disable interrupt
SYCC = 0x01;
// MCLK = (1/4)*8M
InitFRTandOCU ();
// enable interrupt
__EI();
while(1)
{
EnableFRTandOCU ();
Delayms(100);
DisableFRTandOCU ();
Delayms(100);
}
}
Project 3: Output PWM
#include "mb95430.h"
/*------------------------------------------------------------------------------
MCU-AN-500077-E-12 – Page 26
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
Name
: InitFRTandOCU ()
Function
: Initialize the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
void InitFRTandOCU(void)
{
SYSC2_OUTSEL0 = 0;
// select OUT0 output pin
SYSC2_OUTSEL1 = 0;
// select OUT1 output pin
DDR7_P70 = 1;
// OUT0 output
DDR7_P73 = 1;
// OUT1 output
PDR7_P70 = 0;
// OUT0 output 0 first
PDR7_P73 = 0;
// OUT1 output 0 first
TCCSH = 0x40;
// count clock have no division
TCCSL = 0x2A;
// clear timer
// disable timer first
// count clock=1/4*MCLK
ETCCSH = 0x0;
// no interrupt mask
ETCCSL = 0x08;
// up count mode
// interrupt disabled
CPCLRH = 0xFF;
// write upper register first
CPCLRL = 0xFF;
// then down register
OCSL = 0x00;
operation first
OCSH = 0x40;
//
disable
compare
// initialize ch0&ch1 to 0
// disable output
// ch1 reverses upon comp reg0,1
EOCS = 0x11;
// buffer enabled
// transfer data at zero point
OCCP0H = 0xBF;
// write upper register first
OCCP0L = 0xFF;
// then down register
OCCP1H = 0x7F;
OCCP1L = 0xFF;
}
/*------------------------------------------------------------------------------
MCU-AN-500077-E-12 – Page 27
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
Name
: EnableFRTandOCU ()
Function
: Enable the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
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
// if HW_STOP=0
OCSL_CST0 = 1;
operation
//
enable
output
compare0
OCSL_CST1 = 1;
operation
//
enable
output
compare1
TCCSL_STOP = 1;
// start free-run timer counting
}
/*-----------------------------------------------------------------------------Name
: DisableFRTandOCU ()
Function
: Disable the Free-Run Timer and OCU module
Input
: void
Output
: void
-------------------------------------------------------------------------------*/
void DisableFRTandOCU(void)
{
TCCSL_STOP = 0;
OCSH = 0x80;
disabled
// stop free-run timer counting
//
output
channels
are
// the pin are controlled by GPIO
OCSL_CST0 = 0;
// disable operation
OCSL_CST1 = 0;
}
MCU-AN-500077-E-12 – Page 28
16-BIT FRT AND OCU V1.2
Chapter 6 Appendix
/*delay*/
void Delayms (unsigned char cnt_Dly)
{
unsigned char i;
for(; cnt_Dly > 0 ; cnt_Dly-- )
{
for(i = 250 ; i > 0 ; i-- )
{
__wait_nop ();
__wait_nop ();
__wait_nop ();
__wait_nop ();
__wait_nop ();
__wait_nop ();
}
}
}
main()
{
__DI();
// disable interrupt
SYCC = 0x01;
// MCLK = (1/4)*8M
InitFRTandOCU ();
// enable interrupt
__EI();
while(1)
{
EnableFRTandOCU ();
Delayms(100);
DisableFRTandOCU ();
Delayms(100);
}
}
MCU-AN-500077-E-12 – Page 29