//************************************************************************
// ATmega644 zu VDIP1 über SPI
//************************************************************************
#include <avr/io.h>
#include <string.h> // Stringfunktion
#include <stdio.h> // Standartfunktion
#include <stdlib.h>
//#include <conio.h>
//#include <delay.h> // Pausenfuktion
//************************************************************************
// Definebereich VDIP1
//************************************************************************
#define SCLK P1_6 // SCLK Port 1 Pin 6 Taktsignal vom VDIP1
#define SDI P1_7 // SDI Port 1 Pin 7 Serial Daten Input vom VDIP1
#define SDO P1_5 // SDO Port 1 Pin 5 Serial Daten Output vom VDIP1
#define CS_VDIP P1_0 // CS_VNC Port 1 Pin 0 Chip Select Input vom VDIP1
#define RE_VDIP P1_1 // RE_VNC Port 1 Pin 1 Hardware Reset vom VDIP1
/*
#define SCLK P1_1 //(PortB, 0); // SCLK Port 1 Pin 6 Taktsignal vom VDIP1
#define SDI P1_2 //(PortB, 1); // SDI Port 1 Pin 7 Serial Daten Input vom VDIP1
#define CS_VDIP P1_3 //(PortB, 2); // CS_VNC Port 1 Pin 0 Chip Select Input vom VDIP1
#define RE_VDIP P1_4 //(PortB, 3); // RE_VNC Port 1 Pin 1 Hardware Reset vom VDIP1
#define SDO P1_5 //(PortB, 4); // SDO Port 1 Pin 5 Serial Daten Output vom VDIP1
*/
//************************************************************************
// Statische Variablen
//************************************************************************
static char vdip1_check = 0x02; // 1 = Prüfung Programmier-Port und Fehlermeldungen
// 2 = Prüfung nur Programmier-Port
// verwendet in main zum aufruf "vdip1_prüfe_anwesenheit"
static char vdip1_Programmier_Port_ok = 0x01; // verwendet in main zum überprüfen des zustandes des VDIP1 Moduls
// verwendet in "vdip1_bin_file_bescheiben"
//static char vdip1_check = 0x01; // verwendet in "vdip1_bin_file_bescheiben" Zustandsabfrage
static char file_neu = 0x00; // Neue Datei erzeugen
static char file_erweitern = 0x01; // Inhalt an Datei anhängen
// verwendet in main bei Datenablage VDIP1 Modul
// neue Datei erzeugen oder in Datei ablegen
//************************************************************************
// Global veränderbare Variablen
//************************************************************************
volatile char lese_buffer[10]; // Empfangsbuffer (10Byte groß)
// verwendet in der Funktion "vdip1_byte_lesen"
volatile char sende_buffer[20]; // Sendebuffer (20Byte groß)
volatile char vdip1_status; // Status Bit für die Empfangs-Daten
// verwendet in der Funktion "vdip1_byte_lesen"
//************************************************************************
// Binärer Datensätz für VDIP1
//************************************************************************
char file2[] = {0xFA,0x89,0x11,0x23,0xAA,0x02,0x00,0x1F,
0x1D,0xBA,0xA6,0x24,0x99,0x2D,0x1E,0x1F,
0x0D,0x0C,0xA0,0x55,0x30,0x1F,0x16,0xEF,
0x04,0x22,0x00,0x00,0xCF,0x12,0x5F,0xDF,
0x69,0x00,0x00,0x1F,0xEF,0x15,0x3F,0xCF,
0x5F,0x44,0x1F,0x1F,0xBF,0x16,0x13,0x7F,
0x00,0x10,0x1F,0xDF,0x1F,0x8F,0x16,0xDF,
0x1F,0x32,0x3F,0x56,0x1F,0x19,0x17,0xFF,
0x3F,0x42,0xFE,0x46,0x6F,0x99,0x10,0xAF,
0x6F,0x62,0x36,0x66,0x10,0xAA,0xBB,0xCC};
//************************************************************************
// Funktionen Deklaration
//************************************************************************
void vdip1_init(void); // VDIP1 Initialisierung
void vdip1_byte_lesen(char); // aus VDIP1 ein Byte lesen
char vdip1_pr(char); // VDIP1 Prüfen
char vdip1_byte_schreiben(char); // VDIP1 Byte schreiben
void vdip1_cmd_schreiben(char); // VDIP1 Befehl schreiben
void vdip1_bin_file_bescheiben(char, char, int); // in VDIP1 ein Binäre Datei beschreiben
void vdip1_txtfile_schreiben(char, char, char); // in VDIP1 eine Textdatei schreiben
//************************************************************************
// Hauptprogramm
//************************************************************************
int main (void)
{
vdip1_init(); // VNC1L-Initialisierung
DDRB = 0x0F; // PortB die oberen 4 Bit als eingang die unteren 4 Bit als Ausgang
//***************************
// Hauptschleife
//***************************
while(1) // Endlosschleife
{
char vdip1_ok = 0x00;
char batch = 0x00;
vdip1_ok = vdip1_pr(vdip1_check); // VDIP1 Zustand abfragen
if ( vdip1_ok == vdip1_Programmier_Port_ok) // Prüfung auf Programmier Port Zustand
{ // VDIP1 Zustand OK und kann jetzt neue Kommandos annehmen
switch (batch) // Batchprozess
{
case 0: vdip1_cmd_schreiben("ECS"); // Erweiterte Kommando Set einstellen
break;
case 1: vdip1_cmd_schreiben("IPA"); // Alle Zeichen werden als ASCII Zeichen gesendet
break;
case 2: vdip1_cmd_schreiben("FWV"); // FWV Firmwareversion anzeigen
break;
case 3: vdip1_cmd_schreiben("DIR"); // Anzeige des USB_Stick inhaltes
break;
// case 4: vdip1_txtfile_schreiben("VNCFILE1.TXT",file1[0],file_neu); // Textfile auf USB-Stick erzeugen
// break;
// case 5: vdip1_txtfile_schreiben("VNCFILE1.TXT",file1[0],file_erweitern); // gleiches Textfile auf USB-Stick anhängen
// break;
case 6: vdip1_bin_file_bescheiben("VNCFILE2.BIN",file2,80); // Binärfile auf USB-Stick erzeugen
break;
// case 7: vnc_rd_file("VNCFILE1.TXT",test_buffer,20); // File (Teil) von USB-Stick in Speicher einlesen
// break;
}
delay_ms(1000); // Pause
batch++; // nächster Schritt
if (batch == 8)
{
batch = 3; // Funktionen wiederholen für Testzwecke
}
}
}
return 0;
}