Einfügen als Gemeinsames Modul
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 |
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