Запустить Timer1 в ATmega2560 со сборкой
У меня возникла небольшая проблема с Timer1 в Arduino (ATmega2560) при кодировании его на ассемблере. Я пытаюсь запустить Timer1 в режиме CTC - на мой взгляд, все настроено хорошо, но TCNT1 просто не увеличивает каждый такт, как следовало бы. Проверил регистры в Atmel Studio, вроде все нормально, но может я о чем-то забыл?
Вот код
.ORG 0
jmp start
.ORG 0x22
call isr_toggle_PA0
.ORG 0x400
start:
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16 ; initialize stack pointer
clr r16
ldi r16, 0xff
out DDRA, r16 ; port A output
ldi r16, 0x00
out DDRD, r16 ; port D input
clr r16
ldi r20, 1<<OCIE1A
sts TIMSK1, r20 ; enable Timer1 A comapre match interrupt
sei
ldi r20, HIGH(25000)
sts OCR1AH, r20
ldi r20, LOW(25000)
sts OCR1AL, r20
ldi r20, 0b00000010 ; CTC mode, int clk;
sts TCCR1A, r20
ldi r20, 0b000000101 ; prescaler /1024
sts TCCR1B, r20
ldi r20, 0
sts TCCR1C, r20
; --- start main
main:
inc r16
rjmp main
; --- end main
isr_toggle_PA0: // бит переключения PA0
ldi r16,0x00000001
in r17, PORTA
eor r17,r16
out PORTA, r17
reti
Спасибо и хорошего дня :)
@skorejen, 👍2
1 ответ
Лучший ответ:
▲ 3
Здесь:
ldi r20, 0b00000010 ; CTC mode, int clk;
sts TCCR1A, r20
ldi r20, 0b000000101 ; prescaler /1024
sts TCCR1B, r20
вы устанавливаете бит WGM11
в TCCR1A
. Затем таймер работает в режиме 2 (ШИМ, коррекция фазы, 9 бит), а не в режиме 4 (CTC).
,
@Edgar Bonet
Смотрите также:
- Как создать задержки на языке ассемблера AVR
- Светодиод Arduino PWM с замиранием в сборке
- Как добавить два сборочных массива в arduino
- Помогите понять, как avrdude работает с ArduinoISP и почему он не работает у меня.
- Сборка для цикла, повторяющегося 2 раза, хотя предполагается, что это нужно сделать только один раз
- Не могу вызывать указатели функций С++ из встроенной сборки
- Установить ШИМ по периоду? И он переменный?
- Код сборки Arduino Uno R3 для нажатия кнопки и включения светодиода
Удивительный!! Мне нужно, чтобы это была ошибка. Для тех, кому интересно, правильная версия
ldi r20, 0b00000000 ; Режим CTC, int clk; стс TCCR1A, р20 лди r20, 0b000001101 ; прескалер /1024 стс TCCR1B, 20
р, @skorejen