author | Tero Marttila <terom@fixme.fi> |
Tue, 02 Aug 2011 09:27:19 +0300 | |
changeset 46 | ffb0c3ec9bc0 |
parent 32 | 7ceb76b5a104 |
permissions | -rw-r--r-- |
18 | 1 |
;; |
2 |
;; Basic ADC operation |
|
3 |
;; |
|
4 |
||
32
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
5 |
; Reference select |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
6 |
.set ADC_REF = 0b01 ; AVcc |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
7 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
8 |
; Bit adjustment |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
9 |
.set ADC_LAR = 1 ; Left-adjust |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
10 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
11 |
; Input select |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
12 |
.set ADC_MUX = 0b000 ; ADC0 |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
13 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
14 |
; Auto-trigger source |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
15 |
.set ADC_ATS = 0b011 ; TC0 OCA |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
16 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
17 |
; Auto-trigger enable |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
18 |
.set ADC_ATE = 1 |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
19 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
20 |
; Prescaler |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
21 |
.set ADC_PS = 0b111 ; 1/128 |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
22 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
23 |
; I/O pins |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
.equ ADC_DDR = DDRC |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
.equ ADC_PORT = PORTC |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
.equ ADC_PIN = PORTC0 |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
;; Initialize the ADC for starting conversions |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
ADC_Init: |
32
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
30 |
; ADMUX |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
31 |
ldi r16, (ADC_REF << REFS0) | (ADC_LAR << ADLAR) | (ADC_MUX << MUX0) |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
sts ADMUX, r16 |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
32
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
34 |
; ADCSRB |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
35 |
ldi r16, (ADC_ATS << ADTS0) |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
sts ADCSRB, r16 |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
|
32
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
38 |
; ADCSRA |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
39 |
; ADSC: No need if using external auto-trigger ??? |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
40 |
; Enable interrupt |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
41 |
ldi r16, (1 << ADEN) | (1 << ADSC) | (ADC_ATE << ADATE) | (1 << ADIE) | (ADC_PS << ADPS0) |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
sts ADCSRA, r16 |
32
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
43 |
|
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
; Disable digital circuit for pin |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
ldi r16, (1 << ADC_PIN) |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
sts DIDR0, r16 |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
|
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
; Done |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
ret |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
|
32
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
51 |
;; Interrupt handler stub for ADC_HANDLER |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
ADC_Interrupt: |
32
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
53 |
in r0, SREG |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
54 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
55 |
rcall ADC_HANDLER |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
56 |
|
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
57 |
out SREG, r0 |
7ceb76b5a104
semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
58 |
reti |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
|
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
;; Read the current 8-bit ADC sample |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
; Returns value in r16 |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
ADC_Read8: |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
; Copy |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
lds r16, ADCH |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
|
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
; Done |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
ret |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |