projects
/
my-code
/
atmel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed state machine
[my-code/atmel.git]
/
monolyzer
/
main.asm
diff --git
a/monolyzer/main.asm
b/monolyzer/main.asm
index
97b4d95
..
d1cdf77
100644
(file)
--- a/
monolyzer/main.asm
+++ b/
monolyzer/main.asm
@@
-13,6
+13,7
@@
.def tmp2 = r17
.def uart_rxtx = r18
.def count = r19
.def tmp2 = r17
.def uart_rxtx = r18
.def count = r19
+.def state = r20
;
; interrupts
;
; interrupts
@@
-22,7
+23,7
@@
rjmp INIT
; INT0
rjmp INIT
; INT0
-r
eti
+r
jmp INT0_IR
; INT1
reti
; INT1
reti
@@
-34,13
+35,13
@@
reti
reti
; T1 OVF1
reti
; T1 OVF1
-r
eti
+r
jmp T1_OVF_IR
; T0 OVF0
; T0 OVF0
-r
jmp T0_OVF
+r
eti
; UART RX
; UART RX
-r
jmp UART_RECEIVE
+r
eti
; UART UDRE
reti
; UART UDRE
reti
@@
-85,18
+86,12
@@
INIT:
; gio port init
rcall PORT_INIT
; gio port init
rcall PORT_INIT
- ; timer0 init
- rcall TIMER0_INIT
-
- ; timer0 interrupt enable
- rcall TIMER0_INT_INIT
+ ; timer1 init
+ rcall TIMER1_INIT
; uart init
rcall UART_INIT
; uart init
rcall UART_INIT
- ; uart interrupt enable
- rcall UART_INT_RX_INIT
-
; zero and one initialization
ldi tmp1,0
mov zero,tmp1
; zero and one initialization
ldi tmp1,0
mov zero,tmp1
@@
-108,49
+103,141
@@
INIT:
out SPL,tmp1
; more init
out SPL,tmp1
; more init
- ldi count,0x21
+ ldi count,0
+ ldi state,0
+
+ ; storage pointer
+ ldi ZL,low(STORAGE)
+ ldi ZH,high(STORAGE)
; signal ready output
; signal ready output
- ldi uart_rxtx,0x
68
+ ldi uart_rxtx,0x
72
rcall UART_TX
rcall UART_TX
+ ; external interrupt enable
+ rcall INT0_IR_CONF_INIT
+ rcall INT0_IR_ENABLE
+
; global interrupt enable
sei
MAIN:
; global interrupt enable
sei
MAIN:
-WAIT_FOR_HIGH:
- ; start as soon as we get a high signal
+SAMPLE:
+
+ ; sample as long as there is storage capacity and signal
+ cpi state,2
+ brne SAMPLE
+
+ ; disable interrupts
+ rcall INT0_IR_DISABLE
+ rcall TIMER1_INT_DISABLE
- rjmp WAIT_FOR_HIGH
+ ; signal finish
+ ldi uart_rxtx,0x66
+ rcall UART_TX
+
+IDLE:
+
+ ; wait for commands via uart
+ rcall UART_RX
+
+ ; decode instruction
+ cpi uart_rxtx,0x52
+ breq RESET
+ cpi uart_rxtx,0x54
+ breq TRANSFER
+
+ rjmp IDLE
+
+TRANSFER:
+
+ ; reset storage pointer
+ ldi ZL,low(STORAGE)
+ ldi ZH,high(STORAGE)
+ ldi tmp1,0
+
+ ; transmit number of sampled words
+ mov uart_rxtx,count
+ rcall UART_TX
+TRANSFER_LOOP:
+
+ ; transmit storage
+ ld uart_rxtx,Z+
+ rcall UART_TX
+
+ ; count sent data
+ add tmp1,one
+
+ ; check amount of sent data
+ cp tmp1,count
+ breq IDLE
+
+ rjmp TRANSFER_LOOP
; include subroutines
.include "port.asm"
.include "timer.asm"
.include "uart.asm"
; include subroutines
.include "port.asm"
.include "timer.asm"
.include "uart.asm"
-
;
; interrupt routines
;
;
; interrupt routines
;
-
T0_OVF
:
+
INT0_IR
:
; debug output
; debug output
- cbi PORTD,3
+ ; cbi PORTD,3
+
+ ; get timer value
+ in tmp1,TCNT1L
+ in tmp2,TCNT1H
+
+ ; check for initial or running state
+ cpi state,0
+ brne INT0_RUN
- ; read port
+ ; configure interrupt for running state
+ rcall INT0_IR_CONF_RUN
+ ldi state,1
+
+ ; reset timer and start ovf interrupt
+ ldi tmp1,0
+ out TCNT1H,tmp1
+ out TCNT1L,tmp1
+ rcall TIMER1_INT_ENABLE
- ; store another byte into sram
+ rjmp EXIT_IR
+INT0_RUN:
+
+ ; write timer value into sram
+ st Z+,tmp2
+ st Z+,tmp1
+
+ ; inc counter
+ add count,one
+
+ ; check for left capacity
+ cpi count,55
+ brne EXIT_IR
+
+ ; exit sampling
+ ldi state,2
+
+EXIT_IR:
; debug output
; debug output
- sbi PORTD,3
-
+
;
sbi PORTD,3
+
reti
reti
-UART_RECEIVE:
+T1_OVF_IR:
+
+ ; exit sampling
+ ldi state,2
+
reti
reti
@@
-160,6
+247,5
@@
UART_RECEIVE:
.dseg
.dseg
-DATA_STORAGE: .byte 8
-
+STORAGE: .byte 110