ioLibrary for Cortex M series
wizchip_conf.c
Go to the documentation of this file.
1 //****************************************************************************/
39 //
40 //*****************************************************************************/
41 #include "wizchip_conf.h"
47 void wizchip_cris_enter(void) {};
53 void wizchip_cris_exit(void) {};
59 void wizchip_cs_select(void) {};
65 void wizchip_cs_deselect(void) {};
71 uint8_t wizchip_bus_readbyte(uint32_t AddrSel) { return * ((volatile uint8_t *) AddrSel); };
78 void wizchip_bus_writebyte(uint32_t AddrSel, uint8_t wb) { *((volatile uint8_t*)AddrSel) = wb; };
84 uint8_t wizchip_spi_readbyte(void) {return 0;};
90 void wizchip_spi_writebyte(uint8_t wb) {};
91 
92 
94  {
95  .id = _WIZCHIP_ID_,
96  .if_mode = _WIZCHIP_IO_MODE_,
97  .CRIS._enter = wizchip_cris_enter,
98  .CRIS._exit = wizchip_cris_exit,
99  .CS._select = wizchip_cs_select,
100  .CS._deselect = wizchip_cs_deselect,
101  .IF.BUS._read_byte = wizchip_bus_readbyte,
102  .IF.BUS._write_byte = wizchip_bus_writebyte
103 // .IF.SPI._read_byte = wizchip_spi_readbyte,
104 // .IF.SPI._write_byte = wizchip_spi_writebyte
105  };
106 
107 //static uint8_t _DNS_[4]; // DNS server ip address
108 //static dhcp_mode _DHCP_; // DHCP mode
109 
110 void reg_wizchip_cris_cbfunc(void(*cris_en)(void), void(*cris_ex)(void))
111 {
112  if(!cris_en || !cris_ex)
113  {
114  WIZCHIP.CRIS._enter = wizchip_cris_enter;
115  WIZCHIP.CRIS._exit = wizchip_cris_exit;
116  }
117  else
118  {
119  WIZCHIP.CRIS._enter = cris_en;
120  WIZCHIP.CRIS._exit = cris_ex;
121  }
122 }
123 
124 void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void))
125 {
126  if(!cs_sel || !cs_desel)
127  {
128  WIZCHIP.CS._select = wizchip_cs_select;
129  WIZCHIP.CS._deselect = wizchip_cs_deselect;
130  }
131  else
132  {
133  WIZCHIP.CS._select = cs_sel;
134  WIZCHIP.CS._deselect = cs_desel;
135  }
136 }
137 
138 void reg_wizchip_bus_cbfunc(uint8_t(*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, uint8_t wb))
139 {
140  while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_BUS_));
141 
142  if(!bus_rb || !bus_wb)
143  {
144  WIZCHIP.IF.BUS._read_byte = wizchip_bus_readbyte;
145  WIZCHIP.IF.BUS._write_byte = wizchip_bus_writebyte;
146  }
147  else
148  {
149  WIZCHIP.IF.BUS._read_byte = bus_rb;
150  WIZCHIP.IF.BUS._write_byte = bus_wb;
151  }
152 }
153 
154 void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb))
155 {
156  while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_SPI_));
157 
158  if(!spi_rb || !spi_wb)
159  {
160  WIZCHIP.IF.SPI._read_byte = wizchip_spi_readbyte;
161  WIZCHIP.IF.SPI._write_byte = wizchip_spi_writebyte;
162  }
163  else
164  {
165  WIZCHIP.IF.SPI._read_byte = spi_rb;
166  WIZCHIP.IF.SPI._write_byte = spi_wb;
167  }
168 }
169 
171 {
172  uint8_t gw[4], sn[4], sip[4];
173  uint8_t mac[6];
174  getSHAR(mac);
175  getGAR(gw); getSUBR(sn); getSIPR(sip);
176  setMR(MR_RST);
177  getMR(); // for delay
178  setSHAR(mac);
179  setGAR(gw);
180  setSUBR(sn);
181  setSIPR(sip);
182 }
183 
184 int8_t wizchip_init(uint8_t* txsize, uint8_t* rxsize)
185 {
186  int8_t i;
187  int8_t tmp = 0;
189  if(txsize)
190  {
191  tmp = 0;
192  for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
193  tmp += txsize[i];
194  if(tmp > 16) return -1;
195  for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
196  setSn_TXBUF_SIZE(i, txsize[i]);
197  }
198  if(rxsize)
199  {
200  tmp = 0;
201  for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
202  tmp += rxsize[i];
203  if(tmp > 16) return -1;
204  for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
205  setSn_RXBUF_SIZE(i, rxsize[i]);
206  }
207  return 0;
208 }
209