ilya73 писал(а): интерпретатор выругался на TIFR
об этом я тоже упоминал.
аппаратно-зависимый код, имена регистров и битов, адреса регистров и номера битов...
изучение даташитов
настоятельно рекомендуетсяаппаратно-зависимый код по
необходимости обязательно изменяется.
именно по этой причине ( при сборке amforth'а)
- Код: Выделить всё • Развернуть
имею 5 ошибок, 0 предупреждений == не найдены (не определены) символы
"WDTCSR", "SMCR". файлы words\no-wdt.asm words\sleep.asm соответственно
мне пришлось переписывать оригинальные
sleep.asm и
no-wdt.asm ( ...core\words\) ( дописал условную компиляцию .ifdef .else .endif)
просмотр файлов (...core\devices\) atmega32a.frt и atmega328.frt показывает:
- Код: Выделить всё • Развернуть
\ mega32.frt
\ TIMER_COUNTER_1
47 constant ICR1H \ Timer/Counter1 Input Capture Register High Byte
46 constant ICR1L \ Timer/Counter1 Input Capture Register Low Byte
4B constant OCR1AH \ Timer/Counter1 Output Compare Register High Byte
4A constant OCR1AL \ Timer/Counter1 Output Compare Register Low Byte
49 constant OCR1BH \ Timer/Counter1 Output Compare Register High Byte
48 constant OCR1BL \ Timer/Counter1 Output Compare Register Low Byte
4F constant TCCR1A \ Timer/Counter1 Control Register A
4E constant TCCR1B \ Timer/Counter1 Control Register B
4D constant TCNT1H \ Timer/Counter1 High Byte
4C constant TCNT1L \ Timer/Counter1 Low Byte
\ mega328.frt
\ TIMER_COUNTER_1
87 constant ICR1H \ Timer/Counter1 Input Capture Register High Byte
86 constant ICR1L \ Timer/Counter1 Input Capture Register Low Byte
89 constant OCR1AH \ Timer/Counter1 Output Compare Register High Byte
88 constant OCR1AL \ Timer/Counter1 Output Compare Register Low Byte
8B constant OCR1BH \ Timer/Counter1 Output Compare Register High Byte
8A constant OCR1BL \ Timer/Counter1 Output Compare Register Low Byte
80 constant TCCR1A \ Timer/Counter1 Control Register A
81 constant TCCR1B \ Timer/Counter1 Control Register B
82 constant TCCR1C \ Timer/Counter1 Control Register C
85 constant TCNT1H \ Timer/Counter1 High Byte
84 constant TCNT1L \ Timer/Counter1 Low Byte
36 constant TIFR1 \ Timer/Counter Interrupt Flag register
6F constant TIMSK1 \ Timer/Counter Interrupt Mask Register
в даташите на мегу328 обнаруживается:
- Код: Выделить всё • Развернуть
For the Extended I/O space from 0x60 - 0xFF in SRAM,
only the ST/STS/STD and LD/LDS/LDD instructions can be used.
а вот итог:
- Код: Выделить всё • Развернуть
\ ==========================================
\ some changes (registers names) for mega328
\ ==========================================
\ For the Extended I/O space from 0x60 - 0xFF in SRAM,
\ only the ST/STS/STD and LD/LDS/LDD instructions can be used.
\ stop timer1
code t1>
TCCR1B R2 sts,
end-code
\ ( n -- )
\ start timer1 with n clock source
code <t1
R16 $7 ldi, \ mask for Clock Select bits
R16 R24 and,
R24 Y+ ld,
R25 Y+ ld,
R17 TCCR1B lds,
R17 $F8 andi, \ clear Clock Select bits
R17 R16 or, \ set Clock source
TCCR1B R17 sts,
end-code
0 TCCR1A c!
0 TCCR1B c!
\ The PRTIM1 bit in ”PRR – Power Reduction Register” (on page 45) must be
\ written to zero to enable Timer/Counter1 module.
0 PRR c! \ на всякий случай
\ stop timer1 & zero counter
: <t1> t1> 0 dup TCNT1H c! TCNT1L c!
$27 TIFR1 c! \ сбросить TOV1 (и остальные флаги до кучи)
;
\ ( -- ? ) check timer1 overflow
: tov1?
TIFR1 dup c@ 1 and \ test TOV1 flag
swap over swap c! \ clear TOV1 by writing'1'
;
\ ==========================================
вот, как-то так...(должно работать, но проверить немогу - нету меги328)
рекомендуется самостоятельно поправить
tttt1.f, и да поможет вам
marker go forth