Toggling an LED in a while loop takes about 2.5uS with a 3.6864MHz xtal.
Using the following code:
#include#include // F_CPU defined in the makefile as 3.6864MHz #define RED_LED_PORT PORTC #define RED_LED_DDR DDRC #define RED_LED_DATA_BIT PC2 #define FOREVER for(;;) volatile uint8_t flag = 0; int main(void) { // PortD, all inputs pull up enabled DDRD = 0x00; // 0000 0000 PORTD = 0xFF; // 1111 1111 // initialise INT0 EIMSK &= ~(1<<INT0); // disable INT0 to ensure no interrupts are generated EICRA = 0x00; // make sure all bits are zero (low level on INT0 generates interrupt) EIFR = (1<<INTF0); // clear any pending interrupts, note: = not |= EIMSK |= (1<<INT0); // enable INT0 // set PC2 to output RED_LED_DDR |= (1<<RED_LED_DATA_BIT); sei(); FOREVER { if (flag == 1) { flag = 0; RED_LED_PORT ^= (1<<RED_LED_DATA_BIT); } } } ISR (INT0_vect) { flag = 1; }
increases this toggle time to 1.5mS, ie 1000 times slower.
Am I doing something wrong?
Thanks,
davef