03.01.2015 Views

80C186EC/80C188EC Microprocessor User's Manual

80C186EC/80C188EC Microprocessor User's Manual

80C186EC/80C188EC Microprocessor User's Manual

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CLOCK GENERATION AND POWER MANAGEMENT<br />

$mod186<br />

name<br />

example_PSU_code<br />

;FUNCTION: This function reduces CPU power consumption<br />

; by dividing the CPU operating frequency by a<br />

; divisor.<br />

; SYNTAX: extern void far power_save(int divisor);<br />

; INPUTS: divisor - This variable represents F0, F1 and F2<br />

; of PWRSAV.<br />

; OUTPUTS: None<br />

; NOTE: Parameters are passed on the stack as required<br />

; by high-level languages<br />

;substitute register offset<br />

PWRSAV equ xxxxH ;Power-Save Register<br />

RFTIME equ xxxxH ;Refresh Interval Count<br />

;Register<br />

RFCON equ xxxxH ;Refresh Control Register<br />

PSEN equ 8000H ;Power-Save enable bit<br />

data<br />

segment public 'data'<br />

FreqTable dw 1, 4, 8, 16, 32, 64, 0, 0<br />

data<br />

ends<br />

lib_80C186<br />

_power_save<br />

segment public 'code'<br />

assume cs:lib_80C186, ds:data<br />

public _power_save<br />

proc far<br />

push bp<br />

;save caller's bp<br />

mov bp, sp ;get current top of stack<br />

push ax<br />

;save registers that will<br />

push dx<br />

;be modified<br />

_divisor equ word ptr[bp+6] ;get parameter off the<br />

;stack<br />

mov dx, RFTIME<br />

;get current DRAM refresh<br />

in ax, dx ;rate<br />

and ax, 01ffh<br />

;mask off unwanted bits<br />

_power_save<br />

lib_80C186<br />

div FreqTable[_divisor] ;divide refresh rate<br />

;by _divisor<br />

out dx, ax<br />

;set new refresh rate<br />

mov dx, PWRSAV<br />

;select Power-Save Register<br />

mov ax, _divisor<br />

;get divisor<br />

and ax, 7<br />

;mask off unwanted bits<br />

or ax, PSEN ;set enable bit<br />

out dx, ax<br />

;divide frequency<br />

pop dx<br />

;restore saved registers<br />

pop bx<br />

pop ax<br />

pop bp<br />

;restore caller's bp<br />

ret<br />

endp<br />

ends<br />

end<br />

Example 5-2. Initializing the Power Management Unit for Power-Save Mode<br />

5-23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!