avr-gcc-list
[Top][All Lists]
Advanced

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

[avr-gcc-list] Re: [avr-chat] Mega644 bit test problem


From: Robert von Knobloch
Subject: [avr-gcc-list] Re: [avr-chat] Mega644 bit test problem
Date: Mon, 20 Jul 2009 08:56:13 +0200
User-agent: Thunderbird 1.5.0.14 (X11/20060911)

tarmigan wrote:
> (Reading through some very old email, it looks like this one might not
> have been resolved...)
>
> On Fri, May 8, 2009 at 2:41 AM, Robert von Knobloch<address@hidden> wrote:
>   
>> Hallo,
>>
>> I am writing code for an ATMega 644P and have come across some very
>> strange behaviour.
>> A small part of the code is required to read an asynchronous serial
>> signal (data & clock - low speed) over PORTB pins.
>> The relevant code snippet is:
>>
>> snip
>> #define CLOCK_TIMEOUT    2000
>> #define ASYNCPIN    PORTB
>> #define ASYNCCLK    0
>> #define ASYNCDATA    3
>>
>>    for (i = 0 ; i < 16 ; ++i)
>>    {
>>        while ((ASYNCPIN & _BV(ASYNCCLK)) != 0)        // Wait for clock low
>>        {
>>        if (mSecdowncnt == 0)
>>        {
>>            noclock = 1;
>>            break;                    // Timeout
>>        }
>>        }
>>
>>        result = result >> 1;
>>        if ((ASYNCPIN & _BV(ASYNCDATA)) != 0)
>>        {
>>        result |= 0x8000;
>>        }
>>
>>        while ((ASYNCPIN & _BV(ASYNCCLK)) != 1)        // Wait for clock
>>     
>
> This line is probably the problem.
>
>   
>> This works fine. I want, however to use portb bits 1 & 3 for clock &
>> data. I simply change to #define ASYNCCLK    1
>> and re-compile
>> Now, nothing works and the code generated is much smaller (0xe5 bytes
>> instead of 0x193 bytes for the working variant).
>>     
>
> _BV(0)==1 but _BV(1)==2, so when you do ((value & _BV(1)) != 1), it's
> never false because the possible values of (ASYNCPIN & _BV(1)) are 0
> or 2, never 1.
>
> I would try to write these kinds of statements as
>         while( !(ASYNCPIN & _BV(ASYNCCLK)) ) {
>                   blah, blah;
>         }
>
> -Tarmigan
>
>
>   
Yes, this was resolved (not seeing the wood for the trees syndrome). But
many thanks for the suggestions.
Robert




reply via email to

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