avr-chat
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-chat] Troubles with software uart


From: Kreyl
Subject: [avr-chat] Troubles with software uart
Date: Fri, 23 Mar 2007 01:47:33 +0300

  Hi!

  I  am  trying  to  implement software UART at ATTiny26. (I can't use
it's USI, because those pins are used for PWM output).

  Transmitting  works  ok,  but  recieving  not. Device sees something
incoming, but doesn't decode it; result is always 0b11111111 for delay
time  greater  than  18  (CPU  freq = 1 MHz), otherwise something like
0b11100000.

  Maybe, something is wrong with asm parameters.

  Here is INT0 code:
ISR (INT0_vect) {
        uint8_t i=22, BitCounter=8, Rxbyte=0;
        asm volatile (
                "cli"                     "\n\t"
                "ldi    %1, 9"            "\n\t" // Bit-counter
                "ldi    %2, 0"            "\n\t"
                
//              "ldi    %0, 22"           "\n\t"  // half-bit delay
                "1: dec %0"               "\n\t"
                "brne 1b"                 "\n\t"
                
                "2: ldi %0, 130"          "\n\t"
                "3: dec %0"               "\n\t"  // One-bit delay
                "brne 3b"                 "\n\t"
                
                "clc"                     "\n\t"  // clear carry
                "sbic   %3, %4"           "\n\t"  // if RX pin high
                "sec"                     "\n\t"

                "dec    %1"               "\n\t"  // If bit is stop bit
                "breq   4f"               "\n\t"  // return

                "ror    %2"               "\n\t"  // shift bit into Rxbyte
                "rjmp   2b"               "\n\t"  // go get next

                "4: sei"                  "\n\t" // End
                : "=r" (i), "=r" (BitCounter), "=&r" (Rxbyte)
                : "I" (_SFR_IO_ADDR (PINB)), "I" (PB6), "r" (Rxbyte)
        );
        UARTRXCommand = Rxbyte;
}

Best regards,
                      Kreyl





reply via email to

[Prev in Thread] Current Thread [Next in Thread]