Beruflich Dokumente
Kultur Dokumente
1.0 INTRODUCTION
The Programmable Counter Array (PCA) present on the PCA modules can still be used for standard I/O. Each of the
SST89E/V58RDx and SST89E/V516RDx is a special 16- five modules can be programmed in any of the following
bit timer that has five 16-bit capture/compare modules. modes:
Each of the modules can be programmed to operate in one
• Rising and/or falling edge capture
of four modes: rising and/or falling edge capture, software
timer, high-speed output, or pulse width modulator. Module • Software timer
4 can be programmed as a Watchdog Timer in addition to • High speed output
the other four modes. Each module has a pin associated • Watchdog Timer (Module 4 only)
with it in port 1. Module 0 is connected to P1.3 (CEX0), • Pulse Width Modulator (PWM)
module 1 to P1.4 (CEX1), module 2 to P1.5 (CEX2), mod-
ule 3 to P1.6 (CEX3), and module 4 to P1.7 (CEX4). 3.0 PCA TIMER/COUNTER
2.0 PCA OVERVIEW The PCA timer is a free-running 16-bit timer consisting of
registers CH and CL (the high and low bytes of the count
PCA provides more timing capabilities with less CPU inter- values). The PCA timer is common time base for all five
vention than the standard timer/counter. Its advantages modules and can be programmed to run at 1/12 the oscilla-
include reduced software overhead and improved accu- tor frequency, 1/4 the oscillator frequency, Timer 0 overflow,
racy. The PCA consists of a dedicated timer/counter which or the input on the ECI pin (P1.2). The timer/counter source
serves as the time base for an array of five compare/cap- is determined from the CPS1 and CPS0 bits in the CMOD
ture modules. Figure 3-1 shows a block diagram of the SFR as shown in Table 3-1. Table 3-2 summarizes
PCA. External events associated with modules are shared Modes 0-3 clock inputs at two common frequencies.
with corresponding Port 1 pins. Port pins not used by the
16 Bits Each
Module 0 P1.3/CEX0
Module 1 P1.4/CEX1
16 Bits
Module 3 P1.6/CEX3
Module 4 P1.7/CEX4
2052 F01.0
©2008 Silicon Storage Technology, Inc. The SST logo, SuperFlash, and FlashFlex are registered trademarks of Silicon Storage Technology, Inc.
S72052-03-000 9/08 These specifications are subject to change without notice.
1
FlashFlex Microcontroller
Using the Programmable Counter Array (PCA)
Application Note
TABLE 3-2: PCA Timer/Counter Inputs
Clock Increments
PCA Timer/Counter Mode 12 MHz 16 MHz
Mode 0: fOSC/12 1 µsec 0.75 µsec
Mode 1: 330 nsec 250 nsec
Mode 2: Timer 0 Overflows1
Timer 0 programmed in:
8-bit mode 256 µsec 192 µsec
16-bit mode 65 msec 49 µsec
8-bit auto-reload 1 to 255 µsec 0.75 to 191 µsec
Mode 3: External Input MAX 0.66 µsec 0.50 µsec
T3-2.0 2052
1. In Mode 2, the overflow interrupt for Timer 0 does not need to be enabled.
Symbol Function
CIDL Counter Idle Control:
0: Programs the PCA Counter to continue functioning during idle mode
1: Programs the PCA Counter to be gated off during idle
WDTE Watchdog Timer Enable:
0: Disables Watchdog Timer function on PCA module 4
1: Enables Watchdog Timer function on PCA module 4
- Not implemented, reserved for future use.
Note: User should not write ‘1’s to reserved bits. The value read from a reserved bit is indeterminate.
CPS1 PCA Count Pulse Select bit 1
CPS0 PCA Count Pulse Select bit 2
Selected
CPS1 CPS0 PCA Input1
0 0 0 Internal clock, fOSC/6 in 6 clock mode (fOSC/12 in 12 clock mode)
0 1 1 Internal clock, fOSC/2 in 6 clock mode (fOSC/4 in 12 clock mode)
1 0 2 Timer 0 overflow
1 1 3 External clock at ECI/P1.2 pin
(max. rate = fOSC/4 in 6 clock mode, fOSC/8 in 12 clock mode)
1. fOSC = oscillator frequency
Symbol Function
CF PCA Counter Overflow Flag
Set by hardware when the counter rolls over. CF flags an interrupt if bit ECF in CMOD
is set. CF may be set by either hardware or software, but can only cleared by software.
CR PCA Counter Run control bit
Set by software to turn the PCA counter on. Must be cleared by software to turn the
PCA counter off.
- Not implemented, reserved for future use.
Note: User should not write ‘1’s to reserved bits. The value read from a reserved bit is indeterminate.
CCF4 PCA Module 4 interrupt flag. Set by hardware when a match or capture occurs.
Must be cleared by software.
CCF3 PCA Module 3 interrupt flag. Set by hardware when a match or capture occurs.
Must be cleared by software.
CCF2 PCA Module 2 interrupt flag. Set by hardware when a match or capture occurs.
Must be cleared by software.
CCF1 PCA Module 1 interrupt flag. Set by hardware when a match or capture occurs.
Must be cleared by software.
CCF0 PCA Module 0 interrupt flag. Set by hardware when a match or capture occurs.
Must be cleared by software.
PCA Interrupt
PCA Timer/Counter
CH CL
Capture
CEXn
CCAPnH CCAPnL
// This program is designed to use the PCA module to calculate the width of a
// detected pulse. The pulse must begin with a rising edge and end with a falling
// edge on the CEX0 pin.
// The HEADER FILE “SST89X5xxRDx.h” is an SST proprietary header file that defines SST’s SFRs.
// This file can be found on the SST website, or the BSL Demo Kit.
void main()
{
CMOD = 0x03; //Setting up the PCA counter
CH = 0x00;
CL = 0x00;
CCAPM0 = 0x21; // Setup module zero in capture mode
Flag = 0;
1 0
Enable Match
16-bit Comparator
CH CL
PCA Timer/Counter
// The HEADER FILE “SST89X5xxRDx.h” is an SST proprietary header file that defines SST’s SFRs.
// This file can be found on the SST website, or the BSL Demo Kit.
void main()
{
CMOD = 0x01; // Setup PCA timer mode.
CH = 0x00; // Init values
CL = 0x00;
CCAP0L = 0x20; // Set compare limit
CCAP0H = 0x4E;
CCAPM0 = 0x49; // Set Modules zero for 16bit Timer mode.
while(1)
{}
}
1 0
Enable Match
16-bit Comparator
Toggle
CH CL CEXn
PCA Timer/Counter
// The High Speed Output mode is used to toggle the CEX pin when a match occurs
// between the PCA timer and the pre-loaded value in the compare registers.
// The HEADER FILE “SST89X5xxRDx.h” is an SST proprietary header file that defines SST’s SFRs.
// This file can be found on the SST website, or the BSL Demo Kit.
IE = 0xC0;
CR = 1; // Start PCA timer.
while(1)
{}
}
CCAPnH
CCAPnL
0
Enable CL < CCAPnL
8-bit Comparator CEXn
CL >= CCAPnL
1
CL
Overflow
PCA Timer/Counter
// The HEADER FILE “SST89X5xxRDx.h” is an SST proprietary header file that defines SST’s SFRs.
// This file can be found on the SST website, or the BSL Demo Kit.
void main()
{
CMOD = 0x02; // Setup PCA timer
CL = 0x00;
CH = 0x00;
while (1)
{}
1 0
Enable Match
16-bit Comparator Reset
CH CL
PCA Timer/Counter
// This program uses PCA module 4 for the Watchdog timer. Note that only module 4
// can be used for the Watchdog timer. There are two ways of refreshing the timer to
// avoid a Watchdog reset. The first way is to reset the CH and CL registers. This is
// not recommended if you are using other PCA modules since disturbing the CH and
// CL registers would disturb the functionality of those other modules. The second choice is
// to change the values in CCAP4H/L. This is the best way to go since it accomplishes
// the same task of preventing Watchdog reset without the possibility of affecting the
// other PCA modules.
// The HEADER FILE “SST89X5xxRDx.h” is an SST proprietary header file that defines SST’s SFRs.
// This file can be found on the SST website, or the BSL Demo Kit.
void refresh_WDT();
void delay();
void main()
{
CCAP4L = 0xFF; // Setup PCA module 4 for Watchdog Timer
CCAP4H = 0xFF;
CCAPM4 = 0x4C;
void delay()
{
unsigned int I;
CCAP4L = 0;
CCAP4H = CH;
EA = 1;
}
if (CCF0 == 1)
{
IE = IE & 0xBF; // Stop PCA interrupt
CCF0 = 0; // Clear the PCA flag
if (flag == 0)
{
capture1 = CCAP0L | (CCAP0H << 8); // If positive edge, store in
CCAPM0 = 0x11; // capture1. Setup module
flag = 1; // 0 for capturing falling edge
}
else
{
capture2 = CCAP0L | (CCAP0H << 8); // Capture falling edge
pulse_width = capture2 - capture1; // Final calculation.
CCAPM0 = 0x21; // Setup module 0 for
// capturing rising edge.
flag = 0;
}
IE = IE | 0x40; // Start PCA interrupt
}
else if (CCF1 == 1)
{
IE = IE & 0xBF; // Stop PCA interrupt
CCF1 = 0; // Clear Int flag
temp = CCAP1L | (CCAP1H << 8); // The following four lines
temp += 0x4E20; // of code increase the
CCAP1L = temp; // compare value in CCAP0
CCAP1H = temp >> 8; // by 20000, effectively
// refreshing the timer.
IE = IE | 0x40; // Start PCA interrupt
}
else if (CCF2 == 1)
{
IE = IE & 0xBF; // Stop PCA interrupt
CCF2 = 0;
CCAP2H += 0x30; // Increase compare values by 3000h counts
IE = IE | 0x40; // Start PCA interrupt
}
}
void refresh_WDT()
{
IE = IE & 0xBF; // Stop PCA interrupt
CCAP4L = 0;
CCAP4H = CH;
IE = IE | 0x40; // Start PCA interrupt
}
void main()
{
CMOD = 0x43; //Setting up the PCA counter
CH = 0x00;
CL = 0x00;
CCAP4L = 0xFF;
CCAP4H = 0xFF;
CCAPM4 = 0x4C; // Setup PCA module 4 for Watchdog Timer
}
}
Silicon Storage Technology, Inc. • 1171 Sonora Court • Sunnyvale, CA 94086 • Telephone 408-735-9110 • Fax 408-735-9036
www.SuperFlash.com or www.sst.com