VMX51C1016-14-QC [ETC]
Versa Mix 8051 Mixed-Signal MCU; 反之亦然混合8051混合信号MCU型号: | VMX51C1016-14-QC |
厂家: | ETC |
描述: | Versa Mix 8051 Mixed-Signal MCU |
文件: | 总76页 (文件大小:3394K) |
中文: | 中文翻译 | 下载: | 下载PDF数据表文档文件 |
VMX1C1016
Datasheet
Rev 1.0
Versa Mix 8051 Mixed-Signal MCU
Overview
Feature Set
o
8051 Compatible RISC Performance Processor
Enhanced Arithmetic Unit including Barrel Shifter
56KB of Flash Memory
1280 Bytes of RAM
24 General Purpose I/Os
The VMX51C1016 is a fully integrated mixed-signal
microcontroller that provides a “one-chip” solution for
a broad range of control, data acquisition and
processing applications. The VXM1016 is based on a
powerful, single-cycle, RISC-based 8051 processor
with an enhanced MULT/ACCU unit that can be used
to perform complex mathematical operations. The
device includes 56KB of Flash memory and 1280
bytes of RAM.
o
o
o
o
o
o
2 UART Serial Ports
2 Baud Rate Generators for UARTs
Diff. Transceiver connected to UART1
J1708/RS-485 compatible)
Enhanced SPI interface (Master/Slave)
o
o
o
Fully configurable
Control up to 4 Slave devices
On-chip analog peripherals such as: an A/D
converter, PWM outputs (that can be used as D/A
converters), a voltage reference and an analog switch
make the VMX51C1020 ideal for analog data
acquisition applications.
o
o
o
o
o
o
o
I²C interface
1 External Dedicated Interrupt Input
Interrupt on Port 1.0-P1.3 Pin Change
3, 16-bit Timers/Counters
4 Compare Units and 2 Capture Inputs
4 Ch. PWM, 8-bit / 16-bit resolution
5 Ch. 12-bit A/D Converter
The inclusion of a full set of digital interfaces such as
an enhanced, fully configurable SPI, an I²C, UARTs
o
Conversion rate configurable up to
10KHz
Continuous/One-Shot Operation
Single or 4-Channel Automatic
Sequential Conversions
and
a
J1708/RS-485 compatible differential
transceiver, enables total system integration.
o
o
The VMX51C1016 operates on a 5 volt supply and is
available in a QFP-44 package.
o
o
o
o
o
o
On-Chip Voltage Reference
Digitally Controlled Switch
Power Saving Features + Clock Control
Watchdog Timer
Operating Temperature range (0ºC to +70ºC)
Available in QFP-44 package
Applications
o
o
o
o
Automotive Applications
Industrial Controls / Instrumentation
Consumer Products
Medical Devices
FIGURE 1: VMX51C1016 BLOCK DIAGRAM
FIGURE 2: VMX51C1016-QAC14, QFP-44 PACKAGE PINOUT
8051
µPROCESSOR
SINGLE CYCLE
In-Circuit
Debugging
through UART 0
2
UARTs
Serial Ports
12-BIT A/D
CONVERTER
56KB
Program FLASH
(In-Circuit Programmable
)
ADCITA connected to A /D Input
Multiplexer
33
23
22
XTVREF Input
34
INT0
VDD
1280 Bytes RAM
(256 x8 & 1kX8)
Band gap
P
G A
Reference
P2.7-SDI
P2.6-SDO
PM
RES-
·
·
·
24 I/O s
4
PWM Outputs
P2.5-SCK
P2.4-SS-
ADCITA
VDDA
ADCI3
1
Int. input
8
/
16 bit Resolution
(Can be used as /As)
D
Int. Port1
change
VMX51C1016
QFP-44
P2.3-CS0-
P2.2-CS1-
P2.1-CS2-
P2.0-CS3-
·
·
3
2
Timers ,
Baud Rate
ADCI2
ADCI1
Generators
CCU inputs
·
2
ADCI0
XTVREF
AGND
[MULT
/ ACCU]
Unit with
BARREL
SHIFTER
DGND
44
12
11
P1.3-PWM3
1
1
DIGITALLY
CONTROLLED
SWITCH
SPI Interface
J1708/RS 485
Compatible
Transceiver
I²C Bus
Interface
Power On Reset
Circuit
+
WatchDog Timer
Clock Control Unit
XTAL
Ramtron International Corporation
1850 Ramtron Drive Colorado Springs
Colorado, USA, 80921
http://www.ramtron.com
MCU customer service: 1-800-943-4625, 1-514-871-2447, ext. 208
1-800-545-FRAM, 1-719-481-7000
?
?
?
page 1of 76
VMX51C1016
Table 1: Pinout description
PIN
NAME
FUNCTION
PIN
1
NAME
FUNCTION
34
INT0
External interrupt Input (Negative Level or Edge
Triggered)
SW1A
Digitally Controlled Switch 1A
Digitally Controlled Switch 1B
35
36
37
38
39
40
41
42
43
44
PM
Mode Control Input
2
SW1B
RES-
Hardware Reset Input (Active low)
ADC input 5 and Analog Output
Analog Supply
3
RXTX1D-
RS-485 Compatible Differential
Transmitter/Receiver, Negative side
ADCITA
VDDA
ADCI3
ADCI2
ADCI1
ADCI0
XTVREF
AGND
4
RX1TXD+
RS-485 Compatible Differential
Transmitter/Receiver, Positive side
Analog to Digital Converter ext. Input 3
Analog to Digital Converter ext. Input 2
Analog to Digital Converter ext. Input 1
Analog to Digital Converter ext. Input 0
External Reference Voltage Input
Analog Ground
5
6
7
P0.3-RX1
P0.2-TX1
I/O - Asynchronous UART1 Receiver Input
I/O - Asynchronous UART1 Transmitter Output
I/O -Timer/Counter 2 Input
P0.1-
T2EX
8
9
P0.0-T2IN
I/O -Timer/Counter 2 Input
P1.0-
I/O - Pulse Width Modulator output 0
PWM0
FIGURE 3: VMX51C1016 PINOUT
10
11
12
P1.1-
I/O - Pulse Width Modulator output 1
I/O - Pulse Width Modulator output 2
I/O - Pulse Width Modulator output 3
PWM1
P1.2-
PWM2
P1.3-
PWM3
13
14
15
16
17
18
19
20
21
22
23
24
DGND
Digital Ground
P2.0-CS3-
P2.1-CS2-
P2.2-CS1-
P2.3-CS0-
P2.4-SS-
P2.5-SCK
P2.6-SDO
P2.7-SDI
VDD
I/O - SPI Chip Enable Output (Master Mode)
I/O - SPI Chip Enable Output (Master Mode)
I/O - SPI Chip Enable Output (Master Mode)
I/O - SPI Chip Enable Output (Master Mode)
I/O - SPI Chip Enable Output (Slave Mode)
I/O - SPI Clock (Input in Slave Mode)
I/O - SPI Data Output Bus
33 32 31 30 29 28 27 26 25 24 23
34
35
36
37
38
22
21
20
19
18
INT0
VDD
P2.7-SDI
PM
RES-
P2.6-SDO
P2.5-SCK
P2.4-SS-
P2.3-CS0-
P2.2-CS1-
ADCITA
VDDA
ADCI3
39
40
17
16
VMX51C1016
I/O - SPI Data Input Bus
ADCI2
ADCI1
41
42
15
14
13
12
P2.1-CS2-
P2.0-CS3-
Digital Supply
ADCI0
XTVREF
AGND
OSC1
Oscillator Crystal Output
43
44
DGND
OSC0
Oscillator Crystal input/External Clock Source
Input
P1.3-PWM3
1
2
3
4
5
6
7
8
9
10 11
25
26
27
28
P3.0-TX0
P3.1-RX0
P3.2-T0IN
I/O - Asynchronous UART0 Transmitter Output
I/O - Asynchronous UART0 Receiver Input
I/O - Timer/Counter 0 Input
P3.3-
I/O - Capture and Compare Unit 0 Input
CCU0
29
P3.4-
I/O - Capture and Compare Unit 1 Input
CCU1
30
31
32
P3.5-T1IN
VPP
I/O - Timer/Counter 1 Input
Flash Programming Voltage Input
P3.6-SDA
I/O - I2C / Prog. Interface Bi-Directional Data
Bus
33
P3.7-SCL
I/O - I2C / Prog. Interface Clock
_________________________________________________________________________________________________________
www.ramtron.com
VMX51C1016
VMX51C1016 Block Diagram
FIGURE 4: VMX51C1016 BLOCK DIAGRAM
8051
µPROCESSOR
SINGLE CYCLE
In-Circuit
Debugging
through UART0
2 UARTs
Serial Ports
12-BIT A/D
CONVERTER
56KB
Program FLASH
(In-Circuit Programmable )
ADCITA connected to A /D Input
Multiplexer
XTVREF Input
1280 Bytes RAM
Band gap
Reference
PGA
(256x8 & 1kX8)
·
·
·
24 I/O s
1 Int. input
Int. Port1
4 PWM Outputs
/ 16
8
bit Resolution
(Can be used as D /As)
change
·
·
3 Timers,
2 Baud Rate
Generators
2 CCU inputs
·
[MULT / ACCU]
Unit with
BARREL
SHIFTER
1 DIGITALLY
CONTROLLED
SWITCH
SPI Interface
J1708/RS485
Compatible
Transceiver
I²C Bus
Interface
Power On Reset
Circuit
+
XTAL
Clock Control Unit
WatchDog Timer
_________________________________________________________________________________________________________
www.ramtron.com page 3 of 76
VMX51C1016
Absolute Maximum Ratings
VDD to DGND
–0.3V, +6V
Digital Output Voltage to
DGND
VPP to DGND
–0.3V, VDD+0.3V
+13V
VDDA to DGND
AGND to DGND
VDD to VDDA
ADCI (0-3) to AGND
XTVREF to AGND
-0.3V, +6V
–0.3V, +0.3V
-0.3V, +0.3V
Power Dissipation
§
To +75°C
1000mW
10mW/°C
0° to +70°C
-0.3V, VDDA+0.3V
-0.3V, VDDA+0.3V
§
Derate above +75°C
Operating Temperature
Range
Digital Input Voltage to
DGND
RS485 pin Minimum and
Maximum Voltages
-0.3V, VDD+0.3V
-2V, +7V
Storage Temperature Range
–65°C to +150°C
+300°C
Lead Temperature
(soldering, 10sec)
Stresses beyond those listed under “Absolute Maximum Ratings” may cause permanent damage to the device.
These are stress ratings only. The functional operation of the device at these or any other conditions beyond
those indicated in the operational sections of the specifications is not implied. Exposure to absolute maximum
rating conditions for extended periods may affect device reliability.
Electrical Characteristics
TABLE 2: ELECTRICAL CHARACTERISTICS
PARAMETER
SYMBOL
CONDITIONS
MIN
TYP
MAX
UNITS
GENERAL CHARACTERISTICS (VDD = +5V, VDDA = +5V, TA = +25°C, 14.75MHz input clock, unless otherwise noted.)
Power Supply Voltage
Power Supply Current
VDD
4.75
4.5
5
5.0
5.0
5.5
5.5
45*
6*
V
VDDA
V
IDD (14MHz)
IDD (1MHz)
mA
*Depends on clock
speed and peripheral
use and load
0.6
IDDA
VPP
0.1
11
5*
Flash Programming Voltage
DIGITAL INPUTS
13
V
Minimum High-Level input
Maximum Low-Level input
Input Current
VIH
VIL
IIN
VDD = +5V
VDD = +5V
2.0
0.8
±0.05
5
V
V
µA
pF
Input Capacitance
CIN
10
DIGITAL OUTPUTS
Minimum High-Level
Output Voltage
VOH
VOL
ISOURCE = 4mA
ISINK = 4mA
4.2
0.2
10
V
V
Maximum Low-Level
Output Voltage
Output Capacitance
COUT
IOZ
15
pF
µA
Tri-state Output Leakage
Current
0.25
_________________________________________________________________________________________________________
www.ramtron.com page 4 of 76
VMX51C1016
ANALOG INPUTS
ADCI(0-3) Input Voltage Range
ADCI(0-3) Input Resistance
ADCI(0-3) Input Capacitance
VADCI
RADCI
CADCI
0
2.7
V
100
7
Mohms (design)
pF
nA
ADCI(0-3)
Current
Input
Leakage IADCI
TBD
Channel-to-Channel Crosstalk
-72
dB (design)
(12 bit)
INTERNAL REFERENCE
Bandgap Reference Voltage
Bandgap Reference Tempco
EXTERNAL REFERENCE
Input Impedance
1.18
1.23V
100
1.28
V
ppm/°C
RXTVREF
150
kOhms
PGA
PGA Gain adjustment
2.11
-1
2.29
ANALOG TO DIGITAL CONVERTER
External Reference, TA=25C, Fosc = 16MHz
ADC Resolution
12
Bits
LSB
LSB
LSB
LSB
LSB
Hz
Differential Non linearity
Integral Non linearity
Full-Scale Error (Gain Error)
Offset Error
DNL
INL
±1.5
+4
All channels, ADCI(0-3)
All channels, ADCI(0-3)
All channels, ADCI(0-3)
Single Channel
±4
±1
±1
Channel-to-Channel Mismatch
Sampling Rate
1
1
10k
4 Channels
2.5k
UART1 DIFFERENTIAL TRANSCEIVER COMPATIBLE TO J1708/ RS-485
Common mode Input Voltage
Input Impedance
VcI
ZIN
-2
+7
V
1
30
MOhms
mA
Output Drive Current
Differential Input
100mV
mV
DIGITAL SWITCH
Switch on Resistance
Input capacitance
50
0
100
Ohms (+/-10%)
4
pF
V
Voltage range on Pin
Allowable current (DC)
BROWN OUT / RESET CIRCUIT
Brown-out circuit Threshold
RES- pin internal Pull-Up
5
5
mA
3.7
4.0
V
20
KOhms
_________________________________________________________________________________________________________
www.ramtron.com page 5 of 76
VMX51C1016
Memory Organization
Detailed Description
Figure 6 shows the memory organization of the
VMX51C1016.
The following sections describe the VMX51C1016
architecture and peripherals.
At power-up/reset, code is executed from the
56Kx8 Flash memory mapped into the processor’s
internal program space.
FIGURE 5: INTERFACE DIAGRAM FOR THE VERSA MIX
VERSA
+5V Digital
+5V Analog
VDD
MIX
T0IN
T1IN
T2IN
T2EX
VDDA
TIMERS
A 1KB block of RAM is also mapped into the
external data memory of the VMX51C1016. This
block can be used as a general-purpose scratch
pad or storage memory. A 256 byte block of RAM
is mapped to the internal data memory space. This
block of RAM is broken into two sub-blocks, with
the upper block accessible via indirect addressing
only and the lower block accessible via both direct
and indirect addressing.
AGND
DGND
UART 0
INTERFACE
UART 0
ADCI0
ADCI1
ADCI2
ADCI3
EXTERNAL A/D
INPUTS
UART 1
INTERFACE
UART 1
UART1 DIFF.
TRANSCEIVER
J1708/RS-485 /
RS422
DIFFERENTIAL
TRANSCEIVER
ISRCOUT
ISRCIN
CURRENT SOURCE
CCU0
CCU1
CCU2
COMPARE AND
CAPTURE UNITS
INPUTS
SW1A
SW1B
DIGITAL
SWITCH
The following figure describes the access to the
lower block of 128 bytes.
I/O
I/Os
RES-
RESET
I2C
INTERFACE
OPOUT
OPIN-
SCL
SDA
FIGURE 7: LOWER 128 BYTES BLOCK INTERNAL MEMORY MAP
OP-AMP
OPIN+
LOWER 128 BYTES OF
INT0
INT1
INTERNAL DATA MEMORY
EXTERNAL
INTERRUPTS
POT1A
POT1B
POT2A
7Fh
POTENTIOMETERS
SDI
DIRECT
RAM
POT2B
SDO
SCK
SS-
CS0-
CS1-
CS2-
SPI
INTERFACE
PWM0
PWM1
PWM2
PWM3
30h
2Fh
PWM
OUTPUTS
REGISTER
BANK SELECT
BIT-
ADDRESSABLE
REGISTERS
OSC0 OSC1
CS3-
20h
1Fh
18h
17h
10h
0Fh
08h
07h
The value of the
RS1, RS0 bits of
PSW SFR
Register (D0h)
defines the
BANK 3
BANK 2
BANK 1
BANK 0
11h
10h
01h
00h
selected R0 -R7
Register Bank
00h
FIGURE 6: MEMORY ORGANIZATION OF THE VERSA MIX
INTERNAL PROGRAM
MEMORY SPACE
The SFR (special function register) space is also
mapped into the upper 128 bytes of internal data
memory space. This SFR space is only accessible
using direct-access. The SFR space provides the
interface to all the on-chip peripherals. This
interfacing is illustrated in Figure 8.
DFFFh
56KB
INTERNAL DATA
MEMORY SPACE
FLASH
MEMORY
8051
FFh
FFh
80h
128 Bytes
RAM
(INDIRECT
ADDRESSING
SFR SPACE -
PERIPHERALS
(DIRECT
COMPATIBLE
µ-PROCESSOR
(SingleCycle)
0000h
ADDRESSING)
EXTERNAL DATA
MEMORY SPACE
80h
7Fh
128 Bytes
RAM
(DIRECT &
INDIRECT
ADDRESSING)
03FFh
1KB
RAM
00h
0000h
_________________________________________________________________________________________________________
www.ramtron.com page 6 of 76
VMX51C1016
FIGURE 8: SFR ORGANIZATION
The SFR locations and register representations
related to the dual data pointers are outlined as
follows:
ADC
CONTROL
SPI BUS
TABLE 3: (DPH0) DATA POINTER HIGH 0 - SFR 83H
DIFF
TRANSCEIVER
15
14
13
12
11
10
9
8
INTERNAL DATA
MEMORY SPACE
DPH0 [7:0]
CLOCK
CONTROL
FFH
SFR SPACE
PERIPHERALS
(DIRECT
-
TABLE 4: (DPL0) DATA POINTER LOW 0 - SFR 82H
7
6
5
4
3
2
1
0
I2C BUS
ADDRESSING)
DPL0 [7:0]
80H
PERIPHERAL
INTERRUPTS
Bit
15-8 DPH0
7-0 DPL0
Mnemonic
Function
Data Pointer 0 MSB
Data Pointer LSB.
MAC
I/O CONTROL
8051
PROCESSOR
PERIPHERALS
TABLE 5: (DPH1) DATA POINTER HIGH 1 - SFR 85H
15
14
13
12
11
10
2
9
1
8
0
DPH1 [7:0]
TABLE 6: (DPL1) DATA POINTER LOW 1 - SFR 84H
Dual Data Pointers
7
6
5
4
3
DPL1 [7:0]
The VMX51C1016 includes two data pointers.
Bit
15-8 DPH1
7-0 DPL1
Mnemonic
Function
Data Pointer 1 MSB.
Data Pointer 1 LSB.
The first data pointer (DPTR0) is mapped into SFR
locations 82h and 83h. The second data pointer
(DPTR1) is mapped into SFR locations 84h and
85h. The SEL bit in the data pointer select register,
DPS (SFR 86h), selects which data pointer is
active. When SEL = 0, instructions that use the
data pointer will use DPL0 and DPH0. When SEL
= 1, instructions that use the DPTR will use DPL1
and DPH1. SEL is located in bit 0 of the DPS (SFR
location 86h). The remaining bits of SFR location
86h are unused.
TABLE 7: (DPS) DATA POINTER SELECT REGISTER - SFR 86H
7
0
6
0
5
0
4
0
3
0
2
0
1
0
0
SEL
Bit
Mnemonic
Function
Always zero
0 = DPTR0 is selected
1 = DPTR1 is selected
Used to toggle between both data
pointers
7-1
0
0
SEL
MPAGE Register
All DPTR-related instructions use the currently
selected data pointer. In order to switch the active
pointer, toggle the SEL bit. The fastest way to do
this is to use the increment instruction (INC DPS).
The MPAGE register controls the upper 8 bits of
the targeted address when the MOVX instruction is
used for external RAM data transfer. This allows
access to the entire external RAM content without
using the data pointer.
The use of the two data pointers can significantly
increase the speed of moving large blocks of data
because only one instruction is needed to switch
from a source address and destination address.
TABLE 8: (MPAGE) MEMORY PAGE - SFR CFH
7
6
5
4
3
2
1
0
MPAGE [7:0]
User Flags
The VMX51C1016 provides an SFR register that
allows the user to define software flags. Each bit of
this register is individually addressable. This
register may also be used as a general-purpose
storage location. Thus, the user flag feature allows
the VMX51C1016 to better adapt to each specific
application. This register is located at SFR address
F8h.
TABLE 9: (USERFLAGS) USER FLAG - SFR F8H
7
6
5
4
3
2
1
0
UF7
UF6
UF5
UF4
UF3
UF2
UF1
UF0
_________________________________________________________________________________________________
www.ramtron.com page 7 of 76
VMX51C1016
Size
(bytes)
Instr.
Cycles
Mnemonic
Description
Instruction Set
Data Transfer Instructions
MOV A, Rn
Move register to A
1
2
1
2
1
2
2
2
2
3
2
3
1
2
2
3
1
1
1
1
1
1
2
2
1
2
1
1
1
All VMX51C1016 instructions are function and
binary code compatible with industry standard
8051s. However, the timing of instruction sets may
be different. The following two tables describe the
VMX51C1016 instruction set.
MOV A, direct
MOV A, @Ri
MOV A, #data
MOV Rn, A
Move direct byte to A
2
Move data memory to A
2
Move immediate to A
2
Move A to register
2
MOV Rn, direct
MOV Rn, #data
MOV direct, A
MOV direct, Rn
MOV direct, direct
MOV direct, @Ri
MOV direct, #data
MOV @Ri, A
MOV @Ri, direct
MOV @Ri, #data
MOV DPTR, #data16
MOVC A, @A+DPTR
MOVC A, @A+PC
MOVX A, @Ri
MOVX A, @DPTR
MOVX @Ri, A
MOVX @DPTR, A
PUSH direct
POP direct
Move direct byte to register
Move immediate to register
Move A to direct byte
4
2
3
TABLE 10: LEGEND FOR INSTRUCTION SET TABLE
Move register to direct byte
Move direct byte to direct byte
Move data memory to direct byte
Move immediate to direct byte
Move A to data memory
3
Symbol
A
Function
Accumulator
4
4
Rn
Register R0-R7
3
Direct
@Ri
rel
Internal register address
Internal register pointed to by R0 or R1 (except MOVX)
Two's complement offset byte
Direct bit address
3
Move direct byte to data memory
Move immediate to data memory
Move immediate 16 bit to data pointer
Move code byte relative DPTR to A
Move code byte relative PC to A
Move external data (A8) to A
Move external data (A16) to A
Move A to external data (A8)
Move A to external data (A16)
Push direct byte onto stack
Pop direct byte from stack
Exchange A and register
5
bit
3
3
#data
#data 16
addr 16
addr 11
8-bit constant
16-bit constant
16-bit destination address
11-bit destination address
3
3
3-10
3-10
4-11
4-11
4
TABLE 11: VERSA MIX INSTRUCTION SET
Size
(bytes)
Instr.
Cycles
Mnemonic
Description
Arithmetic instructions
ADD A, Rn
ADD A, direct
ADD A, @Ri
ADD A, #data
ADDC A, Rn
ADDC A, direct
ADDC A, @Ri
ADDC A, #data
SUBB A, Rn
SUBB A, direct
SUBB A, @Ri
SUBB A, #data
INC A
3
Add register to A
1
2
1
2
1
2
1
2
1
2
1
2
1
1
2
1
1
1
2
1
1
1
1
1
1
2
2
2
1
2
2
2
1
2
2
2
1
2
3
3
1
2
3
3
1
5
5
1
XCH A, Rn
2
Add direct byte to A
XCH A, direct
XCH A, @Ri
XCHD A, @Ri
Branching Instructions
ACALL addr 11
LCALL addr 16
RET
Exchange A and direct byte
Exchange A and data memory
Exchange A and data memory nibble
3
Add data memory to A
Add immediate to A
3
3
Add register to A with carry
Add direct byte to A with carry
Add data memory to A with carry
Add immediate to A with carry
Subtract register from A with borrow
Subtract direct byte from A with borrow
Subtract data mem from A with borrow
Subtract immediate from A with borrow
Increment A
Absolute call to subroutine
Long call to subroutine
2
3
1
1
2
3
2
2
2
3
3
3
1
2
2
3
3
3
3
2
3
6
6
4
4
3
4
3
3
3
4
4
4
2
3
3
4
4
4
4
3
4
Return from subroutine
RETI
Return from interrupt
AJMP addr 11
LJMP addr 16
SJMP rel
Absolute jump unconditional
Long jump unconditional
Short jump (relative address)
Jump on carry = 1
JC rel
INC Rn
Increment register
JNC rel
Jump on carry = 0
INC direct
Increment direct byte
JB bit, rel
Jump on direct bit = 1
INC @Ri
Increment data memory
Decrement A
JNB bit, rel
Jump on direct bit = 0
DEC A
JBC bit, rel
Jump on direct bit = 1 and clear
Jump indirect relative DPTR
Jump on accumulator = 0
Jump when accumulator not equal to 0
Compare A, direct JNE relative
Compare A, immediate JNE relative
Compare reg, immediate JNE relative
Compare ind, immediate JNE relative
Decrement register, JNZ relative
Decrement direct byte, JNZ relative
DEC Rn
Decrement register
JMP @A+DPTR
JZ rel
DEC direct
DEC @Ri
Decrement direct byte
Decrement data memory
Increment data pointer
Multiply A by B
JNZ rel
INC DPTR
CJNE A, direct, rel
CJNE A, #data, rel
CJNE Rn, #data, rel
CJNE @Ri, #data, rel
DJNZ Rn, rel
DJNZ direct, rel
Bit Operations
CLR C
MUL AB
DIV AB
Divide A by B
DA A
Decimal adjust A
Logical Instructions
ANL A, Rn
ANL A, direct
ANL A, @Ri
ANL A, #data
ANL direct, A
ANL direct, #data
ORL A, Rn
ORL A, direct
ORL A, @Ri
ORL A, #data
ORL direct, A
ORL direct, #data
XRL A, Rn
XRL A, direct
XRL A, @Ri
XRL A, #data
XRL direct, A
XRL direct, #data
CLR A
AND register to A
1
2
1
2
2
3
1
2
1
2
2
3
1
2
1
2
2
3
1
1
1
1
1
1
1
1
2
2
2
3
4
1
2
2
2
3
4
1
2
2
2
3
4
1
1
1
1
1
1
1
AND direct byte to A
AND data memory to A
AND immediate to A
Clear carry flag
1
2
1
2
1
2
2
2
2
2
2
2
1
3
1
3
1
3
2
2
2
2
2
3
CLR bit
Clear direct bit
AND A to direct byte
SETB C
Set carry flag
AND immediate data to direct byte
OR register to A
SETB bit
Set direct bit
CPL C
Complement carry Flag
Complement direct bit
OR direct byte to A
CPL bit
OR data memory to A
OR immediate to A
ANL C,bit
Logical AND direct bit to carry flag
Logical AND between /bit and carry flag
Logical OR bit to carry flag
Logical OR /bit to carry flag
Copy direct bit location to carry flag
Copy carry flag to direct bit location
ANL C, /bit
OR A to direct byte
ORL C,bit
OR immediate data to direct byte
Exclusive-OR register to A
Exclusive-OR direct byte to A
Exclusive-OR data memory to A
Exclusive-OR immediate to A
Exclusive-OR A to direct byte
Exclusive-OR immediate to direct byte
Clear A
ORL C, /bit
MOC c,bit
MOV bit,C
Miscellaneous Instruction
NOP
No operation
1
1
CPL A
Compliment A
SWAP A
Swap nibbles of A
RL A
Rotate A left
RLC A
Rotate A left through carry
Rotate A right
RR A
RRC A
Rotate A right through carry
_________________________________________________________________________________________________
www.ramtron.com page 8 of 76
VMX51C1016
Special Function Registers
The special function registers (SFRs) control several features on the VMX51C1016. Many of the device’s
SFRs are identical to the standard 8051 SFRs. However, there are additional SFRs that control the
VMX51C1016’s specific peripheral features that are not available on the standard 8051.
TABLE 12: SPECIAL FUNCTION REGISTERS
SFR
SFR Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Reset Value
Adrs
80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8Ah
8Bh
8Ch
8Dh
8Eh
8Fh
90h
91h
92h
93h
94h
95h
96h
97h
98h
99h
9Ah
9Bh
9Ch
9Dh
9Eh
9Fh
A0h
P0
SP
-
-
-
-
-
-
0
-
-
-
-
-
-
0
-
TR1
CT1
-
-
-
-
-
-
-
-
-
-
0
-
TF0
M11
-
-
-
-
-
-
-
-
-
-
0
-
TR0
M01
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
0
-
-
-
-
-
-
1111 1111b
0000 0111b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
DPL0
DPH0
DPL1
DPH1
DPS
PCON
TCON*
TMOD
TL0
TL1
TH0
TH1
Reserved
Reserved
P1*
0
GF1
-
0
GF0
-
SEL
IDLE
IT0
M00
-
-
-
-
SMOD
TF1
STOP
IE0
M10
-
-
-
-
-
-
-
-
-
GATE0
CT0
-
-
-
-
-
-
-
-
-
-
-
-
MACIF
0
I2CEN
IRQNORMSPD
-
-
-
-
1111 1111b
0000 0000b
0000 0000b
0000 0000b
IRCON
ANALOGPWREN
T2EXIF
0
T2CLKEN
SOFTRST
T2IF
0
WDOGEN
ADCIF
0
MACEN
I2CIF
TAEN
SPIEN
SPIRXIF
ADCEN
SPITXIF
PGAEN
Reserved
BGAPEN
UART1DIFFEN
UART1EN UART0EN
DIGPWREN
CLKDIVCTRL
ADCCLKDIV
S0RELL
S0RELH
S0CON*
-
-
-
0
-
-
-
0
MCKDIV_3 MCKDIV_2 MCKDIV_1 MCKDIV_0 0000 0000b
-
-
0
-
-
0
-
-
0
-
-
0
-
-
-
-
-
-
0000 0000b
11011001b
0000 0011b
0000 0000b
0000 0000b
0000 0000b
S0M0
-
-
-
S0M1
-
-
-
MCPE0
R0EN
-
-
-
T0B8
-
-
R0B8
-
-
T0I
-
-
R0I
-
S1IE
S0BUF
IEN2
-
-
-
-
P0.1/T2EXINE
P0PINCFG
P1PINCFG
P2PINCFG
P3PINCFG
PORTIRQEN
P2*
P0.3/RX1INE P0.2/TX1OE
PWM3EN
CS0EN
CCU0EN
P0.0/T2INE 0000 0000b
PWM0EN
CS3EN
TX0EN
P10IEN
-
-
-
PWM2EN
CS1EN
T0INEN
P12IEN
PWM1EN
CS2EN
RX0EN
P11IEN
SDIEN
MSCLEN
SDOEN
MSDAEN
SCKEN
T1INEN
SSEN
CCU1EN
0000 0000b
0000 0000b
0000 0000b
1111 1111b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0
-
-
0
-
-
0
-
-
1
-
-
0
-
-
P13IEN
-
-
-
-
PORTIRQSTAT A1h
P13ISTAT
ADCIE
P12ISTAT
ONECHAN
P11ISTAT
CONT
P10ISTAT
ONESHOT
ADCCTRL
A2h ADCIRQCLR XVREFCAP
ADCIRQ
ADCCONVRLOW
ADCCONVRMED
ADCCONVRHIGH
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
ABh
ACh
ADh
AEh
AFh
B0h
B1h
B2h
B3h
B4h
B5h
B6h
B7h
B8h
B9h
BAh
BBh
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ADCD0LO
ADCD0HI
IEN0*
ADCD0HI_3 ADCD0HI_2 ADCD0HI_1 ADCD0HI_0 0000 0000b
EA
-
WDT
-
T2IE
-
S0IE
-
T1IE
-
0
-
T0IE
-
INT0IE
-
0000 0000b
0000 0000b
ADCD1LO
ADCD1HI
ADCD2LO
ADCD2HI
ADCD3LO
ADCD3HI
Reserved
P3*
Reserved
Reserved
BGAPCAL
PGACAL
INMUXCTRL
OUTMUXCTRL
SWITCHCTRL
IP0*
ADCD1HI_3 ADCD1HI_2 ADCD1HI_1 ADCD1HI_0 0000 0000b
0000 0000b
ADCD2HI_3 ADCD2HI_2 ADCD2HI_1 ADCD2HI_0 0000 0000b
0000 0000b
ADCD3HI_3 ADCD3HI_2 ADCD3HI_1 ADCD3HI_0 0000 0000b
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1111 1111b
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
0000 0000b
0000 0000b
0000 0000b
0000 0000b
ADCINSEL_2 ADCINSEL_1 ADCINSEL_0 AINEN_3
AINEN_2
AINEN_1
AINEN_0
TAOUTSEL_2 TAOUTSEL_1 TAOUTSEL_0
-
-
-
-
-
-
-
-
-
SWITCH1_3 SWITCH1_2 SWITCH1_1 SWITCH1_0 0000 0000b
UF8
WDTSTAT
IP0.5
IP1.5
-
-
IP0.4
IP1.4
-
-
IP0.3
IP1.3
-
-
IP0.2
IP1.2
-
-
IP0.1
IP1.1
-
-
IP0.0
IP1.0
-
-
0000 0000b
0000 0000b
0000 0000b
0000 0000b
IP1
Reserved
Reserved
-
-
-
-
-
-
_________________________________________________________________________________________________
www.ramtron.com page 9 of 76
VMX51C1016
SFR
Adrs
BCh
SFR Register
PGACAL0
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Reset Value
0000 0000b
-
-
-
-
-
-
-
PGACAL0
Reserved
S1RELL
S1RELH
S1CON*
S1BUF
CCL1
CCH1
CCL2
CCH2
CCL3
CCH3
T2CON*
CCEN
CRCL
CRCH
TL2
TH2
BDh
BEh
BFh
C0h
C1h
C2h
C3h
C4h
C5h
C6h
C7h
C8h
C9h
CAh
CBh
CCh
CDh
CEh
CFh
D0h
D1h
D2h
D3h
D4h
D5h
D6h
D7h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
S1M
-
-
-
-
-
-
-
reserved
MCPE1
R1EN
-
-
-
-
-
-
-
T1B8
-
-
-
-
-
-
-
R1B8
-
-
-
-
-
-
-
T1I
-
-
-
-
-
-
-
R1I
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
T2PS
COCAH3
T2PSM
COCAL3
T2SIZE
COCAH2
T2RM1
COCAL2
T2RM0
COCAH1
T2CM
COCAL1
T2IN1
COCAH0
T2IN0
COCAL0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Reserved
MPAGE
PSW*
-
-
-
F0
-
-
-
-
-
P
0000 0000b
0000 0000b
CY
AC
RS1
RS0
OV
reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
U0BAUD
WDTREL
I2CCONFIG
I2CCLKCTRL
I2CCHIPID
I2CIRQSTAT
I2CRXTX
Reserved
ACC*
SPIRX3TX0
SPIRX2TX1
SPIRX1TX2
SPIRX0TX3
SPICTRL
SPICONFIG
SPISIZE
IEN1*
D8h BAUDSRC
D9h PRES
DAh I2CMASKID I2CRXOVIE I2CRXDAVIE I2CTXEMPIE I2CMANACK
-
-
-
-
-
-
-
0000 0000b
WDTREL_6 WDTREL_5 WDTREL_4 WDTREL_3 WDTREL_2 WDTREL_1 WDTREL_0 0000 0000b
I2CACKMODE
I2CMSTOP I2CMASTER 0000 0010b
DBh
DCh
DDh
DEh
DFh
E0h
E1h
E2h
E3h
E4h
E5h
E6h
E7h
E8h
E9h
EAh
-
I2CID_6
I2CGOTSTOP
-
-
I2CID_5
I2CNOACK
-
-
-
-
-
-
-
0000 0000b
0100 0010b
I2CID_4
I2CSDAS
-
I2CID_3
I2CDATACK I2CIDLE
I2CID_2
I2CID_1
I2CRXOV
-
I2CID_0
I2CWID
I2CRXAV I2CTXEMP 0010 1001b
-
-
-
-
0000 0000b
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0001b
SPICK_2
SPICSLO
SPICK_1
SPICK_0
FSONCS3 SPI LOAD
SPICS_1
SPICS_0
-
SPICKPH SPICKPOL SPIMA_SL
SPIRXOVIE SPIRXAVIE SPITXEMPIE 0000 0000b
0000 0111b
SPIRXOVIE
SPIOV
-
-
T2EXIE
-
SWDT
-
ADCPCIE
SPITXEMPTO SPISLAVESEL
MACOVIE
I2CIE
SPISEL
SPITEIE
SPIRXAV SPITXEMP
reserved
0000 0000b
00011001b
SPIIRQSTAT
Reserved
MACCTRL1
EBh LOADPREV PREVMODE OVMODE OVRDVAL ADDSRC_1 ADDSRC_0 MULCMD_1 MULCMD_0 0000 0000b
MACC0
MACC1
MACC2
MACC3
ECh
EDh
EEh
EFh
F0h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
0000 0000b
B*
MACCTRL2
MACA0
MACA1
MACRES0
MACRES1
MACRES2
MACRES3
USERFLAGS*
MACB0
F1h MACCLR2_2 MACCLR2_1 MACCLR2_0 MACOV32IE
MACOV16 MACOV32
F2h
F3h
F4h
F5h
F6h
F7h
F8h
F9h
FAh
FBh
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
UF7
-
-
UF6
-
-
UF5
-
-
UF4
-
-
UF3
-
-
UF2
-
-
UF1
-
-
UF0
-
-
MACB1
MACSHIFTCTRL
SHIFTMODE ALSHSTYLE SHIFTAMPL_5 SHIFTAMPL_4 SHIFTAMPL_3 SHIFTAMPL_2 SHIFTAMPL_1 SHIFTAMPL_0
MACPREV0
MACPREV1
MACPREV2
MACPREV3
* Bit addressable
FCh
FDh
FEh
FFh
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
_________________________________________________________________________________________________
www.ramtron.com page 10 of 76
VMX51C1016
Analog Peripherals Power Enable
Peripheral Activation Control
The analog peripherals, such as the A/D,
bandgap and PGA analog-to-digital converter,
have a shared dedicated register used for
enabling and disabling these peripherals. By
default, these peripherals are powered down
when the device is reset.
Digital Peripherals Power Enable
To save power upon reset, many of the digital
peripherals of the VMX51C1016 are not
activated. The peripherals affected by this are:
o
o
o
o
o
o
o
o
Timer 2 / Port1
Watchdog timer
MULT/ACCU unit
I²C interface
SPI interface
UART0
TABLE 14: (ANALOGPWREN) ANALOG PERIPHERALS POWER ENABLE REGISTER -
SFR 92H
7
0
6
0
5
0
4
0
3
0
2
1
0
ADCEN
PGAEN
BGAPEN
UART1
Differential transceiver
Bit
Mnemonic
Function
7
0
0
0
0
Reserved, Keep at 0
Reserved, Keep at 0
Reserved, Keep at 0
Reserved, Keep at 0
1 = TA Output Enable
0 = TA Output Disable
1 = ADC Enable
0 = ADC Disable
1 = PGA Enable
0 = PGA Disable
1 = Bandgap Enable
0 = Bandgap Disable
6
5
4
Before using any of the above-listed peripherals,
they must first be enabled by setting the
corresponding bit of the DIGPWREN SFR
register to 1.
3
2
1
0
TAEN
ADCEN
PGAEN
BGAPEN
The same rule applies when accessing a given
peripheral’s SFR register(s). The targeted
peripheral must have been powered on
(enabled) first, otherwise the SFR register
content will be ignored
Note: The SFR registers associated with all
analog peripherals are activated when
one or more analog peripherals are
enabled.
The following table demonstrates the structure
of the DIGPWREN register.
TABLE 13: (DIGPWREN) DIGITAL PERIPHERALS POWER ENABLE REGISTER - SFR
93H
7
6
5
4
T2CLKEN
WDOGEN
MACEN
I2CEN
3
2
1
0
SPIEN
UART1DIFFEN
UART1EN
UART0EN
Bit
Mnemonic
Function
Timer 2 / PWM Enable
0 = Timer 2 CLK stopped
1 = Timer 2 CLK Running
Watch Dog Enable
0 = Watch Dog Disable
1 = Watch Dog Enable
1 = MULT/ACCU Unit Enable
0 = MULT/ACCU Unit Disable
1= I2C Interface Enable
7
6
T2CLKEN
WDOGEN
5
4
3
2
MACEN
I2CEN
0 = I2C Interface Disable
This bit is merged with CLK STOP bit
1 = SPI interface is Enable
0 = SPI interface is Disable
UART1 Differential mode
0 = Disable
SPIEN
UART1DIFFEN
1 = Enable
0 = UART1 Disable
1 = UART1 Enable
0 = UART0 Disable
1 = UART0 Enable
1
0
UART1EN
UART0EN
_________________________________________________________________________________________________
www.ramtron.com page 11 of 76
VMX51C1016
General Purpose I/O
FIGURE 10: TYPICAL I/O VOUT VS. SOURCE CURRENT
5.00
The VMX51C1016 provides 24 general-purpose
I/O pins. The I/Os are shared with digital
peripherals and can be configured individually.
4.90
4.80
4.70
4.60
4.50
At reset, all the VMX51C1016 I/O ports are
configured as inputs. The I/O ports are bi-
directional and the CPU can write or read data
through any of these ports.
I/O Port Structure
0.0
2.0
4.0
6.0
8.0
10.0
I/O current source (mA)
The VMX51C1016 I/O port structure is shown in
the following figure.
FIGURE 11: TYPICAL I/O VOUT VS. SINK CURRENT
0.50
FIGURE 9 – I/O PORT STRUCTURE
0.40
0.30
0.20
0.10
0.00
VCC
VCC
OE
Driver
I/O
Control
logic
I/O
0.0
2.0
4.0
6.0
8.0
10.0
TTL
I/O current sink (mA)
The maximum recommended driving current of a
single I/O on a given port is 10mA. The
recommended limit when more than one I/O on
a given port is driving current is 5mA on each
I/O. The total current drive of all I/O ports should
be limited to 40mA
Each I/O pin includes pull-up circuitry
(represented by the internal pull-up resistor) and
a pair of internal protection diodes internally
connected to VCC and ground, providing ESD
protection.
The following figure shows a typical I/O rise time
when driving a 20pF capacitive load. In this
case, rise time is about 14ns.
The I/O operational configuration is defined in
the I/O control logic block.
FIGURE 12: I/O RISE TIME WITH A 20PF LOAD
I/O Port Drive Capability
Each I/O port pin, when configured as an output,
can source or sink up to 4mA. The following
graphs show typical I/O output voltage versus
source and I/O output voltage versus sink
current.
_________________________________________________________________________________________________
www.ramtron.com page 12 of 76
VMX51C1016
The following registers are used to configure
each of the ports as either general-purpose
inputs, outputs or alternate peripheral functions.
For example, when bit 5 of Port 2 is configured
as an output, it will output the SCK signal if the
SPI interface is enabled and working.
Input Voltage vs. Ext. Device Sink
The I/Os of the VMX51C1016, when configured
as inputs, include an internal pull-up resistor
made up of a transistor, which ensures that the
level present at input is stable when the I/O pins
are disconnected.
The only exception to this rule is the I2C clock
and data bus signals. In these two cases, the
VMX51C1016 configures the pins automatically
as inputs or outputs.
Due to the presence of the pull-up resistor on
the digital inputs, the external device driving the
I/O must be able to sink enough current to bring
the I/O pin low.
The P0PINCFG register controls the I/O access
to UART1 and Timer 2’s input and output, and
defines the direction of P0 when used as a
general purpose I/O.
The following figure shows the VMX51C1016
input port voltage versus the external device
sink current.
TABLE 15: (P0PINCFG) PORT 0 PORT CONFIGURATION REGISTER - SFR 9BH
7
6
5
4
P07IO
P06IO
P05IO
P04IO
FIGURE 13: INPUT PORT VOLTAGE VS. EXT DEVICE SINK CURRENT
3
2
1
0
P0.3/RX1INE
P0.2/TX1OE
P0.1/T2EXINE
P0.0/T2INE
5.0
Bit
7:4
3
Mnemonic
P0xIO
P0.3/RX1INE
Function
Not connected on VMX51C1016
0: General purpose input or
UART1 RX
1: General purpose output
When using UART1 you must
set this bit to 0.
0: General purpose input
1: General purpose output or
UART1 TX
When using UART1 you must
set this bit to 1.
4.0
3.0
2.0
1.0
0.0
2
1
0
P0.2/TX1OE
P0.1/T2EXINE 0: General purpose input or
Timer 2 EX
1: General purpose output
When using Timer 2EX input
you must set this bit to 0.
0: General purpose input or
Timer 2 IN
0
20
40
60
80
100
120
140
160
180
Ext. device sink current (uA)
P0.0/T2INE
1: General purpose output
When using Timer 2 input you
must set this bit to 0.
I/O Port Configuration Registers
The VMX51C1016’s I/O port operation is
controlled by two sets of four registers:
o
o
Port pin configuration registers
Port access registers
The port pin configuration registers combined
with specific peripheral configuration will define
whether a given pin acts as a general purpose
I/O or provides the alternate peripheral
functionality.
Before using a peripheral that is shared with
I/Os, the pin corresponding to the peripheral
output must be configured as an output and the
pins that are shared with the peripheral inputs
must be configured as inputs.
_________________________________________________________________________________________________
www.ramtron.com page 13 of 76
VMX51C1016
The P1PINCFG register controls access from
the PWM to the I/O pins and defines the
direction of P1 when the PWM’s are not used.
The P2PINCFG register controls I/O access to
the SPI interface and defines the direction of P2
when used as a general purpose I/O.
TABLE 16: (P1PINCFG) PORT 1 PORT CONFIGURATION REGISTER - SFR 9CH
TABLE 17: (P2PINCFG) PORT 2 PORT CONFIGURATION REGISTER - SFR 9DH
7
6
5
4
7
6
5
4
P1[7:4]
P2.7/SDIEN
P2.6/SDOEN
P2.5/SCKEN
P2.4/SSEN
3
2
1
0
3
2
1
0
P1.3/PWM3EN
P1.2/PWM2EN
P1.1/PWM1EN
P1.0/PWM0EN
CS0EN
CS1EN
CS2EN
CS3EN
Bit
7:4
Mnemonic
P1[7:4]
Function
Not connected on
VMX51C1016
0: General purpose input
1: General purpose output
or PWM bit 3 output
Bit
7
Mnemonic
P2.7/SDIEN
Function
0: General purpose input or SDI
1: General purpose output
3
P1.3/PWM3OE
P1.2/PWM2OE
P1.1/PWM1OE
P1.0/PWM0OE
When using SPI you must set
this bit to 0.
0: General purpose input
1: General purpose output or
SDO
6
P2.6/SDOEN
P2.5/SCKEN
P2.4/SSEN
When using PWM you
must set this bit to 1.
0: General purpose input
1: General purpose output
or PWM bit 2 output
2
1
0
When using SPI you must set
this bit to 1.
0: General purpose input or
SCK
5
4
3
2
1
0
When using PWM you
must set this bit to 1
0: General purpose input
1: General purpose output
or PWM bit 1 output
1: General purpose output
When using SPI you must set
this bit to 0.
0: General purpose input or
Slave Select
When using PWM you
must set this bit to 1
0: General purpose input
1: General purpose output
or PWM bit 0 output
1: General purpose output
When using SPI SS you must
set this bit to 0.
0: General purpose input
1: General purpose output or
Chip Select bit 0 output
P2.3/CS0EN
P2.2/CS1EN
P2.1/CS2EN
P2.0/CS3EN
When using PWM you
must set this bit to 1
When using SPI CS0 you
must set this bit to 1.
0: General purpose input
1: General purpose output or
Chip Select bit 1 output
When using SPI CS1 you
must set this bit to 1.
0: General purpose input
1: General purpose output or
Chip Select bit 2 output
When using SPI CS2 you
must set this bit to 1.
0: General purpose input
1: General purpose output or
Chip Select bit 3 output
When using SPI CS3 you
must set this bit to 1.
_________________________________________________________________________________________________
www.ramtron.com page 14 of 76
VMX51C1016
The P3PINCFG register controls I/O access to
UART0, the I²C interface, capture and compare
inputs 0 and 1 and timer 0/1’s inputs, and
defines the direction of P3 when used as a
general purpose I/O.
location is defined. These registers are bit
addressable, providing the ability to control the
I/O lines individually. The upper 4 bits of Port 0
and Port 1 are not pinned out.
When the port pin configuration register value
defines the pin as an output, the value written
into the port register will be reflected at the pin
level.
TABLE 18: (P3PINCFG) PORT 3 PORT CONFIGURATION REGISTER - SFR 9EH
7
6
5
4
P3.5/T1INE
N
P3.4/CCU1E
N
P3.7/MSCLEN
P3.6/MSDAEN
3
2
1
0
Reading the I/O pin configured as input is done
by reading the contents of its associated port
register.
P3.3/CCU0EN
P3.2/T0INEN
P3.1/RX0EN
P3.0/TX0EN
Bit
7
Mnemonic
Function
0: General purpose input
1: General purpose output or
Master I2C SCL output
TABLE 19:
PORT 0 - SFR 80H
7
6
5
4
3
2
1
0
P3.7/MSCLEN
P3.6/MSDAEN
P3.5/T1INEN
P0 [7:0]
When using the I2C you must
set this bit to 1.
0: General purpose input
1: General purpose output or
Master I2C SDA
PORT 1 - SFR 90H
7
6
5
5
5
4
3
2
2
2
1
1
1
0
0
0
6
5
4
P1 [7:0]
PORT 2 - SFR A0H
7
6
4
3
P2 [7:0]
PORT 3 - SFR B0H
When using the I2C you must
set this bit to 1.
0: General purpose input or
Timer1 Input
7
6
4
3
P3 [7:0]
Bit
7-0
Mnemonic
P0, 1, 2, 3
Function
1: General purpose output
When the Port is configured as an
output, setting a port pin to 1 will
make the corresponding pin to
output logic high.
When using Timer 1 you must
set this bit to 0.
0: General purpose input or
CCU1 Input
When set to 0, the corresponding
pin will set a logic low.
1: General purpose output
P3.4/CCU1EN
P3.3/CCU0EN
When using the Compare and
Capture unit you must set this
bit to 0.
0: General purpose input or
CCU0 Input
I/O usage example
The following example demonstrates the configuration of the VMX51C1016 I/Os.
//---------------------------------------------------------------------------
3
//This example continuously reads the P0 and writes its contents into //P1 and it
toggle P2 and P3.
//---------------------------------------------------------------------------
#pragma TINY
1: General purpose output
#pragma UNSIGNEDCHAR
When using the Compare and
Capture unit you must set this
bit to 0.
0: General purpose input or
Timer 0 Input
#include <VMIXReg.h>
at 0x0000 void main (void)
{
DIGPWREN = 0x80;
2
1
0
// Enable Timer 2 to activate P1
//Output
// Configure all P0 as Input
//Configure P1 as Output
//Configure P2 as Output
//Configure P3 as Output
1: General purpose output
P3.2/T0INEN
P3.1/RX0EN
P3.0/TX0EN
P0PINCFG = 0x00;
P1PINCFG = 0x0F;
P2PINCFG = 0xFF;
P3PINCFG = 0xFF;
When using Timer 0 you must
set this bit to 0.
0: General purpose input or
UART0 Rx
while(1)
{
P1 = P0;
P2 = ~P2;
P3 = ~P3;
//Write P0 into P1
//Toggle P2 & P3
1: General purpose output
When using UART0 you must
set this bit to 0.
0: General purpose input
1: General purpose output or
UART0 Tx
}
}//end of main() function
When using UART0 you must
set this bit to 1.
Using General Purpose I/O Ports
The VMX51C1016’s 24 I/Os are grouped into
four ports. For each port an SFR register
_________________________________________________________________________________________________
www.ramtron.com page 15 of 76
VMX51C1016
Using Port 1.0-3 as General Purpose
Output
Port 1.0-P1.3 can be used as standard digital
output. In order to do this, the Timer 2 clock
must be enabled by setting the T2CLKEN bit of
the DIGPWREN register. In addition, the Timer 2
CCEN register must also have the reset value.
Interrupt on Port 1 Change Feature
The VMX51C1016 includes ann interrupt on Port
1 change feature. This can be used to monitor
the activity on each I/O Port 1 pin (individually),
and trigger an interrupt when the state of the pin
on which this feature has been activated
changes. This is equivalent to having eight
individual external interrupt inputs. The interrupt
on Port 1 change shares the interrupt vector of
the ADC peripheral at address 006Bh.
See the interrupt section for more details on how
to use this feature.
_________________________________________________________________________________________________
www.ramtron.com
page 16 of 76
VMX51C1016
MULT/ACCU Control Registers
MULT/ACCU - Multiply
Accumulator Unit
With the exception of the barrel shifter, the
MULT/ACCU unit operation is controlled by two
SFR registers:
MULT/ACCU Features
The VMX51C1016 includes a hardware based
multiply-accumulator unit, which allows the user
to perform fast and complex arithmetic
operations.
o
o
MACCTRL1
MACTRLC2
The following two tables describe these control
registers:
MULT/ACCU unit features:
TABLE 20: (MACCTRL1) MULT/ACCU UNIT CONTROL REGISTER - SFR EBH
o
o
Hardware calculation engine
7
6
5
4
Calculation result is ready as soon as
the input registers are loaded
Signed mathematical calculations
Unsigned MATH operations are possible
if the MUL engine operands are limited
to 15 bits in size
LOADPREV PREVMODE
OVMODE
OVRDVAL
3
2
1
0
o
o
ADDSRC [1:0]
MULCMD [1:0]
Bit
7
Mnemonic
LOADPREV
Function
MACPREV manual Load control
o
o
Auto/Manual reload of MAC_RES
Enhanced VMX51C1016 MULT/ACCU
unit
1 = Manual load of the
MACPREV register content if
PREVMODE = 1
o
Easy implementation of complex MATH
6
5
PREVMODE
OVMODE
Loading method of MACPREV
register
operations
o
o
o
16-bit and 32-bit overflow flag
32-bit overflow can trigger an interrupt
MULT/ACCU operand registers can be
cleared individually or all together
Overflow flags can be configured to stay
active until manually cleared
Can store and use results from previous
operations
MULT/ACCU can be configured to
perform the following operations:
0 = Automatic load when
MACA0 is written.
1 = Manual Load when 1 is
written into LOADPREV
0 = Once set by math operation,
the OV16 and OV32 flag will
remain set until the overflow
condition is removed.
1= Once set by math operation,
the OV16 and OV32 flag will
stay set until it is cleared
manually.
o
o
o
4
OVRDVAL
0 = The value on MACRES is
the calculation result.
1 = the value on MACRES is the
32LSB of the MACRES when
the OV32 overflow occurred
32-bit Addition source
B Input
FIGURE 13: VMX51C1016 MULT/ACCU OPERATION
(MACA, MACB) + MACC = MAC_RESULT
(MACA x MACB) + MACC = MAC_RESULT
ADD32 + ADD32
3:2
ADDSRC[1:0]
(MACA x MACB) + 0
(MACA x MACB) + MAC_PREV
= MAC_RESULT
= MAC_RESULT
00 = 0 (No Add)
01 = C (std 32-bit reg)
10 = RES –1
11 = C (std 32-bit reg)
A Input
MULT16 + ADD32
(MACA x MACA) + MACC = MAC_RESULT
(MACA x MACA) + 0
= MAC_RESULT
(MACA x MACA) + MAC_PREV
= MAC_RESULT
(MACA x MAC_PREV(16lsb) + MACC
(MACA x MAC_PREV(16lsb) + 0
= MAC_RESULT
= MAC_RESULT
00=Multiplication
01=Multiplication
(MACA x MAC_PREV(16lsb) + MAC_PREV = MAC_RESULT
10=Multiplication
11= Concatenation of {A, B} for
32-bit addition
Where MACA (multiplier), MACB (multiplicand),
MACACC (accumulator) and MACRESULT
(result) are 16, 16, 32 and 32 bits, respectively.
1:0
MULCMD[1:0]
Multiplication Command
00 = MACA x MACB
01 = MACA x MACA
10 = MACA x MACPREV (16 LSB)
11 = MACA x MACB
_________________________________________________________________________________________________
www.ramtron.com page 17 of 76
VMX51C1016
TABLE 21: (MACCTRL2) MULT/ACCU UNIT CONTROL REGISTER 2 -SFR F1H
TABLE 22: (MACA0) MULT/ACCU UNIT A OPERAND, LOW BYTE - SFR F2H
7
6
5
4
7
6
5
4
3
2
1
0
MACCLR2 [2:0]
MACOV32IE
MACA0 [7:0]
3
-
2
-
1
0
Bit
7:0
Mnemonic
MACA0
Function
Lower segment of the MACA
operand
MACOV16
MACOV32
Bit
7:5
Mnemonic
MACCLR[2:0]
Function
MULT/ACCU Register Clear
000 = No Clear
TABLE 23: (MACA1) MULT/ACCU UNIT A OPERAND, HIGH BYTE - SFR F3H
7
6
5
4
3
2
1
0
MACA1 [15:8]
001 = Clear MACA
010 = Clear MACB
011 = Clear MACC
100 = Clear MACPREV
101 = Clear All MAC regs +
Overflow Flags
110 = Clear Overflow Flags only
MULT/ACCU 32-bit Overflow
IRQ Enable
Bit
15:8
Mnemonic
MACA1
Function
Upper segment of the MACA
operand
TABLE 24: (MACB0) MULT/ACCU UNIT B OPERAND, LOW BYTE - SFR F9H
7
6
5
4
3
2
1
0
0
4
MACOV32IE
MACB0 [7:0]
3
2
1
-
-
-
-
Bit
7:0
Mnemonic
MACB0
Function
Lower segment of the MACB
operand
MACOV16
16-bit Overflow Flag
0 = No 16 overflow
1 = 16-bit MULT/ACCU
Overflow occurred
32-bit Overflow Flag
1 = 32-bit MULT/ACCU
Overflow
This automatically loads the
MAC32OV register.
The MACOV32 can generate a
MULT/ACCU interrupt when
enabled.
TABLE 25: (MACB1) MULT/ACCU UNIT B OPERAND, HIGH BYTE - SFR FAH
7
6
5
4
3
2
1
MACB1 [7:0]
0
MACOV32
Bit
7:0
Mnemonic
Function
Upper segment of the MACB
operand
MACB1
MACC Input Register
The MACC register is a 32-bit register used to
perform 32-bit addition.
MULT/ACCU Unit Data Registers
It is possible to substitute the MACPREV
register for the MACC register or 0 in the 32-bit
addition.
The MULT/ACCU data registers include operand
and result registers that serve to store the
numbers being manipulated in mathematical
operations. Some of these registers are uniquely
for addition (such as MACC), while others can
be used for all operations. The MULT/ACCU
operation registers are represented below.
TABLE 26: (MACC0) MULT/ACCU UNIT C OPERAND, LOW BYTE - SFR ECH
7
6
5
4
3
2
1
0
MACC0 [7:0]
Bit
7:0
Mnemonic
Function
Lower segment of the 32-bit addition
register
MACC0
MACA and MACB Multiplication
(Addition) Input Registers
TABLE 27: (MACC1) MULT/ACCU UNIT C OPERAND, BYTE 1 - SFR EDH
7
6
5
4
3
2
1
0
The MACA and MACB register serves as 16-bit
input operands when performing multiplication.
When the MULT/ACCU is configured to perform
32-bit addition, the MACA and the MACB
registers are concatenated to represent a 32-bit
word. In such cases, the MACA register contains
the upper 16-bit of the 32-bit operand and the
MACB contains the lower 16 bits.
MACC1 [15:8]
Bit
15:8
Mnemonic
Function
Lower middle segment of the 32-bit
addition register
MACC1
TABLE 28: (MACC2) MULT/ACCU UNIT C OPERAND, BYTE 2 - SFR EEH
7
6
5
4
3
2
1
0
MACC2 [23:16]
Bit
23:16
Mnemonic
MACC2
Function
Upper middle segment of the 32-bit
addition register
_________________________________________________________________________________________________
www.ramtron.com page 18 of 76
VMX51C1016
TABLE 29: (MACC3) MULT/ACCU UNIT C OPERAND, HIGH BYTE - SFR EFH
As previously mentioned, there are two ways to
load the MACPREV register controlled by the
PREVMODE bit value:
7
6
5
4
3
2
1
0
MACC3 [31:24]
Bit
31:24
Mnemonic
MACC3
Function
Upper segment of the 32-bit addition
register
PREVMODE = 0:
Auto MACPREV load, by writing into the MACA0
register. Selected when PREVMODE = 0.
MACRES Result Register
The MACRES register, which is 32 bits wide,
contains the result of the MULT/ACCU
operation. In fact, the MACRES register is the
output of the barrel shifter.
PREVMODE = 1:
Manual load of MACPREV when the
LOADPREV bit is set to 1.
TABLE 30: (MACRES0) MULT/ACCU UNIT RESULT, LOW BYTE - SFR F4H
A good example demonstrating the auto loading
of the MACPREV feature is the implementation
of a FIR filter. In that specific case, it is possible
to save a total of 8 MOV operations per tap
calculation.
7
6
5
4
3
2
1
0
MACRES0 [7:0]
Bit
7:0
Mnemonic
MACRES0
Function
Lower segment of the 32-bit
MULT/ACCU result register
TABLE 31: (MACRES1) MULT/ACCU UNIT RESULT, BYTE 1 - SFR F5H
7
6
5
4
3
2
1
0
TABLE 34: (MACPREV0) MULT/ACCU UNIT PREVIOUS OPERATION RESULT, LOW
BYTE - SFR FCH
MACRES1 [15:8]
7
6
5
4
3
2
1
0
MACPREV0 [7:0]
Bit
15:8
Mnemonic
MACRES1
Function
Lower middle segment of the 32-bit
MULT/ACCU result register
Bit
7:0
Mnemonic
MACPREV0
Function
Lower segment of 32-bit
MULT/ACCU previous result register
TABLE 32: (MACRES2) MULT/ACCU UNIT RESULT, BYTE 2 - SFR F6H
7
6
5
4
3
2
1
0
MACRES2 [23:16]
TABLE 35: (MACPREV1) MULT/ACCU UNIT PREVIOUS OPERATION RESULT, BYTE
1 - SFR FDH
7
6
5
4
3
2
1
0
Bit
23:16
Mnemonic
MACRES2
Function
MACPREV1 [7:0]
Upper middle segment of the 32-bit
MULT/ACCU result register
Bit
15:8
Mnemonic
MACPREV1
Function
Lower middle segment of 32-bit
MULT/ACCU previous result register
TABLE 33: (MACRES3) MULT/ACCU UNIT RESULT, HIGH BYTE - SFR F7H
7
6
5
4
3
2
1
0
MACRES3 [31:24]
TABLE 36: (MACPREV2) MULT/ACCU UNIT PREVIOUS OPERATION RESULT, BYTE
2 - SFR FEH
Bit
31:24
Mnemonic
MACRES3
Function
Upper segment of the 32-bit
MULT/ACCU result register
7
6
5
4
3
2
1
0
MACPREV2 [15:8]
Bit
23:16
Mnemonic
MACPREV2
Function
MACPREV Register
Upper middle segment of 32-bit
MULT/ACCU previous result register
The MACPREV register provides the ability to
automatically or manually save the contents of
the MACRES register and re-inject it into the
calculation. This feature is especially useful in
TABLE 37: (MACPREV3) MULT/ACCU UNIT PREVIOUS OPERATION RESULT, HIGH
BYTE - SFR FFH
7
6
5
4
3
2
1
0
MACPREV3 [7:0]
applications where the result of
operation serves as one of the operands of the
next one.
a given
Bit
31:24
Mnemonic
MACPREV3
Function
Upper segment of 32-bit
MULT/ACCU previous result register
_________________________________________________________________________________________________
www.ramtron.com page 19 of 76
VMX51C1016
FIGURE 14: VMX51C1016 MULT/ACCU FUNCTIONAL DIAGRAM
addsrc
SFR registers
Concatenation (A,B)
ov32
SFR registers
shiftmode
B
ADD
MSB
ov16a
MACA1 (MSB)
A
MACA
MACRES3 (MSB)
MACRES2
MACRES
(SFR regs)
MACRES
ov16b
MUL
SHIFT
MACB
MACA0 (LSB)
(Signed)
B
ADD
LSB
A
MACB1 (MSB)
ovrdval
mulcmd
MACRES1
MACC
prevmode
0
MACB0 (LSB)
Maca0 load
loadprev
MACRES0 (LSB)
addsrc
MACC3 (MSB)
MAC32OV3 (MSB)
MAC32OV2
(16 LSB)
MACPREV
MAC32OV
(stored)
MACC2
load
1
ovmode
MACC1
1
rst
MAC32OV1
ov32F
ov32
rst
MACC0 (LSB)
OVCLR
ov32F / IRQ
MAC32OV0 (LSB)
ov32
ovmode
1
rst
Ov16a+b
Ov16a+b
MAC Control SFR
ov16F
MACCTRL
MACCTRL2
MACSHIFTCTRL
The block diagram above shows the interaction
between the registers and the other components
that comprise the MULT/ACCU unit on the
VMX51C1016.
_________________________________________________________________________________________________
www.ramtron.com page 20 of 76
VMX51C1016
// MULT/ACCU example use
MULT/ACCU Barrel Shifter
MACA0 = 0xFF;
MACA1 = 0x7F;
MACB0 = 0xFF;
MACB1 = 0xFF;
MACC0 = 0xFF;
MACC1 = 0xFF;
MACC2 = 0xFF;
MACC3 = 0x7F;
The MULT/ACCU includes a 32-bit barrel shifter
at the output of the 32-bit addition unit. The
barrel shifter can perform right/left shift
operations in one cycle, which is useful for
scaling the output result of the MULT/ACCU.
//--- as soon as the MAC input registers are loaded the result is available in the
MACRESx registers.
The shifting range is adjustable from 0 to 16 in
both directions. The “shifted” addition unit output
can be routed to:
}//end of main
//---------------------------------------------------------------------------------
// MAC 32 bit overflow Interrupt Function
o
o
o
MACRES
MACPREV
MACOV32
void int_5_mac (void) interrupt 12
{
IEN0 &= 0x7F;
// Disable all interrupts
//Put MAC 32 bit Overflow Interrupt code here.*/
//Note that when a 32bit overflow occurs, the 32 least significant bit of the current
//result are stored into the MAC32OVx registers and can be read at the location
of MACRESx by setting to 1 the OVRDVAL bit of the MACCTRL register
The barrel shifter can perform both arithmetic
and logical shifts: The shift left operation can be
configured as an arithmetic or logical shift. In the
latter, the sign bit is discarded.
IRCON &= 0xEF;
// Clear flag (IEX5)
IEN0 |= 0x80;
// Enable all interrupts
}
//--------------------------------------------------------------------------------
TABLE 38: (MACSHIFTCTRL) MULT/ACCU UNIT BARREL SHIFTER CONTROL
REGISTER - SFR FBH
7
6
5
4
3
2
1
0
MULT/ACCU Application Example:
FIR Filter Function
SHIFTMODE
ALSHSTYLE
SHIFTAMPL [5:0]
Bit
7
Mnemonic
SHIFTMODE
Function
0 = Logical SHIFT
The following ASM code shows the
implementation of an FIR filter computation
function for one iteration, followed by the data
shifting operation and the definition of the FIR
filter coefficient table. The FIR computation is
simple to implement, however, it is quite
demanding in terms of processing power. For
each new data point, the multiplication with
associated coefficients plus addition operation
must be performed N times (N=number of filter
tapps).
1 = Arithmetic SHIFT
Arithmetic Shift Left Style
6
ALSHSTYLE
0= Arithmetic Left Shift: Logical Left
1= Arithmetic Left Shift: Keep sign bit
Shift Amplitude 0 to 16 (5 bits to
provide 16 bits shift range)
Neg. Number = Shift Right
(2 complements)
5:0
SHIFTAMPL[5:0]
Pos. Number = Shift Left
MULT/ACCU Unit Setup and OV32
Interrupt Example
In order to use the MULT/ACCU unit, the user
must first set up and configure the module. The
following provides setup code examples. The
first part of the code is the interrupt setup and
module configuration, while the second part is
the interrupt function itself.
Since it is hardware based and provides an
automatic reload of the result of the previous
operation
feature,
the
VMX51C1016
MULT/ACCU unit is very efficient in performing
operations such as FIR filter computation.
In the code example below, the COMPUTEFIR
loop forms the “heart” of the FIR computation. It
is clear that use of the MULT/ACCU unit implies
very few instructions to perform mathematical
Sample C code for MULT/ACCU unit interrupt
setup and module configuration:
//---------------------------------------------------------------------------
// Sample C code to setup the MULT/ACCU unit
//---------------------------------------------------------------------------
operations.
The net result is a dramatic
performance improvement when compared with
manual calculations done solely via the standard
8051 instruction set.
//--- Program initialisation omitted…
(…)
void main(void){
// MULT/ACCU setup
IEN0 |= 0x80;
IEN1 |= 0x10;
DIGPWREN |= 0x20;
MACCTRL1 = 0x0C;
MACCTRL2 = 0x10;
// Enable all interrupts
// Enable MULT/ACCU interrupt
// Enable MULT/ACCU unit
// {A,B}+C
// Enable INT overflow_32
_________________________________________________________________________________________________
www.ramtron.com page 21 of 76
VMX51C1016
;*** Second part
VMX51C1016 FIR Filter Example
;-------------------------------------------------------------------------------------------------------//
;** SHIFT PREVIOUS INPUT VALUES TO LET PLACE FOR NEXT ONE...
;-------------------------------------------------------------------------------------------------------//
SHIFTPAST:
The example below shows how to use the
VMX51C1016’s MULT/ACCU unit to perform
FIR filter computing. To minimize the example
size, only the FIR computing function and the
coefficient table are presented.
MOV
R7,#(NPOINTS-1)*2
;Define # of datashift
;To perform (N-1)*2
;***COMPUTE FIRST FETCH ADDRESS
MOV R0,#(NPOINTSBASEADRS - 1 + 2*(NPOINTS-1))
;***COMPUTE FIRST DESTINATION ADDRESS
MOV
SHIFTLOOP: MOV
R1,#(NPOINTSBASEADRS + 1 + 2*(NPOINTS-1))
A,@R0
@R1,A
R0
;Shift Given LSB input...
;To next location
;Prepare pointer for moving LSB
MOV
DEC
DEC
DJNZ
;----------------------------------------------------//
;** FIR Filter Computing Function
//
R1
;---------------------------------------------------//
FIRCOMPUTE: MOV R0,#NPOINTSBASEADRS
R7,SHIFTLOOP
;INPUT ADC RAW DATA
;AT Xn LOCATIONS...
;** PERFORM TRANSFORMATION OF Yn HERE AND PUT INTO BINH, BINL
;** IN THIS CASE THE COEFFICIENTS HAVE BEEN MULTIPLIED BY 65536
;** SO THE RESULT IS ON 32-BITS
;Saving acquired data from calling function into RAM for computation
;** DIVISING YN BY 65536 MEAN ONLY TAKING THE UPPER 16-BITS
MOV
MOV
MOV
INC
VARH,DATAH
VARL,DATAL
@R0,VARH
R0
MOV
MOV
DATAH,MACRES3
DATAL,MACRES2
;(MSB)
;(LSB)
LCALL
MOV
RET
SENDLTC1452
P3,#00
MOV
@R0,VARFL
;** Prepare to compute Yn...
;***Define Base ADRS of input values
;----------------------------------------------------
;* FIR Filter Coefficients Table
MOV
R0,#NPOINTSBASEADRS
*
;----------------------------------------------------
;FSAMPLE 480HZ, N=16, LOW PASS 0.1HZ -78DB @ 60HZ
;***Define Base Address of coefficients
MOV
R1,#COEFBASEADRS
MOV
R7,#NPOINTS
;DEFINE COUNTER
COEFTABLE:
DW
DW
023DH
049DH
086AH
0D2DH
1263H
1752H
1B30H
1D51H
1D51H
1B30H
1752H
1263H
0D2DH
086AH
049DH
023DH
;***Configure the MULT/ACCU unit as Follow:
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
MOV
MACCTRL,#00001000B
;BIT7 LOADPREV = 0
;BIT6 PREVMODE = 0
;
;BIT5 OVMODE = 0
;
;BIT4 OVRDVAL = 0
;
No manual Previous result
Automatic Previous result save when
MULT/ACCUA0 is loaded
Overflow flag remains ON until overflow
condition exist
The value of MACRES is the calculation
result
MACPREV is the Addition Source
Mul Operation = MACAxMACB
;BIT3:2 ADDSRC = 10
;BIT1:0 MULCMD = 00
;**Clear the MULT/ACCU registers content
DW
0FFFFH
;END OF TABLE
MOV
MACCTRL2,#0A0H
;** COMPUTE Yn...
COMPUTEFIR: MOVMACB1,@R1
;Put a given Coefficient into
;MULT/ACCUB
INC
R1
MOV
INC
MACB0,@R1
R1
MOV
INC
MACA1,@R0 ; Put a given Xn Input into
R0
MOV
MACA0,@R0
;This last instruction load the MACPREV register for next Operation
INC
R0
DJNZ
R7,COMPUTEFIR ;Do the Computation for N taps
_________________________________________________________________________________________________
www.ramtron.com page 22 of 76
VMX51C1016
TABLE 39: (TL0) TIMER 0 LOW BYTE - SFR 8AH
VMX51C1016 Timers
7
6
5
4
3
2
2
2
2
1
1
1
1
0
0
0
0
TL0 [7:0]
The VMX51C1016 includes three general-
purpose timer/counters
TABLE 40: (TH0) TIMER 0 HIGH BYTE - SFR 8CH
7
6
5
4
3
TH0 [7:0]
o
o
o
Timer 0
Timer 1
Timer 2
TABLE 41: (TL1) TIMER 1 LOW BYTE - SFR 8BH
7
6
5
4
3
TL1 [7:0]
TABLE 42: (TH1) TIMER 1 HIGH BYTE - SFR 8DH
7
6
5
4
3
Timer 0 and Timer 1 are general purpose timers
that can operate as either a timer with a clock
rate based on the system clock, or an event
counter that monitors events occurring on an
external timer input pin (T0IN for Timer 0 and
T1IN for Timer 1).
TH1 [7:0]
With the exception of their associated interrupts,
the configuration and control of timers 0 and 1
are performed via the TMOD and TCON SFR
registers.
Timers 0 and 1 are similar to standard 8051
timers. In addition to operating as a timer based
on a system clock or as an event counter, Timer
2 is also the heart of the PWM counter outputs
and the compare and capture units.
The following table shows the TCON special
function register of the VMX51C1016. This
register contains the Timer 0/1 overflow flags,
Timer 0/1 run control bits, INT0 edge flags and
INT0 interrupt type control bits.
Each of the VMX51C1016’s timers has a
dedicated interrupt vector, which can be
triggered when the timers overflow.
TABLE 43: (TCON) TIMER 0, TIMER 1 TIMER/COUNTER CONTROL - SFR 88H
7
6
TR1
5
TF0
4
TR0
TF1
3
-
2
-
1
IE0
0
IT0
Timer 0 and Timer 1
Bit
7
Mnemonic
TF1
Function
Timer 1 overflow flag.
Set by hardware when Timer 1 overflows.
It is automatically cleared when the
Timer 1 interrupt is serviced.
This flag can also be cleared by software.
Timer 1 Run control bit.
TR1 = 0, Stop Timer 1
TR1 = 1, Start Timer 1
Timer 0 overflow flag.
Set by hardware when Timer 0 overflows.
It is automatically cleared when the
Timer 0 interrupt is serviced.
This flag can also be cleared by software.
Timer 0 Run control bit.
Timer 0 and Timer 1 are similar in their structure
and operation. The main differences between
them is that the Timer 1 serves as a baud rate
generator for UART0 and shares some of its
resources when Timer 0 is used in Mode 3.
6
5
TR1
TF0
Timer 0 and Timer 1 each consist of a 16-bit
register, for which content is accessible as two
independent SFR registers: TLx and THx.
4
TR0
TR0 = 0, Stop Timer 0
TR0 = 1, Start Timer 0
3
2
1
-
-
Reserved
Reserved
IE0
INT0 edge flag configuration
Set by hardware when falling edge on
external pin INT0 is observed.
It is cleared when interrupt is processed.
INT0 interrupt event type control bit.
0
IT0
IT0 = 0,
interrupt will be caused by
a Low Level on INT0
IT0 = 1,
Interrupt will be caused by a
High to Low transition on INT0.
_________________________________________________________________________________________________
www.ramtron.com page 23 of 76
VMX51C1016
The TMOD register is used mainly to set the
timers’ operating mode and allows the user to
enable the external gate control as well as select
a timer or counter operation.
Timer 0, Timer 1 Gate Control
Gate control makes it possible for an external
device to control the Timer 0 operation through
the interrupt (INT0) pins.
TABLE 44: (TMOD) TIMER MODE CONTROL - SFR 89H
7
-
6
CT1
5
M11
4
M01
When the GATE0 and TR0 bits of the TMOD
register are set to 1:
3
2
CT0
1
M10
0
M00
GATE0
Bit
7
Mnemonic
Reserved
CT1
Function
Selects TIMER1 Operation.
CT1 = 0, Sets the Timer 1 as a Timer
which value is incremented
by SYSCLK events.
o
o
INT0 = Logic low, Timer 0 stops
INT0 = Logic high, Timer 0 runs
When the gate bit equals 0, the logic level
presented at the INT0 pin has no affect on the
Timer 0 operation.
CT1 = 1, The Timer 1 operates as a
counter which counts the
High to Low transition on
that occurs on the T1IN
Gate control is not possible on Timer 1 because
the INT1 is not pinned out and an internal pull-
up resistor keeps its level high.
input.
5
4
3
M11
M01
GATE0
Selects mode for Timer/Counter 1, as
shown in the Table below.
GATE0 = 0,
The level present on the INT0 pin has
no affect on Timer1 operation.
FIGURE 15: TIMER 0, TIMER 1 CTX & GATE CONTROL
SYSCLK
÷12
GATE0 = 1,
The level of INT0 pin serves as a Gate
control on to Timer/Counter operation
provided the TR1 bit is set. Applying a
Low Level on the INT0 pin makes the
Timer stop.
0
1
CT0=0
CT0=1
CLK
T0IN
TR0
2
CT0
Selects Timer 0 Operation.
CT1 = 0, Sets the Timer 0 as a Timer
which value is incremented
by SYSCLK events.
GATE0
INT0
CT1 = 1, The Timer 0 operates as a
counter which counts the
High to Low transition on
that occurs on the T1IN
input.
1
0
M10
M00
Selects mode for Timer/Counter 0, as
shown in the Table below.
SYSCLK
÷12
0
1
CT1=0
CT1=1
CLK
Timer 0/Timer 1/Counter Operation
T1IN
TR1
The CT0 and CT1 bits of the TMOD register
control the clock source for Timer 0 and Timer 1,
respectively. When the CT bit is set to 0 (timer
mode), the timer is sourced from the system
clock divided by 12.
Setting the CTx bit to 1 configures the timer to
operate in event counter mode. In this mode,
high to low transitions on the TxIN pin of the
VMX51C1016 increment the timer value.
Note that when Timer 0 and Timer 1 operate in
timer mode, they use the system clock as their
source. Therefore, configuring the CLKDIVCTRL
register will affect the timers’ operation.
_________________________________________________________________________________________________
www.ramtron.com page 24 of 76
VMX51C1016
Timer 0, Timer 1 Operation Modes
Timers 0, Timer 1: Mode 0 - Overflow Rate (Hz)
CTx = 0
The operating mode of Timer 0 and Timer 1 is
determined by the value of the M1x and M0x bits
in the TMOD register. The table below
summarizes the four modes of operation for
timers 0 and 1.
Timer overflow rate (Hz) =
fSYSCLK_________
12 x [8192-(THx, TLx)]
CTx = 1
Timer overflow rate (Hz) =
fTxIN_________
[8192-(THx,TLx)]
TABLE 45: TIMER/COUNTER MODE DESCRIPTION SUMMARY
M1 M0
Mode
Function
0
0
Mode 0
13-bit Timer / Counter, with 5
lower bits in TL0 or TL1 register
and bits in TH0 or TH1 register
Mode 1 (16-bit)
(for timer
0
and timer 1,
The Mode 1 operation is the same for Timer 0
and Timer 1. In Mode 1, the timer is configured
as a 16-bit counter. Besides rollover at FFFFh,
Mode 1 operation is the same as Mode 0.
respectively). The 3 high order
bits of TL0 and TL1 are held at
0.
0
1
1
0
Mode 1
Mode 2
16-bit Timer / Counter
8-bit auto reload Timer /
Counter. The reload value is
kept in TH0 or TH1, while TL0
or TL1 is incremented every
machine cycle. When TLx
overflows, a value from THx is
copied to TLx.
If Timer 1 M1 and M0 bits are
set to 1, Timer 1 stops. If Timer
0 M1 and M0 bits are set to 1,
FIGURE 16 : TIMER 0 MODE 0 & MODE 1
SYSCLK
÷12
TH0
4
0
1
CT0=0
CT0=1
0
7
CLK
1
1
Mode 3
Mode = 0
P3.2-T0IN
Mode = 1
Timer
0
acts
as
two
/
TR0
independent 8-bit Timers
Counters.
TL0
GATE0
0
7
INT0
Mode 0, 13-bit Timer/Counter
TF0
INT
FIGURE 17: TIMER 1 MODE 0 & MODE 1
Mode 0 operation is the same for Timer 0 and
Timer 1.
SYSCLK
÷12
TH1
4
0
1
CT1=0
CT1=1
0
7
CLK
In Mode 0, the timer is configured as a 13-bit
counter that uses bits 0-4 of the TLx register and
all 8 bits of the THx register. The timer run bit
(TRx) of the TCON SFR starts the timer. The
value of the CTx bit defines if the timer will
operate as a timer (CTx = 0), deriving its source
from the system clock, or if the timer will count
the high to low transitions (CTx = 1) that occur
on the external timer input pin (TxIN). When the
13-bit count increments from 1FFFh (all ones) to
all zeros, the TF0 (or TF1) bit will be set in the
TCON SFR.
Mode = 0
P3.5-T1IN
TR1
Mode = 1
0
TL1
7
TF1
INT
To UART0
The Timer 0 and Timer 1 overflow rate in Mode
can be calculated using the following
1
equations:
Timers 0, Timer 1: Mode 1 - Overflow Rate (Hz)
CTx = 0
The state of the upper 3 bits of the TLx register
is indeterminate in Mode 0 and must be masked
when the software evaluates the register’s
contents.
Timer overflow rate (Hz) =
CTx = 1
fSYSCLK_________
12 x [65536-(THx, TLx)]
Timer overflow rate (Hz) =
fTxIN_________
[65536-(THx, TLx)]
_________________________________________________________________________________________________
www.ramtron.com page 25 of 76
VMX51C1016
Mode 2 (8-bit)
Using the Timer 1 as Baud Rate generator
Using Timer 1 in Mode 2 is recommended as the
best approach when using Timer 1 as the
UART0 baud rate generator.
The operation of Mode 2 is the same for Timer 0
and Timer 1. In Mode 2, the timer is configured
as an 8-bit counter, with automatic reload of the
start value. The LSB of the timer register, TLx, is
the counter itself and the MSB portion of the
timer (THx) stores the timer reload value.
Mode 3 (2 x 8-bit)
In Mode 3, Timer 0 operates as two 8-bit
counters and Timer 1 stops counting and holds
its value.
The Mode 2 counter control is the same as for
Mode 0 and Mode 1. However, in Mode 2, when
TLx rolls over from FFh, the value stored in THx
is reloaded into TLx.
FIGURE 20: TIMER0, TIMER 1 STRUCTURE IN MODE 3USING
TH0
0
7
CLK
FIGURE 18 : TIMER 0 MODE 2
TR1
SYSCLK
÷12
TF1
INT
TL0
0
1
CT0 = 0
CT0 = 1
To UART0
0
7
SYSCLK
÷12
CT0 = 0
CT0 = 1
0
1
TL0
0
7
P3.2 - T0IN
CLK
P3.2-T0IN
0
7
TH0
TF0
TR0
GATE0
INT0
TR0
TF0
INT
GATE0
INT
INT0
The Timer 0 overflow rate in Mode 3 can be
calculated using the following equations:
FIGURE 19: TIMER 1 MODE 2
Timers 0, Timer 1: Mode 3 - Overflow Rate (Hz)
TH0, CTx = 0 or 1
SYSCLK
÷12
TL1
0
1
CT1 = 0
CT1 = 1
0
7
Timer overflow rate (Hz) =
fSYSCLK_____
12 x 256
P3.5 - T1IN
TL0, CTx = 0
0
7
TH1
TF1
Timer overflow rate (Hz) =
fSYSCLK_____
12 x 256
TR1
INT
TL0, CTx = 1
To UART0
Timer overflow rate (Hz) =
__
f
TxIN_____
256
The Timer 0 and Timer 1 overflow rate in Mode
can be calculated using the following
2
equations:
In Mode 3, the values present in the TH1 and
TL1 registers and CT1 control bits have no
impact on the timer operation.
Timers 0, Timer 1: Mode 2 - Overflow Rate (Hz)
CTx = 0
Timer overflow rate (Hz) =
fSYSCLK_________
12 x [256-(THx)]
CTx = 1
Timer overflow rate (Hz) =
__ fTxIN________
[256--(THx)]
_________________________________________________________________________________________________
www.ramtron.com page 26 of 76
VMX51C1016
/*------------------------*/
/*Put Interrupt code here*/
/*------------------------*/
Timer 0 and Timer 1 Interrupts
IEN0 |= 0x80;
}
// Enable all interrupts
Timer 0 and Timer 1 each have dedicated
interrupt vectors located at:
//---------------------------------------------------------------------------
Setting Up Timer 1 Examples
o
o
000Bh for the Timer 0
001Bh for the Timer 1
The following code provides an example of how
to configure Timer 1 (the first part of the code is
the interrupt setup and module configuration,
while the second part is the interrupt function).
The natural priority of Timer 0 is higher than that
of Timer 1.
Example1: Delay function
The following table summarizes the interrupt
control and flag bits associated with the Timer 0
and Timer 1 interrupts.
//-------------------------------------------------------------------------
// Sample C code using the Timer 1: Delay function
//-------------------------------------------------------------------------
VOID DELAY1MS(UNSIGNED CHAR DLAIS) {
IDATA UNSIGNED CHAR X=0;
Bit Name
Location
Description
TMOD = 0X10;
TL1 = 0X33;
TH1 = 0XFB;
;//TIMER1 RELOAD VALUE FOR
TCON = 0X40;
EA
IEN0.7
General interrupt control bit
0, Interrupt Disabled
1, Enabled Interrupt active
Timer 0 Overflow Interrupt
1 = Enable
0 = Disable
Timer 1 Overflow Interrupt
1 = Enable
0 = Disable
TF0 Flag is set when Timer 0
Overflow occurs.
Automatically cleared when
Timer 0 interrupt is serviced.
This flag can also be cleared
by software
T0IE
T1IE
TF0
IEN0.1
IEN0.3
TCON.5
WHILE (DLAIS > 0)
{
DO{
X=TCON;
X= X&0X80;
}WHILE(X==0);
TCON = TCON&0X7F;
TL1 = 0X33;
TH1 = 0XFB;
;//TIMER1 RELOAD VALUE FOR
DLAIS = DLAIS-1;
}
}//END OF DELAY 1MS
TF1
TCON.7
TF1 Flag is set when Timer 1
Overflow occurs.
Example2: Timer 1 interrupt example
Automatically cleared when
Timer 1 interrupt is serviced.
This flag can also be cleared
by software
//-------------------------------------------------------------------------
// Sample C code using the Timer 1: Interrupt
//-------------------------------------------------------------------------
// (…) PROGRAM INITIALIZATION OMITTED
at 0xo100 void main(void){
// TIMER 1 setup
IEN0 |= 0x80;
IEN0 |= 0x08;
TMOD = 0x20;
TCON = 0x40;
TL1 = 0xFC;
// Enable all interrupts
// Enable interrupt Timer1
// Timer 1 mode 2
// Start Timer 1
Setting Up Timer 0 Example
To use Timer 0, first setup the interrupt and then
configure the module. This is described in the
following code example.
// Timer1 offset
do {
}while(1);
//Wait Timer 1 interrupt
}//end of main() function
//----------------------------------------
// Timer 1 Interrupt function
//----------------------------------------
void int_timer_1 (void) interrupt 3
{
Sample C code to set up Timer 0:
//---------------------------------------------------------------------------
// Sample C code to setup Timer 0
//---------------------------------------------------------------------------
// (…) PROGRAM INITIALIZATION OMITTED
IEN0 &= 0x7F;
// Disable all interrupts
// Enable all interrupts
AT 0X0100 VOID MAIN(VOID){
/* Put Interrupt code here*/
// INTERRUPT + TIMER 0 SETUP
IEN0 |= 0X80;
IEN0 |= 0X02;
TMOD = 0X02;
TCON = 0X10;
// ENABLE ALL INTERRUPTS
// ENABLE INTERRUPT TIMER 0
// TIMER 0 MODE 2
IEN0 |= 0x80;
}
// START TIMER 0
DO{}WHILE(1);
//WAIT FOR TIMER 0 INTERRUPT
}//END OF MAIN()
//---------------------------------------------------------------------------
// INTERRUPT FUNCTION
VOID INT_TIMER_0 (VOID) INTERRUPT 1
{
IEN0 &= 0X7F;
// DISABLE ALL INTERRUPTS
_________________________________________________________________________________________________
www.ramtron.com page 27 of 76
VMX51C1016
The T2CON register controls:
Timer 2
The VMX51C1016 Timer 2 and its associated
peripherals include the following capabilities:
o
o
o
o
T2 clock source prescaler
T2 count size (8/16-bits)
T2 reload mode
o
o
o
o
16-bit timer
T2 input selection
16-bit auto-reload timer
Compare and capture units
8/16 PWM outputs
TABLE 50: (T2CON) TIMER 2 CONTROL REGISTER -SFR C8H
7
6
5
4
T2PS
T2PSM
T2SIZE
T2RM1
3
2
1
0
TABLE 46: (TL2) TIMER 2, LOW BYTE - SFR CCH
T2RM0
T2CM
T2IN1
T2IN0
7
6
5
4
3
2
2
1
1
0
0
TL2 [7:0]
Bit
7
Mnemonic Function
T2PS
TABLE 47: (TH2) TIMER 2, HIGH BYTE - SFR CDH
Prescaler select bit:
7
6
5
4
3
0 = Timer 2 is clocked with 1/12 of
the oscillatory frequency
1 = Timer 2 is clocked with 1/24 of
the oscillatory frequency
0 = Prescaler
1 = clock/2
Timer 2 Size
TH2 [7:0]
Figure 21 shows the Timer 2/compare and
capture unit block diagram. The following
paragraphs will describe how these blocks work.
6
5
T2PSM
T2SIZE
0 = 16-bit
1 = 8-bit
4
3
T2RM1
T2RM0
Timer 2 reload mode selection
0X = Reload disabled
10 = Mode 0
11 = Mode 1
Timer 2 compare mode selection
0 = Mode 0
Timer 2 Registers
Timer 2 consists of a 16-bit register, whose
upper and lower bytes are accessible via two
independent SFR registers (TL2, TH2).
2
T2CM
1 = Mode 1
Timer 2 input selection
00 = Timer 2 stops
TABLE 48: (TL2) TIMER 2 LOW BYTE - SFR CCH
1
0
T2IN1
T2IN0
7
6
5
4
3
2
1
0
TL2 [7:0]
01 = Input frequency f/2, f/12 or f/24
10 = Timer 2 is incremented by
external signal at pin T2IN
11 = Internal clock is gated to the
T2IN input.
TABLE 49: (TH2) TIMER 2 HIGH BYTE - SFR CDH
7
6
5
4
3
2
1
0
TH2 [7:0]
Timer 2 Control Register
Most of Timer 2’s control is accomplished via the
T2CON register located at SFR address C8h.
_________________________________________________________________________________________________
www.ramtron.com page 28 of 76
VMX51C1016
FIGURE 21: TIMER 2 AND COMPARE/CAPTURE UNIT
CCH3
COCAH3
Capture
10
COCAH3
Enable
Capture
Sync
T2IN
Data
Latch
Comp
eCOCAH3
CCL3
CCH2
Compare
16-bit
Comparator
11
01
COCAH2
COCAH2
Enable
Capture
Capture
Comp
Data
Latch
eCOCAH2
Compare
÷2
16-bit
Comparator
1
0
T2INxx
CCL2
CCH1
SYSCLK
T2EX
COCAH1
Enable
Capture
Comp
Data
Latch
÷2
1
0
eCOCAH1
Capture
÷12
16-bit
Comparator
T2SIZE
00
Compare
COCAH0
Enable
COCAH1
Capture
Comp
T2PSM
Sync
Data
Latch
Timer 2
CCL1
CRCH
eCOCAH0
T2PS
COCAH0
Compare
Capture
16-bit
Comparator
TL2
TH2
Reload
Compare
C
COCAH0
Data
Latch
Reload
CRCL
INPUT/OUTPUT Control
T2IF
T2EXIF
T2EXIE
INTCOMP3
P1.0-PWM0
P1.1-PWM1
P1.2-PWM2
P1.3-PWM3
CCU0
CCU1
CCU2
INTCOMP2
INTCOMP1
INTCOMP0
Interrupt Request
Timer 2 Clock Sources
Timer 2 Operating Modes
As previously stated, Timer 2 can operate in
timer mode, in which case it derives its source
from the system clock (SYSCLK), or it can be
configured as an event counter where the high
to low transition on the T2IN input causes Timer
2 to increment.
When the T2IN1 bit is set to 0 and the T2IN0 bit
is set to 1, the Timer 2 register may or may not
derive its source from the internal pre-scaled
clock, depending on the T2PSM bit value.
Event Counter Mode
When operating in event counter mode, the
timer is incremented as soon as the external
signal T2IN transitions from a 1 to a 0. A sample
of the T2IN input is taken at every machine
cycle. Timer 2 is incremented in the cycle
following the one in which the transition was
detected.
The T2IN0 and T2IN1 bits of the T2CON register
serve to define the selected Timer 2 input and
the operating mode (see the following table):
TIMER 2 CLOCK SOURCE
T2IN1 T2IN0
Selected Timer 2 input
Timer 2 Stop
0
0
0
1
Standard Timer mode using internal
clock with or without prescaler
Gated Timer Mode
1
1
0
1
External T2IN pin clock Timer2
In the gated timer mode, the internal clock,
which serves as the Timer 2 clock source, is
gated by the external signal T2IN. In other
words, when T2IN is high, the internal clock is
allowed to pass through the AND gate. A low
value of T2IN will disable the clock pulse. This
allows an external device to control the Timer 2
operation or to use Timer 2 to monitor the
duration of an event.
Internal Clock is gated by the T2IN input
When T2IN = 0, the Timer2 stop
When in timer mode, Timer 2 derives its source
from the system clock and the CLKDIVCTRL
register will affect Timer 2’s operation.
Timer 2 Stop
When both the T2IN1 and T2IN0 bits are set to
0, Timer 2 is in STOP mode.
_________________________________________________________________________________________________
www.ramtron.com page 29 of 76
VMX51C1016
Timer 2 Mode 1
Timer 2 Clock Prescaler
In Mode 1, a 16-bit reload from the CRCx
register on the falling edge of T2EX occurs. This
transition will set T2EXIF if T2EXIE is set. This
action will cause an interrupt (providing that the
Timer 2 interrupt is enabled) and the T2IF flag
value will not be affected.
When Timer 2 is configured to derive its clock
source from the system clock, the clock
prescaling value can be controlled by software
using the t2psm and T2PS bits of the T2CON
register.
The different system clock prescaling values are
shown in the table below:
The value of T2SIZE does not affect reload in
Mode 1. Also, the reload operation is performed
independently of the state of the T2EXIE bit.
T2PSM
T2PS
Timer 2 input clock
SYSCLK / 2
1
0
0
X
0
1
SYSCLK / 12
FIGURE 22: TIMER 2 RELOAD MODE
SYSCLK / 24
T2EX
Reload Mode 1
Timer 2 Count Size
Reload Mode 0
T2EXIE
TL2
CRCL
Input
Clock
Timer 2 can be configured to operate in 8-bit or
16-bit format. The T2SIZE bit of the T2CON
register selects the Timer 2 count size.
Data Bus
Data Bus
Data Latch
Data Latch
Reload
Data Bus
TH2
Data Bus
CRCH
o
o
If T2SIZE = 0, Timer 2 size is 16 bits
If T2SIZE = 1, Timer 2 size is 8 bits
EXF2
T2IF
Timer 2 Reload Modes
Timer 2 interrupt
request
The Timer 2 reload mode is selected by the
T2RM1 and T2RM0 bits of the T2CON register.
The following figure shows the reload operation.
Timer 2 Overflows and Interrupts
Timer 2’s interrupt is enabled when the Timer 2
counter, the T2IF flag, is set and a Timer 2
interrupt occurs.
Timer 2 must be configured as a 16-bit
timer/counter for the reload modes to be
operational by clearing the T2SIZE bit.
A Timer 2 interrupt may also be raised from
T2EX if the T2EXIE bit of the IEN1 register is
set.
Timer 2 Mode 0
When the timer overflows, the T2IF overflow flag
is set. Concurrently, this overflow causes Timer
2 to be reloaded with the 16-bit value contained
in the CRCx register, (which has been preset by
software). This reload operation will occur during
the same clock cycle in which T2IF was set.
The exact source of a Timer 2 interrupt can be
verified by checking the value of the T2IF and
T2EXIF bits of the IRCON register.
Timer 2’s interrupt vector is located at address
002Bh.
_________________________________________________________________________________________________
www.ramtron.com page 30 of 76
VMX51C1016
configuration bit is described in the following
table:
Timer 2 Setup Example
To use Timer 2, the user must first set up and
configure the module (see the following code
example).
Bit
Mnemonic Mnemonic
Function
COCAH0
COCAL0
Compare and Capture mode
for CRC register
//---------------------------------------------------------------------------
// Sample C code to setup Timer 2
//---------------------------------------------------------------------------
0
0
0
1
Compare/capture disabled
Capture on a falling edge at
pin CCU0 (1 cycle)
// (…) PROGRAM INITIALIZATION OMITTED
1
1
0
1
Compare enabled (PWM0)
Capture on write operation
into register CRC1
Compare/capture mode for
CC register 1
Compare/capture disabled
Capture on a rising edge at
pin CCU1 (2 cycles)
at 0x100 void main(void){
// TIMER 2 & Interrupt setup
DIGPWREN = 0x80;
// Enable Timer2,
COCAH1
COCAL1
T2CON = 0x01;
TL2 = 0xE0;
TH2 = 0xFF;
// Set timer 2 to OSC/12
0
0
0
1
IEN0 |= 0x80;
IEN0 |= 0x20;
// Enable all interrupts
// Enable interrupt Timer 2
1
1
0
1
Compare enabled (PWM1)
Capture on write operation
into register CCL1
Compare/capture mode for
CC register 2
Compare/Capture disabled
Capture on a rising edge at
pin CCU2 (2 cycles)
Compare enabled (PWM2)
Capture on write operation
into register CCL2
do{
}while(1);
//wait for Timer 2 interrupt
}//end of main()
COCAH2
COCAL2
//---------------------------------------------------------------------------
// Timer 2 Interrupt Function
//---------------------------------------------------------------------------
void int_timer_2 (void) interrupt 5
{
0
0
0
1
IEN0 &= 0x7F;
// Disable all interrupts
1
1
0
1
/*------------------------*/
/*Interrupt code here*/
/*------------------------*/
COCAH3
COCAL3
Compare/Capture mode for
CC register 3
IEN0 |= 0x80;
}
// Enable all interrupts
0
0
1
1
0
1
0
1
Compare/capture disabled
N/A - CCU3 not pinned out
Compare enabled (PWM)
Capture on write operation
into register CCL3
Timer 2 Special Modes
For general timing/counting operations, the
VMX51C1016 Timer 2 includes four compare
and capture units that can be used to monitor
specific events and drive PWM outputs. Each
compare and capture unit provides three specific
operating modes that are controlled by the
CCEN register:
This allows individual configuring and operation
of each compare and capture unit..
Compare/Capture, Reload Registers
Each compare and capture unit has a specific
16-bit register accessible via two SFR
addresses.
o
o
Compare modes enable
Capture on write into CRCL/CCLx
registers
Note that the CRCHx/CRCLx registers
associated with Compare/Capture Unit 0 are the
only ones that can be used to perform a reload
of the Timer 2 operation.
o
Capture on transitions at CCU input pins
level
TABLE 51: (CCEN) COMPARE/CAPTURE ENABLE REGISTER -SFR C9H
7
6
5
4
The following tables describe the different
registers that may be captured or compared to
the value of Timer 2.
COCAH3
COCAL3
COCAH2
COCAL2
3
2
1
0
COCAH1
COCAL1
COCAH0
COCAL0
TABLE 52: (CRCL) COMPARE/RELOAD/CAPTURE REGISTER, LOW BYTE - SFR CAH
7
6
5
4
3
2
1
0
The CCEN register bits are grouped in pairs of
COCAHx/COCALx bits. Each pair corresponds
to one compare and capture unit. The compare
and capture unit operating mode versus the
CRCL [7:0]
TABLE 53: (CRCH) COMPARE/RELOAD/CAPTURE REGISTER, HIGH BYTE - SFR CBH
7
6
5
4
3
2
1
0
CRCH [7:0]
_________________________________________________________________________________________________
www.ramtron.com page 31 of 76
VMX51C1016
TABLE 54: (CCL1) COMPARE/CAPTURE REGISTER 1, LOW BYTE - SFR C2H
The two capture modes are:
7
6
5
4
3
2
1
0
CCL1 [7:0]
Capture Mode 0
TABLE 55: (CCH1) COMPARE/CAPTURE REGISTER 1, HIGH BYTE - SFR C3H
In Capture Mode 0, the transition on a given
CCU pin triggers the latching of Timer 2’s data
into the associated compare/capture register.
7
6
5
4
3
2
1
0
CCH1 [7:0]
TABLE 56: (CCL2) COMPARE/CAPTURE REGISTER 2, LOW BYTE - SFR C4H
7
6
5
4
3
2
1
0
0
0
0
Capture Mode 1
CCL2 [7:0]
In Capture Mode 1, a capture of the Timer 2
value will occur upon writing to the low byte of
the chosen capture register.
TABLE 57: (CCH2) COMPARE/CAPTURE REGISTER 2, HIGH BYTE - SFR C5H
7
6
5
4
3
2
1
CCH2 [7:0]
TABLE 58: (CCL3) COMPARE/CAPTURE REGISTER 3, LOW BYTE - SFR C6H
Note: On the VMX51C1016, the CCU2 and
CCU3 input is not pinned out.
7
6
5
4
3
2
1
CCL3 [7:0]
TABLE 59: (CCH3) COMPARE/CAPTURE REGISTER 3, HIGH BYTE - SFR C7H
FIGURE 23:TIMER 2 CAPTURE MODE 0 FOR CRCL AND CRCH BLOCK DIAGRAM
7
6
5
4
3
2
1
Write to CRCL, CCLx
CCUx Pin
CCH3 [7:0]
Capture
Mode 0
Capture
Mode
1
TL2
CRCL / CCLx
Compare/Capture Data Line Width
Data Bus
Data Bus
Input
The VMX51C1016 is capable of comparing and
capturing data using data lines up to 16 bits
wide. When comparing two registers or
capturing one register, the T2SIZE bit of the
T2CON register must be set to 1. This adjusts
the line width to 8 bits.
Clock
Data Latch
Reload
Data Latch
Data Bus
TH2
Data Bus
T2IF
Timer 2 interrupt
request
CRCH / CCHx
The capture modes can be especially useful for
external event duration calculations with the
ability to latch the timer value at a given time
(computation can be performed at a later time).
When comparing two pairs of registers, for
example, CCH1 and CCL1 to TH2 and TL2, the
T2SIZE bit must be set to 0. This adjusts the line
width to 16 bits.
When operating in capture mode, the compare
and capture units do not affect the
VMX51C1016 interrupts.
Timer 2 Capture Modes
Timer 2 capture modes makes it possible to
acquire and store the 16-bit content of Timer 2
into a capture/compare registers following a
MOV SFR operation or the occurrence of an
external event on one of the CCU pins, as
described below:
Timer 2 Compare Modes
In compare mode, a Timer 2 count value is
compared to a value that is stored in the
CCHxx/CCLx or CRCHx/CRCLx registers. If the
values compared match (i.e. when the pulse
changes state), a compare/capture interrupt is
generated, if enabled. Varying the value of the
CCHx/CCLx or the CRCHx/CRCLx allows a
variation of the rectangular pulse generated at
the output. This variation can be used to perform
pulse width modulation. (See PWM in the
following section.)
Capture input
CCU0
Timer2 Capture triggering event
High to Low Transition on CCU0
Low to High Transition on CCU1
Low to High Transition on CCU2
CCU1
CCU2
Timer 2 capture is done without affecting the
Timer 2 operation.
Each individual compare and capture unit can
be configured for capture mode by configuring
the appropriate bit pair of the CCEN register.
To activate the compare mode on one of the
four compare and capture units, the associated
_________________________________________________________________________________________________
www.ramtron.com page 32 of 76
VMX51C1016
Compare Mode 1
COCAHx bit must be set to 1 and the associated
COCALx bit must be set to 0.
When a given compare capture unit is operating
in Mode 1, any write operations to the
corresponding output register of the port P1.x
(x=0 to3) will not appear on the physical port pin
until the next compare match occurs.
When compare mode is enabled, the
corresponding output pin value is controlled by
the internal timer circuitry.
Like Compare Mode 0, the compare signal in
Mode 1 can also generate an interrupt (if
enabled).
On the VMX51C1016, two compare modes are
possible. In both modes, the new value arrives
at Port Pin 1 in the same clock cycle as the
internal compare signal is activated. The T2CM
of the T2CON register defines the compare
mode and is described below:
The figure below shows the operating structure
of a given capture and compare unit operating in
Compare Mode 1.
Compare Mode 0
FIGURE 25: TIMER 2 COMPARE MODE 1 BLOCK DIAGRAM
A functional diagram of Compare Mode 0 is
shown below. A comparison is made between
the 16-bit value of the compare/capture
registers and the TH2, TL2 registers. When the
Timer 2 value exceeds the value stored in the
CRCH, CRCL/CCHx and CCLx registers, a high
CRCL,
CRCH,
CCHX
CCLX
Compare
Signal
COMPxINT
Interrupt
compare
signal
is
generated
and
a
Comparator
compare/capture interrupt is activated if
enabled. If T2SIZE = 1, the comparison is made
between the TL2 and CRCL/CCLx registers.
Shadow Register
Port Register
Data
TH2
TL2
Latch
Circuit
Timer 2
This compare signal is then propagated to the
corresponding P1.x Pin(s) and to the associated
COMPINTx interrupt (if enabled). The
corresponding P1.x pin is reset when a Timer 2
overflow occurs.
Output Register
Overflow
Timer 2
Interrupt
P1.0-
PWM0
P1.1-
P1.2-
P1.3-
PWM1 PWM2
PWM3
Timer 2 Compare Mode Interrupt
FIGURE 24: TIMER 2 COMPARE MODE 0 BLOCK DIAGRAM
Configuration of the compare and capture units
for the “Compare Mode” through the CCEN
register impacts on the interrupt structure of the
VMX51C1016. In that specific mode each
compare and capture unit controls one interrupt
line.
CRCH,
CCHX
CRCL,
CCLX
Compare
Signal
When using the PWM output device, care must
be exercised to avoid other peripheral interrupts
from being blocked by this mechanism.
COMPxINT
Interrupt
Comparator
Set
Register
TH2
TL2
Timer 2
Overflow
Reset
Register
Timer 2
Interrupt
P1.1-
PWM1
P1.2-
PWM0 PWM0
P1.3-
P1.0-
PWM0
_________________________________________________________________________________________________
www.ramtron.com page 33 of 76
VMX51C1016
mode). As long as the value present in the
compare and capture register is greater than the
Timer 2 value, the compare unit will output a
logic low.
FIGURE 26: COMPARE AND CAPTURE UNIT INTERRUPT CONTROL
COMPINT0
Interrupt
1
Interrupt Vector
0053h
SPI Rx &
RxOV INT
0
CCEN(1,0)
= 1,0
When the value of Timer 2 equals the value of
the compare and capture register, the compare
unit will change from a logic low to a logic high.
COMPINT1
Interrupt
1
0
Interrupt Vector
005Bh
I2C INT
CCEN(3,2)
= 1,0
COMPINT2
Interrupt
1
Interrupt Vector
0063h
The clock source for the PWM is derived from
Timer 2, which is incremented at every signal
pulse of the appropriate source. The source is
selected by the T2IN1 and T2IN0 bits of the
T2CON register.
MAC
Overflow INT
0
CCEN(5,4)
= 1,0
COMPINT3
Interrupt
1
Interrupt Vector
006Bh
ADC & Port
Change INT
0
CCEN(7,6)
= 1,0
The T2SIZE bit of the T2CON register allows
configuring the PWM output for 8 or 16-bit
operation. The Timer 2 size affects all the PWM
outputs.
Using Timer 2 for PWM Outputs
Configuring the compare and capture units in
Compare Mode 0 allows PWM output generation
on the Port1 I/O pins. This mode can be used for
PWM applications, such as:
When the Timer 2 size is 8 bits, the comparison
is performed between Timer 2 and the LSB of
the compare and capture unit register. The
resulting PWM resolution is 8 bits.
o
o
o
D/A conversion
Motor control
Light control, etc.
When the Timer 2 size is configured for a 16-bit
operation, the comparison is performed between
Timer 2 and the contents of the entire compare
and capture unit register. The resulting PWM
resolution is 16 bits, but the PWM frequency is
consequently low.
When a specific compare and capture unit is
configured for this mode, its associated I/O pin is
reserved for this operation only and any write
operations to the associated I/O pin of the P1
register will have no affect.
When the system clock is used as the Timer 2
clock source, the PWM output frequency equals
the Timer 2 overflow rate. Note that the
CLKDIVCTRL register content affects the Timer
The following table shows the association
between the compare and capture units,
associated registers and I/O pins.
2
operation and, thus, the PWM output
frequency.
TABLE 60: COMPARE AND CAPTURE UNIT PWM ASSOCIATION
Compare
Capture
Unit
Registers
I/O pin
T2CON
T2PSM
T2CON
T2PS
X
T2CON
T2SIZE
0
1
1-8
0-16
1-8
0-16
Freq
PWM
Fosc
14.74MHz
1
1
0
0
0
0
112.5Hz
28.8KHz
4.8KHz
18.8Hz
2.4KHz
9.38Hz
0
1
2
3
CRCH / CRCL
CCH1 / CCL1
CCH2 / CCL2
CCH3 / CCL3
P1.0
P1.1
P1.2
P1.3
x
0-12
0-12
1-24
1-24
PWM signal generation is derived from the
comparison result between the values stored in
the compare and capture registers and the
Timer 2 value.
When a digital value is written into one of the
compare and capture registers, a comparison is
performed between this register and the Timer 2
value (providing that Timer 2 is in compare
_________________________________________________________________________________________________
www.ramtron.com page 34 of 76
VMX51C1016
The duty cycle of the PWM output is proportional
to the ratio of the compare and capture unit
register’s content versus Timer 2’s maximum
number of cycles before overflow: 256 or 65536
depending on the T2SIZE bit value.
Using the PWM as a D/A Converter
One of the popular uses of the PWM is to
perform D/A conversion by low pass filtering its
modulated square wave output. The greater the
duty cycle of the square wave, the greater the
DC value is at the output of the low pass filter
and vice versa.
PWM Duty Cycle Calculation: 8-bit
PWM duty cycle CCU0 (%) = 100% x
PWM duty cycle CCU1-3 (%) = 100% x
(256-CRCL)_
256
Variations in the duty cycle of the PWM when
filtered can therefore generate arbitrary
waveforms.
(256-CCLx)_
256
PWM Duty Cycle Calculation: 16-bit
PWM duty cycle CCU0 (%) = 100% x 65536–(CRCH, CRCL)
(CRCH, CRCL)
PWM duty cycle CCU1-3 (%) = 100% x 65536–(CRCH, CRCL)
(CRCH, CRCL)
PWM Configuration Example
The following example shows how to configure
the Timer 2 based PWM in 8-bit mode.
(…)
DIGPWREN = 0x80;
T2CON = 0x61;
//ENABLE TIMER 2 MODULE
//BIT 7 - Select 0=1/12, 1=1/24 of Fosc
//BIT 6 - T2 clk source: 0 = Presc,
1=clk/2
//BIT 5 - T2 size: 0=16-bit, 1=8-bit
//BIT 4,3 - T2 Reload mode:
//BIT 2 - T2 Compare mode
//BIT 1,0 - T2 input select: 01= input
derived from osc.
//WHEN THE PWM IS CONFIGURED IN 16-BIT FORMAT, THE PWM OUTPUT
FREQUENCY IS GIVEN BY //THE FOLLOWING EXPRESSION:
// PWM Freq = [(FOSC/2)] / 65536
// WITH A 14.7456MHZ CRYSTAL PWM FREQUENCY = 112.5HZ
//When the PWM is configured in 8-bit its output freq = [(Fosc/2)] / 256
//USING A 14.7456MHZ CRYSTAL PWM FREQUENCY = 28.8KHZ
CCEN = 0x0AA;
//Enable Compare on 4 PWM outputs
// In 16-bit PWM resolution both LSB and MSB of compare unit are used
//In 8-bit PWM Resolution, only the LSB of compare units are used
// and MSB is kept to 00h
CRCL = 0x0E6;
x100%
//PWM0 duty = [(256-CRCL)/256]
CRCH = 0x000;
CCL1 = 0x0C0;
x100%
//E6h => 10.1%
//PWM1 duty = [(256-CCL1)/256]
CCH1 = 0x000;
CCL2 = 0x080;
CCH2 = 0x000;
CCL3 = 0x033;
CCH3 = 0x000;
P1PINCFG = 0x0F;
//C0h => 25%
//PWM2 duty = [(256-CCL2)/256] x100%
//80h => 50%
//PWM3 duty = [(256-CCL3)/256] x100%
//33h => 80%
//Configure P1 LSQ as output to enable
PWM
(…)
_________________________________________________________________________________________________
www.ramtron.com page 35 of 76
VMX51C1016
UART0 Control Register
Serial UART Interfaces
UART0 configuration is performed mostly via the
S0CON SFR register located at address 98h.
The VMX51C1016 includes two serial UART
interface ports (UART0 and UART1). Each serial
port has a 10-bit timer devoted to baud rate
generation.
TABLE 62: (S0CON) SERIAL PORT 0, CONTROL REGISTER - SFR 98H
7
6
5
4
Both serial ports can operate in full duplex
asynchronous mode. The VMX51C1016 also
includes a double buffer, enabling the UART to
accept an incoming word before the software
has read the previous value.
S0M0
S0M1
MPCE0
R0EN
3
2
1
T0I
0
R0I
T0B8
R0B8
Bit
7
6
Mnemonic Function
S0M0
S0M1
MPCE
Sets Serial Port Operating Mode
See Table
1 = Enables the multiprocessor
communication feature.
UART0 Serial Interface
5
4
3
R0EN
T0B8
1 = Enables serial reception.
Cleared by software to disable
reception.
The operation of the UART0 on the
VMX51C1016 is similar to a standard 8051
UART.
The 9th transmitted data bit in Modes
2 and 3. Set or cleared by the CPU,
depending on the function it
performs (parity check,
UART0 can derive its clock source from a 10-bit
dedicated baud rate generator or from the Timer
1 overflow.
multiprocessor communication etc.)
In Modes 2 and 3, it is the 9th data bit
received. In Mode 1, if sm20 is 0,
RB80 is the stop bit. In Mode 0, this
bit is not used. Must be cleared by
software.
Transmit interrupt flag set by
hardware after completion of a serial
reception. Must be cleared by
software.
2
R0B8
UART0 transmit and receive buffers are
accessed through
(S0BUF).
a unique SFR register
1
0
T0I
R0I
UART0 S0BUF has a double buffering feature
on reception, which allows the UART to accept
an incoming word before the software has read
the previous value from the S0BUF.
Receive interrupt flag set by
hardware after completion of a serial
reception. Must be cleared by
software.
TABLE 61: (S0BUF) SERIAL PORT 0, DATA BUFFER - SFR 99H
UART0 Operating Modes
7
6
5
4
3
2
1
0
S0BUF [7:0]
UART0 can operate in four distinct modes,
which are defined by the SM0 and SM1 bits of
the S0CON register (see the following table):
TABLE 63: SERIAL PORT 0 MODES
SM0 SM1 MODE
DESCRIPTION BAUD RATE
0
0
1
1
0
1
0
1
0
1
2
3
Shift Register
8-bit UART
9-bit UART
9-bit UART
Fosc/12
Variable
Fclk/32 or /64
Variable
**Note that the speed in mode 2 depends on SMOD bit in the Special
Function Register PCON when SMOD = 1 fclk/32
_________________________________________________________________________________________________
www.ramtron.com page 36 of 76
VMX51C1016
UART0 - Mode 0
UART0 - Baud Rate Generator Source
In this mode, pin RX0 is used as an input and an
output, while TX0 is used only to output the shift
clock. For an operation in this mode, 8 bits are
transmitted with the LSB as the first bit. In
addition, the baud rate is fixed at 1/12 of the
crystal oscillator frequency. In order to initialize
reception in this mode, the user must set bits
R0I and R0EN in the S0CON register to 0 and 1,
respectively. Note that in other modes, when
R0EN=1, the interface begins to receive data.
As mentioned previously, the UART0 baud rate
clock can be sourced from either Timer 1 or the
10-bit dedicated baud rate generator
Selection between these two clock sources is
enabled via the BAUDSRC bit of the U0BAUD
register (see the following table).
TABLE 64: (U0BAUD) UART0 BAUD RATE SOURCE SELECT - SFR D8H
7
6
-
5
-
4
-
3
-
2
-
1
-
0
-
BAUDSRC
UART0 - Mode 1
7
BAUDSRC Baud rate generator clock source
0 = Timer 1
In this mode, the RX0 pin serves uniquely as an
input and the TX0 pin serves as a serial output
and no external shift clock is used. In Mode 0,
10 bits are transmitted:
1 = Use UART0 dedicated baud rate
generator
-
,6:0
-
o
o
o
One*** Start bit (active low)
8 bits of data starting with the LSB;
One logical high Stop bit
The Start bit synchronizes data reception with
the 8 bits of received data available in the
S0BUF register. Reception is complete once the
Stop bit sets the R0B8 flag in the S0CON
register.
UART0 - Mode 2
In this mode, the RX0 pin is used as an input
and as an output, while the TX0 pin is used to
output the shift clock. In Mode 2, 11 bits are
transmitted or received. These 11 bits consist of:
o
o
o
o
One logic low Start bit
8 bits of data (LSB first)
One programmable 9th bit
One logic high Stop bit
th
The 9 bit is used for parity. In the case of data
transmission, bit TB80 of the S0CON is output
as the 9th bit. For reception, the 9th bit is
captured in the RB80 bit of the S0CON register.
UART0 - Mode 3
Mode 3 is essentially identical to Mode 2, the
difference being that in Mode 3, the internal
baud rate generator or Timer 1 can be used to
set the baud rate.
_________________________________________________________________________________________________
www.ramtron.com page 37 of 76
VMX51C1016
Using the UART0 dedicated baud rate generator
frees up Timer 1 for other uses.
Timer 1 can also be used as the baud rate
generator for the UART0. Set BAUDSRC to 0
and assign Timer 1’s output to UART0.
The S0RELH and S0REL registers are used to
store the 10-bit reload value of the UART0 baud
rate generator.
When the baud rate clock source is derived from
Timer 1, the baud rate and the timer reload
values can be calculated using the following
formulas (examples follow):
TABLE 65: (S0RELL) SERIAL PORT 0, RELOAD REGISTER, LOW BYTE - SFR 96H
7
6
5
4
3
2
1
0
TABLE 69: EQUATION TO CALCULATE BAUD RATE FOR SERIAL 0
Serial 0: mode 1 and 3
S0RELL [7:0]
Mode 1: ForU0BAUD.7=0 (standard mode)
TABLE 66: (S0RELH) SERIAL PORT 0, RELOAD REGISTER, HIGH BYTE - SFR 97H
7
6
5
4
3
2
1
0
Baud Rate =
2SMOD x fclk
32 x 12 x (256-TH1)
_
S0RELH [15:8]
The following equations should be used to
calculate the reload value for the SOREL
register (examples follow).
TH1 = 256 -
2SMOD x fclk____
32x12x Baud Rate
Mode 3: For BAUDSRC=1
SOREL = 1024 –
2SMODx fclk_______
64 x Baud Rate
TABLE 70: UART0 BAUD RATE SAMPLE VALUES BAUDSRC =0, SMOD = 1
Desired
Baud Rate
TH1 @ fclk
11.059 MHz
=
TH1 @ fclk=
14.746 MHz
Baud Rate =
2SMOD x fclk____
64 x (1024 – S0REL)
115.2 kbps
57.6 kbps
19.2 kbps
9.6 kbps
2.4 kbps
1.2 kbps
300 bps
-
-
-
FFh
FDh
FAh
E8h
D0h
40h
FCh
F8h
E0h
C0h
-
TABLE 67: SERIAL 0 BAUD RATE SAMPLE VALUES BAUDSRC = 1, SMOD = 1
Desired
Baud Rate
S0REL @ fclk
11.059 MHz
=
S0REL @ fclk
14.746 MHz
=
500.0 kbps
460.8 kbps
230.4 kbps
115.2 kbps
57.6 kbps
19.2 kbps
9.6 kbps
2.4 kbps
1.2 kbps
300 bps
-
-
-
-
3FFh
3FEh
3FCh
3F8h
3E8h
3D0h
340h
280h
-
TABLE 71:UART0 BAUD RATE SAMPLE VALUES BAUDSRC =0, SMOD = 0
Desired
Baud Rate
3FDh
3FAh
3EEh
3DCh
370h
2E0h
-
TH1 @ fclk
=
TH1 @ fclk=
14.746 MHz
11.059 MHz
115.2 kbps
57.6 kbps
19.2 kbps
9.6 kbps
2.4 kbps
1.2 kbps
300 bps
-
-
-
-
-
FEh
FCh
F0h
E0h
80h
FDh
F4h
E8h
A0h
TABLE 68: SERIAL 0 BAUD RATE SAMPLE VALUES BAUDSRC =1, SMOD = 0
Desired
Baud Rate
S0REL @ fclk
11.059 MHz
=
S0REL @ fclk
14.746 MHz
=
115.2 kbps
57.6 kbps
19.2 kbps
9.6 kbps
2.4 kbps
1.2 kbps
300 bps
-
3FEh
3FCh
3F4h
3E8h
3A0h
340h
100
3FDh
3F7h
3EEh
3B8h
370h
1C0h
_________________________________________________________________________________________________
www.ramtron.com page 38 of 76
VMX51C1016
Example of UART0 Setup and Use
In order to use UART0, the following operations
must be performed:
o
o
o
o
Enable UART0 interface
Set I/O pad direction TX=output, RX=Input
Enable reception (if required)
Configure the UART0 controller S0CON
The following are configuration and transmission
code examples for UART0.
//----------------------------------------------------------------------------------------//
// UART0 CONFIG with S0REL
//
// Configure the UART0 to operate in RS232 mode at 19200bps
// with a crystal of 14.7456MHz
//
//----------------------------------------------------------------------------------------//
void uart0ws0relcfg()
{
P3PINCFG |= 0x01;
DIGPWREN |= 0x01;
S0RELL = 0xF4;
S0RELH = 0x03;
S0CON = 0x50;
// pads for uart 0
// enable uart0/timer1
//com speed = 19200bps
// Uart0 in mode1, 8 bit, var. baud rate
//Set S0REL is source for UART0
//Baud rate clock
U0BAUD = 0x80;
}//end of uart0ws0relcfg() function
//----------------------------------------------------------------------------------------//
// UART0 CONFIG with Timer 1
//
// Configure the UART0 to operate in RS232 mode at 19200bps
// with a crystal of 14.746MHz
//
//----------------------------------------------------------------------------------------//
void uart0wTimer1cfg()
{
P3PINCFG |= 0x01;
DIGPWREN |= 0x01;
TMOD &= 0x0F;
TMOD =0x20;
// pads for uart0
// enable uart0/timer1
//Set Timer 1, Gate 0, Mode 2
//Com Speed = 19200bps
TH1 = 0xFE;
TCON &= 0x0F;
TCON =0x40;
//Start Timer 1
U0BAUD = 0x00;
//Set Timer 1 Baud rate
//generator for UART0
PCON = 0x00;
S0CON = 0x50;
//Set SMOD = 0
// Config Uart0 in mode 1,
//8 bit, variable baud rate
}//end of uart1Config() function
//----------------------------------------------------------------------------------------//
// Txmit0()
//
// One Byte transmission on UART0
//----------------------------------------------------------------------------------------//
// - Constants definition
sbit UART_TX_EMPTY = USERFLAGS^1;
void txmit0( unsigned char charact){
S0BUF = charact;
USERFLAGS = S0CON;
//Wait TX EMPTY flag to be raised
while (!UART_TX_EMPTY) {USERFLAGS = S0CON;}S0CON =
//clear both R0I & T0I bits
S0CON & 0xFD;
}//end of txmit0() function
See the interrupt section for examples of how to
setup UART0 interrupts.
_________________________________________________________________________________________________
www.ramtron.com
page 39 of 76
VMX51C1016
UART1: Operating Modes
UART1 Serial Interface
The VMX51C1016 UART1 provides two
operating modes, Mode A and Mode B, which
provide 8 or 9-bit operation, respectively.
The UART1 serial interface is based on a subset
of UART0. It provides two operating modes and
its clock source is derived exclusively from a
dedicated 10-bit baud rate generator.
Below is a summary table of operating modes of
UART1.
The UART1 transmit and receive buffers are
accessed via a unique SFR register named
S1BUF.
TABLE 74: UART1 MODES
SM
0
1
MODE
A
B
DESCRIPTION
9-bit UART
8-bit UART
BAUD RATE
Variable
Variable
TABLE 72: (S1BUF) SERIAL PORT 1, DATA BUFFER - SFR C1H
7
6
5
4
3
2
1
0
S1BUF [7:0]
UART1 - Mode A
As is the case with UART0, UART1 has a
double buffering feature in order to avoid an
overwriting of the receive register.
In this mode, 11 bits are transmitted or received.
These 11 bits are composed of:
UART1 Control Register
o
o
o
o
A Start bit (logic low)
8-bits of data (LSB first)
A programmable 9th bit
A Stop bit (logic low )
UART1 is controlled by the S1CON register. The
following table provides a description of the
UART 1 control register.
As in modes 2 and 3 of UART0, the 9th bit is
used for parity control. For data transmission,
the TB81 bit of the S1CON register holds the 9th
bit. In the case of reception, the 9th bit will be
captured into the R1B8 bit of the S1CON
register.
TABLE 73: (S1CON) SERIAL PORT 1, CONTROL REGISTER - SFR C0H
7
6
5
4
S1M
Reserved
MPCE1
R1EN
3
2
1
0
R1I
T1B8
R1B8
T1I
Bit
7
6
Mnemonic Function
S1M
Reserved
MPCE1
Operation Mode Select
-
1 = Enables multiprocessor
communication feature.
UART1 - Mode B
5
In this mode, 10 bits are transmitted and consist
of:
4
3
R1EN
T1B8
If set, enables serial reception.
Cleared by software to disable
reception.
o
o
o
A Start bit (logic low)
8-bits of data (LSB first)
A Stop bit (logic low)
The 9th transmitted data bit in mode
A. Set or cleared by the CPU,
depending on the function it performs
(parity check, multiprocessor
communication, etc.)
Received data (8 bits) is read via the S1BUF
register. Reception is completed once the Stop
bit sets the R1B8 flag in the S1CON register.
2
R1B8
In Mode A, it is the 9th data bit
received. In Mode B, if SM21 is 0,
RB81 is the stop bit. Must be cleared
by software.
UART1 - Baud Rate Generator
1
0
T1I
R1I
Transmit interrupt flag, set by
hardware after completion of a serial
transfer. Must be cleared by software
Receive interrupt flag, set by
hardware after completion of a serial
reception. Must be cleared by
software
As mentioned previously, the UART1 clock
source is derived from a dedicated 10-bit baud
rate generator module.
_________________________________________________________________________________________________
www.ramtron.com page 40 of 76
VMX51C1016
The S1REL registers are used to adjust the
baud rate of UART 1.
Example of UART1 Setup and Use
The following are C code examples of UART1
configuration, serial byte transmission and
interrupt usage.
TABLE 75: (S1RELL) UART1, RELOAD REGISTER, LOW BYTE - SFR BEH
7
6
5
4
3
2
1
0
S1RELL [7:0]
TABLE 76: (S1RELH) UART 1, RELOAD REGISTER, HIGH BYTE - SFR BFH
//----------------------------------------------------------------------------------------//
// UART1 CONFIG
7
6
5
4
3
2
1
0
//
S1RELH [7:0]
// Configure the UART1 to operate in RS232 mode at 115200bps
// with a crystal of 14.746MHz
//----------------------------------------------------------------------------------------//
void uart1Config(void)
{
The following formulas are used to calculate the
baud rate, S1RELL and S1RELH values:
P0PINCFG |= 0x04;
DIGPWREN |= 0x02;
S1RELL = 0xFC;
S1RELH = 0x03;
S1CON = 0x90;
// pads for uart 1
// enable uart1
// Set com speed = 115200bps
Serial 1
// Mode B, receive enable
Baud Rate=
fclk__________
}//end of uart1Config() function
32 x (1024-S1REL)
//----------------------------------------------------------------------------------------//
// TXMIT1 -- Transmit one byte on the UART1
//----------------------------------------------------------------------------------------//
void txmit1( unsigned char charact){
Note: S1REL.9-0 = S1RELH.1-0 + S1RELL.7-0
S1REL = 1024 -
fclk__________
S1BUF = charact;
USERFLAGS = S1CON;
32 x Baud Rate
while (!UART_TX_EMPTY) {USERFLAGS = S1CON;}
//Wait TX EMPTY flag
//clear both R1I & T1I bits
S1CON = S1CON & 0xFD;
}//end of txmit1() function
TABLE 77: SERIAL 1 BAUD RATE SAMPLE VALUES
Desired
S1REL @ fclk
11.059 MHz
=
S1REL @ fclk
14.746 MHz
=
Baud Rate
//----------------------------------------------------------------------------------------//
// Interrupt configuration
//---------------------------------------------------------------------------------------//
500.0 kbps
460.8 kbps
230.4 kbps
115.2 kbps
57.6 kbps
19.2 kbps
9.6 kbps
-
-
-
-
3FFh
3FEh
3FCh
3F8h
3E8h
3D0h
34Fh
280h
IEN0 |= 0x80;
IEN2 |= 0x01;
// Enable all interrupts
// Enable interrupt UART 1
3FDh
3FAh
3EEh
3DCh
370h
2E0h
//----------------------------------------------------------------------------------------//
// Interrupt function
//----------------------------------------------------------------------------------------//
2.4 kbps
1.2 kbps
void int_serial_1 (void) interrupt 16
{
IEN0 &= 0x7F;
// Disable all interrupts
Setting Up and Using UART1
/*------------------------*/
/*Interrupt code here*/
/*------------------------*/
In order to use UART1, the following operations
must be performed:
if (S1CON&0x01==0x01)
{
S1CON &= 0xFE;
// Clear RI (it comes
// before T1I)
o
o
Enable UART1 interface
Set I/O pad direction TX= output, RX=Input
Enable reception (if required)
}
else
{
o
o
S1CON &= 0xFD;
}
IEN0 |= 0x80;}
// Clear T1I
Configure UART1 controller S1CON
// Enable all interrupts
}
}
/-----------------------------------------------------------------------
_________________________________________________________________________________________________
www.ramtron.com page 41 of 76
VMX51C1016
Using the UART 1 Differential
Transceiver
UART1 Driven Differential
Transceiver
The VMX51C1016 includes
transceiver compatible with the standard
J1708/RS-485. These are driven by UART1.
a
differential
To use the differential transceiver interface, the
following operations must be performed:
o
Enable both UART1 and the differential
interface by setting bits 1 and 2 of the
DIGPWREN
The transceiver’s signals are differential,
providing high electrical noise immunity. The
differential
interface
is
capable
of
o
o
o
Configure UART1’s operating mode via
the S1CON register
Set the baud rate via the S1RELH and
S1RELL registers
transferring/receiving data over hundreds of feet
of twisted pair wires.
A number of devices can be connected in
parallel to the differential bus in order to
implement a multi-drop network. The number of
devices that can be networked depends on bus
length and configuration.
Enable UART1’s interrupt (if required)
Use UART1’s S1BUF register to transmit and
receive data through the differential transceiver.
If the P0.2 pin is configured as an output, the
signal corresponding to the TX1 signal of
UART1 will appear on this pin (note that the
P0.3-RX1 pin can be used as a regular digital
output).
The admissible common mode voltage range of
the differential interface is –2.0 to +7.0 volts.
When implementing this type of transmission
network over long distances in noisy
environments,
appropriate
protection
is
When the transceiver is connected in half-duplex
mode (RX1D+ connected to TX1D+ and RX1D-
connected to TX1D-) and the UART1 interrupts
are enabled, careful management of the UART1
interrupts will be required as every byte
transmitted will generate a local Rx interrupt.
recommended to prevent the common mode
voltage from causing any damage to the
VMX51C1016.
FIGURE 28: DIFFERENTIAL INTERFACE (RS485 CONFIG)
+5V
Versa Mix
TX1D+
TX1D-
RX1D+
RX1D-
From a software point of view, the differential
transceiver is viewed as a differential UART.
The differential transceiver I/Os are connected
to UART1 of the VMX51C1016, therefore,
communication parameters such as the data
length, communication speed, etc. are managed
by the UART1 peripheral interface/registers.
_________________________________________________________________________________________________
www.ramtron.com page 42 of 76
VMX51C1016
Differential Interface Use Example
//---------------------------------------------------------------------------------------------//
// EXT INT0 interrupt
//
//
The following code provides an example of
configuration and use of the VMX51C1016
differential interface.
// when the External interrupt 0 is triggered A Message string is sent over the
// the serial UART1
//---------------------------------------------------------------------------------------------//
void int_ext_0 (void) interrupt 0 {
#pragma SMALL
#pragma UNSIGNEDCHAR
#include <vmixreg.h>
int x=0;
idata unsigned char
cptr=0x01;
IEN0 &= 0x7F;
// --- function prototypes
//disable ext0 interrupt
void txmit1( unsigned char charact);
void uart1differential(void);
cptr = cptr-1;
while( irq0msg[cptr] != '\n')
//Send a text string over the differential interface
// - global variables
{
// - Constants definition
txmit1( irq0msg[cptr]);
cptr = cptr +1;
}
sbit UART_TX_EMPTY = USERFLAGS^1;
code char irq0msg[]="Ramtron inc”;
IEN0 = 0x81;
//---------------------------------------------------------------------------------------------//
//Enable all interrupts + int_0
//
MAIN FUNCTION
//---------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------//
//------------------------------- Individual Functions ----------------------------------------//
//----------------------------------------------------------------------------------------------------//
at 0x0100 void main (void) {
// Enable and configure the UART1
//----------------------------------------------------------------------------------------------------//
// UART1 DIFFERENTIAL CONFIG
uart1differential();
//Config UART1 diff interface
//
// Warning: The Clock Control circuit does affect the dedicated baud rate
// generator S0REL, S1REL and Timer1 operation
// Configure the UART1 differential interface to operate in
// RS232 mode at 115200bps with a crystal of 14.746MHz
//
//----------------------------------------------------------------------------------------------------//
void uart1differential(void)
//*** Configure the interrupts
IEN0 |= 0x81;
//Enable interrupts + Ext. 0 interrupt
//Enable UART1 Interrupt
{
IEN2 |= 0x01;
DIGPWREN |= 0x06;
P0PINCFG |= 0x04;
P0PINCFG = 0x00;
// enable uart1 & differential transceiver
// pads for uart1
Txmit1(“A’);
//Transmit one character on UART1
do
{
S1RELL = 0xFC;
S1RELH = 0x03;
S1CON = 0x90;
// Set com speed = 115200bps
// Mode B, receive enable
}while(1);
//Wait for UART1 Rx interrupt
}//end of uart1differential() function
}// End of main()...
//-----------------------------------------------------------------------------------------------//
// TXMIT1
//
//---------------------------------------------------------------------------------------------//
// UART1 Differential interface interrupt
//
// Transmit one byte on the UART1 Differential interface
//
//-----------------------------------------------------------------------------------------------//
void txmit1( unsigned char charact){
S1BUF = charact;
// In this example, the source of UART1 interrupt would be caused
// by bytes reception on the differential interface
//----------------------------------------------------------------------------------------------//
void int_uart1 (void) interrupt 16 {
USERFLAGS = S1CON;
unsigned char charact;
//Wait TX EMPTY flag to be raised
IEN0 &= 0x7F;
while (!UART_TX_EMPTY) {USERFLAGS = S1CON;}
// -- Put you code here…
S1CON = S1CON & 0xFD;
}//end of txmit1() function
//clear both R1I & T1I bits
S1CON = S1CON & 0xFC;
IEN0 |= 0x80;
//clear both R1I & T1I bits
// enable all interrupts
}// end of uart1 INTERRUPT
_________________________________________________________________________________________________
www.ramtron.com page 43 of 76
VMX51C1016
FIGURE 29: SPI INTERFACE BLOCK DIAGRAM
SPI Interface
VERSA MIX SPI
INTERFACE
Serial Data IN
SDI
SPI SFRs
Serial Data OUT
SDO
SCK
CS0
CS1
CS2
CS3
SS
The VMX51C1016 SPI peripheral is a highly
configurable and powerful interface enabling
high speed serial data exchange with external
devices such as A/Ds, D/As, EEPROMs, etc.
Serial Clock IN/OUT
Chip Select Output
Chip Select Output
Chip Select Output
To Slave Device #1
To Slave Device #2
To Slave Device #3
To Slave Device #4
From Master Device
The SPI interface can operate as either a master
or a slave device. In master mode, it can control
up to four slave devices connected to the SPI
bus.
Processor
Chip Select Output
Slave Select Input
SPI IRQs
The following lists
a
number of the
VMX51C1016’s SPI features:
SPI Transmit/Receive Buffer
Structure
o
o
Permits
transfers
synchronous
serial
data
When receiving data bytes, the first byte
received is stored in the SPIRX0 buffer. As bits
continue to arrive, the data already present in
the buffer is shifted toward the least significant
byte end of the receive registers.
Transaction size is configurable from 1
to 32 bits and more
o
o
Full duplex support
SPI modes 0, 1, 2, 3, 4-supported (full
clock polarity and phase control)
o
Up to four slave devices can be
connected to the SPI bus when
configured in master mode
For example (see the following figure), assume
the SPI is about to receive four consecutive
bytes of data: W, X, Y and Z, where the first
byte received is byte W. The first received byte
(W) will be placed in the SPIRX0 register. Upon
reception of the next byte (X), the contents of
SPIRX0 will be shifted into SFR register SPIRX1
and byte X will be placed in the SPIRX0
registers. Following this same procedure, bytes
W, X, Y and Z will end up in RX data buffer
registers SPIRX0, SPIRX1, SPIRX2 and
SPIRX3, respectively.
o
o
o
Slave mode operation
Data transmission speed is configurable
Double 32-bit buffers in transmission
and reception
o
3 dedicated interrupt flags
·
·
·
TX-Empty
RX Data Available
RX Overrun
o
o
Automatic/Manual control of the chip
selects lines
SPI operation is not affected by the
clock control unit
The case where the SDO and SDI pins are
shorted together is represented in the following
diagram.
The following provides a block diagram view of
the SPI interface.
_________________________________________________________________________________________________
www.ramtron.com page 44 of 76
VMX51C1016
FIGURE 30 : SPI INTERFACE RECEIVE TRANSMIT SCHEMATIC
TABLE 80: (SPIRX1TX2) SPI DATA BUFFER, BYTE 2 - SFR E3H
BEFORE A RECEPTION
7
6
5
4
3
2
1
0
0
SPIRX1TX2 [23:16]
First Byte to be
Transmitted
LSBit
0
MSBit
7
1
2 3 4 5 6
Bit
Mnemonic Function
22:16 SPITX2
SPIRX1
SPI Transmit Data Bits 22:16
SPI Receive Data Bits 15:8
lsb
SPITX3
W
SPITX2
X
SPITX1
Y
SPITX0
Z
msb
lsb
TX Data Buffer
RX Data Buffer
TABLE 81: (SPIRX0TX3) SPI DATA BUFFER, HIGH BYTE - SFR E4H
msb
7
6
5
4
3
2
1
SPIRX3
SPIRX2
SPIRX1
SPIRX0
SPIRX0TX3 [31:24]
First Byte Received is
Placed in the least
significant byte register
Bit
Mnemonic Function
31:24 SPITX3
SPIRX0
SPI Transmit Data Bits 31:24
SPI Receive Data Bits 7:0
AFTER A RECEPTION
SPI Control Registers
lsb SPITX3
SPITX2
SPITX1
SPITX0 msb
The SPI control registers are used to define:
TX Data Buffer
RX Data Buffer
msb
lsb
W
o
o
o
o
SPI operating speed (master mode)
Active chip select output (master mode)
SPI clock phase (master/slave modes)
SPI clock polarity (master/slave modes)
Z
Y
X
SPIRX2
SPIRX1
SPIRX3
SPIRX0
Bytes are Shifted 1 byte position
at a time each time a new byte is
received
TABLE 82: (SPICTRL) SPI CONTROL REGISTER - SFR E5H
MSBit
LSBit
7
6 5 4 3 2 1 0
7
6
5
4
SPICK [2:0]
SPICS_1
Close-Up View of how the bits within
the byte is placed after it has been
received
3
2
1
0
SPICS_0
SPICKPH
SPICKPOL
SPIMA_SL
When using the SPI interface, it is important to
keep in mind that a transmission is started when
the SPIRX3TX0 register is written to.
Bit
7:5
Mnemonic
SPICK[2:0]
Function
SPI Clock control
000 = OSC Ck Div 2
001 = OSC Ck Div 4
010 = OSC Ck Div 8
011 = OSC Ck Div 16
100 = OSC Ck Div 32
101 = OSC Ck Div 64
110 = OSC Ck Div 128
111 = OSC Ck Div 256
Active CS line in Master Mode
00 = CS0- Active
01 = CS1- Active
10 = CS2- Active
11 = CS3- Active
SPI Clock Phase
From an SFR point of view, the transmission
and reception buffers of the SPI interface
occupy the following addresses:
TABLE 78: (SPIRX3TX0) SPI DATA BUFFER, LOW BYTE - SFR E1H
7
6
5
4
3
2
1
0
0
4:3
SPICS[1:0]
SPIRX3TX0 [7:0]
Bit
7-0
Mnemonic
SPITX0
SPIRX3
Function
SPI Transmit Data Bits 7:0
SPI Receive Data Bits 31:24
2
1
SPICKPH
SPICKPOL
SPI Clock Polarity
0 – CK Polarity is Low
1 – CK Polarity is High
Master / -Slave
TABLE 79: (SPIRX2TX1) SPI DATA BUFFER, BYTE 1 - SFR E2H
7
6
5
4
3
2
1
SPIRX2TX1 [15:8]
0
SPIMA_SL
1 = Master
0 = Slave
Bit
Mnemonic Function
15:8 SPITX1
SPIRX2
SPI 1 Transmit Data Bits 15:8
SPI Receive 1 Data Bits 22:16
_________________________________________________________________________________________________
www.ramtron.com page 45 of 76
VMX51C1016
FIGURE 31 : SPI MODE 0
SPI Operating Speed
SPI MODE 0: SPICKPOL =0,SPICKPH =0
Three bits in the SPICTRL register serve to
adjust the communication speed of the SPI
interface.
CSX
SCK
SPICK[2:0]
Div Ratio
Clk Div 2
Clk Div 4
Clk Div 8
Clk Div 16
Clk Div 32
Clk Div 64
Clk Div 128
Clk Div 256
Fosc =
14.74MHz
Fosc =
11.059MHz
SDO
MSB
LSB
7.37 MHz
5.53 MHz
2.76 MHz
1.38 MHz
691 kHz
346 kHz
173 kHz
86 kHz
SDI
3.68 MHz
1.84 MHz
922 kHz
461 kHz
230 kHz
115 kHz
57.6 kHz
*Arrows indicate the edge where the data acquisition occurs
SPI Mode 1
43.2 kHz
o
o
Data is placed on the SDO pin at the
falling edge of the clock
Data is sampled on the SDI pin at the
rising edge of the clock
SPI Master Chip Select Control
FIGURE 32: SPI MODE 1
When the SPI is configured in master mode, the
value of the SPICS[1:0] bits define which chip
select pins will be active during the transaction.
SPI MODE 1: SPICKPOL =0,SPICKPH =1
CSX
The following sections describe how the SPI
clock polarity and phase affects the read and
write operations of the SPI interface.
SCK
SDO
MSB
LSB
SDI
*Arrows indicate the edge where the data acquisition occurs
SPI Operating Modes
The SPI interface can operate in four distinct
modes defined by the value of the SPICKPH
and SPICKPOL bits of the SPICTRL register.
SPICKPH defines the SPI clock phase and
SPICKPOL defines the clock polarity for data
exchange.
SPICKPOL SPICKPH
SPI Operating Mode
bit value
bit value
0
0
1
1
0
1
0
1
SPI Mode 0
SPI Mode 1
SPI Mode 2
SPI Mode 3
SPI Mode 0
o
o
Data is placed on the SDO pin at the
rising edge of the clock.
Data is sampled on the SDI pin at the
falling edge of the clock
_________________________________________________________________________________________________
www.ramtron.com page 46 of 76
VMX51C1016
SPI Transaction Size
SPI Mode 2
o
o
Data is placed on the SDO pin at the
falling edge of the clock
Data is sampled on the SDI pin at the
rising edge of the clock
Many microcontrollers only allow a fixed SPI
transaction size of 8 bits. However, most
devices requiring SPI
control demand
transactions of more than 8 bits, giving way to
alternate inefficient methods of dealing with SPI
transactions.
FIGURE 33: SPI MODE 2
SPI MODE 2: SPICKPOL =1,SPICKPH =0
The VMX51C1016 SPI interface includes a
transaction size control register (SPISIZE) that
enables different sized transactions to be
performed. The SPI interface also automatically
controls the chip select line.
CSX
SCK
SDO
MSB
LSB
SDI
The following table describes the SPISIZE
register:
*Arrows indicate the edge where the data acquisition occurs
TABLE 83: (SPISIZE) SPI SIZE CONTROL REGISTER - SFR E7H
SPI Mode 3
7
6
5
4
3
2
1
0
SPISIZE[7:0]
o
o
Data is placed on the SDO pin at the
rising edge of the clock.
Data is sampled on the SDI pin at the
falling edge of the clock
Bit
7:0
Mnemonic
SPISIZE[7:0]
Function
Value of the SPI packet size
The following formula is used to calculated the
SPI transaction size:
FIGURE 34: SPI MODE 3
SPI MODE 3: SPICKPOL =1,SPICKPH =1
For SPISIZE from 0 to 31:
CSX
SCK
SPI Transaction Size = [SPISIZE + 1]
SDO
MSB
LSB
For SPISIZE from 32 to 255*:
SDI
*Arrows indicate the edge where the data acquisition occurs
SPI Transaction Size = [SPISIZE*8 - 216]
An SPI transaction size greater than 32 bits is
possible when using the VMX51C1016 SPI
interface, however, data packets of this size
require careful management of the associated
interrupts in order to avoid buffer overwrites.
SPI Interrupts
The SPI interface has three associated
interrupts:
o
o
o
SPI RX Overrun
SPI RX Data Available
SPI TX Empty
_________________________________________________________________________________________________
www.ramtron.com page 47 of 76
VMX51C1016
TABLE 85: (SPIIRQSTAT) SPI INTERRUPT STATUS REGISTER - SFR E9H
The SPIRXOVIE, SPIRXAVIE and SPITXEMPIE
bits of the SPICONFIG register allow individual
enabling of the above interrupt sources at the
SPI interface level.
7
-
6
-
5
4
SPISLAVESEL
SPITXEMPTO
3
2
1
0
SPISEL
SPIOV
SPIRXAV
SPITXEMP
At the processor level, two interrupt vectors are
dedicated to the SPI interface:
Bit
7:6
Mnemonic
Function
-
-
Flag that indicates that we have
not reloaded the transmit buffer
fast enough (only used for
o
o
SPI RX data available and overrun
interrupt
SPI TX empty interrupt
5
4
SPITXEMPTO
packets greater than 32 bits.).
SPISLAVESEL Slave Select “NOT” (SSN)
This bit is the result of the
logical AND operation between
In order to have the processor jump to the
associated interrupt routine, one or both of these
interrupts in the IEN1 register must be enabled,
and the EA bit of the IEN0 register must be set
(see interrupt section).
CS0, CS1, CS2 and CS3.
(Indicates if one chip is
selected.)
SPI Receiver overrun
SPI Receiver available
SPI Transmit buffer is ready to
receive mode data. It does not
flag that the transmission is
completed.
3
SPISEL
2
1
SPIOV
SPIRXAV
TABLE 84: (SPICONFIG) SPI CONFIG REGISTER - SFR E6H
0
SPITXEMP
7
6
-
5
4
SPICSLO
FSONICS3
SPILOAD
3
-
2
1
0
SPIRXOVIE
SPIRXAVIE
SPITXEMPIE
SPI Manual Chip Select Control
Bit
7
Mnemonic
SPICSLO
Function
Manual CS up (Master mode)
0 = The CSx goes low when
transmission begins and returns
to high when it ends.
In some applications, manual control of the
active select line can be useful. Setting the
SPICSLO bit of the SPICONFIG register forces
the active chip select line to stay low when the
SPI transaction is completed in master mode.
When the SPICSLO bit is cleared, the chip
selected line returns to its active state.
1 = The CSx stays low after
transmission ends. The user
must clear this bit for the CSx
line to return high.
-
This bit sends the frame select
pulse on CS3.
This bit sends load pulse on
CS3.
6
5
-
FSONCS3
4
SPILOAD
SPI Manual Load Control
3
2
-
-
SPIRXOVIE
SPI Receiver overrun interrupt
enable.
SPI Receiver available interrupt
enable.
SPI Transmitter empty interrupt
enable.
The SPI can generate a LOAD pulse on the CS3
pin when the SPILOAD bit is set. This is useful
for some D/A converters and avoids having to
use a separate I/O pin for this purpose.
1
0
SPIRXAVIE
SPITXEMPIE
The SPIIRQSTAT register contains the
interrupts flags associated with the SPI
interface.
Monitoring these bits enables polling the control
of the SPI interface.
_________________________________________________________________________________________________
www.ramtron.com page 48 of 76
VMX51C1016
SPI Frame Select Control
while(1){
do{
dacvall = dacvall + 1;
if( dacvall==0xff)
{
It is also possible to generate a positive pulse on
the CS3 pin of the SPI interface by setting the
FSONCS3 bit of the SPICONFIG register. This
feature can be used to generate a frame select
signal required by some DSP compatible
devices without requiring the use of a separate
I/O pin.
dacvalh = dacvalh +1;
dacvall = 0x00;
}
send16-bitdac( dacvalh, dacvall);
}while( (dacvall != 0xff) && (dacvalh != 0xff) );
do{
dacvall = dacvall - 1;
if( dacvall==0x00)
{
Note that when both the SPILOAD and
FSONCS3 are selected, the internal logic gives
priority to the frame select pulse.
dacvalh = dacvalh - 1;
dacvall = 0xff;
}
send16-bitdac( dacvalh, dacvall);
}while( (dacvall != 0x00) && (dacvalh != 0x00) );
};
SPI Interface to 16-bit D/A Example
}// End of main()...
The following is a code for executing 16-bit
transfers over the SPI interface.
//-----------------------------------------------------------------------//
// Send16-bitdac - Send data to 16 bit D/A Converter //
//-----------------------------------------------------------------------//
void send16-bitdac( unsigned char valhigh, unsigned char vallow){
//---------------------------------------------//
// VMIX_SPI_to_dac_interface. c //
//---------------------------------------------//
//
//
//
USERFLAGS = 0x00;
while(!SPI_TX_EMPTY){USERFLAGS = SPIIRQSTAT;}
// This demonstration program show the how to interface a 16-bit D/A
// to the VMX51C1016 SPI interface.
//
#pragma SMALL
#include <vmixreg.h>
SPIRX2TX1 = vallow;
SPIRX3TX0 = valhigh;
//Put LSB of value in SPI transmit buffer
//-> trigger transmission
//Put MSB of value in SPI transmit buffer
//-> trigger transmission
do{
//Wait SPI TX empty flag to be activated
USERFLAGS = P2;
// --- function prototypes
USERFLAGS &= 0x08;
}while( USERFLAGS == 0);
//Function Prototype: Send Data to the 16 bit D/A
void send16bitdac( unsigned char valhigh, unsigned char vallow);
}//end of send16-bitdac
// Bit definition
sbit SPI_TX_EMPTY = USERFLAGS^0;
//------------------------------------------------------------------------------//
//
MAIN FUNCTION
//
//-----------------------------------------------------------------------------//
at 0x0100 main (void) {
unsigned char dacvall=0;
unsigned char dacvalh=0;
DIGPWREN |= 0x08;
//LSB of current DAC value
//MSB of current DAC value
//ENABLE SPI INTERFACE
//*** Initialise the SPI interface ****
P2PINCFG |= 0x68;
// config I/O port to allow the SPI
//interface to access the pins
// In this application we only need to configure the 5 upper bit of P2PINCFG
// P2PINCFG bit 7 - SDIEN = 0 -> INPUT (NOT USED)
// P2PINCFG bit 6 - SDOEN = 1 -> OUTPUT TO DAC SDI PIN
// P2PINCFG bit 5 - SCKEN = 1 -> OUTPUT TO DAC SCK PIN
// P2PINCFG bit 4 - SSEN = 0 -> INPUT (NOT USED)
// P2PINCFG bit 3 - CS0EN = 1 -> OUTPUT TO DAC CS PIN
// P2PINCFG bit 2 - CS1EN = 0 -> INPUT (NOT USED)
// P2PINCFG bit 1 - CS2EN = 0 -> INPUT (NOT USED)
// P2PINCFG bit 0 - CS3EN = 0 -> INPUT (NOT USED)
SPICTRL = 0x25;
// SPI ctrl: OSC/16, CS0, phase=0, pol=0, master
// SPICK BIT 7:5 = 001 -> SPI CLK SPEED = OSC/2
// SPICS BIT 4:3 = 00 -> CS0 LINE IS ACTIVE
// SPICKPH BIT 2 = 1 SPI CLK PHASE
// SPICKPOL BIT 1 = 0 SPI CLOCK POLARITY
// SPIMA_SL BIT 0 = 1 -> SET SPI IN MASTER MODE
SPICONFIG = 0x00;
// SPI CONFIG: auto CSLO, no FS, NO Load, clear IRQ flags
// SPICSLO BIT 7 = 0 AUTOMATIC CHIP SELECT CONTROL
// UNSUSED BIT 6 = 0
// FSONCS3 BIT 5 = 0 Do not send FrameSelect Signal on CS3
// SPILOAD BIT 4 = 0 do not Sen the Low pulse on CS3
// UNUSED BIT 3 = 0
// SPIRXOVIE BIT 2 = 0 Dont enable SPI RX Overrun IRQ
// SPIRXAVIE BIT 1 = 0 Dont enable SPI RX AVAILLABLE IRQ
// SPITXEMPIE BIT 0 = 0 Dont Enable SPI TX EMPTY IRQ
SPISIZE = 0x0F;
// SPI SIZE: 16-bits
// GENERATE A TRIANGLE WAVE ON THE DAC OUTPUT
_________________________________________________________________________________________________
www.ramtron.com page 49 of 76
VMX51C1016
The SPI also includes double buffering for data
reception. Once a data reception is completed,
the RX interrupt is activated and the data is
transferred into the SPI RX buffer. At this point,
the SPI interface can receive more data.
However, the processor must have retrieved the
first data stream before the second data stream
reception is complete, otherwise a data overrun
will occur and the SPI RX overrun interrupt will
be activated if enabled.
SPI Interrupt Example
The following provides an example of basic SPI
configuration and interrupt handling.
//-------------------------------------------------------------------------------//
// Sample C code for SPI RX & TX interrupt set-up
//-------------------------------------------------------------------------------//
//
#pragma SMALL
#include <vmixreg.h>
at 0x0100 main (void) {
DIGPWREN = 0x08;
P2PINCFG = 0x4F;
SPICONFIG = 0x03;
SPISIZE = 0x07;
// Enable SPI
// Set pads direction
// Enable Rx_avail + TX_empty
// SPI SIZE: 8 bits
IEN0 |= 0x80;
IEN1 |= 0x06;
// Enable all interrupts
// Enable SPI Txempty + RXavail interrupt
SPIRX3TX0 = valhigh;
Do{
//Put MSB of value in SPI transmit buffer
//-> trigger transmission
}while(1)
}//end of main()
//---------------------------------------------------------------------------//
// SPI TX Empty Interrupt function
//---------------------------------------------------------------------------//
void int_2_spi_tx (void) interrupt 9
{
IEN0 &= 0x7F;
// Disable all interrupts
/*-------------------------*/
/* Interrupt code here*/
/*-------------------------*/
IRCON &= 0xFD;
IEN0 |= 0x80;
}
// Clear flag SPITXIF
// Enable all interrupts
//---------------------------------------------------------------------------//
// SPI RX availlable function
//---------------------------------------------------------------------------//
void int_2_spi_rx (void) interrupt 10
{
IEN0 &= 0x7F;
// Disable all interrupts
/*-------------------------*/
/* Interrupt code here*/
/*-------------------------*/
IRCON &= 0xFB;
IEN0 |= 0x80;
}
// Clear flag SPIRXIF
// Enable all interrupts
//---------------------------------------------------------------------------//
Due to the double buffering of the SPI interface,
an SPI TX empty interrupt will be activated as
soon as the data to be transmitted is written into
the SPI interface transmit buffer. If data is
subsequently written into the SPI transmit buffer
before the original data has been transmitted,
the TX empty interrupt will only be activated
when the original data has been fully
transmitted.
_________________________________________________________________________________________________
www.ramtron.com page 50 of 76
VMX51C1016
The I2CIRQSTAT register provides the status of
the I²C interface operation and monitors the I²C
bus status.
I²C Interface
The VMX51C1016 includes an I²C compatible
communication interface that can be configured
in master or slave mode.
TABLE 88: (I2CIRQSTAT) I2C INTERRUPT STATUS - SFR DDH
7
6
5
4
I2CGOTSTOP
I2CNOACK
I2CSDA
I2CDATACK
I²C Control Registers
3
2
1
0
I2CIDLE
I2CRXOV
I2CRXAV
I2CTXEMP
The I2CRXTX SFR register is used to retrieve
and transmit data on the I²C interface.
Bit
7
Mnemonic
Function
This means that the slave
has received a stop (this bit is
read only). Reset only when
the master begins a new
transmission.
Flag that indicates that no
acknowledge has been
received. Is reset at the start
of the next transaction
TABLE86: (I2CRXTX) I2C DATA BUFFER - SFR DEH
7
6
5
4
3
2
1
0
I2CSGOTSTOP
I2CNOACK
I2CRXTX [7:0]
Bit
Mnemonic
I2CTX[7:0]
Function
I2C Data Receiver / Transmitter
buffer
7:0
6
The I2CCONFIG register serves to configure the
operation of the VMX51C1016 I²C interface.
The following table describes the I2CCONFIG
register bits:
5
4
3
I2CSDA
I2CDATACK
I2CIDLE
Value of SDA line.
Data acknowledge phase.
Indicates that I2C is idle
2
1
0
I2CRXOV
I2CRXAV
I2CTXEMP
I2C Receiver overrun
I2C Receiver available
I2C Transmitter empty
TABLE 87: (I2CCONFIG) I2C CONFIGURATION - SFR DAH
7
6
5
4
I2CMASKID
I2CRXOVIE
I2CRXDAVIE
I2CTXEMPIE
The I2CCHIPID register holds the VMX51C1016
I²C interface ID as well as the status bit that
indicates whether the last byte monitored on the
I²C interface was destined for the VMX51C1016
or not.
3
2
1
0
I2CMANACK
I2CACKMODE
I2CMSTOP
I2CMASTER
Bit
Mnemonic
Function
7
This is used to mask the chip ID
when you have only two devices.
Therefore in a transaction, rather
that receiving the chip ID first,
you will receive the first packet of
data.
I2C Receiver overrun interrupt
enable
I2C Receiver available interrupt
enable
I2CMASKID
The reset value of this register is 0x42,
corresponding to an I²C chip ID of 0x21. The
chip ID value of the VMX51C1016 can be
dynamically changed by writing the desired ID
value into the I2CCHIPID register (see the
following table).
6
5
4
3
I2CRXOVIE
I2CRXDAVIE
I2CTXEMPIE
I2CMANACK
I2C Transmitter empty interrupt
enable
1= Manual acknowledge line
goes to 0
TABLE 89: (I2CCHIPID) I2C CHIP ID - SFR DCH
7
6
5
4
3
2
1
0
I2CID [6:0]
I2CWID
0= Manual acknowledge line
goes to 1
I2CACKMODE Used only with Master Rx, Master
Tx, and Slave Rx.
Bit
7:1
Mnemonic
I2CID[6:0]
Function
2
The value of this chip’s ID
Read only and is used only in
slave mode
1= Manual Acknowledge on
0= Manual Acknowledge off
1
0
I2CMSTOP
I2C Master receiver stops at next
acknowledge phase. (read during
data phase)
I2C Master mode enable
1= I2C interface is Master
0= I2C interface is Slave
0
I2WID
0: The ID received corresponds
to the I2CID
1: The ID received does not
correspond to the I2CID
I2CMASTER
The I2WID bit is “read only”, is used only in
slave mode and is an indicator of whether the
transaction is targeted to the VMX51C1016
device.
_________________________________________________________________________________________________
www.ramtron.com page 51 of 76
VMX51C1016
I²C Clock Speed
I²C Interface Interrupts
The
VMX51C1016’s
I²C
interface
The I²C interface has a dedicated interrupt
vector located at address 0x5B. Three flags (see
below) share the I²C interrupt vector and can be
used to monitor the I²C interface status making it
possible to activate the I²C interrupt.
communication speed is fully configurable. This
provides the ability to adjust the speed to
various I²C bus configurations.
Control of the I²C interface communication
speed is enabled via the I2CCLKCTRL register.
The following formula is used to calculate the I2C
clock frequency in master mode:
I2CTXEMP:
I2CRXAV:
I2CRXOV:
Is set to 1 when the transmit buffer is
empty
Is set to 1 when data byte reception is
completed
Is set to 1 if a new byte reception is
completed before the previous data in
the reception buffer is read, resulting in
a data overrun
I2C Clk =
________fosc__________
[8 x (I2CCLKCTRL)]
These flags can all trigger an I²C interrupt if their
corresponding bit in the I2CCONFIG register is
set to one.1
The table below provides I²C clock (on SCL pin)
speeds for various settings of the I2CCLKCTRL
register when using
oscillator to the drive the VMX51C1016.
a
14.75MHz crystal
In the case where more than one of these flags
can activate an I²C interrupt, the interrupt
service routine is left to determine which
condition generated the interrupt.
I2CCLKCTRL Value
I2C Clock (SCL Value)
01h
03h
07h
13h
27h
C7h
920KHz
461KHz
230KHz
92.1KHz
46KHz
Note that the I2CRXAV, I2CTXEMP and
I2CRXOV flags can still be polled if their
corresponding interrupt enable flags are cleared.
Therefore, they can still be used to monitor the
status.
9.2KHz
When the I2C interface is configured for slave
mode, the I2CCLKCTRL is not used.
Master I²C Operation
TABLE 90: (I2CCLKCTRL) I2C CLOCK CONTROL - SFR DBH
In master mode, the VMX51C1016 I²C interface
controls the I²C bus transfers. In order to
configure the I²C interface as a master, the
I2CMASTER bit of the I2CCONFIG register
must be set to 1.
7
6
5
4
3
2
1
0
I2CCLKCTRL [7:0]
Bit
7:0
Mnemonic
I2CCLKCTRL
Function
I2C Clock speed control
Once the I²C interface is configured, sending
data to a slave device connected to the bus is
done by writing the data into the I2CRXTX
register.
Before sending data to a slave device, a byte
containing the target device’s chip ID and a
read/write bit must be sent to it.
A master mode data read is triggered by reading
the I2CRXAV (bit 1) of the I2CIRQSTAT
register. The data is present on the I2CRXTX
register when the I2CRXAV bit is set.
_________________________________________________________________________________________________
www.ramtron.com page 52 of 76
VMX51C1016
Errata:
Reading the value of the I2CRXTX register
resets the I2CRXAV bit. Once started, the I²C
byte read process will continue until the master
generates a STOP condition.
The VMX1016 I2C interface has a critical timing
issue when the device is configured as a slave
and transmits multiple data bytes. Single byte
transmission in slave mode is not affected.
When the I²C interface is configured as a
master, setting the I2CMSTOP bit of the
I2CCONFIG register to 1 will result in the
interface generating a STOP condition after the
reception of the next byte.
The condition arises if the master device
releases the SDA line at the same time it brings
the SCL line low for the acknowledge phase.
In order for the VMX1016 I2C slave transmission
to work properly for multiple bytes, the master
device MUST release the SDA line AFTER the
SCL negative edge.
In master mode, it is possible to manually
control the operation of the acknowledged timing
when receiving data. To do this, the
I2CMANACK bit of the I2CCONFIG register
must be set to 1. Once you have received a
byte, you can manually control the acknowledge
level by clearing or setting the I2CMANACK bit.
For this reason it is not possible to have a
VMX1016 device configured as an I2C master
and VMX1016 devices configured as I2C slaves
on the same I2C bus, unless data transmitted
from VMX1016 I2C slaves to the I²C master is
done one byte at a time.
Note: The VMX51C1016 I²C interface is not
compatible with I²C the multi-master
mode.
Slave I2C Operation
The VMX51C1016 I²C interface can be
configured as
a
slave by clearing the
I2CMASTER bit of the I2CCONFIG register.
In slave mode, the VMX51C1016 has no control
over the rate or the timing of the data exchange
that occurs on the I²C bus. Therefore, in slave
mode it is preferable to manage the transactions
using the I²C interrupts.
The I2CMASKID bit, when set, will configure to
the slave device mask the received ID byte and
receive the data directly. This is useful when
only two devices are present on the I²C bus.
Note: When
the
VMX51C1016
starts
transmitting data in slave mode, it will
continually transmit the value present in
the I²C transmit register as long as the
master provides the clock signal or until
the master device generates a STOP
condition
_________________________________________________________________________________________________
www.ramtron.com page 53 of 76
VMX51C1016
I²C EEPROM Interface Example
Program
I2CCONFIG = 0x03;
//I2C MASTER MODE NO INTERRUPT
I2CRXTX = 0xA8;
//SEND 24LC64 ADRS + write COMMAND
USERFLAGS = 0x00;
The following provides an example program
using the VMX51C1016 interface to perform
read and write operations to an externally
connected EEPROM device.
while(!I2C_TX_EMPTY){USERFLAGS = I2CIRQSTAT;}
I2CRXTX = adrsh;
//SEND 24LC64 ADRSH
USERFLAGS = 0x00;
while(!I2C_TX_EMPTY){USERFLAGS = I2CIRQSTAT;}
#pragma SMALL
#include <vmixreg.h>
I2CRXTX = adrsl;
//SEND 24LC64 ADRSL
USERFLAGS = 0x00;
while(!I2C_TX_EMPTY){USERFLAGS = I2CIRQSTAT;}
USERFLAGS = 0x00;
// --- Function prototypes
unsigned char eeread(idata unsigned char, idata unsigned char);
void eewrite(idata unsigned char, idata unsigned char, unsigned char);
// - Global variables
idata unsigned char
//wait for I2C interface to be idle
while(!I2C_IS_IDLE){USERFLAGS = I2CIRQSTAT;}
irqcptr=0x00;
sbit I2C_TX_EMPTY = USERFLAGS^0;
sbit I2C_RX_AVAIL = USERFLAGS^1;
sbit I2C_IS_IDLE = USERFLAGS^3;
sbit I2C_NO_ACK = USERFLAGS^6;
I2CCONFIG &= 0xFD;
I2CCONFIG |= 0x02;
I2CRXTX = 0xA9;
//set Master Rx Stop, only 1 byte to receive
// Chip ID read
//-------------------------------------------------------------------------------//
USERFLAGS = 0x00;
while(!I2C_RX_AVAIL){USERFLAGS = I2CIRQSTAT;}
//
MAIN FUNCTION
//
//------------------------------------------------------------------------------//
void main (void){
readvalue = I2CRXTX;
unsigned char x=0;
USERFLAGS = 0x00;
while(!I2C_IS_IDLE){USERFLAGS = I2CIRQSTAT;}
//Wait for I2C IDLE
DIGPWREN = 0x13;
//Enable the I2C peripheral
//…To about 100KHZ...
return
readvalue;
//*** configure I2C Speed.
I2CCLKCTRL = 0x013;
}//End of EEREAD
//*** Configure the interrupts
IEN0 |= 0x81;
//----------------------------------------------------------------//
// EEWRITE - EEPROM Random WRITE //
//Enable Ext INT0 interrupt + main
//----------------------------------------------------------------//
void eewrite(idata unsigned char adrsh, idata unsigned char adrsl, unsigned char
eedata)
//*** infinite loop waiting for ext IRQ
while(1){
};
{
idata unsigned char x;
I2CCONFIG = 0x01;
I2CRXTX = 0xA8;
}// End of main()...
//I2C MASTER MODE NO INTERRUPT
//SEND EEPROM ADRS + READ
//COMMAND
//-------------------------------------------------------------------------------//
// EXT INT0 interrupt
//
// When the External interrupt 0 is triggered read and write
// operations are performed on the EEPROM
//-------------------------------------------------------------------------------//
void int_ext_0 (void) interrupt 0 {
USERFLAGS = 0x00;
while(!I2C_TX_EMPTY){USERFLAGS = I2CIRQSTAT;}
I2CRXTX = adrsh;
USERFLAGS = 0x00;
while(!I2C_TX_EMPTY){USERFLAGS = I2CIRQSTAT;}
//SEND ADRSH
// Local variables declaration
idata unsigned char eedata;
idata unsigned char adrsh =0;
idata unsigned char adrsl =0;
idata int adrs =0;
I2CRXTX = adrsl;
USERFLAGS = 0x00;
while(!I2C_TX_EMPTY){USERFLAGS = I2CIRQSTAT;}
//SEND ADRSL
I2CRXTX = eedata;
//SEND 24LC64 DATA and wait
//for I2C bus IDLE
//
IEN0 &= 0x7F;
//disable ext0 interrupt
USERFLAGS = 0x00;
while(!I2C_IS_IDLE){USERFLAGS = I2CIRQSTAT;}
///--Wait Write operation to end
//(Masked for debugger compatibility)
//Write irqcptr into the EEPROM at adrs 0x0100
eewrite( 0x01,0x00,irqcptr);
I2CCONFIG = 0x01;
//I2C Master Mode no Interrupt
irqcptr = irqcptr + 1;
//Increment the Interrupt counter
do{
I2CRXTX = 0xA8;
USERFLAGS = 0x00;
while(!I2C_TX_EMPTY){USERFLAGS = I2CIRQSTAT;}
USERFLAGS = I2CIRQSTAT;
}while(I2C_NO_ACK);
delay1ms(5);
}// End of EEPROM Write
//Send 24LC64 Adrs +read Command
//Perform an EEPROM read at address 0x100
eedata = eeread(0x01, 0x00);
delay1ms(100);
IEN0 = 0x81;
//Debo delay for the switch on INT0
// enable all interrupts + int_0 (Removed
//
//5ms delay for EEPROM write
//for debugger compatibility)
}// end of EXT INT 0
//---------------------------------------------------------------------------------//
// INDIVIDUALS FUNCTIONS //
//--------------------------------------------------------------------------------//
//-----------------------------------------------------------------//
// EEREAD - EEPROM Random Read //
//----------------------------------------------------------------//
unsigned char eeread(idata unsigned char adrsh, idata unsigned char adrsl)
{
idata unsigned char x=0;
idata unsigned char readvalue=0;
_________________________________________________________________________________________________
www.ramtron.com page 54 of 76
VMX51C1016
Both the bandgap and the PGA are calibrated
during production and their associated
calibration registers are automatically loaded
with the appropriate calibration vectors when the
device is reset.
Analog Signal Path
The VMX51C1016 implements a complete
single chip acquisition system by integrating the
following analog peripherals:
The bandgap and PGA calibration vectors are
stored into the BGAPCAL and PGACAL SFR
registers when a reset occurs. It is possible for
the user program to overwrite the contents of
these registers. .
o
12-bit, A/D converter with 5 external
inputs. The ADC conversion rate is
programmable up to 10KHz
Internal bandgap reference and PGA
Digital switch
o
o
TABLE 91: (BGAPCAL) BAND-GAP CALIBRATION VECTOR REGISTER - SFR B3H
The following figure provides a block diagram of
the VMX51C1016 analog peripherals and their
connections.
7
6
5
4
3
2
1
0
BGAPCAL [7:0]
Bit
7:0
Mnemonic
BGAPCAL
Function
Band-gap data calibration
FIGURE 35: ANALOG SIGNAL PATH OF THE VMX51C1016
TABLE 92: (PGACAL) PGA CALIBRATION VECTOR REGISTER - SFR B4H
7
6
5
4
3
2
1
0
BANDGAP
PGA
PGACAL [7:0]
AIN0
AIN1
AIN2
Bit
7:0
Mnemonic
PGACAL
Function
ADCTA
AIN3
8
MSBs of PGA Calibration
VBGAP
XTVREF
Vector (LSBit is on PGACAL0)
Reserved
unused
unused
AIN0
AIN1
AIN2
Using the VMX51C1016 Internal
Reference
AIN3
The configuration and setup up of the
VMX51C1016 internal reference is achieved by
setting bits 0 and 1 of the ANALOGPWREN
register to 1. This powers-on the bandgap and
the PGA, respectively.
A/D
Reserved
Reserved
Reserved
ADCTA
SW1
Use of the internal reference requires the
addition of two external tank capacitors on the
XTVREF pin. These capacitors consist of one
4.7uF to 10uF tantalum capacitor in parallel with
one 0.1uF ceramic capacitor.
The on-chip calibrated bandgap or the external
reference provides the reference for the ADC.
Analog Peripherals Power Control
Selection of the internal/external reference, the
ADC control and their respective power downs
are controlled via the ANALOGPWREN SFR
registers.
The next figure shows the connection of the tank
capacitors to the XTVREF pin.
FIGURE 36: TANK CAPACITORS CONNECTION TO THE XTVREF PIN
Internal Reference and PGA
2.7V
The VMX51C1016 provides a temperature
calibrated internal bandgap reference coupled
with a programmable gain amplifier.
XTVREF
4.7uF
0.1uF
to
The programmable gain amplifier’s role is to
amplify the bandgap output and bring it to 2.7
volts and to provide the drive required for the
ADC reference input.
10uF
_________________________________________________________________________________________________
www.ramtron.com page 55 of 76
VMX51C1016
The VMX51C1016 internal reference can also
be used as an external reference,,provided that
the load on the XTVREF pin is kept to a
minimum. The following table shows the typical
affect of loading on the XTVREF voltage.
A/D Converter
The VMX51C1016 includes a feature rich and
highly configurable on-chip 12-bit A/D converter.
The A/D conversion data is output as an
unsigned 12-bit binary with 1 LSB = Full
Scale/4096. The following figure describes the
ideal transfer function for the ADC.
FIGURE 37: TANK CAPACITORS CONNECTION TO THE XTVREF PIN
2.75
2.70
FIGURE 39: IDEAL A/D CONVERTER TRANSFER FUNCTION
OUTPUT
CODE
1111_1111_1111
1111_1111_1110
1111_1111_1101
2.65
0.0
1.0
2.0
3.0
4.0
5.0
1111_1111_1100
1 LSB = XTVREF / 4096
Load current on XTVREF (mA)
It is recommended that the external load on the
XTVREF pin to be less than 1mA.
0000_0000_0011
0000_0000_0010
0000_0000_0001
0000_0000_0000
Note: A stabilization delay of more than 1ms
should be provided between the activation of the
bandgap, the PGA and the first A/D conversion.
XTVREF
0V
The A/D converter includes a system that
provides the ability to trigger automatic periodic
conversions of up to 10kHz without processor
intervention.
Using an External Reference
An external reference can be used to drive the
VMX51C1016 ADC instead of the internal
reference.
Once the conversion is complete, the A/D
system can activate an interrupt that can wake-
up the processor (assuming it has been put into
idle mode) or automatically throttle the
processor clock to full speed.
The external reference voltage source can be
set from 0.5 to 3.5 volts and must provide
sufficient drive to operate the ADC load.
The VMX51C1016 ADC can also be configured
to perform conversion on one specific channel or
on four consecutive channels (in round-robin
fashion).
FIGURE 38: EXTERNAL REFERENCE CONNECTION TO THE XTVREF PIN
These features make the A/D converter
adaptable for many applications.
XTVREF
4.7uF
to
10uF
V
0.1uF
The following paragraphs describe the A/D
converter register features.
ADC Data Registers
The ADC data registers hold the ADC
conversion results. The ADCDxLO register(s)
hold the eight least significant bits (LSBs) of the
conversion results, while the ADCDxHI
register(s) hold the four most significant bits
(MSB) of the conversion results.
Warning:
When an external reference source is
applied to the XTVREF pin, it is
mandatory not to power-on the PGA.
The internal bandgap reference should
also remain deactivated.
_________________________________________________________________________________________________
www.ramtron.com page 56 of 76
VMX51C1016
TABLE 93: (ADCD0LO) ADC CHANNEL 0 DATA REGISTER, LOW BYTE - SFR A6H
setting the corresponding bits of the lower
quartet (AIEN [3:0]) of the INMUXCTRL register
to 1.
Bit
7:0
Mnemonic
ADCD0LO
Function
ADC channel 0 low
TABLE 94: (ADCD0HI) ADC CHANNEL 0 DATA REGISTER, HIGH BYTE - SFR A7H
Bit
3:0
Mnemonic
ADCD0HI
Function
ADC channel 0 high
TABLE 101: (INMUXCTRL) ANALOG INPUT MULTIPLEXER CONTROL REGISTER -
SFR B5H
7
-
6
5
4
3
2
1
0
TABLE 95: (ADCD1LO) ADC CHANNEL 1 DATA REGISTER, LOW BYTE - SFR A9H
ADCINSEL [2:0]
AINEN [3:0]
7
6
5
4
3
2
1
0
ADCD1LO [7:0]
Bit
7
6:4
Mnemonic
-
ADCINSEL[2:0] ADC Input Select
000 - AIN0
Function
-
Bit
7:0
Mnemonic
ADCD1LO
Function
ADC channel 1 low
001 - AIN1
010 - AIN2
011 - AIN3
111 - ADCTA
TABLE 96: (ADCD1HI) ADC CHANNEL 1 DATA REGISTER, HIGH BYTE - SFR AAH
7
-
6
-
5
-
4
-
3
2
1
0
ADCD1HI [3:0]
3:0
AINEN[3:0]
Analog Input Enable
Bit
3:0
Mnemonic
ADCD1HI
Function
ADC channel 1 high
The upper four bits of the INMUXCTRL register
are used to define the channel on which the
conversion will take place when the ADC is set
to perform the conversion on one specific
channel.
TABLE 97: (ADC2LO) ADC CHANNEL 2 DATA REGISTER, LOW BYTE - SFR ABH
7
6
5
4
3
2
1
0
ADCD2LO [7:0]
Bit
7:0
Mnemonic
ADCD2LO
Function
ADC channel 2 low
ADC Control Register
TABLE 98: (ADCD2HI) ADC CHANNEL 2 DATA REGISTER, HIGH BYTE - SFR ACH
7
-
6
-
5
-
4
-
3
2
1
0
The ADCCTRL register is the main register used
for control and operation of the ADC operating
mode.
ADCD2HI [3:0]
Bit
7:4
3:0
Mnemonic
-
ADCD2HI
Function
-
ADC channel 2 high
TABLE 102: (ADCCTRL) ADC CONTROL REGISTER - SFR A2H
7
6
5
1
4
TABLE 99: (ADCD3LO) ADC CHANNEL 3 DATA REGISTER, LOW BYTE - SFR ADH
ADCIRQCLR XVREFCAP
ADCIRQ
7
6
5
4
3
2
1
0
ADCD3LO [7:0]
3
2
1
0
ADCIE
ONECHAN
CONT
ONESHOT
Bit
7:0
Mnemonic
ADCD3LO
Function
ADC channel 3 low
Bit
7
Mnemonic
ADCIRQCLR
Function
ADC interrupt clear
TABLE 100: (ADCD3HI) ADC CHANNEL 3 DATA REGISTER, HIGH BYTE - SFR AEH
Writing 1 Clears interrupt
Always keep this bit at 1
Keep this bit = 1
Read ADC Interrupt Flag
Write 1 generate ADC IRQ
ADC interrupt enable
1 = Conversion is performed on
one channel
7
-
6
-
5
-
4
-
3
2
1
0
6
5
4
XVREFCAP
Reserved = 1
ADCIRQ
ADCD3HI [3:0]
Bit
7:4
3:0
Mnemonic
-
ADCD3HI
Function
-
3
2
ADCIE
ONECHAN
ADC channel 3 high
Specified ADCINSEL
0 = Conversion is performed on
4 ADC channels
1 = Enable ADC continuous
conversion
ADC Input Selection
A/D conversions can be performed on a single
channel, sequentially on the four lower channels
or sequentially on the four upper channels of the
ADC input multiplexer.
1
0
CONT
ONESHOT
1 = Force a single conversion
on 1 or 4 channels
An input buffer is present on each of the four
external ADC inputs (ADIN0 to AIN3).
ADC Continuous / One Shot Conversion
The CONT bit sets the ADC conversion mode.
When the CONT bit is set to 1, the ADC will
implement continuous conversions at a rate
defined by the conversion rate register.
These buffers must be enabled before a
conversion can take place on the ADC AIN0-
AIN3 inputs. These buffers are enabled by
_________________________________________________________________________________________________
www.ramtron.com page 57 of 76
VMX51C1016
When the CONT bit is set to 0, the A/D operates
in “one shot” mode, initiating a conversion when
the ONESHOT bit of the ADCCONTRL register
is set.
ADC One Channel/Four Channel Conversion
The VMX51C1016’s ADC includes a feature that
renders it possible to perform a conversion on
one specific channel or on four consecutive
channels.
This feature minimizes the load on the processor
when reading more than one ADC input is
required.
The ONECHAN bit of the ADCCTRL register
controls this feature. When the ONECHAN is set
to 1, the conversion will take place on the
channel selected by the INMUXCTRL register.
Once the conversion is complete, the result will
be placed into the ADCD0LO and ADCD0HI
registers
When the ONECHAN bit is set to 0, the
conversion, once triggered, will be done
sequentially on four channels and the
conversion results will be placed into the
ADCDxLO and ADCDxHI registers.
Bit 6 of the INMUXCTRL register controls
whether the conversion will take place on the
four upper channels of the input multiplexer or
on the four lower channels.
_________________________________________________________________________________________________
www.ramtron.com
page 58 of 76
VMX51C1016
ADC Clock Source Configuration
ADC Conversion Rate Configuration
The A/D converter derives its clock source from
the main VMX51C1016 clock. .The frequency of
the ADC clock should be set between 250kHz
and 1.25MHz.
The VMX51C1016’s ADC conversion rate, when
configured in continuous mode, is defined by the
value present in a 24-bit A/D conversion rate
register that serves as the time base for
triggering the ADC conversion process.
Configuration of the ADC clock source
frequency is done by adjusting the value of the
ADCCLKDIV register. The following equation is
used to calculate the ADC reference clock.
The following equation is used to calculate the
value of the conversion rate.
Conversion Rate Equation:
ADC Clock Reference Equation:
Conversion rate registers value (24-bit) =
fOSC
Conv_Rate
ADC Clk ref =
fOSC
4x (ADCCDIV +1)
The ADC conversion requires 111 ADC clock
cycles to perform the conversion on one
channel.
The conversion rate register is accessible using
three SFR registers as follows:
TABLE 104: (ADCCONVRLOW)ADC CONVERSION RATE REGISTER LOW BYTE -
SFR A3H
The following table provides recommended
ADCCLKDIV register values versus conversion
rate. The numbers given are conservative
figures and derived from a 14.74MHz clock.
Bit
7:0
Mnemonic
Function
ADCCONVRLOW Conversion rate low byte
TABLE 105: (ADCCONVERMED) ADC CONVERSION RATE REGISTER MED BYTE -
SFR A4H
Bit
Mnemonic
Function
7:0
ADCCONVRMED Conversion rate medium byte
ADCCLKDIV
Maximum Conv. Rate*
10500 Hz
8000 Hz
TABLE 106: (ADCCONVRHIGH) ADC CONVERSION RATE REGISTER HIGH BYTE -
SFR A5H
0x02
0x03
0x05
Bit
7:0
Mnemonic
Function
5000 Hz
ADCCONVRHIGH Conversion rate high byte
0x07
4000 Hz
0x08
0x09
0x0B
3500 Hz
3200 Hz
2500 Hz
The following table provides examples of typical
values versus conversion rate.
0x0D, 0x0E, 0x0F
2200 Hz
Conversion
Rate
Fosc= 14.74MHz
E10000h
168000h
* The maximum conversion rate is for the single
channel condition. If the conversion is performed
on four channels, divide the maximum
conversion rate by 4. For example, performing
the conversion at 25KHz on four channels, the
ADCCLKDIV register should be set to 0x02 (4 x
2500Hz = 10KHz).
1Hz
10Hz
100Hz
1kHz
2.5kHz
5kHz
8kHz
10kHz
024000h
003999h
00170Ah
000B85h
000733h
0005C2h
TABLE 103: (ADCCLKDIV) ADC CLOCK DIVISION CONTROL REGISTER - SFR 95H
7
6
5
4
3
2
1
0
ADCCLKDIV [7:0]
Bit
7:0
Mnemonic
ADCCLKDIV[7:0]
Function
ADC clock divider
_________________________________________________________________________________________________
www.ramtron.com page 59 of 76
VMX51C1016
//*** Configure the interrupts
IEN0 |= 0x80;
ADC Status Register
//enable main interrupt
IEN1 |= 0x020;
//Enable ADC Interrupt
while(1);
}// End of main()...
//Infinite loop waiting ADC interrupts
The ADC shares interrupt vector 0x6B with the
interrupt on Port 1 change and Compare and
Capture Unit 3. To enable the ADC interrupt, the
ADCIE bit of the ADCCTRL register must be set.
Before or at the same time this bit is set, the
ADCIRQCLR and ADCIRQ bits must be cleared.
The ADCPCIE bit of the IEN1 register must also
be set, as well as the EA bit of the IEN0 register.
//-----------------------------------------------------------------------//
// ADC INTERRUPT ROUTINE
//-----------------------------------------------------------------------//
void int_adc (void) interrupt 13 {
idata int value = 0;
IEN0 &= 0x7F;
ADCCTRL |=0x80;
//disable ext0 interrupts
//Clear ADC interrupt
// Read ADC channel 0
value = ADCD0HI;
value = valeur*256;
value = valeur + ADCD0LO;
(…)
// Read ADC channel 3
value = ADCD3HI;
value = valeur*256;
value = valeur + ADCD3LO;
(…)
Once the ADC interrupt occurs, the ADC
interrupt must be cleared by writing a ‘1’ into the
ADCINTCLR bit of the ADCCTRL register. The
ADCIF flag in the IRCON register must also be
cleared.
IRCON &= 0xDF;
ADCCTRL |=0xFA;
IEN0 |= 0x80;
//Clear adc irq flag
//prepare adc for next acquisition
// enable all interrupts
A/D Converter Use Example
}// End of ADC IRQ
(…)
The following provides example code for the A/D
converter. The first section of the code is the
interrupt setup/module configuration, whereas
the second section is the interrupt function itself.
Warning:
When using the ADC, make sure the
output multiplexer controlled by the
TAEN bit of the ANALOGPWREN
register (92h) is powered-down at all
times, otherwise, the signal present on
the ISRCOUT can be routed back to the
selected ADC input, causing conversion
errors.
Sample C code to setup the A/D converter:
//-----------------------------------------------------------------------//
//
MAIN FUNCTION
//-----------------------------------------------------------------------//
(…)
at 0x0100 void main (void) {
//*** Initialize the Analog Peripherals ***
ANALOGPWREN = 0x07;
//Enable the following analog
//peripherals: ADC, PGA,
// BGAP. TA = OFF (mandatory)
//Configure the ADC and Start it
ADCCLKDIV=0x0F;
ADCCONVRLOW=0x00;
ADCCONVRMED=0x40;
ADCCONVRHIGH =0x02;
TABLE 107: (PGACAL0) PGA CALIBRATION BIT 0 VALUE - SFR BCH
//SET ADC CLOCK SOURCE
//CONFIGURE CONVERSION RATE
//= 100Hz @ 14.74 MHz
7
6
5
4
3
2
1
0
PGACAL0
Reserved
Bit
7
6:0
Mnemonic
PGACAL0
--
Function
Bit 0 of PGACAL
Reserved
INMUXCTRL=0x0F;
ADCCTRL=0xEA;
//Enable All ADC External inputs
//buffers and select ADCI0
//Configure the ADC as follow:
//bit 7: =1 ADCIRQ Clear
//Bit 6: =1 XVREFCAP (always)
//Bit 5: =1 (always)
//Bit 4: =0 = ADCIRQ (don’t care)
//Bit 3: =1 = ADC IRQ enable
//Bit 2: =0 conversion on 4
//channels
//Bit 1: =1 Continuous conversion
//Bit 0: =0 No single shot mode
_________________________________________________________________________________________________
www.ramtron.com page 60 of 76
VMX51C1016
Digitally Controlled Switches
Analog Output Multiplexer
On the VMX51C1016 includes a digital switch
composed of four sub-switches connected in
parallel. These sub-switches can be individually
controlled by writing to the SFR register at B7h.
The VMX51C1020’s analog output multiplexer is
used for production test purposes and provides
access to internal test points of the analog signal
path. It can however, be used in applications,
but due to its high intrinsic impedance, care
must be taken with respect to loading.
FIGURE 42: SWITCH FUNCTIONAL DIAGRAM
SW1A
SW1B
We recommend not accessing this SFR register.
TABLE 109: (OUTMUXCTRL) ANALOG OUTPUT MULTIPLEXER CONTROL REGISTER
- SFR B6H
7
-
6
-
5
-
4
-
3
-
2
1
0
TAOUTSEL [2:0]
Bit
7:3
2:0
Mnemonic
Unused
TAOUTSEL[2:0] Signal output on TA
Function
Unused
sw1d sw1c sw1b sw1a
x
x
x
x
SWITCHCTRL register
000 – AIN0
001 – AIN1
010 – AIN2
011 – AIN3
100 – VBGAP
101 – reserved
110 – unused
111 – unused
The “ON” switch resistance is between 50 and
100 Ohms, depending on the number of sub-
switches being used. If, for example, one sub-
switch is closed, the switch resistance will be
about 100 Ohms, and if all four switches are
closed, the switch resistance will go down to
about 50 Ohms.
TABLE 108: (SWITCHCTRL) USER SWITCHES CONTROL REGISTERS - SFR B7H
7
6
5
4
3
2
1
0
Not Used but implemented
SWTCH1 [3:0]
Bit
7:4
Mnemonic
User Flags
Function
Not used but implemented bits
Can be used as general
purpose storage
Switch 1 control (composed of 4
individual switches each bit
controlled)
3:0
SWITCH1[3:0]
The upper 4 bits of the SWITCHCTRL register
are not used but they are implemented. They
can be used as general purpose flags.
_________________________________________________________________________________________________
www.ramtron.com page 61 of 76
VMX51C1016
Interrupt Enable Registers
VMX51C1016 Interrupts
The following tables describe the interrupt
enable registers and their associated bit
functions:
The VMX51C1016 is a highly integrated device
incorporating a vast number of peripherals for
which a comprehensive set of 24 interrupt
sources sharing 11 interrupt vectors is available
to ease system program development. Most of
the VMX51C1016 peripherals can generate an
interrupt, providing feedback to the MCU core
that an event has occurred or a task has been
completed.
TABLE 111: (IEN0) INTERRUPT ENABLE REGISTER 0 - SFR A8H
7
6
5
4
EA
WDT
T2IE
S0IE
3
T1IE
2
0
1
T0IE
0
INT0IE
Bit
7
Mnemonic Function
EA
General Interrupt control
The following are key VMX51C1016 interrupt
features:
0 = Disable all Enabled interrupts
1 = Authorize all Enabled interrupts
Watch Dog timer refresh flag. This bit
is used to initiate a refresh of the
watchdog timer. In order to prevent
an unintentional reset, the watchdog
timer the user must set this bit
directly before SWDT.
Timer 2 Overflow / external Reload
interrupt
6
WDT
o
o
o
o
Each
digital
peripheral
on
the
VMX51C1016 has an interrupt channel
The SPI, UARTs and I²C all have event
specific flag bits
When the processor is in IDLE mode, an
interrupt may be used to wake it up
The processor can run at full speed
during interrupt routines
5
T2IE
0 = Disable
1 = Enable
4
3
S0IE
T1IE
Uart0 interrupt.
0 = Disable
1 = Enable
Timer 1 overflow interrupt
0 = Disable
The following table summarizes the interrupt
sources, natural priority and associated interrupt
vector addresses on the VMX51C1016.
1 = Enable
2
1
Reserved
T0IE
Always keep this bit to 0
Timer 0 overflow interrupt
0 = Disable
TABLE 110: INTERRUPT SOURCES AND NATURAL PRIORITY
Interrupt
Reserved
Interrupt Vector
0E43h
1 = Enable
0
INT0IE
External Interrupt 0
0 = Disable
1 = Enable
INT0
UART1
TIMER 0
0003h
0083h
000Bh
SPI TX Empty
004Bh
Reserved
0013h
SPI RX & SPI RX OVERRUN
/ COMPINT0
TIMER 1
I2C (Tx, Rx, Rx Overrun)
/ COMPINT1
UART0
MULT/ACCU 32bit Overflow /
COMPINT2
TIMER 2: T2 Overflow, T2EX
ADC and interrupt on Port 1
change (8 int.) / COMPINT3
0053h
001Bh
005Bh
0023h
0063h
002Bh
006Bh
It is also possible to program the interrupts to
wake-up the processor from an IDLE condition
or force its clock to throttle up to full speed when
an interrupt condition occurs.
_________________________________________________________________________________________________
www.ramtron.com page 62 of 76
VMX51C1016
Timer 2 Compare Mode Impact on
Interrupts
TABLE 112: (IEN1) INTERRUPT ENABLE 1 REGISTER -SFR E8H
7
6
5
4
T2EXIE
SWDT
ADCPCIE
MACOVIE
The SPI RX (and RXOV), I²C, MULT/ACCU and
ADC interrupts are shared with the four Timer 2
compare and capture unit interrupts.
3
2
1
0
I2CIE
SPIRXOVIE
SPITEIE
reserved
Bit
7
Mnemonic
T2EXIE
Function
T2EX interrupt Enable
0 = Disable
When the compare and capture units of Timer 2
are configured in compare mode via the CCEN
register, the compare and capture unit takes
control of one interrupt vector as shown in the
next figure.
1 = Enable
6
SWDT
Watch Dog timer start/refresh flag.
Set to activate/refresh the watchdog
timer. When directly set after setting
WDT, a watchdog timer refresh is
performed. Bit SWDT is reset.
ADC and Port change interrupt
0 = Disable
1 = Enable
MULT/ACCU Overflow 32 bits
interrupt
FIGURE 43: COMPARE CAPTURE INTERRUPT STRUCUTRE
COMPINT0
5
4
ADCPCIE
MACOVIE
1
Interrupt
Interrupt Vector
0053h
SPI Rx &
RxOV INT
0
CCEN(1,0) = 1,0
COMPINT1
0 = Disable
1 = Enable
I2C Interrupt
0 = Disable
1
Interrupt
Interrupt Vector
3
2
1
0
I2CIE
005Bh
I2C INT
0
1 = Enable
CCEN(3,2) = 1,0
COMPINT2
SPIRXOVIE SPI Rx avail + Overrun
0 = Disable
1
Interrupt
Interrupt Vector
1 = Enable
SPI Tx Empty interrupt
0 = Disable
0063h
SPITEIE
reserved
MAC
Overflow INT
0
1 = Enable
CCEN(5,4) = 1,0
COMPINT3
1
Interrupt
Interrupt Vector
006Bh
ADC & Port
Change INT
TABLE 113: (IEN2) INTERRUPT ENABLE 2 REGISTER - SFR 9AH
0
7
-
6
-
5
-
4
-
3
-
2
-
1
-
0
S1IE
CCEN(7,6) = 1,0
Bit
7-1
0
Mnemonic Function
-
The impact of this is that the corresponding
peripheral interrupt, if enabled, will be blocked.
The output signal from the comparison module
will be routed to the interrupt system and the
control lines will be dedicated to the compare
and capture unit.
-
S1IE
UART 1 Interrupt
0 = Disable UART 1 Interrupt
1 = Enable UART 1 Interrupt
This interrupt control “take over” is specific to
each individual compare and capture unit. For
example if Compare and Capture Unit 2 is
configured to generate a PWM signal on P1.2,
the MULT/ACCU overflow interrupt, if enabled,
will be dedicated to Compare and Capture Unit 2
and the SPI, I²C and ADC interrupts won’t be
affected.
_________________________________________________________________________________________________
www.ramtron.com page 63 of 76
VMX51C1016
TABLE 115: (IP0) INTERRUPT PRIORITY REGISTER 0 - SFR B8H
Interrupt Status Flags
7
6
5
4
3
2
1
0
The IRCON register is used to identify the
source of an interrupt. Before exiting the
interrupt service routine, the IRCON register bit
that corresponds with the serviced interrupt
should be cleared.
UF8
WDTSTAT
IP0 [5:0]
Bit
Mnemonic
UF8
Function
User Flag bit
7
6
WDTSTAT Watch Dog Timer status flag. Set to 1
by hardware when the Watch Dog
Timer overflows. Must be cleared
manually
TABLE 114: (IRCON) INTERRUPT REQUEST CONTROL REGISTER - SFR 91H
7
6
5
4
5
IP0.5
Port1
Timer 2
ADC
T2EXIF
TF2IF
ADCIF
MACIF
Change
4
3
2
IP0.4
IP0.3
IP0.2
UART0
Timer 1
-
-
MULT/ACCU
I2C
SPI RX
available
SPI TX
Empty
3
2
1
0
I2CIF
SPIRXIF
SPITXIF
Reserved
-
-
-
Bit
7
Mnemonic
T2EXIF
Function
1
0
IP0.1
IP0.0
Timer 0
Interrupt
External
INT0
Timer 2 external reload flag
This bit informs the user
whether an interrupt has been
generated from T2EX, if the
T2EXIE is enabled.
Timer 2 overflow flag
A/D converter interrupt request
flag/ port 0 change.
External
INT 0
UART1
Table 116: (IP1) Interrupt Priority Register 1 - SFR B9h
6
5
TF2IF
ADCIF /
COMPINT3
7
-
6
-
5
4
3
2
1
0
IP1 [5:0]
/ COMPINT3
Bit
Mnemonic
Function
4
3
2
MACIF /
COMPINT2
I2CIF /
COMPINT1
SPIRXIF /
COMPINT0
SPITXIF
MULT/ACCU unit interrupt
request flag / COMPINT2
I2C interrupt request flag
/ COMPINT1
RX available flag SPI + RX
Overrun / / COMPINT0
TX empty flag SPI
7
6
5
-
-
-
-
IP1.5
Port1
Change
Timer 2
ADC
4
3
2
IP1.4
IP1.3
IP1.2
UART0
Timer 1
-
-
MULT/ACCU
I2C
SPI RX
available
SPI TX
Empty
1
0
-
-
-
Reserved
Reserved
1
0
IP1.1
IP1.0
Timer 0
Interrupt
External
INT0
External
INT 0
Interrupt Priority Register
UART1
All of the VMX51C1016’s interrupt sources are
combined into groups with four levels of priority.
Configuring the IP0 and IP1 registers makes it
possible to change the priority order of the
peripheral interrupts in order to give higher
priority to a specified interrupt that belongs to a
specified group.
These groups can be programmed individually
to one of the four priority levels: from Level 0 to
Level 3, with Level 3 being the highest priority.
TABLE 117: INTERRUPT GROUPS
The IP0 and IP1 registers serve to define the
specific priority of each of the interrupt groups.
By default, when the IP0 and IP1 registers are at
reset state 00h, the natural priority order of the
interrupts described above is in force.
Bit
IP1.5, IP0.5
Interrupt Group
Port1
Change
Timer 2
ADC
IP1.4, IP0.4
IP1.3, IP0.3
IP1.2, IP0.2
UART0
Timer 1
-
-
MULT/ACCU
I2C
SPI RX
available
SPI TX
Empty
-
-
-
IP1.1, IP0.1
IP1.0, IP0.0
Timer 0
Interrupt
External
INT0
External
INT 0
UART1
_________________________________________________________________________________________________
www.ramtron.com page 64 of 76
VMX51C1016
The respective values of the IP1.x and IP0.x bits
define the priority level of the interrupt group vs.
the other interrupt groups as follows:
TABLE 118: INTERRUPT PRIORITY LEVEL
IP1.x
IP0.x
Priority Level
Level 0 (Low)
Level 1
Level 2
Level 3 (High)
0
0
1
1
0
1
0
1
The WDTSTAT bit of the IP0 register is the
watchdog status flag, which is set to 1 by the
hardware whenever a watchdog timer overflow
occurs. This bit must be cleared manually.
Finally, bit 7 of the IP0 register can be used as a
general purpose user flag.
_________________________________________________________________________________________________
www.ramtron.com
page 65 of 76
VMX51C1016
Setting up INT0 Interrupts
INT0 example
The IT0 bit of the TCON register defines
whether external interrupt 0 will be edge or level
triggered.
The following provides example code for
interrupt setup and module configuration:
//---------------------------------------------------------------------------
// Sample C code to setup INT0
//---------------------------------------------------------------------------
#pragma TINY
When an interrupt condition occurs on INT0, the
associated interrupt flag IE0 will be set. The
interrupt flag is automatically cleared when the
interrupt is serviced.
#include <vmixreg.h>
at 0x0100 void main (void) {
// INT0 Config
TCON |= 0x01; //Interrupt on INT0 will be caused by a High->Low
//edge on the pin
// Enable INT0 interrupts
TABLE 119: (TCON) TIMER 0, TIMER 1 TIMER/COUNTER CONTROL - SFR 88H
IEN0 |= 0x80;
IEN0 |= 0x01;
// Enable all interrupts
// Enable interrupt INT0
7
6
TR1
5
TF0
4
TR0
TF1
// Wait for INT0…
do
{
}while(1);
3
--
2
--
1
IE0
0
IT0
//Wait for INT0 interrupts
Bit
7
Mnemonic
TF1
Function
}//end of main function
Timer 1 overflow flag set by hardware
when Timer 1 overflows. This flag can be
cleared by software and is automatically
cleared when interrupt is processed.
Timer 1 Run control bit. If cleared Timer 1
stops.
Timer 0 overflows flag set by hardware
when Timer 0 overflows. This flag can be
cleared by software and is automatically
cleared when interrupt is processed.
Timer 0 Run control bit. If cleared timer 0
stops.
//---------------------------------------------------------------------------
// Interrupt Function
void int_ext_0 (void) interrupt 0
{
IEN0 &= 0x7F;
6
5
TR1
TF0
// Disable all interrupts
// Enable all interrupts
/* Put the Interrupt code here*/
IEN0 |= 0x80;
}
4
TR0
//---------------------------------------------------------------------------
3
2
1
--
--
IE0
Reserved
Reserved
Interrupt 0 edge flag. Set by hardware
when falling edge on external pin INT0 is
observed. Cleared when interrupt is
processed.
0
IT0
Interrupt 0 type control bit. Selects falling
edge or low level on input pin to cause
interrupt.
_________________________________________________________________________________________________
www.ramtron.com page 66 of 76
VMX51C1016
UART0 and UART1 Interrupt Example
Interrupt on P1 change
The following program example demonstrates
how to initialize the UART0 and UART1
interrupts.
The VMX51C1016 includes an interrupt on the
port change feature, which is available on the
Port 1 pins of the VMX51C1016.
//-------------------------------------------------------------------------------
// Sample C code for UART0 and UART1 interrupt example
//-------------------------------------------------------------------------------
#pragma TINY
This feature is like having eight extra external
interrupt inputs sharing the ADC interrupt vector
at address 006Bhc and can be very useful for
applications such as switches, keypads, etc.
#include <vmixreg.h>
// --- function prototypes
void txmit0( unsigned char charact);
void txmit1( unsigned char charact);
void uart1Config(void);
To activate this interrupt, the bits corresponding
to the pins being monitored must be set in the
PORTIRQEN register. The ADCPCIE bit in the
IEN1 register must be set as well as the EA bit
of the IEN0 register.
void uart0ws0relcfg(void);
// - Constants definition
sbit UART_TX_EMPTY = USERFLAGS^1;
//---------------------------------------------------------------------------
//
MAIN FUNCTION
//---------------------------------------------------------------------------
at 0x0100 void main (void) {
TABLE 120: (PORTIRQEN) PORT CHANGE IRQ CONFIGURATION - SFR 9FH
// Enable and configure the UART0 & UART1
7
--
6
--
5
--
4
--
uart0ws0relcfg();
uart1Config();
//Configure UART0
//Configure UART1
3
2
1
0
//*** Configure the interrupts
P13IEN
P12IEN
P11IEN
P10IEN
IEN0 |= 0x91;
IEN2 |= 0x01;
//Enable UART0 Int + enable all int
//Enable UART1 Interrupt
do
Bit
Mnemonic
--
--
--
Function
{
}while(1);
// End of main()...
7
6
5
4
3
Reserved, Keep at 0
Reserved, Keep at 0
Reserved, Keep at 0
Reserved, Keep at 0
Port 1.3 IRQ on change enable
0 = Disable
1 = Enable
Port 1.2 IRQ on change enable
0 = Disable
1 = Enable
Port 1.1 IRQ on change enable
0 = Disable
1 = Enable
Port 1.0 IRQ on change enable
0 = Disable
//Wait for UARTs interrupts
//---------------------------------------------------------------------------
// INTERRUPT ROUTINES
//---------------------------------------------------------------------------
--
P13IEN
//---------------------------------------------------------------------------
// UART0 interrupt
//
2
1
0
P12IEN
P11IEN
P10IEN
// Retrieve character received in S0BUF and transmit it
// back on UART0
// //-------------------------------------------------------------------------
void int_uart0 (void) interrupt 4 {
IEN0 &= 0x7F;
//disable All interrupts
//--- The only UART0 interrupt source is Rx...
txmit0(S0BUF);
// Return the character
//received on UART0
1 = Enable
S0CON = S0CON & 0xFC;
IEN0 |= 0x80;
//clear R0I & T0I bits
// enable all interrupts
}// end of UART0 interrupt
The PORTIRQSTAT register monitors the
occurrence of the interrupt on port change.
This register serves to define which P1 pin has
changed when an interrupt occurs.
//---------------------------------------------------------------------------
// UART1 interrupt
//
// Retrieve character received in S1BUF and transmit it
// back on UART1
// //---------------------------------------------------------------------------
void int_uart1 (void) interrupt 16 {
IEN0 &= 0x7F;
//disable All interrupts
//--- The only UART1 interrupt source is Rx...
txmit1(S1BUF);
// Return the character
// received on UART1
// clear both R1I & T1I bits
// enable all interrupts
S1CON = S1CON & 0xFC;
IEN0 |= 0x80;
}// end of UART1 interrupt
Note:
See UART0 / UART1 section for configuration examples and
TXMITx functions
_________________________________________________________________________________________________
www.ramtron.com page 67 of 76
VMX51C1016
TABLE 121: (PORTIRQSTAT) PORT CHANGE IRQ STATUS - SFR A1H
The following provides an assembler example
for configuration of the interrupt on Port 1 pin
change and how it is shared with the ADC
interrupt.
7
6
5
4
P17ISTAT
P16ISTAT
P15ISTAT
P14ISTAT
3
2
1
0
P13ISTAT
P12ISTAT
P11ISTAT
P10ISTAT
include VMIXreg.INC
;*** INTERRUPT VECTORS JUMP TABLE *
ORG 0000H
Bit
Mnemonic
--
--
--
Function
Unused
Unused
Unused
Unused
Port 1.3 changed
0 = No
1 = Yes
Port 1.2 changed
0 = No
1 = Yes
Port 1.1 changed
0 = No
1 = Yes
Port 1.0 changed
0 = No
7
6
5
4
3
;BOOT ORIGIN VECTOR
START
;INT ADC and P1 change interrupt
INT_ADC_P1
LJMP
LJMP
ORG 006BH
--
;*** MAIN PROGRAM
ORG 0100h
P13ISTAT
START:
MOV
MOV
DIGPWREN,#01H
P2PINCFG,#0FFH
;ENABLE TIMER 2
2
1
0
P12ISTAT
P11ISTAT
P10ISTAT
;*** Initialise Port change interrupt on P1.0 - P1.7
MOV
MOV
PORTIRQSTAT,#00H
PORTIRQEN,#11111111B
;*** Initialise the ADC, BGAP, PGA Operation
MOV ANALOGPWREN,#07h
;Select CH0 as ADC input + Enable input buffer + Adc clk
MOV
MOV
MOV
INMUXCTRL,#0Fh
ADCCLKDIV,#0Fh
ADCCONVRLOW,#000h
1 = Yes
;*** configure ADC Conversion Rate
MOV
MOV
MOV
ADCCONVRMED,#080h
ADCCONVRHIGH,#016h
ADCCTRL,#11111010b
FIGURE 44: APPLICATION EXAMPLE OF PORT CHANGE INTERRUPT
Numeric Keypad
;***Activate All interrupts + (serial port for debugger support)
MOV
;*** Enable ADC interrupt
MOV
IEN0,#090H
1
4
7
*
2
5
8
0
3
6
9
#
P1.3
P1.2
IEN1,#020H
;***Wait IRQ…
WAITIRQ: LJMP
WAITIRQ
ORG 0200h
P1.1
;************************************************************************
;* IRQ ROUTINE: IRQADC + P1Change
;************************************************************************
INT_ADC_P1:
VMX51C1016
P1.0
;MOV
IEN0,#00h ;DISABLE ALL INTERRUPT
;***Check if IRQ was caused by Port Change
;***If PORTIRQSTAT = 00h -> IRQ comes from ADC
MOV
A,PORTIRQSTAT
P2.0
P2.1
P2.2
JZ
CASE_ADC
;*** If interrupt was caused by Port 1, change
CASE_P0CHG:
MOV
PORTIRQSTAT,#00H
;*** Perform other instructions related to Port1 change IRQ
;(...)
;*** Jump to Interrupt end
AJMP
ENDADCP1INT
;*** If interrupt was caused by ADC
CASE_ADC:
ANL
ADCCTRL,#11110011b
;***Reset ADC interrupt flags & Reset ADC for next acquisition
ORL
ADCCTRL,#080h
ORL
ADCCTRL,#11111010b
;*** Perform other instructions related to Port1 change IRQ
;(...)
;** End of ADC and Port 1 Change interrupt
ENDADCP0INT:
ANL
IRCON,#11011111b
;***Enable All interrupts before exiting
; MOV
RETI
IEN0,#080H
END
_________________________________________________________________________________________________
www.ramtron.com page 68 of 76
VMX51C1016
speed when an interrupt occurs (see the
following figure).
The Clock Control Circuit
The VMX51C1016’s clock control circuit allows
dynamic adjustment of the clock from which the
processor and the peripherals derive their clock
source. This enables reduction of overall power
consumption by modulating the operating
frequency according to processing requirements
or peripheral use.
FIGURE 45: CLOCK TIMING WHEN AN INTERRUPT OCCURS
INTERNAL
CLOCK
INTERRUPT
INTERRUPT
SET
INTERRUPT
CLEARED
A typical application for this is a portable
acquisition system, in which significant power
savings can be achieved by lowering the
operating frequency between A/D conversions,
and automatically throttling it to full speed when
an A/D converter interrupt is generated. Note
that the ADC operation is not affected by the
clock control unit.
Once the interrupt is cleared, the VMX51C1016
returns to the selected operating speed as
defined by the MCKDIV [3:0] bits of the
CLKDIVCTRL register.
When the IRQNORMSPD bit is set the
VMX51C1016 will continue to operate at the
selected speed as defined by the MCKDIV [3:0]
bits of the CLKDIVCTRL register.
The clock control circuit allows adjusting the
system clock from [Fosc/1] (full speed) down to
[Fosc/512]. The clock division control is done via
the CLKDIVCTRL register located at address
94h of the SFR register area.
Note With the exception of the A/D converter,
all the peripheral operating speeds are
affected by the clock control circuit.
TABLE 122: (CLKDIVCTRL) CLOCK DIVISION CONTROL REGISTER -SFR 94H
Software Reset
7
6
-
5
-
4
SOFTRST
IRQNORMSPD
Software reset can be generated by setting the
SOFTRST bit of the CLKDIVCTRL register to 1.
3
2
1
0
MCKDIV [3:0]
Bit
Mnemonic
SOFTRST
Function
Writing 1 into this bit location
provokes a reset. Read as a 0
-
7
6:5
-
0 = Full Speed in IRQ
1 = Selected speed during
IRQs
4
IRQNORMSPD
Master Clock Divisor
0000 – Sys CLK
0001 = SYS /2
0010 = SYS /4
0011 = SYS /8
0100 = SYS /16
0101 = SYS /32
0110 = SYS /64
0111 = SYS /128
1000 = SYS /256
1001 = SYS /512
(…)
3:0
MCKDIV [3:0]
1111 = SYS /512
The value written into the lower nibble of the
CLKDIVCTRL register, MCKDIV [3:0], defines
the clock division ratio.
When the IRQNORMSPD bit is cleared, the
VMX51C1016 will run at the maximum operating
_________________________________________________________________________________________________
www.ramtron.com page 69 of 76
VMX51C1016
shuts down. The CPU will exit this state only
when a non-clocked external interrupt or reset
occurs (internal interrupts are not possible
because they require clocking activity).
Power-on/Brown-Out Reset
The VMX51C1016 includes
a
power-on-
reset/brown-out detector circuit that ensures the
VMX51C1016 enters and stays in the reset state
as long as the supply voltage is below the reset
threshold voltage (in the order of 3.7 – 4.0 volts).
The following interrupts can restart the
processor from STOP mode: Reset, INT0, SPI
Rx/Rx Overrun, and the I²C interface.
In most applications, the VMX51C1016 requires
no external components to perform a power-on
reset when the device is powered-on.
FIGURE 46: POWER MANAGEMENT ON THE VMX51C1016
IDLE
CLKCPU
GATE
STOP
CLK FOR
The VMX51C1016 also has a reset pin for
applications in which external reset control is
required. The reset pin includes an internal pull-
up resistor. When a power-on reset occurs, all
SFR locations return to their default values and
peripherals are disabled.
CPU
INTERRUPT
REQUEST
CLKPER
GATE
CLK FOR
PERIPHERALS
CLK
The following table describes the power control
register of the VMX51C1016.
Errata:
TABLE 123: (PCON) POWER CONTROL (CPU) - SFR 87H
The VMX51C1016 may fail to exit the reset state
if the supply voltage drops below the reset
7
6
-
5
-
4
-
3
2
1
0
SMOD
GF1
GF0
STOP
IDLE
threshold, but not below
3
volts. For
Bit
7
Mnemonic
SMOD
Function
applications where this condition can occur, use
an external supply monitoring circuit to reset the
device.
The speed in Mode 2 of Serial Port 0
is controlled by this bit. When
SMOD= 1, fclk /32. This bit is also
significant in Mode 1 and 3, as it
adds a factor of 2 to the baud rate.
6
5
4
-
-
-
-
-
-
Processor Power Control
3
2
1
GF1
GF0
STOP
Not used for power management
Not used for power management
Stop mode control bit. Setting this bit
turns on the STOP Mode. STOP bit
is always read as 0.
IDLE mode control bit. Setting this bit
turns on the IDLE mode. IDLE bit is
always read as 0.
The processor power management unit has two
modes of operation: IDLE mode and STOP
mode.
0
IDLE
IDLE Mode
When the VMX51C1016 is in IDLE mode, the
processor clock is halted. However, the internal
clock and peripherals continue to run. The
power consumption drops because the CPU is
not active. As soon as an interrupt or reset
occurs, the CPU exits IDLE mode.
In order to enter IDLE mode, the user must set
the IDLE bit of the PCON register. Any enabled
interrupts will force the processor to exit IDLE
mode.
STOP Mode
In order to enter STOP mode, the user must set
the STOP bit of the PCON register. In this mode,
in contrast to IDLE mode, all internal clocking
_________________________________________________________________________________________________
www.ramtron.com page 70 of 76
VMX51C1016
Watchdog Timer
TABLE 125: (IP0) INTERRUPT PRIORITY REGISTER 0 - SFR B8H
7
6
5
4
3
2
1
0
UF8
WDTSTAT
IP0 [5:0]
The VMX51C1016’s watchdog timer is used to
monitor program operation and reset the
processor in cases where the code could not
refresh the watchdog before it’s timeout period
has lapsed. This can come about from an event
that results in the program counter executing
faulty or incorrect code and inhibiting the device
from doing its intended job.
Bit
Mnemonic
UF8
Function
User Flag bit
7
6
WDTSTAT Watchdog timer status flag. Set to 1
by hardware when the Watch Dog
timer overflows. Must be cleared
manually
5
IP0.5
Port1
Timer 2
ADC
Change
4
3
2
IP0.4
IP0.3
IP0.2
UART0
Timer 1
-
-
MULT/ACCU
I2C
SPI RX
availlable
SPI TX
Empty
The watchdog timer consists of a 15-bit counter
composed of two registers (WDTL and WDTH)
and a reload register (WDTREL). See the
following figure.
-
-
-
1
0
IP0.1
IP0.0
Timer 0
Interrupt
External
INT0
External
INT 0
UART1
FIGURE 47: WATCH DOG TIMER
SYSCLK ÷ 12
÷2
The WDTSTAT bit of the IP0 register is the
watchdog status flag. This bit is set to 1 by the
hardware whenever a watchdog timer overflow
occurs. This bit must be cleared manually.
0
WDTL
7
8
WDTH
14
WDTR
÷16
Setting-up the Watchdog Timer
0
WDTREL
7
Control of the watchdog timer is enabled by the
following bits;
Control Logic
WDTR
(Refresh)
WDTS
(Start)
Bit
Location
DIGPWREN.6
IEN0.6
Role
WDOGEN
WDTR
WDTS
Watchdog timer enable
Watchdog timer refresh flag
Watchdog timer Start bit
The WDTL and WDTH registers are not
accessible from the SFR register. However, the
WDTREL register makes it possible to load the
upper 6 bits of the WDTH register.
IEN1.6
In order for the watchdog to begin counting, the
user must set the WDOGEN bit (bit 6) of the
DIGPWREN register as follows:
The PRES bit of the WDTREL register selects
the prescaler clock that is fed into the watchdog
timer.
MOV
DIGPWREN,#x1xxxxxxB
;x=0 or 1 depending
;of other peripherals
;to enable
When PRES = 0, the clock prescaler = 24
When PRES = 1, the clock prescaler = 384
TABLE 124: (WDTREL) WATCHDOG TIMER RELOAD REGISTER - SFR D9H
7
6
5
4
3
2
1
0
PRES
WDTREL [6:0]
Bit
7
Mnemonic
PRES
Function
Prescaler select bit. When set, the
watchdog is clocked through an
additional divide-by-16 prescaler.
7-bit reload value for the high-byte
of the watchdog timer. This value
is loaded into the WDT when a
refresh is triggered by a
6-0
WDTREL
consecutive setting of the WDT
and SWDT bits.
_________________________________________________________________________________________________
www.ramtron.com page 71 of 76
VMX51C1016
The value written into the WDTREL register
defines the delay time of the watchdog timer as
follows:
*** The Simple way ***
MOV
MOV
IEN0,#x1xxxxxxB
IEN1,#x1xxxxxxB
;DIRECT WRITE THAT SET BIT
;WDTR (x = 0 or 1)
;DIRECT WRITE THAT SET BIT
;WDTS (x = 0 or 1)
WDT delay when the WDTREL bit 7 is cleared
In the case where the program makes use of the
interrupts, it is recommended to deactivate the
interrupts before the watchdog refresh is
performed and reactivate them afterward.
WDT Delay =
24*[ 32768–(WDTREL(6:0) x 256)]
Fosc
WDT delay when the WDTREL bit 7 is set
b) Watchdog timer refresh example 2:
WDT Delay =
384*[ 32768–(WDTREL(6:0) x 256)]
Fosc
*** If Interrupts are used: ***
CLR
MOV
ORL
XCH
MOV
ORL
MOV
MOV
SETB
IEN0.7
A,IEN0
A,#01000000B
A,R1
;Deactivate the interrupt
;Retrieve IEN0 content
;set the bit 6 (WDTR)
;Store IENO New Value
;Retrieve IEN1 content
;Set bit 6, (WDTS)
; Set WDTR BIT
;Set WDTS BIT
;Reactivate the Interrupts
The following table demonstrates WDT reload
values and their corresponding delay times:
A,IEN1
A,#01000000B
IEN0,R1
IEN1,A
IEN0.7
Fosc
WDTREL
00h
WDT Delay
53.3ms
20.4ms
14.74MHz
14.74MHz
14.74MHz
Watchdog Timer Reset
4Fh
CCh
347ms
To determine whether the reset condition was
caused by the watchdog timer, the state of the
WDTSTAT bit of the IP0 register should be
monitored. On a standard power-on reset
condition, this bit is cleared.
Note: The value present in the CLKDIVCTRL
register affects the watchdog timer delay time.
The above equations and examples assume that
the CLKDIVCTRL register content is 00h.
Starting the Watchdog Timer
To start the watchdog timer using the hardware
automatic start procedure, the WDTS (IEN1)
and WDTR (IEN0) bits must be set. The
watchdog will begin to run with default settings
i.e. all registers will be set to zero.
;*** Do a Watchdog Timer Refresh / Start sequence
SETB
SETB
IEN0.6
IEN1.6
;Set the WDTR bit first
;Then without delay set the
;WDTS bit
When the WDT registers enter the state 7FFFh,
the asynchronous signal, WDTS will become
active. This signal will set bit 6 in the IP0 register
and trigger a reset.
To prevent the watchdog timer from resetting the
VMX51C1016, reset it periodically by clearing
the WDTR and clear the WDTS bit immediately
afterward,.
As a security feature to prevent an inadvertent
clearing of the watchdog timer, no delay
(instruction) is allowed between the clearing of
the WDTR and WDTS bits.
a) Watchdog timer refresh example 1:
_________________________________________________________________________________________________
www.ramtron.com page 72 of 76
VMX51C1016
WDT Initialization and Use Example
Program
VMX51C1016 Programming
When the PM pin is set to 1, the I²C interface
becomes the programming interface for the
VMX51C1016’s Flash memory.
ORG 0000H
LJMP
;RESET & WD IRQ VECTOR
START
;*************************************
;* MAIN PROGRAM BEGINNING *
;*************************************
An in-circuit programming interface is easy to
implement at the board level. See VMIX APP-
Note001.
ORG 0100h
;*** Initialize WDT and other peripherals***
MOV
DIGPWREN,#40H
;ENABLE WDT OPERATION
;*** INITIALIZE WATCHDOG TIMER RELOAD VALUE
MOV
WDTREL,#04FH
;The WDTREL register is used to
;define the Delay Time WDT.
Erasing and programming the VMX51C1016’s
;Bit
7
of WDTREL define clock
Flash
memory
requires
an
external
;prescalng value
;Bit 6:0 of WDTREL defines the
;upper 7 bits reload value of the
;watchdog Timer 15-bit timer
programming voltage of 12 volts. The voltage is
supplied/controlled
hardware/tools.
by
the
programming
;*** PERFORM A WDT REFRESH/START SEQUENCE
SETB
IEN0.6
;Set the WDTR bit first
SETB
IEN1.6
;Then without delay (instruction)
;set the WDTS bit right after.
;No Delays are permitted between
;setting of the WDTR bit and
;setting of the WDTS bit.
;This is a security feature to
;prevent inadvertent reset/start of
;the WDT
The VMX51C1016 can be programmed using
Ramtron in-circuit programmers.
FIGURE 48: VMX51C1016 PROGRAMMING
;IF other interrupt are enabled,
;It is recommended to disable
;interrupts before refreshing the
;WDT and reactivate them after
;*** Wait WDT Interrupt
WAITWDT:
NOP
;*** If the two following code lines below are put "in-comment", the ;***WDT will
trigger a reset, and the program will restart.
;*** PERFORM A WATCHDOG TIMER REFRESH/START SEQUENCE
;SETB
;SETB
LJMP
IEN0.6
IEN1.6
WAITWDT
;Set the WDTR bit first
;Then without delay (instruction)
;set the WDTS bit right after.
;No Delays are permitted between
;setting of the WDTR bit and
;setting of WDTS bit.
;This is a security feature to
;prevent inadvertent reset/start of
;the WDT
Target PC Board
5V (optional)
SCL
SDA
VPP 12V
VERSA-ICP
;It is recommended to disable
;interrupts before refreshing the ;WDT
and reactivate them after
PM
RES - (RESET)
GND
_________________________________________________________________________________________________
www.ramtron.com page 73 of 76
VMX51C1016
FIGURE 49: VMX51C1016 DEBUGGER HARDWARE INTERFACE
VMX51C1016 Debugger
VERSA WARE
In-Circuit
Debugger
Software
The VMX51C1016 includes hardware debugging
features that can help speed up embedded
software development time.
Debugger Features
The
VMX51C1016
debugger
supports
breakpoints and single-stepping of the user
program. It supports retrieval and editing of the
SFR register and RAM memory contents when a
breakpoint is reached or when the device
operates in single-step mode. Unlike ROM
monitor programs that execute user program
instructions at a much lower speed, the
VMX51C1016 debugger does not affect program
operating speed when in “Run Mode” before
encountering a breakpoint.
To UART0
RS232
Transceiver
VERSA-ICP
Target PC Board
Debugger Software Interface
Debugger Hardware Interface
The Versa Ware VMX51C1016 software running
on Windows™ provides an easy-to-use user
interface for in-circuit debugging.
The VMX51C1016’s development system
provides the ideal platform for running the
VMX51C1016
VMX51C1016 debugger is done via the UART0
serial interface.
debugger.
Interfacing
the
For more details on the VMX51C1016 debugger,
consult the “Versa Ware VMX51C1016 – V1
Software User Guide.pdf”
It is possible to run the VMX51C1016 debugger
on the end user’s PCB providing that access to
the VMX51C1016 UART0 is available.
However, a connection to a stand alone in-circuit
programmer (ICP) will be required to perform
Flash programming, control the reset line and
activate the debugger on the target
VMX51C1016 device.
All documents are also accessible on the
Ramtron web site at http://www.ramtron.com/
_________________________________________________________________________________________________
www.ramtron.com page 74 of 76
VMX51C1016
VMX51C1016 - 44 pin Quad Flat Package
L
e
R1
VMX51C1016
D2 D1
D
QFP-44
R2
b
A2
E2
E1
E
A1
A
e1
Seating
Plane
cop
TABLE 126: DIMENSIONS OF QFP-44 CHIP CARRIER
Dimension in
Symbol
mm
Minimal/Maximal
-/2.45
A
Al
A2
b
e1
D
D1
E
E1
e
0.25/0.50
1.95/2.10
0.30/0.40
10º typ
13.20 BSC
10.00 BSC
13.20 BSC
10.00 BSC
0.80
L
0.78/1.03
-/0.10
0.2 RAD typ.
0.3 RAD typ.
cop
R1
R2
_________________________________________________________________________________________________
www.ramtron.com page 75 of 76
WWW.ALLDATASHEET.COM
Copyright © Each Manufacturing Company.
All Datasheets cannot be modified without permission.
This datasheet has been download from :
www.AllDataSheet.com
100% Free DataSheet Search Site.
Free Download.
No Register.
Fast Search System.
www.AllDataSheet.com
相关型号:
VMX51C1016-14-QCG
Versa Mix 8051 Mixed-Signal MCUWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C1020-14-Q-C
Versa Mix 8051 Mixed-Signal MCUWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C1020-14-Q-C-G
Versa Mix 8051 Mixed-Signal MCUWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C1020-14-Q-C-X
Versa Mix 8051 Mixed-Signal MCUWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C1020-14-QC
Versa Mix 8051 Mixed-Signal MCUWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C1020-14-QCG
Versa Mix 8051 Mixed-Signal MCUWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C900
Versa Mix 8051 MCU with LCD Controller and ADCWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C900-25-L
Versa Mix 8051 MCU with LCD Controller and ADCWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C900-25-L-G
Versa Mix 8051 MCU with LCD Controller and ADCWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C900-25-LG
Versa Mix 8051 MCU with LCD Controller and ADCWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C900-25-P
Versa Mix 8051 MCU with LCD Controller and ADCWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
VMX51C900-25-P-G
Versa Mix 8051 MCU with LCD Controller and ADCWarning: Undefined variable $rtag in /www/wwwroot/website_ic37/www.icpdf.com/pdf/pdf/index.php on line 217
-
ETC
©2020 ICPDF网 联系我们和版权申明