Разобрался с проблемой. Она была не в счетчиках.
В настройках ИАРа я указал язык С++, а не СИ. Как только поменял на СИ- все заработало.
Вопрос- что компилятор выкидывал из кода, когда компилил на С++
Код
#include <ioavr.h> // здесь объявлены все SFR для 2313
#include <stdint.h> // в нем описан uint32_t
#include <inavr.h> // здесь объявлены фукции разрешения/запрета прерываний, nop и прочие полезные
#include "ascold.h" // здесь описаны очень удобные макросы дерганья ногами
#include "Hardware.h"
#include "RS232.h"
#define LED_BLINK_PERIOD 500U
volatile uint32_t CntT1_ms;
//=========================== interrupts =====================================
#pragma vector = TIMER1_COMPA_vect
__interrupt void overflow_timer1(void)
{
CntT1_ms++; // each ms will interrupt
cpl (TST);
}
//============================================================================
//****************************************************************************
//============================================================================
char __low_level_init (void) { // эта функция вызывается сразу после
// включения процика после установки
// указателей стека.
// Здесь можно настроить периферию
TCCR1B= (1<<WGM12) | (0<<CS12)|(0<<CS11) |(1<<CS10); //CTC mode, no prescaling
TIMSK = (1<<OCIE1A); //for counter 0 and counter 1 (1<<TICIE1)
OCR1A= (OSC / 1000);
PORTB = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0); // все ноги в 0
DDRB =(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0); // все ноги на вывод
PORTD = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0); // все ноги в 0
DDRD =(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0); // все ноги на вывод
PORTC = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0); // все ноги в 0
DDRC =(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0); // все ноги на вывод
return 1; // После возвращения проинициальзировать память
}
//============================================================================
//****************************************************************************
//====================== подфункции ==========================================
void Delay(uint32_t t) // только с большой буквы Delay!!! Конфликтует.
{ // на задержке noop
volatile uint32_t i;
for(i = 0; i < t; i++) {
}
}
//============================================================================
//****************************************************************************
//================ main ======================================================
void main (void) {
__enable_interrupt();
uint32_t timeStamp =CntT1_ms;
for(;;) {
if ((CntT1_ms-timeStamp) >= LED_BLINK_PERIOD) {
cpl (LED);
timeStamp =CntT1_ms;
}
}
}