From 156d616f919be4a9391b7303abc9e3377f9e2365 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 17 Mar 2014 17:29:32 +0100 Subject: fixed things. does not successfully receive! --- main.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/main.c b/main.c index f812e4e..8cf43a1 100644 --- a/main.c +++ b/main.c @@ -16,7 +16,10 @@ int recv_gc() char* buf_ptr = buffer; asm volatile( + "clr r16 \n" "recv_wait_low_initial_loop: \n" + "inc r16 \n" + "breq timeout \n" "sbic %1, 5 \n" "rjmp recv_wait_low_initial_loop \n" // from low to the start of counting: 6 cycles = 0.5us "nop \n" @@ -106,11 +109,22 @@ void send_gc(char* bytes, int len) "; now send the stop bit and release the line \n" "nop \n nop \n nop \n" OUT0 - WAIT10 - OUT1 - "; done :) \n" + "; instead of WAIT10, do some sensible cleanup work \n" + "clr r16 ; needed below \n" "pop r30 \n" "pop r31 \n" + "nop \n nop \n nop \n nop \n nop \n" + OUT1 + "; done :) \n\n\n" + + + "; now the final thing is to wait for DATA become high again (should be immediately anyway) \n" + "send_final_loop: \n" + "inc r16 \n" + "breq send_timeout \n" + "sbis %0, 5 \n" + "rjmp send_final_loop \n" + "send_timeout: \n" : : "I" (_SFR_IO_ADDR(DDRC)), @@ -129,24 +143,45 @@ int main (void) PORTC=0x00; DDRB=0xFF; + DDRD=0x00; PORTB=0x55; - PORTB=0x55; - int temp=0; + int n_received; + + while(1) + { + temp++; + if (!(PIND & 0x08)) + { + //PORTB=~(1 << ((temp>>9)%6)); + PORTB=~temp; + } + else if (!(PIND & 0x10)) + { + //PORTB=~buffer[4]; + char tmp=0; + for (int i=0;i<8;i++) + tmp|= ( (buffer[i]&0x80)?(1<>3; + } + else if (!(PIND & 0x40)) + { + PORTB=~0x00; + } - - while(1) - { - temp++; -// PORTB=~(1 << ((temp>>9)%6)); -PORTB=~temp; _delay_ms(1); char foo[] = { 0x40, 0x03, 0x02 }; send_gc(foo, 3); + n_received=recv_gc(); + } -- cgit v1.2.1