;
;    Mecrisp - A native code Forth implementation for MSP430 microcontrollers
;    Copyright (C) 2011  Matthias Koch
;
;    This program is free software: you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation, either version 3 of the License, or
;    (at your option) any later version.
;
;    This program is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.
;
;    You should have received a copy of the GNU General Public License
;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
;

; Zugriff auf den ADC10 - so einfach wie möglich !
 
;------------------------------------------------------------------------------
  Wortbirne Flag_sichtbar, "analog"
AnalogLesen: ; Ließt einen Analogwert ein...
             ; ( Kanal -- Wert )
;------------------------------------------------------------------------------
  
  bic #ENC, &ADC10CTL0 ; Wandler zum Verstellen ausschalten !    
    
  ; Die obersten 4 Bits wählen zwischen den 16 möglichen Eingangskanälen.
  push r10
  mov @r4, r10
  and #1111b, r10
  swpb r10
  rla r10
  rla r10
  rla r10
  rla r10

  bis #ADC10SSEL_0+ADC10DIV_3+CONSEQ_0, r10 ; Einzelnen Wert aufnehmen, Taktquelle auswählen: ADC10OSC / 4
  mov r10, &ADC10CTL1 ; Kanal vom Datenstack holen und im ADC-MUX aktivieren
  pop r10
  
  ; Referenzquelle wählen und einschalten, Wandler einschalten,
  ; Sample-and-Hold-Zeit wählen, lange Messen.
  ;mov #SREF_0+ADC10SHT_3+ADC10ON, &ADC10CTL0                  ; Referenz Vcc
  ;mov #SREF_1+REFON+ADC10SHT_3+ADC10ON, &ADC10CTL0            ; Referenz 1,5V
  mov #SREF_1+REFON+REF2_5V+ADC10SHT_3+ADC10ON, &ADC10CTL0    ; Referenz 2,5V
                                                     
  bis #ENC+ADC10SC, &ADC10CTL0 ; Start sampling/conversion

- bit #ADC10BUSY, &ADC10CTL1   ; ADC10BUSY? Wandlungsende abwarten
  jnz -

  mov &ADC10MEM, @r4 ; Wandlungsergebnis zurückliefern.
  
  ret
