[abc80] mer PIC32 - det funkar! (Re: PIC32 igen...)

juhasz at abc.se juhasz at abc.se
Sön Sep 12 15:15:01 PDT 2010


...en snabb kommentar till mig själv:
planen är sedan att koppla alla out/cs/rst-pinnar till CN
(change-notification pinnar), och INP0-pinnen till en interrupt-pinne (tex
INT1)

detta borde nu inte vara några större problem...

robert

> Hej igen på listan!
>
> Nu har jag fått både input och output att fungera direkt mellan ABC80 och
> pic32. allt löste sig efter att jag satt inp-interruptets prioritet till
> nivå 7 (ipl7) funkar även inp till abc80:n (med open-drain-utgångar på
> pic32:an). Jag håller med Peter om att PMP-interfacet kanske är lite
> elegantare, men kräver ju som sagt en extra krets. detta funkar direkt...
>
> jag har alltså kopplat INP1-ledningen till INT2 på picen och
> OUT2-ledningen till en av change-notification-pinnarna och använt
> rutinerna nedan. Jag simulerar en 256-byte buffer på picen, och det funkar
> både att läsa och skriva den med OTIR och INIR (det snabbaste jag kan
> komma på...)
>
> Skall städa upp koden lite och lägga upp en bättre beskrivning på nån
> hemsida. Det fina med den här lösningen är att PMP-interfacet är ledigt, t
> ex för att kunna göra DMA......
>
> Robert
>
>
> --------------------------------------------------------------------
> // routines to connect ABC80 to pic32 - PORTE is open-drain and connected
> to ABC bus, and INP1 is connected to INT2 and OUT2 to a change
> notification pin
> //
> //
> //
> // handle INP1 direkt ansluten till INT2
> void __ISR(_EXTERNAL_2_VECTOR, ipl7) Int2Handler(void)
> {
> int i;
> //time delays are inserted here to see 1) how fast we need to set the data
> pins
> // and 2) how long we need/can hold the data pins
>
> 	i = 7;		// Time delay 7 seem the highest possible value
> 	while(i) {i--;}
> PORTE=buf[bufpek];
> 	i = 200;		// Time delay 200 seem about the highest possible value
> 	while(i) {i--;}
> PORTE=255;
>
> bufpek++;
> mINT2IntEnable(FALSE); //INT2 disable
> mINT2ClearIntFlag();
> mINT2IntEnable(TRUE); //INT2 enable
> }
> //
> //
> // configure the CN interrupt handler - denna räcker att köra som ipl2!
> void __ISR(_CHANGE_NOTICE_VECTOR, ipl2) ChangeNotice_Handler(void)
> {
>     unsigned int temp,data;
>
>     temp = mPORTBRead();
>
>
>
> 	 if ((temp & 2)==0) //OUT2
> 	{
> 	buf[bufpek++]=mPORTERead();
> 	}
>
>     // clear the interrupt flag
>     mCNClearIntFlag();
> }
>
>
>> On 09/07/2010 02:18 PM, H. Peter Anvin wrote:
>>>
>>> RST# och C2# är rena kontrollsignaler så kan gå till en vanlig GPIO.
>>>
>>
>> Skulle ha varit RST#, C1# och C3#; och detta gäller specifikt för en
>> diskcontroller (C2# och C4# används överhuvudtaget inte.)
>>
>> 	-hpa
>>
>



More information about the ABC80 mailing list