Случился полный затык с ATtiny45, подключенной Драконом к Студии 4.14b589. В кристалл зашита программа для установки таймера1 в режим PWM на вывод OC1B (32MHz/4/256=31250Hz=Fpwm):
Код
__C_task void main(void) {
SETUP(OC1Apin,OUT0);
SETUP(OC1Bpin,OUT0);
TCCR1 = BIN(00000000);
GTCCR = BIN(01100010);
TCNT1 = 0;
OCR1A = 20;
OCR1B = 100;
OCR1C = 255;
PLLCSR = BIN(10000110);Delay(200*us);
while(!CHKBIT(PLLCSR,PLOCK));
TCCR1 |= 0x03;
while(1);
}
Однако в результате на выводе OC1B видим лог.0.
Начал разбираться. Протестировал работу OC1A манипуляцией битов COM1A1 и COM1A0 в TCCR1 прямо из Студии. Все работает как и описано в даташите. Те же самые действия с OC1B (меняем COM1B1 и COM1B0 в GTCCR) не приводят к появлению частоты на OC1B. Генерация частоты здесь появляется только если включить канал OC1A теми же COM1A1 и COM1A0 в TCCR1!!!! Не понимаю, как такое может быть? Ведь waveform generators отдельные для обоих каналов судя по даташиту...
Фузы все по умолчанию, т.е. режим совместимости таймера1 с ATtiny15 не установлен.
Использую компилятор IAR v5.10A. Проверил листинг:
Код
21 TCCR1 = BIN(00000000);
\ 00000004 E000 LDI R16, 0
\ 00000006 BF00 OUT 0x30, R16
22 GTCCR = BIN(01100010);
\ 00000008 E602 LDI R16, 98
\ 0000000A BD0C OUT 0x2C, R16
Вроде в адресах регистров нет ошибок.
Напоследок, заменил кристалл. Все то же самое.
Сейчас в полной растерянности... Нужна PWM именно на OC1B и только там, др. выводы используются как general IO.