94 void spi_eth_reset()
{
SPI_CS_ON; spi(0xFF); SPI_CS_OFF; }
void spi_set_bank(char value) {
char data;
SPI_CS_ON;
spi(SPI_READ_CON_CMD|ECON1); data=(spi(0)&0xFC)|value; SPI_CS_OFF;
SPI_CS_ON;
spi(SPI_WRITE_CON_CMD|ECON1); spi(data);
SPI_CS_OFF; }
char spi_read_con_e(char bank,char add) {
char data;
char cmd=SPI_READ_CON_CMD|add; spi_set_bank(bank);
SPI_CS_ON; spi(cmd); data=spi(0); SPI_CS_OFF; return data; }
char spi_read_con_m(char bank,char add) {
char data;
char cmd=SPI_READ_CON_CMD|add; spi_set_bank(bank);
void spi_write_con(char bank,char add,char value) {
char cmd=SPI_WRITE_CON_CMD|add; spi_set_bank(bank);
SPI_CS_ON; spi(cmd); spi(value); SPI_CS_OFF; }
int spi_read_phy(char add) {
char temp;int data;
spi_write_con(BANK_2,MIREGADR,add); temp=spi_read_con_m(BANK_2,MICMD)|0x01; spi_write_con(BANK_2,MICMD,temp);
while((spi_read_con_m(BANK_3,MISTAT)&0x01)==0x01){}; temp=spi_read_con_m(BANK_2,MICMD)&0xFE;
spi_write_con(BANK_2,MICMD,temp); data=spi_read_con_m(BANK_2,MIRDH)<<8; data=data|spi_read_con_m(BANK_2,MIRDL); return data;
}
void spi_write_phy(char add,int data) {
char temp;
spi_write_con(BANK_2,MIREGADR,add); temp=data&0x00FF;
spi_write_con(BANK_2,MIWRL,temp); temp=(data&0xFF00)>>8;
spi_write_con(BANK_2,MIWRH,temp); delay_ms(1);
}
void spi_transmit_start() {
char temp=0;
temp=spi_read_con_e(BANK_0,EIR)&0xF7;
spi_write_con(BANK_0,EIR,temp); //Clear Transmit Flag temp=spi_read_con_e(BANK_0,ECON1)|0x08;
spi_write_con(BANK_0,ECON1,temp); //Set Transmit Enable }
void spi_wait_transmit_done() {
while(spi_read_con_e(BANK_0,ECON1)&0x08==0x08); }
char spi_check_transmit_stat() {
char spi_transmit_error_cause() {
char temp=0,error=0xFF;
temp=spi_read_con_e(BANK_0,ESTAT);
if((temp&0x40)==0x40)error=6; //Buffer error else if((temp&0x10)==0x10)error=4; //Collision error else if((temp&0x04)==0x04)error=2; //Receive Busy else if((temp&0x02)==0x02)error=1; //Transmit abort else if((temp&0x01)==0x01)error=0; //OST expired return error;
}
void spi_receive_start() {
char temp=0;
temp=spi_read_con_e(BANK_0,ECON1)|0x04; spi_write_con(BANK_0,ECON1,temp); }
void spi_receive_stop() {
char temp=0;
temp=spi_read_con_e(BANK_0,ECON1)&0xFB; spi_write_con(BANK_0,ECON1,temp); }
char spi_check_packet() {
if(spi_read_con_e(BANK_1,EPKTCNT)>0)return 1; else return 0;
}
void spi_wait_clk_ready() {
while((spi_read_con_e(BANK_0,ESTAT)&0x01)==0) {
delay_ms(50); }
}
void spi_wait_rx_busy() {
LAMPIRAN B. Perhitungan Matematis Low Pass Filter
Filter Chebyshev dengan passband ripple sebesar 3dB memiliki koefisien sebagai
berikut :
a
1 5,6334a
2 0,7620b
2 2,6530a
30,1172
b
31,0686
Untuk bagian orde 1 perhitungan frekuensi cut-off adalah sebagai berikut :
2
5,6334
2 . 12. 10 . 22. 10
5,6334. 10
2 . 264
,
Untuk bagian orde 2 dengan R1 = 1K8, R2 = 15K, C1= 100n dan C2 = 2n2 adalah
sebagai berikut :
! "
! 4#
4
0,762. 10
%! " 0,762. 10
%! 4.2,653. 10
%. 2,2. 10
4 . 1,8. 10 . 10
%. 2,2. 10
0,762. 10
%! "0,5806. 10
'! 23,3464. 10
15,84 . 10
0,762. 10
%! "34,7136. 10
15,84 . 10
0,762. 10
%! 5,8918. 10
)15,84 . 10
1,7282. 10
)15,84 . 10
*+, * ,-
. "
! 4#
4
0,762. 10
%. " 0,762. 10
%! 4.2,653. 10
%. 2,2. 10
4 . 15. 10 . 10
%. 2,2. 10
0,762. 10
%. "0,5806. 10
'! 23,3464. 10
132 . 10
0,762. 10
%. "34,7136. 10
132 . 10
0,762. 10
%. 5,8918. 10
)132 . 10
13,5118. 10
)Untuk bagian orde 2 dengan R
1= 470, R
2= 5K, C
1= 1u dan C
2= 1n adalah sebagai
berikut :
! "
! 4#
4
0,1172. 10 ! " 0,1172. 10
! 4.1,0686. 10 . 10
4 . 470. 10 . 10
0,1172. 10 ! "0,0137. 10
! 4,2744. 10
0188 . 10
'0,1172. 10 ! "9,4256. 10
0188 . 10
'0,1172. 10 ! 9,7085. 10
)188 . 10
'2,0115. 10
)188 . 10
',/, *
. "
! 4#
4
0,1172. 10 . " 0,1172. 10
! 4.1,0686. 10 . 10
4 . 5. 10 . 10 . 10
0,1172. 10 . "0,0137. 10
! 4,2744. 10
02 . 10
0,1172. 10 . "9,4256. 10
02 . 10
0,1172. 10 . 9,7085. 10
)2 . 10
21,4285. 10
)