Hallo Harri81,

anbei mal die main() aus meinem letzen Projekt. Ist allerdings in Tasking Syntax.

Allerdings kann es Dein Problem sicher nicht wirklich lösen.

Zur Konfiguration der ganzen Register des C164 bleibt Dir kaum etwas anderes übrig als:
-ganzes Manual mal lesen (liest sich etwas härter als die Bild Zeitung ), damit Du einen Überblick hast, was es überhaupt gibt.
-Wenn dann Dein Problem genau klar ist, die enstprechende Einheit des C64 auswählen, die Dein Problem lösen kann -> Pinout ableiten
-In der Beschreibung der Funktionseinheit exakt Bit für Bit das Konfigurationswort festlegen. Häufig müssen mehrere Register gesetzt werden.

Nach den (schulmeisterlichen) Ratschlägen der Code selbst:
Willst Du das ganze Programm?
Könnte ich Dir mailen, wenn gewünscht.

Gruß
Bernhard




Code:
/*************************************************
Name:	main()
Zweck:
Date:	12.12.2004
**************************************************/

void
main( void )
{

	unsigned int	i, uii;
	unsigned int uitemp_bak=0;


	//Hardware initialisieren
	_putbit(0,PSW,11);	//Alle Interrupts sperren, bis Konfiguration abgeschlossen ist

	_putbit(0,DP1H,4);	//Vsync
	_putbit(0,DP3,6);	//ODD_EVEN

	_putbit(1,DP3,13);	//L_Drive Output
	_putbit(1,P3,13);	//L_Drive aktiv
	T78CON = 0x04040;	//400ns Auflösung, 26ms period, Timer mode für T7 und T8
	_bfld(CCM6, 0x00F, 0x0002);	//CC24 an T7 haengen, Capture on negative egde  Vsync

	//I2C Bus konfigurieren
	_putbit(1, DP3,9 );	// SDA as output
	_putbit(1, DP3,8 );	// SCL as output

	//Konfiguriere Capcom6 für Burst und L_Found
	_putbit(0,DP1L,0);	//neuer Burst an CC60 auf Input
	_putbit(0,DP1L,2);	//neuer L_Found an CC61 auf Input
	_putbit(1,DP1L,4);	//CC62 auf Output, PWM für Motor 3 HAND
	T12P = 0x0ffff;		//T12 soll komplette 16 Bit durchlaufen. Stimmt so, bei 0 geht gar nichts
	CTCON = 0x2028;		//T12 an, Period 50ns, Shadow transfer, Edge aligned mode, T13 ist aus
	CC6MSEL = 0x0166;	//CC62 Compare Output, CC61 capture falling edged, CC60 Capture falling edge

	//Scheduler konfigurieren
	T7REL = T7_RELOAD;		//Periode 1ms 63036
	T7IC = PRIO_T7OVER;		//Interrupt aktivieren, schon läuft der Scheduler

	//ADC konfigurieren. Auto scan Contiouus conversion. ADC Start jede ms im Scheduler
	_putbit(1,P5DIDIS,0);	//Digitalen Eingang an ADC0 P5.0 disablen um Störungen zu reduzieren
	_putbit(1,P5DIDIS,1);
	_putbit(1,P5DIDIS,2);

	//serielle Schnittstelle konfigurieren
	init_serio();
	S0RIC = PRIO_S0R;
	struct_rs232.ucEreignis = NICHTS;	//anfangen mit Leer


	//Motoren konfigurieren+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//Motoren disablen, damit ich PWM anschalten kann
	I2cStart();
	I2cSend( 0x42 );	// PCF8574 #2 Motortreiber disasablen
	I2cSend( 0x00 );
	I2cStop();
	I2cStart();
	I2cSend( 0x40 );	// PCF8574 #2 Motortreiber disasablen
	I2cSend( 0x01F );
	I2cStop();

	//PWM Output für Motortreiber konfigurieren
	_putbit(1,DP8,0);	//CC16IO MC0_IN1 auf Output
	_bfld(CCM4, 0x0000F, 0x00007);	//CC16 an T7 haengen, Compare Mode 3  kein Interrupt
	CC16 = 64500;

	_putbit(1,DP8,2);	//CC18IO MC1_IN1 auf Output
	_bfld(CCM4, 0x00F00, 0x00700);	//CC18 an T7 haengen, Compare Mode 3  kein Interrupt
	CC18 = 64500;

	_putbit(1,DP8,3);	//CC19IO MC1_IN1 auf Output
	_bfld(CCM4, 0x0F000, 0x07000);	//CC19 an T7 haengen, Compare Mode 3  kein Interrupt
	CC19 = 64500;

	//Motorstruct füllen
	for(uii = 0; uii < ANZAHL_MOTOREN; uii++){

		struct_motor[uii].uiAktiv 		= 0;	//Motor sei noch aus
		struct_motor[uii].uiFehler 		= 5;	//erlaube Fehler in Position
		struct_motor[uii].uiRichtung 	= RECHTS;
		struct_motor[uii].uiPwm_max 	= 1400;
		struct_motor[uii].uiPwm_min 	= 250;	//darunter bleibt Motor stehen
		struct_motor[uii].uiAnfahr 		= MOTOR_ANFAHR_LANGSAM;
		struct_motor[uii].uiGeschwind_akt = 0;	//noch fahre ich nicht
	}
	motor_struct_2_hardware();		// Infos aus motor_struct in Hardware programmieren

	//RTC konfigurieren für Pause
	T14REL = 0xFFEC;				//Prescaler für RTC auf 1.024ms einstellen



	_putbit(1, DP1H,5);		//Kamera einschalten
	_putbit(1, P1H,5);		//Kamera einschalten



	_putbit(1,PSW,11);	//Alle Interrupts freigeben, da Konfiguration fertig

	//Holen der analogen Werte mit PEC aufsetzen. Muss geschehen, wenn Interrupt schon enabled ist, da
	// sonst Werte nicht von PEC abgeholt werden und überschrieben werden
	SRCP7 = (unsigned int )  &ADDAT; 		//AD-Daten dort holen
	DSTP7 = (unsigned int )  &uiADC[0]; 	//und dorthin schreiben
	PECC7 = 0x200 + AD_KANAELE;				//Word transfer, alle AD-Kanaele PECen
	ADCIC = PRIO_ADC;						//Interrupt einschalten
	ADCON= 0x0B0B0+AD_KANAELE-1;	//Auto scan Contiouus conversion, 12KHz Samplingfrequenz, ab Kanal max (per define)

	printf("Programm gestartet\n");



	Triggerlevel_bestimmen();
	while(1){
		Serielle_Befehle_verarbeiten();


		//Ein Bild capturen
		uiFlag = 0;
		uiZeile=0;
		_putbit(1,P3,13);	//Laser an
		for(i=0; i<ZEILEN; i++){
			uiTiefe[i] = 1;
		}
		uiHalbbild = 0;
		CC24IC = PRIO_VSYNC;	//Interupt fuer Vsync


		while(uiFlag == 0);		//Warten bis Bild da ist
		if(!uiLaser_immer_an){
			_putbit(0,P3,13);	//Laser wieder aus
		}

		if(uiVerbose != 0){
			printf("Basis: %d Schulter %d Ellbogen %d ", uiADC[ADC_BASIS] & 0x3ff,uiADC[ADC_SCHULTER] & 0x3ff,uiADC[ADC_ELLBOGEN] & 0x3ff);
			printf("CC16 %d CC18 %d CC19 %d CC62 %d  ", CC16, CC18, CC19, CC62);
			printf("Richtung %d %d %d %d ", struct_motor[MOTOR_BASIS].uiRichtung,struct_motor[MOTOR_SCHULTER].uiRichtung,struct_motor[MOTOR_ELLBOGEN].uiRichtung,struct_motor[MOTOR_ZANGE].uiRichtung);
			printf("%d \n",struct_motor[MOTOR_ZANGE].uiGeschwind_akt);
			/*for(i=0; i<8; i++){
				uitemp = uiADC[i] & 0x3ff;
				printf("%d %d ",i,uitemp);
			}
			printf("\n");
			*/
		}
	}
}
[/code]