Hallo, Für mein aktuelles Projekt will ich mithilfe eines AVRs kurze Sounds abspielen. Eine passende Lösung dazu habe ich auf AVR-Freak gesehen: http://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewItem&item_id=402 Leider ist der verwendete AVR ein Mega8515 bzw. ein 90S8515. In den passen allerdings höchstens ca. 3 Sekunden Sound, ich brauche aber etwa 10 Sekunden. Jetzt habe ich vor, den Code auf den Mega32 zu portieren, aber leider ist der Quelltext in ASM (worin ich leider nicht gerade viel Erfahrung habe...). Ein einfaches Austauschen der include Anweisung hat nix gebracht. Die Timer sind beim Mega32 und beim 8515 auch ziemlich gleich aufgebaut. Aber trotz allem bleibt der AVR stumm. Wo müsste man den Code anpassen? mfg, cyberlink
cyberlink schrieb:
> Aber trotz allem bleibt der AVR stumm. Wo müsste man den Code anpassen?
Dürfte die Interruptvektortabelle sein, so macht man die nämlich nicht.
Vor jedes RJMP gehört ein .ORG mit der Vektordefinition aus dem Include.
Peter
AUf jedenfall SRAMStart (versuch mal auszukommentieren eigentlich ist das ein Standarddefine). Ansosnten einfach mal die TimerRegister vergleichen ob es da noch Anpassungsbedarf gibt. Einmal im Init und einmal in "Play sample"
(Mod: im Anschluss eine Anwort aus doppeltem Thread, anderen Thread gelöscht) Autor: Sebastian (Gast) Datum: 28.06.2009 17:47 könnte sein, dass manches, was bei 8515 nur über sts und lds beim Mega32 noch über in und out erreichbar ist. Ich würde mal über "Find and Replace" alle sts durch out und alle lds durch in ersetzen. Dann versuchen zu assemblieren und alls in und out die einen Fehler erzeugen wieder zurücktauschen auf lds/sts. Ansonsten natürlich die ganze Hardware-konfig durchschaun. Also bei allem was verwendet wird schauen, ob 8515 und 32 da die gleichen Register haben. Sebastian
Hey Super! Der Tipp mit den Interruptvektoren hat mir geholfen. Sollte jemand noch den Teil mit der neuen Interupttabelle brauchen, hier ist er:
1 | .org 0x000 |
2 | rjmp RESET |
3 | .org INT0addr ; External Interrupt0 Vector Address |
4 | rjmp EXT_INT0 |
5 | .org INT1addr ; External Interrupt1 Vector Address |
6 | rjmp EXT_INT1 |
7 | .org OC2addr ; Output Compare2 Interrupt Vector Address |
8 | reti |
9 | .org OVF2addr ; Overflow2 Interrupt Vector Address |
10 | reti |
11 | .org ICP1addr ; Input Capture1 Interrupt Vector Address |
12 | rjmp TIM1_CAPT |
13 | .org OC1Aaddr ; Output Compare1A Interrupt Vector Address |
14 | rjmp TIM1_COMPA |
15 | .org OC1Baddr ; Output Compare1B Interrupt Vector Address |
16 | rjmp TIM1_COMPB |
17 | .org OVF1addr ; Overflow1 Interrupt Vector Address |
18 | rjmp TIM1_OVF |
19 | .org OVF0addr ; Overflow0 Interrupt Vector Address |
20 | rjmp TIM0_OVF |
21 | .org SPIaddr ; SPI Interrupt Vector Address |
22 | reti |
23 | .org URXCaddr ; USART Receive Complete Interrupt Vector Address |
24 | reti |
25 | .org UDREaddr ; USART Data Register Empty Interrupt Vector Address |
26 | reti |
27 | .org UTXCaddr ; USART Transmit Complete Interrupt Vector Address |
28 | reti |
29 | .org ADCCaddr ; ADC Interrupt Vector Address |
30 | reti |
31 | .org ERDYaddr ; EEPROM Interrupt Vector Address |
32 | reti |
33 | .org ACIaddr ; Analog Comparator Interrupt Vector Address |
34 | reti |
35 | .org TWIaddr ; Irq. vector address for Two-Wire Interface |
36 | reti |
37 | .org SPMRaddr ; SPM complete Interrupt Vector Address |
38 | reti |
39 | |
40 | .org INT_VECTORS_SIZE |
mfg Cyberlink
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.