Muziekmodule: sampling Arsoft, 01-09-94 Digitale signaal-verwerking (sampling) --------------------------------------------------------------------------- Voor de volgende registers geldt dat het registernummer gelijk is aan het adres. Aansturen dmv.: OUT &HC0,<adres>: OUT &HC1,<getal>. register 1: dit register is alleen voor fabricagetest bestemd. Niet gebruiken! register 2: Timer-1 preset In dit register wordt de beginwaarde N1 voor timer-1 gezet. register 3: Timer-2 preset In dit register wordt de beginwaarde N2 voor timer-2 gezet. register 4: Timer en Flag control bit 0: "1" start en "0" stopt timer-1 bit 1: "1" start en "0" stopt timer-2 bit 2: is niet in gebruik bit 3: "1" maskeert de Buffer-Ready vlag bit 4: "1" maskeert de End Of Sample vlag bit 5: "1" maskeert de Timer-2 vlag bit 6: "1" maskeert de Timer-1 vlag bit 7: "1" reset alle vlaggen Bij inschakelen worden de Buffer Ready en de End of Sample vlag al gemaskeerd. register 5 en 6: Keyboard. (zie externe keyboard aansluiting) register 7: ADPCM-besturing bit 0: RESET; "1" reset de gekozen ADPCM-functies bit 1,2 en 3 zijn niet in gebruik bit 4: REPEAT; "1" herhaalt weergave van begin- tot eindadres bit 5: MEMORY; "1" om gebruik te maken van het geheugen in de module. bit 6: RECORD; "1" voor opnemen, "0" voor weergeven bit 7: START; "1" start het opnemen of weergeven Een andere functie kan pas worden gekozen na een RESET Toepassingen: ----------------------------------------------- R(7) functie: ----------------------------------------------- &H20 Samples van module naar computergeheugen &H60 Samples van computergeheugen naar module &H80 Weergave vanuit het computergeheugen &HA0 Weergave vanuit de module &HC0 Opname in het computergeheugen &HA0 Opname in module ----------------------------------------------- register 8: diverse instellingen bit 0: ROM; "1" voor ROM en "0" voor RAM geheugen in de module bit 1: 64K; "1" voor 64kbit en "0" voor 256kbit RAM-chips bit 2: DA/AD; "1" voor DA conversie, "0" voor AD conversie bit 3: SAMPLE; "1" start en "0" stopt de AD/DA-conversie bit 4-6: niet in gebruik bit 7: CSM; "1" stelt de Composite Sinusoidal Mode in (?) De muziekmodule bevat een chip van 256kbit RAM, dus bit 0 en 1 moeten altijd op "0" worden gezet. Voor de ADPCM methode moet de rest ook "0" zijn. Directe AD en DA-conversie, dus PCM kan als volgt ingesteld worden: opname : OUT &HC0,8: OUT &HC1,8 weergave: OUT &HC0,8: OUT &HC1,12 Deze methode kan alleen met opslag in het computergeheugen gebruikt worden. Registers 9 tot 12 hoeven daarom niet te worden ingesteld. Via registers 13 en 14 wordt de samplesnelheid ingesteld, zowel voor opname als weergave. Registers 16 en 17 hoeven dan dus ook niet te worden ingesteld. Het bufferegister voor transport van de gegevens in nu register 26. Bij weergave kunnen de gegevens ook direct naar de DAC (register 21 tot 23) gestuurd worden. Voor dit alles is dus wel een machinetaal routine nodig die het transport tussen de module en de computer verzorgd. register 9 en 10: startadres Deze registers stellen het beginadres in waar de gegevens staan in het RAM-geheugen van de module. De 256kbit RAM wordt geadresseerd in blokjes van 32 bits. Daar zijn er dus 256k/32 is 8K (&H2000) van. De adressen lopen daarom van &H0000 tot &H1FFF. In register 9 komt het lage byte (ADRES MOD 256) en in register 10 het hoge byte (ADRES\256). register 11 en 12: eindadres Deze registers geven het hoogste adres aan dat voor de conversie gebruikt wordt, en wel op dezelfde manier als bij het startadres. Register 11 is voor het lage byte en register 12 voor het hoge byte. Het eindadres moet altijd hoger zijn dan het beginadres. register 13 en 14: prescaler In deze registers wordt een getal N opgeslagen, waarmee de samplefrequentie Fs wordt bepaald door de klokfrequentie van 3580 kHz te delen door N. Dit geldt zowel voor AD- en DA-conversie als voor ADPCM-opname. (voor weergave zie verderop) Fs = 3580/N kHz en N=3580/Fs Voor het getal N zijn 11 bits beschikbaar. 8 bits voor N MOD 256 in register 13, plus 3 bits voor N\256 in register 14. De maximum samplefrequentie is 16 kHz, het minimum is 1,8 kHz. Tabel 5. Opname frequenties & prescaler +-------------+-------+--------+---------+ | Opnamefreq. | N | R(13) | R(14) | +-------------+-------+--------+---------+ | 1,8 kHz | &H7FF | &HFF | 7 | | 3 kHz | &H4A9 | &HA9 | 4 | | 6 kHz | &H254 | &H54 | 2 | | 10 kHz | &H166 | &H66 | 1 | | 16 kHz | &H0E1 | &HE1 | 0 | +-------------+-------+--------+---------+ Register 15: ADPCM-data Dit register wordt als buffer gebruikt voor overdracht van ADPCM-data van en naar de computer. Het kan zowel gelezen als beschreven worden. elke byte bevat twee ADPCM-samples, die immers 4 bits bevatten. Als de vier hoge bits sample "n" bevatten, dan staat in de vier lage bits sample "n+1". register 16 en 17: ADPCM-weergave De inhoud van de registers bepalen de snelheid van ADPCM weergave. Die is op een wat andere manier gecodeerd dan bij opname, wat te maken heeft met de hogere snelheden die bij weergave mogelijk zijn en met de interpolatie naar 50kHz die bij ADPCM-weergave wordt toegepast. De samplefrequentie volgt uit: Fs=M/1311 kHz en M=1311*Fs Het getal M wordt als volgt in de register 16 en 17 opgeslagen: M MOD 256 in register 16 en M\256 in register 17. Enige voorbeelden: Tabel 6. ADPCM-weergave +----------+--------+-------+-------+ | Weergave | M | R(16) | R(17) | +----------+--------+-------+-------+ | 1,8 kHz | &H08F4 | &HF4 | &H08 | | 3 kHz | &H0F5D | &H5D | &H0F | | 6 kHz | &H1EBA | &HBA | &H1E | | 10 kHz | &H3336 | &H36 | &H33 | | 16 kHz | &H51F0 | &HF0 | &H51 | | 50 kHz | &HFFFF | &HFF | &HFF | +----------+--------+-------+-------+ register 18: volume ADPCM-weergave Dit register bevat de geluidssterkte van de ADPCM-weergave, die in 256 stappen geregeld kan worden. Maximum volume voor &HFF, minimum voor 0. register 19 en 20: ADPCM Deze twee registers bevatten tussenresultaten van de ADPCM-codering en -decodering. Verder zijn er geen gegevens over bekend. register 21,22 en 23: DAC-data In deze registers moeten de gegevens gezet worden voor 13-bit DA-conversie. Van register 21 worden alle 8 bits gebruikt, van register 22 alleen de twee hoogste bits. Van register 23 worden de drie laagste bits gebruikt als exponent. De uitgangsspanning V wordt als volgt berekend: V=((R(21)+R(22)/256)/256)/2^R(23)) Register 21 moet als laatste gevuld worden. Start de DA-conversie (met bit 3 van register 8) pas na het vullen van deze registers! Om 8-bits data te converteren, hoeft alleen register 21 gevuld te worden. Maar dan kan natuurlijk ook de andere AD-converter gebruikt worden. register 24 en 25: Outpout control Deze registers (&H18 en &H19) zijn al eerder ter sprake gekomen. Ze dienen voor het aan- en uitzetten van de uitgangssignalen. De uitgang van de DAC's is dezelfde als die voor de muziek, en wel IO-3, te kiezen door het getal 8(=2^3) in register 24 te zetten. Het in- en uitschakelen gaat via register 25. Bij opname moet de uitgang uitgeschakeld zijn anders gaat de versterker rondzingen. register 26: PCM-data Dit is een bufferregister voor het transporteren van gegevens voor DA- en AD-conversie, die hierin opgeslagen worden in twee-complement vorm. In dit register kan zowel gelezen als geschreven worden. |