Web 51 P-Code Interpreter |
instrukce | parametry | popis | operace | příznaky |
ptstr2s | (B)a, (W)offset, (W)lng | Compare String to Receive Frame | for(i=0;i<lng;i++)(B)@a[i]-(B)@receive[offset+i]) | zflag |
ptstr2e | (B)e, (W)offset, (W)lng | Compare eepromString to Receive Frame | for(i=0;i<lng;i++)(B)@e[i]-(B)@receive[offset+i]) | zflag |
pr2s | (B)a, (W)offset, (W)lng | Copy from Receive Frame to String | for(i=0;i<lng;i++)(B)@a[i]=(B)@receive[offset+i]) | |
px2s | (B)a, (W)offset, (W)lng | Copy from Xmit Frame to String | for(i=0;i<lng;i++)(B)@a[i]=(B)@receive[offset+i]) | |
pi2x | (W)offset, (W)imm | Mov Word Immediate to Xmit Frame | (W)@xmit[offset]=(W)imm | |
ps2x | (W)offset, (B)a, (W)lng | Mov String to Xmit Frame | for(i=0;i<lng;i++)(B)@xmit[offset+i]=(B)@a[i]) | |
pe2x | (W)offset, (B)e, (W)lng | Mov eepromString to Xmit Frame | for(i=0;i<lng;i++)(B)@xmit[offset+i]=(B)@e[i]) | |
pc2x | (W)offset, (B)c, (W)lng | Mov codeString to Xmit Frame | for(i=0;i<lng;i++)(B)@xmit[offset+i]=(B)@c[i]) | |
pz2x | (W)offset, (W)lng | Mov Zero to Xmit Frame | for(i=0;i<lng;i++)(B)@xmit[offset+i]=0) | |
pr2x | (W)xmit_offset, (W)receive_offset, (W)lng | Mov Receive Frame to Xmit Frame | for(i=0;i<lng;i++)(B)@xmit[xmit_offset+i]=@receive[receive_offset+i]) |
Většina P-instrukcí používá DMA kanál Ethernet čipu pro přímé přenosy mezi požadovanou datovou oblastí a čipem. Existují však vyjímky. První z ní je instrukce pi2x, která používá proměnou workreg k uložení konstanty, zadané v parametru instrukce. Druhou vyjímkou je instrukce pr2x která, vzhledem k neexistenci oddělených DMA kanálů pro přijímací a vysílací frame, musí používat přenos přes pomocnou datovou oblast. Proto tato instrukce kopíruje data po částech, pomocí vyrovnávací paměti ebuf.
instrukce | parametry | popis | operace | příznaky |
xmit_frame | (W)lng | Transmit Xmit Frame | Transmit lng bytes to Ethernet | |
psendchar | (B)char | Write char to Xmit Frame | @xmit[tcpWritePointer++]=char | |
bflush | Flush ebuf to Xmit Frame |
Stejně jako u instrukce pr2x, nejsou u instrukce psendchar data přímo zapisovány do Ethernet čipu, ale pomocí vyrovnávací paměti ebuf. Tato paměť je ovládána přes dvě globálních proměné. První z nich tcpWritePointer, určující offset, odkud budou zapisována data do xmit frame. Tento offset se automaticky průběžně zvyšuje, tak jak dochází ke kopírování vyrovnávací paměti ebuf do vysílaného frame. Druhou proměnou je unwrited, udávající offset ve vyrovnávací paměti ebuf. Skutečný offset zapisovaných dat je ve skutečnosti tcpWritePointer + unwrited. Před prvním voláním psendchar je nutné obě proměné inicializovat, tcpWritePointer na hodnotu potřebného offsetu a unwrited na 0. Zápis dat přes psendchar je nutno ukončit voláním bflush.
instrukce | parametry | popis | operace | příznaky |
in_checksum | Calculate Frame checksum |
Instrukce in_checksum počítá sumu bloku, uloženého v paměti Ethernet čipu. Blok je vymezen absolutní adresou v paměti čipu, předávanou přes globální proměnou chkaddr a svoji délkou, předávanou přes globální proměnou chklen. Výsledná a zároveň inicializační hodnota sumy je předávána přes globální proměnou chkaddr.
POPIS Web51 | NOVINKY | FAQ | OBJEDNÁVKA | DOWNLOAD |
(c)Copyright 2000, 2001, HW server & Radek Benedikt
Web51@HW.cz, Web51.HW.cz Final applications of the Web51 : www.HWgroup.cz |