[abc80] koppla ABC80 till PIC32:an

H. Peter Anvin hpa at zytor.com
Mon Sep 6 22:02:31 PDT 2010


On 08/30/2010 10:41 AM, juhasz at abc.se wrote:
> void __ISR(_CHANGE_NOTICE_VECTOR, ipl2) ChangeNotice_Handler(void)
> {
>     unsigned int temp,data;
> 	PORTE=55;
> 	PORTE=66;
> 	PORTE=77;
>     // clear the mismatch condition
>     temp = mPORTBRead();
> 
> 	if (!(temp & 1)) //IN1
> 	{
> 
> 	mPORTEWrite(34); // output a " character
> 	while (!mPORTBReadBits(BIT_0)); // wait until read op finishes
> 
> 
> 	mPORTFToggleBits(BIT_1);
> 	putsUART2("\n CN2/IN1: ");
> 	putsUART2("\n\r");
> 	}
> 
> 	 if ((temp & 2)==0) //OUT2
> 	{
> 	data=mPORTERead();
> 	mPORTFToggleBits(BIT_1);
> 	putsUART2("\n CN3/OUT2: ");
> 	putcUART2(data & 255);
> 	putsUART2("\n\r");
> 	}
> 
>     // clear the interrupt flag
>     mCNClearIntFlag();
> 	mPORTEWrite(255);
> 
> 
> 
> }

Det är förmodligen värt att påpeka att du lär få *mycket* bättre kod ur
gcc om du inte anropar subrutiner (annat än inline) från din
interruptrutin.  Om du tar bort putsUART2() och putcUART2()-anropen så
slipper du den enormt långa prologen.

Anledningen att du behöver göra OPEN DRAIN här är naturligtvis att du
inte stänger av drivningen till PORT E när den inte ska användas.

Något i stil med det medskickade borde funka (total otestat, eftersom
jag inte ens har hårdvaran)... sen är det en fråga om det fortfarande är
för långsamt.  Som sagt var blir det ännu värre om man ska simulera
minne... Z80 ger 2,5 cycler för en I/O-referens (varav internkretsar i
ABC80 äter 0,5 cycler, plus propageringstid) medan den bara ger 1,0
cycler för kod och 1,5 cycler för datareferenser till minnet.

	-hpa


P.S. Microchips licenspolicy är totalt bondfångeri.  Ladda ner källkoden
och kompilera ur tested för "lite mode" så har du en helt fungerande
kompilator.  Vilka totalmuppar -- en av anledningarna att jag inte
gillar Microchip.


More information about the ABC80 mailing list