2 RN3AUS
Саш, сделал твой синтезатор - приятная штучка. Спасибо большое.
Есть один момент при формировании WSPR-15 (но думаю и в остальных модах будет так же) при изменении тона ненадолго пропадает сигнал. Усилителю мощности это просто "мозг выносит".
![Подмигивающий ;)](https://136.su//Smileys/default/wink.gif)
Рутины записи частоты и фазы сейчас выглядят так:
;
; read in 4 characters from the serial link
;
read_4:
rcall get_char ; read and ignore bits 32..24
rcall get_char ; read bits 23..16
mov r26,r16
rcall get_char ; read bits 15..8
mov r25,r16
rcall get_char ; read bits 7..0
mov r24,r16
clr r17
out PORTB,r17
ret
; read 4 character from the serial link and add to phase accumulator
; ---- Первый байт игнорируется, второй - младший байт, третий - средний, четвертый - старший байт.
read_ph_4:
rcall get_char ; read and ignore bits 32..24
rcall get_char ; read bits 7 ..0
mov r20,r16
rcall get_char ; read bits 15..8
mov r21,r16
rcall get_char ; read bits 23..16
mov r22,r16
ret
Не слишком красиво. По идее нужно буферизировать. Я к сожалению не знаю ассемблера атмеловского и самого процессора, но если можно найти еще 3 регистра для буфера, то должно быть примерно так:
;
; r40,r41,r42 буферные регистры
;
;
; read in 4 characters from the serial link
;
read_4:
rcall get_char ; read and ignore bits 32..24
rcall get_char ; read bits 23..16
mov r42,r16 ;пишем в буфер
rcall get_char ; read bits 15..8
mov r41,r16 ;пишем в буфер
rcall get_char ; read bits 7..0
mov r40,r16 ;пишем в буфер
cli ;запрещаем прерывания
mov r24,r40 ;быстренько грузим куда надо, начиная с младших разрядов
mov r25,r41
mov r26,r42
sei ;разрешаем прерывания
clr r17
out PORTB,r17
ret
; и тоже самое для фазы
; read 4 character from the serial link and add to phase accumulator
; ---- Первый байт игнорируется, второй - младший байт, третий - средний, четвертый - старший байт.
read_ph_4:
rcall get_char ; read and ignore bits 32..24
rcall get_char ; read bits 7 ..0
mov r40,r16
rcall get_char ; read bits 15..8
mov r41,r16
rcall get_char ; read bits 23..16
mov r42,r16
cli ;запрещаем прерывания
mov r20,r40 ;быстренько грузим куда надо, начиная с младших разрядов
mov r21,r41
mov r22,r42
sei ;разрешаем прерывания
ret
Возможно и не поможет... Там надо еще смотреть как обрабатывается прерывание по UART, но на это мне уже интеллекта не хватит.
![Подмигивающий ;)](https://136.su//Smileys/default/wink.gif)