RAM.C2 V2.0 - Hilfe


Beschreibung

Einfügen als Gemeinsames Modul

Konstanten

Funktionen:
init()
deselect()
writebyte()
writeint()
writelong()
writefloat()

writebytearray()
writeintarray()
writelongarray()

writestr()
readbyte()
readint()
readlong()
readfloat()

readbytearray()
readintarray()
readlongarray()

readstr()
Portfunktionen:
set()
get()
toggle()
pulse()

System-Funktionen:
addrD()
wrbyte()
wrint()
wrlong()
wrarrB()
wrarrI()
wrarrL()
rdbyte()
rdint()
rdlong()
rdarrB()
rdarrI()
rdarrL()


Beschreibung   Nach oben

Das Modul ram.c2 ist der Treiber für das CC2Net-RAM-Device 4MBit, betrieben
über das CC2Net-RAM-Interface-Ports oder das CC2Net-RAM-Interface I²C, und
für das CC2Net-RAM-Device HS.
Das Modul ram.c2 basiert auf dem ASM-Treiber ramdev.hex, welcher in das Segment 3
des CC2-Flash geladen werden muß.
Alle Funktionen des Moduls sind über das I²C-Capture gecaptured.

Neuerungen ab V2.0 gegenüber alter ram.c2:
- Nurnoch ein Modul für CC2Net-RAM-Device 4MBit und CC2Net-RAM-Device HS
- Übertragungsraten durch ASM-Treiber stark gesteigert (Interface Ports: bis zu 6,5kB/s)
- Einfache lineare Adressierung; kein besonderes Auswählen der RAM-Bausteine
   mehr erforderlich.


Einfügen als Gemeinsames-
Modul
   Nach oben

Die Datei ram.c2 in das Verzeichnis .\CControl2\UserLib kopieren und
in der Datei modules.txt die Zeile ram.c2 einfügen.
Ein zusätzliches Ausrufezeichen unmittelbar nach einem Modulnamen in modules.txt bestimmt,
daß das Modul in jedem neuen Projekt von Anfang an aktiviert wird.
Außerdem muß die Datei ramdev.hex mit den nötigen Systemroutinen mit dem Downloadtool
in die C-Control II geladen werden.
Der Systemtreiber ramdev.hex belegt den Adressbereich 0xD800 bis 0xDD5F
im Segment 3 des Flash. (1376 Byte)


Konstanten   Nach oben

Mit der Konstante IOMask wird das RAM-Device festgelegt.
Entwederr CC2Net-RAM-Interface I²C oder CC2Net-RAM-Device HS.
Für das CC2Net-RAM-Interface Ports wird diese Konstante nicht benötigt.

const IOMask = 0xC0; // CC2Net-RAM-Interface I²C
//const IOMask= 0xD8; // CC2Net-RAM-Device HS

Die Portparameter dürfen nicht verändert werden!
// Belegung I/O-Ports für Interface Ports (don't change !!)
const SHCLK=5;
const STCLK=6;
const DS=4;
const WE=3;

Die folgenden Konstanten zeigen die Anfangsadresswerte der
einzelnen RAM-Bausteine. Die Adresse 0x800000 setzt den RAM
in den deselect Modus. Mit den Adressen 0x400000 bis 0x41FFFF
werden alle RAM-Bausteine gleichzeitig angesprochen.
Dies kann z.B. dafür benutzt werden, um in alle Bausteine
gleichzeitig Daten zu schreiben. (z.B. löschen)
// Adress-Konstanten
const RAM1    = 0x000000; // Adr.Bereich: 0x000000 - 0x01FFFF
const RAM2    = 0x020000; // Adr.Bereich: 0x020000 - 0x03FFFF
const RAM3    = 0x040000; // Adr.Bereich: 0x040000 - 0x05FFFF (nicht Device HS !)
const RAM4    = 0x060000; // Adr.Bereich: 0x060000 - 0x07FFFF (nicht Device HS !)
const RAMALL  = 0x400000; // Adr.Bereich: 0x400000 - 0x41FFFF
const DESELECT= 0x800000;

Dies sind die Einspungadressen für den ASM-Treiber.
Diese dürfen nicht geändert werden !
// Einsprungadressen der System-Routinen: (ramdev.hex)
const _AddrD    =0xD800;

const _WRbyte   =0xD82A;
const _WRint    =0xD862;
const _WRlong   =0xD892;
const _WRarrbyte=0xD8D0;
const _WRarrint =0xD90A;
const _WRarrlong=0xD940;

const _RDbyte   =0xD990;
const _RDint    =0xD9C6;
const _RDlong   =0xDA1C;
const _RDarrbyte=0xDA94;
const _RDarrint =0xDAE4;
const _RDarrlong=0xDB4C;


Funktionen:

init()   Nach oben

    function init(byte DataPCF, byte AddrPCF) returns byte

Mit der Funktion init() wird das CC2Net-RAM-Device initialisiert und
die I²C-Bus-Adressen für den Daten-PCF8574 und dem Adress/Kontroll-PCF8574
übergeben. Wird das CC2Net-Interface Ports benutzt, so muß für AddrPCF
der Wert 255(0xFF) angegben werden.
Wird das CC2Net-RAM-Device HS benutzt, so muß für DataPCF der Wert 7
und für AddrPCF der Wert 6 angegeben werden.
War die initialisierung erfolgreich, so wird der Wert 0 zurückgegeben. Bei einem 
Fehler (einer der Busbausteine reagiert nicht) wir ein entsprechender 3-Bit Fehlercode
zurückgegeben. Besitzt Bit 0 einen High-Pegel, reagiert der Daten-PCF an der angegebenen
Adresse nicht; bei Bit 1=high reagiert der Adress/Kontroll-PCF nicht;
bei Bit 2=high reagiert der Baustein SAA1064 nicht.(Adresse 0x70).
Bit 1 und Bit 2 können nur beim CC2Net-RAM-Interface I²C und beim
CC2Net-RAM-Device HS gesetzt werden.

DataPCF Daten-PCF8574: 0 bis 7: PCF8574, 8-15 PCF8574A
bei CC2Net-RAM-Device HS fest 7
AddrPCF Adress/Kontroll-PCF8574:
0 bis 7: PCF8574, 8-15 PCF8574A
bei CC2Net-RAM-Device HS fest 6
bei CC2Net-RAM-Interface Ports: 255
 

deselect()   Nach oben

    function deselect()

Die Funktion deselect() setzt die CS Leitungen aller RAM-Bausteine auf high-Pegel,
womit alle Bausteine in den deselected-Mode gesetzt werden. (=Standby)
Vor dem Abstecken des CC2Net-RAM-Devices oder vor dem Abschalten 
der Betriebsspannung sollte diese Funktion immer ausgeführt werden.

Schreibfunktionen für einzelne Werte   Nach oben

    function writebyte(long addr, byte data)
    function writeint(long addr, int data)
    function writelong(long addr, long data)
    function writefloat(long addr, float data)

Mit diesen Funktionen werden einzelne Werte in das RAM geschrieben.
Bei der Adressierung muß beachtet werden, daß die verschiedenen
Variabeltypen eine unterschiedliche Anzahl an Bytes belegen.
(Byte: 1Byte, Integer: 2Byte, Long: 4Byte, Float: 8Byte)
Alle Werte, außer Float, werden mit MSB first im RAM gespeichert.

addr Adresse für die Daten
data zu speichernder Wert

Schreibfunktionen für Arrays   Nach oben

    function writebytearray(long addr, byte data[], int length)
    function writeintarray(long addr, int data[], int length)
    function writelongarray(long addr, long data[], int length)

Mit diesen Funktionen können Arrays (Byte, Integer und Long) in das RAM
geschrieben werden. Die Maximale Arraylänge ist auf Integer beschränkt.
Werte zwischen -32768 und -1 werden als 32768 bis 65536 interpretiert.

addr Start-Adresse für die Daten
data zu speicherndes Daten-Array
length Anzahl zu speichernder Array-Elemente

Schreibfunktion für Strings(Zeichenketten)   Nach oben

    function writestring(long addr, byte s[])

Mit dieser Funktionen wird der Inhalt einer Stringvariable in das RAM
geschrieben. Ein String belegt im RAM immer 32 Byte.

addr Start-Adresse für die Daten
s[] Referenz für String-Variable
 

Lesefunktionen für einzelne Werte   Nach oben

    function readbyte(long addr) returns byte
    function readint(long addr) returns int
    function readlong(long addr) returns long
    function readloat(long addr) returns float

Mit diesen Funktionen werden einzelne Werte aus dem RAM gelesen und
zurückgegeben..
Bei der Adressierung muß beachtet werden, daß die verschiedenen
Variabeltypen eine unterschiedliche Anzahl an Bytes belegen.
(Byte: 1Byte, Integer: 2Byte, Long: 4Byte, Float: 8Byte)

addr Adresse der Daten im RAM
 

Lesefunktionen für Arrays   Nach oben

    function readbytearray(long addr, byte data[], int length)
    function readintarray(long addr, int data[], int length)
    function readlongarray(long addr, long data[], int length)

Mit diesen Funktionen können Arrays (Byte, Integer und Long) aus dem RAM
gelesen werden. Die Maximale Arraylänge ist auf Integer beschränkt.
Werte zwischen -32768 und -1 werden als 32768 bis 65536 interpretiert.
Es muß darauf geachtet werden, daß das Zielarray mindestens so viele
Elemente enthält, wie für length angegeben.

addr Start-Adresse der Daten
data Ziel-Array für gelesene Daten
length Anzahl zu lesende Array-Elemente

Lesefunktion für Strings(Zeichenketten)   Nach oben

    function readstring(long addr, byte s[]) returns byte

Mit dieser Funktionen wird ein String aus dem RAM ausgelesen und
in der angegebenen Stringvariabel gespeichert.
Es werden immer 32 Byte aus dem RAM gelesen.
Es wird die Stringlänge zurückgegeben. Werden die gelesenen Daten nicht
als String erkannt, so werden die Fehlercodes 0x81 oder 0x82 zurückgegeben.
0x81 bedeutet ungültiger String.
0x82 bedeutet Stringlänge größer 30 Zeichen.

addr Start-Adresse für die Daten
s[] Referenz für String-Variable


Portfunktionen: (nur CC2Net-RAM-Interface I²C und CC2Net-RAM-Device HS)

Portnummern:
Interface I²C:      Port A (P.6) = 0, Port B (P.7) = 1
RAM Device HS: Port A (P.3) = 0, Port B (P.4) = 1, Port C (P.6) = 2, Port D (P.7) = 3

set()   Nach oben

    function set(byte Port, byte state)

Mit set() wird der angegebene freie I/O-Port nach state gesetzt.

Port Port 0 bis 1 bzw. 0 bis 3
state 0 : low, !=0 : high(= Port als Eingang)
 

get()   Nach oben

    function get(byte Port, byte state) returns int

Mit get() wird der angegebene I/O-Port abgefragt und entsprechend
0 oder -1 zurückgegeben.

Port Port 0 bis 1 bzw. 0 bis 3
 

toggle()   Nach oben

    function toggle(byte Port)

Mit toggle() wird der Schaltzustand des angegebenen I/O-Ports invertiert.

Port Port 0 bis 1 bzw. 0 bis 3
 

pulse()   Nach oben

    function pulse(byte Port)

Mit pulse() wird ein Nadelimpuls am angegebenen I/O-Port ausgegeben.
(zweimaliges Invertiern.)

Port Port 0 bis 1 bzw. 0 bis 3


System-Funktionen:

    inline function addrD(byte sys[], long addr ) returns long
    inline function wrbyte(byte data, byte sys[], long addr)
    inline function wrint(int data, byte sys[], long addr)
    inline function wrlong(long data, byte sys[], long addr)
    inline function wrarrB(byte data[], int len, byte sys[], long addr)
    inline function wrarrI(int data[], int len, byte sys[], long addr)
    inline function wrarrL(long data[], int len, byte sys[], long addr)
    inline function rdbyte(byte sys[], long addr) returns byte
    inline function rdint(byte sys[], long addr) returns int
    inline function rdlong(byte sys[], long addr) returns long
    inline function rdarrB(byte data[], int len, byte sys[], long addr)
    inline function rdarrI(int data[], int len, byte sys[], long addr)
    inline function rdarrL(long data[], int len, byte sys[], long addr)

Diese Funktionen werden zum Aufruf des Systemtreibers ramdev.hex benutzt.
Sie sollten ohne genauere Kenntnisse über die Funktion des Systemtreibers
nicht direkt genutzt werden !!


Autor: André Helbig   Mail: andre.h@cc2net.de    Erstellt: 30.7.2003