Hallo!
Ich hab ein kleines Problem mit einer Ansteuerung bei einem YM7128B in
Assembler. Der AVR ist ein ATMEGA168. Der YM7128B hat eine ziemlich
bescheidene Ansteuerung und komme nicht drauf wie ich das am einfachsten
anstelle. Das untere Beispiel funktioniert nicht, obwohl es bei vielen
ähnlichen Bausteinen anwendbar ist.
Ich hoffe man kann hier einen Anhaltspunkt geben. Der YM7128B ist doch
ein nettes Bauteil für Audioanwendungen.
Bis dann!
1 | ;-----------------------------------------------------------------------------
|
2 | ;
|
3 | ; Die Ausgabe im Schieberegister in das Ausgaberegister übernehmen
|
4 | ;
|
5 | ; Dazu am RCK Eingang am Schieberegister einen 0-1-0 Puls erzeugen
|
6 | ;
|
7 | SchiebeOut:
|
8 | sbi SCHIEBE_PORT, RCK
|
9 | rcall YMWARTE
|
10 | cbi SCHIEBE_PORT, RCK
|
11 | ret
|
12 |
|
13 |
|
14 |
|
15 | ;-----------------------------------------------------------------------------
|
16 | ;
|
17 | ; Die Ausgabe im Delay übernehmen
|
18 | ;
|
19 | ; Dazu am DELD Eingang auf H legen, später wieder auf L.
|
20 | ;
|
21 | DelayIn:
|
22 | sbi SCHIEBE_PORT, DELD
|
23 | rcall YMWARTE
|
24 | ret
|
25 |
|
26 |
|
27 |
|
28 | DelayOut:
|
29 |
|
30 | cbi SCHIEBE_PORT, DELD
|
31 | rcall YMWARTE
|
32 | ret
|
33 |
|
34 |
|
35 |
|
36 | ;-----------------------------------------------------------------------------
|
37 | ;
|
38 | ; 8 Bits aus temp1 an das Schieberegister ausgeben
|
39 | Schiebe:
|
40 | push temp2
|
41 | ldi temp2, 8 ; 8 Bits müssen ausgegeben werden
|
42 |
|
43 |
|
44 |
|
45 | Schiebe_1:
|
46 | ;
|
47 | ; jeweils das höchstwertige Bit aus temp1 ins Carry-Flag schieben
|
48 | ; Je nach Zustand des Carry-Flags wird die Datenleitung entsprechend
|
49 | ; gesetzt oder gelöscht
|
50 | ;
|
51 | rol temp1 ; MSB -> Carry
|
52 | brcs Schiebe_One ; Carry gesetzt? -> weiter bei Schiebe_One
|
53 | cbi SCHIEBE_PORT, SIN ; Eine 0 ausgeben
|
54 | rjmp Schiebe_Clock ; und Sprung zur Clock Puls Generierung
|
55 |
|
56 |
|
57 |
|
58 | Schiebe_One:
|
59 | sbi SCHIEBE_PORT, SIN ; Eine 1 ausgeben
|
60 |
|
61 | ;
|
62 | ; einen Impuls an SCK zur Übernahme des Bits nachschieben
|
63 | ;
|
64 |
|
65 |
|
66 |
|
67 | Schiebe_Clock:
|
68 | sbi SCHIEBE_PORT, SCK ; Clock-Ausgang auf 1 ...
|
69 | rcall YMWARTE
|
70 | cbi SCHIEBE_PORT, SCK ; und wieder zurück auf 0
|
71 | rcall YMWARTE
|
72 |
|
73 | dec temp2 ; Anzahl der ausgegebenen Bits runterzählen
|
74 | brne Schiebe_1 ; Wenn noch keine 8 Bits ausgegeben -> Schleife bilden
|
75 |
|
76 | pop temp2
|
77 | ret
|
78 |
|
79 |
|
80 | YMWARTE:
|
81 | ;Delay-Steuerfrequenz
|
82 | ldi temp1, $9D
|
83 | YM00: dec temp1
|
84 | brne YM00
|
85 | nop
|