2 reading and writing i/o registers, 1 using assembly language, 2 using library functions – Jameco Electronics Rabbit 3000 User Manual

Page 251

Advertising
background image

242

Rabbit 3000 Microprocessor

18.2 Reading and Writing I/O Registers

The Rabbit has two I/O spaces: internal I/O registers and external I/O registers.

18.2.1 Using Assembly Language

The fastest way to read and write I/O registers in Dynamic C is to use a short segment of
assembly language inserted in the C program. Access is the same as for accessing data
memory except that the instruction is preceded by a prefix (

IOI

or

IOE

) to indicate the

internal or external I/O space. For example:

// compute value and write to Port A Data Register

value=x+y

#asm

ld a,(value) ; value to write

ioi ld (PADR),a ; write value to PADR

#endasm

In the example above the

IOI

prefix changes a store to memory to a store to an internal

I/O port. The prefix

ioe

is used for writes to external I/O ports.

18.2.2 Using Library Functions

Dynamic C functions are available to read and write I/O registers. These functions are pro-
vided for convenience. For speed, assembly code is recommended. For a complete
description of the functions noted in this section, refer to the Dynamic C User’s Manual
or from the

Help

menu in Dynamic C, access the

HTML Function Reference

or

Function

Lookup

options.

To read internal I/O registers, there are two functions.

int RdPortI(int PORT) ; // returns PORT, high byte zero

int BitRdPortI(int PORT, int bitcode); // bit code 0-7

To write internal I/O registers, there are two functions.

void WrPortI(int PORT, char *PORTShadow, int value);

void BitWrPortI(int PORT, char *PORTShadow, int value, int bitcode);

The external registers are also accessible with Dynamic C functions.

int RdPortE(int PORT) ; // returns PORT, high byte zero

int BitRdPortE(int PORT, int bitcode); // bit code 0-7

int WrPortE(int PORT, char *PORTShadow, int value);

int BitWrPortE(int PORT, char *PORTShadow, int value, int bitcode);

In order to read a port the following code could be used:

k=RdPortI(PADR); // returns Port A Data Register

Advertising
This manual is related to the following products: