[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] AVR assembly for fast bit bang
From: |
David Kelly |
Subject: |
Re: [avr-gcc-list] AVR assembly for fast bit bang |
Date: |
Wed, 9 Nov 2005 20:38:08 -0600 |
On Wed, Nov 09, 2005 at 09:00:58AM -0500, Dave Hansen wrote:
From: David Kelly <address@hidden>
[...]
People keep saying "C isn't fast enough." I don't belive it. First
attempt:
[...]
It might be tough to do better on AVR. My standard SPI routine uses a
do-while loop, which might save an instruction or two, but made
about a 30%
difference on the PIC compiler I used. Something like
void output_spi_byte(uint8_t byte)
{
uint8_t bit_ctr = 8;
do
{
output_low(SPI_DATA); // Set data bit low...
if (byte & 0x80)
output_high(SPI_DATA); // ...or high, as required
output_high(SPI_CLK);
byte <<= 1; // Shift acts as clock dwell delay
output_low(SPI_CLK);
} while (--bit_ctr);
}
I don't have avr-gcc handy to see if it's any better than your
code. I was
more concerned with size than speed, as you may be able to tell.
If speed
is the ultimate object, unrolling the loop will help.
The above compiles to 14 bytes with slight changes
(output_low/output_high macros). But I would suggest putting
output_low(SPI_DATA) as an else to if (byte & 0x80) as needless
transitions consume power, generate noise, and sometimes confuse the
connected device. Moving it into an else results in 16 byte code.
Forgot how big mine was. A little big bigger IIRC.
--
David Kelly N4HHE, address@hidden
========================================================================
Whom computers would destroy, they must first drive mad.
- Re: [avr-gcc-list] AVR assembly for fast bit bang, (continued)
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Daniel O'Connor, 2005/11/08
- Re: [avr-gcc-list] AVR assembly for fast bit bang, David Kelly, 2005/11/08
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Mike S., 2005/11/09
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Daniel O'Connor, 2005/11/09
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Peter Fuhrmann, 2005/11/09
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Jesper Hansen, 2005/11/09
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Nils Springob, 2005/11/09
- Re: [avr-gcc-list] AVR assembly for fast bit bang, David Brown, 2005/11/10
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Mike S., 2005/11/16
- Re: [avr-gcc-list] AVR assembly for fast bit bang, Dave Hansen, 2005/11/09
- Re: [avr-gcc-list] AVR assembly for fast bit bang,
David Kelly <=
- RE: [avr-gcc-list] AVR assembly for fast bit bang, Nigel Winterbottom, 2005/11/09