Цитата
так бы уже завтра-после завтра спаял
Ну можете, конечно, сами подправить mac_rx.asm и mac_tx.asm на предмет более низкой тактовой. Немного с бубном поплясать и все получится на 16ти. Для простоты надо обеспечить чтение нулей с других четырех битов того порта, к которому подключенны данные PHY. Это при приеме пакета позволит убрать операцию AND с маской. И тогда что-то типа такого получится (это просто заготовка, требует допиливания до нужного состояния):
CODE
TX_LOOP:
LD R16,X+ ;[023][024]
; [---] ;[024][025]
OUT ETH_DATA,R16;[000]
SBIC ETH_COL ;[001]
RJMP COLLISION;[002]
NOP2 ;[003]
; [---] ;[004]
SWAP R16 ;[005]
OUT ETH_DATA,R16;[006]
DEC R17 ;[007]
BREQ TX_ENDLOOP;[008]
NOP2 ;[009]
; [---] ;[010]
LD R16,X+ ;[011]
; [---] ;[012]
OUT ETH_DATA,R16;[013]
NOP2 ;[014]
; [---] ;[015]
SBIS ETH_TXC ;[016] <---- Точное место фронта
NOP2 ;[017]/[018]
NOP ;[018]/[019]
OUT ETH_DATA,R16;[019]/[020]
DEC R17 ;[020]/[021]
BRNE TX_LOOP ;[021]/[022]
; [---] ;[022]/[023]
TX_ENDLOOP: ;[009]-[022]/[023]
NOP ;[010]-[022]/[023]
NOP ;[011]-[023]/[024]
CBI ETH_TXEN;[012]-[024]/[025]
; [---] ;[013]-[025]/[026]
;Тупой прием (без удаления VLAN-тегов)
RX_LOOP
IN R16,ETH_DATA;[000]
SWAP R16 ;[001]
TST XL ;[002]
BREQ RX_DROP ;[003]
SBIS ETH_RXC ;[004]
NOP2 ;[005]
IN R17,ETH_DATA;[006]
OR R16,R17 ;[007]
ST X+,R16 ;[008]
; [---] ;[009]
RJMP RX_LOOP ;[010]
; [---] ;[011]
;Прием с удалением VLAN-тегов на лету
RX_LOOP
IN R16,ETH_DATA;[000]
SWAP R16 ;[001]
CPI XL,12+2 ;[002]
BREQ RX_TYPE ;[003]
SBIS ETH_RXC ;[004]
NOP2 ;[005]
IN R17,ETH_DATA;[006]
OR R16,R17 ;[007]
ST X+,R16 ;[008]
; [---] ;[009]
RJMP RX_LOOP ;[010]
; [---] ;[011]
RX_TYPE: ;[004]
NOP ;[005]
IN R17,ETH_DATA;[006]
OR R16,R17 ;[007]
ST X+,R16 ;[008]
; [---] ;[009]
CPI R16,0x81;[010]
BRNE RX_LOOP2;[011]
NOP ;[012]
IN R16,ETH_DATA;[013]
SWAP R16 ;[014]
NOP ;[015]
SBIS ETH_RXC ;[016]
NOP2 ;[017]
NOP ;[018]
IN R17,ETH_DATA;[019]
OR R16,R17 ;[020]
ST X+,R16 ;[021]
BRNE RX_NOVLAN;[022]
LDI XL,12+2 ;[023]
RX_NOVLAN: ;[024]
NOP ;[025]
RX_LOOP2:
IN R16,ETH_DATA;[000]
SWAP R16 ;[001]
;[002]
;[003]
;[004]
;[005]
IN R17,ETH_DATA;[006]
OR R16,R17 ;[007]
ST X+,R16 ;[008]
; [---] ;[009]
;[010]
;[011]
;[012]
IN R16,ETH_DATA;[013]
SWAP R16 ;[014]
;[015]
SBIS ETH_RXC ;[016]
NOP2 ;[017]
IN R17,ETH_DATA;[018]/[019]
OR R16,R17 ;[019]/[020]
ST X+,R16 ;[020]/[021]
; [---] ;[021]/[022]
TST XL ;[022]/[023]
BRNE RX_LOOP2;[023][024]/[024][025]