Sida 1 av 1

ARM7 parallel input/output fråga

Postat: 4 juni 2005, 19:29:03
av strombom
Ny tråd nu när jag fått igång ARM:en...

Tänkte testa att skriva och läsa lite till in/utgångarna

Finns det någon guide till hur man använder PIO-kontrollern? Trodde det skulle vara lätt att använda in/utgångarna men bara PIO-kontrollern har minst 30 olika register, man blir mörkrädd :)

(Fortfarande AT91SAM7S128)

/Johan

Postat: 5 juni 2005, 14:35:43
av erixon
Tja...
Vad ska man säga...

För att slippa läsa in hela porten för att sätta en pine på porten så har man valt att göra två register till nästan varje funktion plus en för avläsning...

så för att enabla pull up på pinne 0
PIO_PUER = 1
och för att disabla
PIO_PUDR = 1
Detta gör att man slipper maska ut den bit man är intreserad av att ändra..


Så om man kollar så har varje "register" tre addresser
En för enabel och en för disabel och en för avläsning

Här kommer en kort förklaring på vad registerna är:

PIO_PxR (PIO x Register)
Används för att välja mellan I/O eller peripheral

PIO_PUxR (Pull-up x Register)
Pull-up (vad mer kan säga)

PIO_ASR (A Select Register)
PIO_BSR (B Select Register)
PIO_ABSR (AB Select Status Register)
Är till för att välja vilken peripheral som ska vara på
respektive pinne A eller B

PIO_PxR
Anger om det ska vara outport eller input,
om någe peripheral ansluten till porten kommer den att bestämma vad den ska vara

PIO_MDxR
Anger om utgångarna ska var Open Drain eller inte

PIO_SODR (Set Output Data Register) och
PIO_CODR (Clear Output Data Register)
Används för att sätta respetive slå av utgångarna

PIO_ODSR (Output Data Status Register) och
PIO_OWxR (Output Writen x Register)
Används om man vill skriva parrallet ut på porten
PIO_OWxR används för att maska ut de bitar som ska skrivas och PIO_ODSR för att skriva till porten


PIO_PDSR (Pin Data Status Register)
Läser av pinnarna

PIO_IFxR (Input Filter x Register)
Anväds för filtera bort spikar, delvis när den enabla så måste singnalen vara hör minst 1.5 cycles

PIO_IxR (Interrupt x Register)
Interrupt on changes

Tja jag tror inte jag har glömt någe....
PIO på ARM är en aningen krånligare än på AVR... men när man satt sej in är det ganska smart uppbyggd :D

Postat: 5 juni 2005, 14:38:34
av strombom
oj förlåt för att jag fick dig att skriva så mycket!

jag läste igenom databladet lite noggrannare och det var ju inte så klurigt ändå :)

jag ska nog lägga upp en hemsida med allt som behövs när jag rett ut alla trådar... det verkar som om alla förutsätter att man köper utvecklingsverktyg för många tusentals kronor men det _ska_ gå att komma undan billigare tycker jag :D

/Johan

Postat: 5 juni 2005, 19:34:43
av strombom
Det tog lite tid men nu fungerar det :D

http://www.mtek.chalmers.se/~strombom/b ... /blink.mov

3meg, om ni har långsam uppkoppling så är det inte värt besväret :wink:

Edit: framgången var alltså att jag lyckats kompilera med GCC

/Johan

Postat: 6 juni 2005, 00:38:24
av DuckHead
Jättetufft med ARM!
Visa gärna mer av det... eller ännu bättre, skriv gärna en tutorial.
:wink:
Skriver du i assembler, eller är det högnivå? Kan man debugga den? Singelsteppa osv... ?
(Jag skaffade för något år sedan CCS för PIC, men är lite sne på den. Skulle vilja byta "familj" liksom. Tittat på AVR, men ARM verkar mycket roligare. Säkert mycket svårare också.
Hur som helst. Tufft!

Postat: 6 juni 2005, 00:47:50
av strombom
Jo det är kul :)

Ska självklart lägga ut mer info när jag kommer vidare. Försöker skriva en bootloader, men jag är inte så snabb. Grejen är att jag först måste göra en bootloader som ligger i SRAM som skriver in i FLASH, sen måste jag skriva en bootloader som ligger i FLASH som jag sedan kan använda för att lägga in egna program. :? Ska detta verkligen vara nödvändigt? :)

Jag använder WinARM: http://www.siwawi.arubi.uni-kl.de/avr_p ... ts/#winarm

Dock fanns inte stöd för AT91SAM7S64 så jag fick ändra lite i makefilen och fixa andra includefiler. Trodde det skulle vara svårare men det fungerar ganska bra.

Det här känns som en vanlig enchipsdator precis som PIC och AVR eftersom kretsen innehåller allt man behöver. Till och med usb 2.0. Realtidskontroller, timer, spi, twi, usart, pwm, a/d. Kärnan körs på 1.9 Volt men det är inbyggd DC/DC omvandlare som bara kräver en kondensator, hur smidigt som helst.

Edit: ja just det, jag använder jtag för att föra över program till sram:et, sedan kan jag singelsteppa, ändra register, ändra pc och köra i realtid. visserligen är gratisdebuggern textbaserad men det funkar fint.

/Johan

Postat: 6 juni 2005, 07:46:18
av Icecap
Jag använder en Fujitsu MCU och har en rutin till att spara data i "överbliven" flashminne. Den rutin måste exekveras från RAM då flashminnet ska ha en viss sekvens för att radera/programmera.

Om du skrivar den sekvens på samma gång som du hämtar instruktioner från flashen förstörs sekvensen direkt så av den anledning måste koden exekveras från RAM.

Postat: 6 juni 2005, 11:03:08
av cyr
Har du något smidigt (command-line) prog som skickar över din kod till SRAM?

I så fall skit i att lägga någon bootloader i flash, gör ett script som först skickar över bootloadern (till RAM) och sedan startar den och skickar över din applikation via någon port...

Gjorde något liknande när jag lekte med en coldfire-processor.

Postat: 6 juni 2005, 12:43:56
av strombom
Edit: hittade ett script... http://www.siwawi.arubi.uni-kl.de/avr_p ... ler_intro/
Edit2: det verkade inte göra så mycket nytta... man kan inte automatiskt ladda över en fil :evil:

Edit: hittade en kompilator med studentlicens för $99 http://www.rowley.co.uk/arm/index.htm , har i varje fall laddat ner 30-dagars demo. den laddar över en liten loader till sram och för sen över programmet genom serieporten till flash precis som cyr tänkte.

/Johan