w5300.h 91 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336
  1. #ifndef _W5300_H_
  2. #define _W5300_H_
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. //*****************************************************************************
  7. //
  8. //! \file w5300.h
  9. //! \brief W5300 HAL Header File.
  10. //! \version 1.0.0
  11. //! \date 2015/05/01
  12. //! \par Revision history
  13. //! <2015/05/01> 1st Released for integrating with ioLibrary
  14. //! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary.
  15. //! >> https://github.com/Wiznet/ioLibrary_Driver
  16. //! \author MidnightCow
  17. //! \copyright
  18. //!
  19. //! Copyright (c) 2015, WIZnet Co., LTD.
  20. //! All rights reserved.
  21. //!
  22. //! Redistribution and use in source and binary forms, with or without
  23. //! modification, are permitted provided that the following conditions
  24. //! are met:
  25. //!
  26. //! * Redistributions of source code must retain the above copyright
  27. //! notice, this list of conditions and the following disclaimer.
  28. //! * Redistributions in binary form must reproduce the above copyright
  29. //! notice, this list of conditions and the following disclaimer in the
  30. //! documentation and/or other materials provided with the distribution.
  31. //! * Neither the name of the <ORGANIZATION> nor the names of its
  32. //! contributors may be used to endorse or promote products derived
  33. //! from this software without specific prior written permission.
  34. //!
  35. //! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  36. //! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  37. //! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  38. //! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  39. //! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  40. //! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  41. //! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  42. //! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  43. //! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  44. //! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  45. //! THE POSSIBILITY OF SUCH DAMAGE.
  46. //
  47. //*****************************************************************************
  48. #include <stdint.h>
  49. #include "wizchip_conf.h"
  50. /// \cond DOXY_APPLY_CODE
  51. #if (_WIZCHIP_ == 5300)
  52. /// \endcond
  53. #define _WIZCHIP_SN_BASE_ (0x0200)
  54. #define _WIZCHIP_SN_SIZE_ (0x0040)
  55. #define WIZCHIP_CREG_BLOCK 0x00 ///< Common register block
  56. #define WIZCHIP_SREG_BLOCK(N) (_WIZCHIP_SN_BASE_+ _WIZCHIP_SN_SIZE_*N) ///< Socket N register block
  57. #define WIZCHIP_OFFSET_INC(ADDR, N) (ADDR + N) ///< Increase offset address
  58. #if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_)
  59. #define _W5300_IO_BASE_ _WIZCHIP_IO_BASE_
  60. #elif (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_)
  61. #define IDM_AR ((_WIZCHIP_IO_BASE_ + 0x0002)) ///< Indirect mode address register
  62. #define IDM_DR ((_WIZCHIP_IO_BASE_ + 0x0004)) ///< Indirect mode data register
  63. #define _W5300_IO_BASE_ 0x0000
  64. #elif (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)
  65. #error "Unkonw _WIZCHIP_IO_MODE_"
  66. #endif
  67. ///////////////////////////////////////
  68. // Definition For Legacy Chip Driver //
  69. ///////////////////////////////////////
  70. #define IINCHIP_READ(ADDR) WIZCHIP_READ(ADDR) ///< The defined for legacy chip driver
  71. #define IINCHIP_WRITE(ADDR,VAL) WIZCHIP_WRITE(ADDR,VAL) ///< The defined for legacy chip driver
  72. //#define IINCHIP_READ_BUF(ADDR,BUF,LEN) WIZCHIP_READ_BUF(ADDR,BUF,LEN) ///< The defined for legacy chip driver
  73. //#define IINCHIP_WRITE_BUF(ADDR,BUF,LEN) WIZCHIP_WRITE(ADDR,BUF,LEN) ///< The defined for legacy chip driver
  74. //-------------------------- defgroup ---------------------------------
  75. /**
  76. * @defgroup W5300 W5300
  77. *
  78. * @brief WHIZCHIP register defines and I/O functions of @b W5300.
  79. *
  80. * - @ref WIZCHIP_register_W5300 : @ref Common_register_group_W5300 and @ref Socket_register_group_W5300
  81. * - @ref WIZCHIP_IO_Functions_W5300 : @ref Basic_IO_function_W5300, @ref Common_register_access_function_W5300 and @ref Socket_register_access_function_W5300
  82. */
  83. /**
  84. * @defgroup WIZCHIP_register_W5300 WIZCHIP register
  85. * @ingroup W5300
  86. *
  87. * @brief WHIZCHIP register defines register group of @b W5300.
  88. *
  89. * - @ref Common_register_group_W5300 : Common register group
  90. * - @ref Socket_register_group_W5300 : \c SOCKET n register group
  91. */
  92. /**
  93. * @defgroup WIZCHIP_IO_Functions_W5300 WIZCHIP I/O functions
  94. * @ingroup W5300
  95. *
  96. * @brief This supports the basic I/O functions for @ref WIZCHIP_register_W5300.
  97. *
  98. * - <b> Basic I/O function </b> \n
  99. * WIZCHIP_READ(), WIZCHIP_WRITE() \n\n
  100. *
  101. * - @ref Common_register_group_W5300 <b>access functions</b> \n
  102. * -# @b Mode \n
  103. * getMR(), setMR()
  104. * -# @b Interrupt \n
  105. * getIR(), setIR(), getIMR(), setIMR(), getSIR(), setSIR(), getSIMR(), setSIMR()
  106. * -# <b> Network Information </b> \n
  107. * getSHAR(), setSHAR(), getGAR(), setGAR(), getSUBR(), setSUBR(), getSIPR(), setSIPR()
  108. * -# @b Retransmission \n
  109. * getRCR(), setRCR(), getRTR(), setRTR()
  110. * -# @b PPPoE \n
  111. * getPTIMER(), setPTIMER(), getPMAGIC(), getPMAGIC(), getPSID(), setPSID(), getPHAR(), setPHAR(), getPMRU(), setPMRU()
  112. * -# <b> ICMP packet </b>\n
  113. * getUIPR(), getUPORTR()
  114. * -# @b Socket Memory \n
  115. * getMTYPER(), setMTYPER() \n
  116. * getTMS01R(), getTMS23R(), getTMS45R(), getTMS67R(), setTMS01R(), setTMS23R(), setTMS45R(), setTMS67R() \n
  117. * getRMS01R(), getRMS23R(), getRMS45R(), getRMS67R(), setRMS01R(), setRMS23R(), setRMS45R(), setRMS67R() \n
  118. * -# @b etc. \n
  119. * getPn_BRDYR(), setPn_BRDYR(), getPn_BDPTHR(), setPn_BDPTHR(), getIDR() \n\n
  120. *
  121. * - \ref Socket_register_group_W5300 <b>access functions</b> \n
  122. * -# <b> SOCKET control</b> \n
  123. * getSn_MR(), setSn_MR(), getSn_CR(), setSn_CR(), getSn_IMR(), setSn_IMR(), getSn_IR(), setSn_IR()
  124. * -# <b> SOCKET information</b> \n
  125. * getSn_SR(), getSn_DHAR(), setSn_DHAR(), getSn_PORT(), setSn_PORT(), getSn_DIPR(), setSn_DIPR(), getSn_DPORT(), setSn_DPORT()
  126. * getSn_MSSR(), setSn_MSSR()
  127. * -# <b> SOCKET communication </b> \n
  128. * getSn_RXBUF_SIZE(), setSn_RXBUF_SIZE(), getSn_TXBUF_SIZE(), setSn_TXBUF_SIZE() \n
  129. * getSn_TX_RD(), getSn_TX_WR(), setSn_TX_WR() \n
  130. * getSn_RX_RD(), setSn_RX_RD(), getSn_RX_WR() \n
  131. * getSn_TX_FSR(), getSn_RX_RSR(), getSn_KPALVTR(), setSn_KPALVTR()
  132. * -# <b> IP header field </b> \n
  133. * getSn_FRAG(), setSn_FRAG(), getSn_TOS(), setSn_TOS() \n
  134. * getSn_TTL(), setSn_TTL()
  135. */
  136. /**
  137. * @defgroup Common_register_group_W5300 Common register
  138. * @ingroup WIZCHIP_register_W5300
  139. *
  140. * @brief Common register group\n
  141. * It set the basic for the networking\n
  142. * It set the configuration such as interrupt, network information, ICMP, etc.
  143. * @details
  144. * @sa MR : Mode register.
  145. * @sa GAR, SUBR, SHAR, SIPR : Network Configuration
  146. * @sa IR, _IMR_ : Interrupt.
  147. * @sa MTYPER, TMS01R,TMS23R, TMS45R, TMS67R,RMS01R,RMS23R, RMS45R, RMS67R : Socket TX/RX memory
  148. * @sa _RTR_, _RCR_ : Data retransmission.
  149. * @sa PTIMER, PMAGIC, PSID, PDHAR : PPPoE.
  150. * @sa UIPR, UPORTR, FMTUR : ICMP message.
  151. * @sa Pn_BRDYR, Pn_BDPTHR, IDR : etc.
  152. */
  153. /**
  154. * @defgroup Socket_register_group_W5300 Socket register
  155. * @ingroup WIZCHIP_register_W5300
  156. *
  157. * @brief Socket register group.\n
  158. * Socket register configures and control SOCKETn which is necessary to data communication.
  159. * @details
  160. * @sa Sn_MR, Sn_CR, Sn_IR, Sn_IMR : SOCKETn Control
  161. * @sa Sn_SR, Sn_PORT, Sn_DHAR, Sn_DIPR, Sn_DPORT : SOCKETn Information
  162. * @sa Sn_MSSR, Sn_TOS, Sn_TTL, Sn_KPALVTR, Sn_FRAG : Internet protocol.
  163. * @sa Sn_TX_WRSR, Sn_TX_FSR, Sn_TX_RD, Sn_TX_WR, Sn_RX_RSR, Sn_RX_RD, Sn_RX_WR, Sn_TX_FIFOR, Sn_RX_FIFOR : Data communication
  164. */
  165. /**
  166. * @defgroup Basic_IO_function_W5300 Basic I/O function
  167. * @ingroup WIZCHIP_IO_Functions_W5300
  168. * @brief These are basic input/output functions to read values from register or write values to register.
  169. */
  170. /**
  171. * @defgroup Common_register_access_function_W5300 Common register access functions
  172. * @ingroup WIZCHIP_IO_Functions_W5300
  173. * @brief These are functions to access <b>common registers</b>.
  174. */
  175. /**
  176. * @defgroup Socket_register_access_function_W5300 Socket register access functions
  177. * @ingroup WIZCHIP_IO_Functions_W5300
  178. * @brief These are functions to access <b>socket registers</b>.
  179. */
  180. //------------------------------- defgroup end --------------------------------------------
  181. //----------------------------- W5300 Common Registers -----------------------------
  182. /**
  183. * @ingroup Common_register_group_W5300
  184. * @brief Mode Register address(R/W)\n
  185. * @ref MR is used for S/W reset, ping block mode, PPPoE mode and etc.
  186. * @details Each bit of @ref MR defined as follows.
  187. * <table>
  188. * <tr> <td>15</td> <td>14</td> <td>13</td> <td>12</td> <td>11</td> <td>10</td> <td>9</td> <td>8</td> </tr>
  189. * <tr> <td>DBW</td> <td>MPF</td> <td colspan=3>WDF</td><td>RDF</td> <td>Reserved</td> <td>FS</td>
  190. * <tr> <td>7</td> <td>6</td> <td>5</td> <td>4</td> <td>3</td> <td>2</td> <td>1</td> <td>0</td> </tr>
  191. * <tr> <td>RST</td> <td>Reserved</td> <td>WOL</td> <td>PB</td> <td>PPPoE</td> <td>Reserved</td> <td>FARP</td> <td>Reserved</td> </tr>
  192. * </table>
  193. * - \ref MR_DBW : Data bus width (0 : 8 Bit, 1 : 16 Bit), Read Only
  194. * - \ref MR_MPF : Received a Pause Frame from MAC layer (0 : Normal Frame, 1 : Pause Frame), Read Only
  195. * - \ref MR_WDF : Write Data Fetch time (When CS signal is low, W5300 Fetch a written data by Host after PLL_CLK * MR_WDF)
  196. * - \ref MR_RDH : Read Data Hold time (0 : No use data hold time, 1 : Use data hold time, 2 PLL_CLK)
  197. * - \ref MR_FS : FIFO Swap (0 : Disable Swap, 1 : Enable Swap)
  198. * - \ref MR_RST : Reset
  199. * - \ref MR_WOL : Wake on LAN
  200. * - \ref MR_PB : Ping block
  201. * - \ref MR_PPPOE : PPPoE mode
  202. * - \ref MR_FARP : Force ARP mode
  203. */
  204. #define MR (_WIZCHIP_IO_BASE_)
  205. /**
  206. * @ingroup Common_register_group_W5300
  207. * @brief Interrupt Register(R/W)
  208. * @details \ref IR indicates the interrupt status. Each bit of \ref IR will be still until the bit will be written to by the host.
  209. * If \ref IR is not equal to 0x0000 INTn PIN is asserted to low until it is 0x0000\n\n
  210. * Each bit of \ref IR defined as follows.
  211. * <table>
  212. * <tr> <td>15</td> <td>14</td> <td>13</td> <td>12</td> <td>11</td> <td>10</td> <td>9</td> <td>8</td> </tr>
  213. * <tr> <td>IPCF</td> <td>DPUR</td> <td>PPPT</td> <td>FMTU</td> <td>Reserved</td> <td>Reserved</td> <td>Reserved</td> <td>Reserved</td> </tr>
  214. * <tr> <td>7</td> <td>6</td> <td>5</td> <td>4</td> <td>3</td> <td>2</td> <td>1</td> <td>0</td> </tr>
  215. * <tr> <td>S7_INT</td> <td>S6_INT</td> <td>S5_INT</td> <td>S4_INT</td> <td>S3_INT</td> <td>S2_INT</td> <td>S1_INT</td> <td>S0_INT</td> </tr>
  216. * </table>
  217. * - \ref IR_IPCF : IP conflict
  218. * - \ref IR_DPUR : Destination Port Unreachable
  219. * - \ref IR_PPPT : PPPoE Termination
  220. * - \ref IR_FMTU : Fragmented MTU
  221. * - \ref IR_SnINT(n) : Interrupted from SOCKETn
  222. *
  223. * @note : In W5300, IR is operated same as IR and SIR in other WIZCHIP(5100,5200,W5500)
  224. */
  225. #define IR (_W5300_IO_BASE_ + 0x02)
  226. /**
  227. * @ingroup Common_register_group_W5300
  228. * @brief Socket Interrupt Mask Register(R/W)
  229. * @details Each bit of \ref _IMR_ corresponds to each bit of \ref IR.
  230. * When a bit of _IMR_ is and the corresponding bit of \ref IR is Interrupt will be issued.
  231. * In other words, if a bit of _IMR_, an interrupt will be not issued even if the corresponding bit of \ref IR is set
  232. * @note : In W5300, _IMR_ is operated same as _IMR_ and SIMR in other WIZCHIP(5100,5200,W5500)
  233. */
  234. #define _IMR_ (_W5300_IO_BASE_ + 0x04)
  235. //#define ICFGR (_W5300_IO_BASE_ + 0x06)
  236. //#define INTLEVEL ICFGR
  237. /**
  238. * @ingroup Common_register_group_W5300
  239. * @brief Source MAC Register address(R/W)
  240. * @details @ref SHAR configures the source hardware address.
  241. */
  242. #define SHAR (_W5300_IO_BASE_ + 0x08)
  243. /**
  244. * @ingroup Common_register_group_W5300
  245. * @brief Gateway IP Register address(R/W)
  246. * @details @ref GAR configures the default gateway address.
  247. */
  248. #define GAR (_W5300_IO_BASE_ + 0x10)
  249. /**
  250. * @ingroup Common_register_group_W5300
  251. * @brief Subnet mask Register address(R/W)
  252. * @details @ref SUBR configures the subnet mask address.
  253. */
  254. #define SUBR (_W5300_IO_BASE_ + 0x14)
  255. /**
  256. * @ingroup Common_register_group_W5300
  257. * @brief Source IP Register address(R/W)
  258. * @details @ref SIPR configures the source IP address.
  259. */
  260. #define SIPR (_W5300_IO_BASE_ + 0x18)
  261. /**
  262. * @ingroup Common_register_group_W5300
  263. * @brief Timeout register address( 1 is 100us )(R/W)
  264. * @details @ref _RTR_ configures the retransmission timeout period. The unit of timeout period is 100us and the default of @ref _RTR_ is x07D0.
  265. * And so the default timeout period is 200ms(100us X 2000). During the time configured by @ref _RTR_, W5300 waits for the peer response
  266. * to the packet that is transmitted by \ref Sn_CR (CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP command).
  267. * If the peer does not respond within the @ref _RTR_ time, W5300 retransmits the packet or issues timeout.
  268. */
  269. #define _RTR_ (_W5300_IO_BASE_ + 0x1C)
  270. /**
  271. * @ingroup Common_register_group_W5300
  272. * @brief Retry count register(R/W)
  273. * @details @ref _RCR_ configures the number of time of retransmission.
  274. * When retransmission occurs as many as ref _RCR_+1 Timeout interrupt is issued (@ref Sn_IR_TIMEOUT = '1').
  275. */
  276. #define _RCR_ (_W5300_IO_BASE_ + 0x1E)
  277. /**
  278. * @ingroup Common_register_group_W5300
  279. * @brief TX memory size of \c SOCKET 0 & 1
  280. * @details TMS01R configures the TX buffer block size of \c SOCKET 0 & 1. The default value is configured with 8KB and can be configure from 0 to 64KB with unit 1KB.
  281. * But the sum of all SOCKET TX buffer size should be multiple of 8 and the sum of all SOCKET TX and RX memory size can't exceed 128KB.
  282. * When exceeded nor multiple of 8, the data transmittion is invalid.
  283. */
  284. #define TMS01R (_W5300_IO_BASE_ + 0x20)
  285. /**
  286. * @ingroup Common_register_group_W5300
  287. * @brief TX memory size of \c SOCKET 2 & 3
  288. * @details refer to \ref TMS01R
  289. */
  290. #define TMS23R (TMS01R + 2)
  291. /**
  292. * @ingroup Common_register_group_W5300
  293. * @brief TX memory size of \c SOCKET 4 & 5
  294. * @details refer to \ref TMS01R
  295. */
  296. #define TMS45R (TMS01R + 4)
  297. /**
  298. * @ingroup Common_register_group_W5300
  299. * @brief TX memory size of \c SOCKET 6 & 7
  300. * @details refer to \ref TMS01R
  301. */
  302. #define TMS67R (TMS01R + 6)
  303. /**
  304. * @ingroup Common_register_group_W5300
  305. * @brief TX memory size of \c SOCKET 0.
  306. * @details refer to \ref TMS01R
  307. */
  308. #define TMSR0 TMS01R
  309. /**
  310. * @ingroup Common_register_group_W5300
  311. * @brief TX memory size of \c SOCKET 1.
  312. * @details refer to \ref TMS01R
  313. */
  314. #define TMSR1 (TMSR0 + 1)
  315. /**
  316. * @ingroup Common_register_group_W5300
  317. * @brief TX memory size of \c SOCKET 2.
  318. * @details refer to \ref TMS01R
  319. */
  320. #define TMSR2 (TMSR0 + 2)
  321. /**
  322. * @ingroup Common_register_group_W5300
  323. * @brief TX memory size of \c SOCKET 3.
  324. * @details refer to \ref TMS01R
  325. */
  326. #define TMSR3 (TMSR0 + 3)
  327. /**
  328. * @ingroup Common_register_group_W5300
  329. * @brief TX memory size of \c SOCKET 4.
  330. * @details refer to \ref TMS01R
  331. */
  332. #define TMSR4 (TMSR0 + 4)
  333. /**
  334. * @ingroup Common_register_group_W5300
  335. * @brief TX memory size of \c SOCKET 5.
  336. * @details refer to \ref TMS01R
  337. */
  338. #define TMSR5 (TMSR0 + 5)
  339. /**
  340. * @ingroup Common_register_group_W5300
  341. * @brief TX memory size of \c SOCKET 6.
  342. * @details refer to \ref TMS01R
  343. */
  344. #define TMSR6 (TMSR0 + 6)
  345. /**
  346. * @ingroup Common_register_group_W5300
  347. * @brief TX memory size of \c SOCKET 7.
  348. * @details refer to \ref TMS01R
  349. */
  350. #define TMSR7 (TMSR0 + 7)
  351. /**
  352. * @ingroup Common_register_group_W5300
  353. * @brief RX memory size of \c SOCKET 0 & 1
  354. * @details RMS01R configures the RX buffer block size of \c SOCKET 0 & 1. The default value is configured with 8KB and can be configure from 0 to 64KB with unit 1KB.
  355. * But the sum of all SOCKET RX buffer size should be multiple of 8 and the sum of all SOCKET RX and TX memory size can't exceed 128KB.
  356. * When exceeded nor multiple of 8, the data reception is invalid.
  357. */
  358. #define RMS01R (_W5300_IO_BASE_ + 0x28)
  359. /**
  360. * @ingroup Common_register_group_W5300
  361. * @brief RX memory size of \c SOCKET 2 & 3
  362. * @details Refer to \ref RMS01R
  363. */
  364. #define RMS23R (RMS01R + 2)
  365. /**
  366. * @ingroup Common_register_group_W5300
  367. * @brief RX memory size of \c SOCKET 4 & 5
  368. * @details Refer to \ref RMS01R
  369. */
  370. #define RMS45R (RMS01R + 4)
  371. /**
  372. * @ingroup Common_register_group_W5300
  373. * @brief RX memory size of \c SOCKET 6 & 7
  374. * @details Refer to \ref RMS01R
  375. */
  376. #define RMS67R (RMS01R + 6)
  377. /**
  378. * @ingroup Common_register_group_W5300
  379. * @brief RX memory size of \c SOCKET 0.
  380. * @details refer to \ref RMS01R
  381. */
  382. #define RMSR0 RMS01R
  383. /**
  384. * @ingroup Common_register_group_W5300
  385. * @brief RX memory size of \c SOCKET 1.
  386. * @details refer to \ref RMS01R
  387. */
  388. #define RMSR1 (RMSR0 + 1)
  389. /**
  390. * @ingroup Common_register_group_5300
  391. * @brief RX memory size of \c SOCKET 2.
  392. * @details refer to \ref RMS01R
  393. */
  394. #define RMSR2 (RMSR0 + 2)
  395. /**
  396. * @ingroup Common_register_group_W5300
  397. * @brief RX memory size of \c SOCKET 3.
  398. * @details refer to \ref RMS01R
  399. */
  400. #define RMSR3 (RMSR0 + 3)
  401. /**
  402. * @ingroup Common_register_group_W5300
  403. * @brief RX memory size of \c SOCKET 4.
  404. * @details refer to \ref RMS01R
  405. */
  406. #define RMSR4 (RMSR0 + 4)
  407. /**
  408. * @ingroup Common_register_group_W5300
  409. * @brief RX memory size of \c SOCKET 5.
  410. * @details refer to \ref RMS01R
  411. */
  412. #define RMSR5 (RMSR0 + 5)
  413. /**
  414. * @ingroup Common_register_group_W5300
  415. * @brief RX memory size of \c SOCKET 6.
  416. * @details refer to \ref RMS01R
  417. */
  418. #define RMSR6 (RMSR0 + 6)
  419. /**
  420. * @ingroup Common_register_group_W5300
  421. * @brief RX memory size of \c SOCKET 7.
  422. * @details refer to \ref RMS01R
  423. */
  424. #define RMSR7 (RMSR0 + 7)
  425. /**
  426. * @ingroup Common_register_group_W5300
  427. * @brief Memory Type Register
  428. * @details W5300’s 128Kbytes data memory (Internal TX/RX memory) is composed of 16 memory blocks
  429. * of 8Kbytes. MTYPER configures type of each 8KB memory block in order to select RX or TX memory.
  430. * The type of 8KB memory block corresponds to each bit of MTYPER. When the bit is ‘1’, it is used as TX
  431. * memory, and the bit is ‘0’, it is used as RX memory. MTYPER is configured as TX memory type
  432. * from the lower bit. The rest of the bits not configured as TX memory, should be set as ‘0’.
  433. */
  434. #define MTYPER (_W5300_IO_BASE_ + 0x30)
  435. /**
  436. * @ingroup Common_register_group_W5300
  437. * @brief PPPoE Authentication Type register
  438. * @details It notifies authentication method negotiated with PPPoE server.
  439. * W5300 supports 2 types of authentication methods.
  440. * - PAP : 0xC023
  441. * - CHAP : 0xC223
  442. */
  443. #define PATR (_W5300_IO_BASE_ + 0x32)
  444. //#define PPPALGOR (_W5300_IO_BASE_ + 0x34)
  445. /**
  446. * @ingroup Common_register_group_W5300
  447. * @brief PPP Link Control Protocol Request Timer Register
  448. * @details It configures transmitting timer of link control protocol (LCP) echo request. Value 1 is about 25ms.
  449. */
  450. #define PTIMER (_W5300_IO_BASE_ + 0x36)
  451. /**
  452. * @ingroup Common_register_group_W5300
  453. * @brief PPP LCP magic number register
  454. * @details It configures byte value to be used for 4bytes “Magic Number” during LCP negotiation with PPPoE server.
  455. */
  456. #define PMAGICR (_W5300_IO_BASE_ + 0x38)
  457. //#define PSTATER (_W5300_IO_BASE_ + 0x3A)
  458. /**
  459. * @ingroup Common_register_group_W5300
  460. * @brief PPPoE session ID register
  461. * @details It notifies PPP session ID to be used for communication with PPPoE server (acquired by PPPoE-process of W5300).
  462. */
  463. #define PSIDR (_W5300_IO_BASE_ + 0x3C)
  464. /**
  465. * @ingroup Common_register_group_W5300
  466. * @brief PPPoE destination hardware address register
  467. * @details It notifies hardware address of PPPoE server (acquired by PPPoE-process of W5300).
  468. */
  469. #define PDHAR (_W5300_IO_BASE_ + 0x40)
  470. /**
  471. * @ingroup Common_register_group_W5300
  472. * @brief Unreachable IP address register
  473. * @details When trying to transmit UDP data to destination port number which is not open,
  474. * W5300 can receive ICMP (Destination port unreachable) packet. \n
  475. * In this case, \ref IR_DPUR bit of \ref IR becomes '1'.
  476. * And destination IP address and unreachable port number of ICMP packet can be acquired through UIPR and \ref UPORTR.
  477. */
  478. #define UIPR (_W5300_IO_BASE_ + 0x48)
  479. /**
  480. * @ingroup Common_register_group_W5300
  481. * @brief Unreachable port number register
  482. * @details Refer to \ref UIPR.
  483. */
  484. #define UPORTR (_W5300_IO_BASE_ + 0x4C)
  485. /**
  486. * @ingroup Common_register_group_W5300
  487. * @brief Fragment MTU register
  488. * @details When communicating with the peer having a different MTU, W5300 can receive an ICMP(Fragment MTU) packet.
  489. * At this case, IR(FMTU) becomes ‘1’ and destination IP address and fragment MTU value of ICMP packet can be acquired through UIPR and FMTUR.
  490. * In order to keep communicating with the peer having Fragment MTU, set the FMTUR first in Sn_MSSR of the SOCKETn, and try the next communication.
  491. */
  492. #define FMTUR (_W5300_IO_BASE_ + 0x4E)
  493. //#define Sn_RTCR(n) (_W5300_IO_BASE_ + 0x50 + n*2)
  494. /**
  495. * @ingroup Common_register_group_W5300
  496. * @brief PIN 'BRDYn' configure register
  497. * @details It configures the PIN "BRDYn" which is monitoring TX/RX memory status of the specified SOCKET.
  498. * If the free buffer size of TX memory is same or bigger than the buffer depth of \ref Pn_BDPTHR,
  499. * or received buffer size of RX memory is same or bigger than the \ref Pn_BDPTHR,
  500. * PIN "BRDYn" is signaled.
  501. * <table>
  502. * <tr> <td>15</td> <td>14</td> <td>13</td> <td>12</td> <td>11</td> <td>10</td> <td>9</td> <td>8</td> </tr>
  503. * <tr> <td colspan=8>Reserved, Read as 0</td> </tr>
  504. * <tr> <td>7</td> <td>6</td> <td>5</td> <td>4</td> <td>3</td> <td>2</td> <td>1</td> <td>0</td> </tr>
  505. * <tr> <td>PEN</td> <td>MT</td> <td>PPL</td> <td colspan=2>Reserved</td> <td colspan=3>SN</td> </tr>
  506. * </table>
  507. *
  508. * - \ref Pn_PEN Enable PIN 'BRDYn' (0 : Disable, 1 : Enable)
  509. * - \ref Pn_MT Monitoring Memory type (0 : RX memory, 1 : TX Memory)
  510. * - \ref Pn_PPL PIN Polarity bit of Pn_BRDYR. (0 : Low sensitive, 1 : High sensitive)
  511. * - \ref Pn_SN(n) Monitoring SOCKET number of Pn_BRDYR
  512. */
  513. #define Pn_BRDYR(n) (_W5300_IO_BASE_ + 0x60 + n*4)
  514. /**
  515. * @ingroup Common_register_group_W5300
  516. * @brief PIN 'BRDYn' buffer depth Register
  517. * @details It configures buffer depth of PIN "BRDYn".
  518. * When monitoring TX memory and \ref Sn_TX_FSR is same or bigger than Pn_BDPTHR, the PIN "BRDYn" is signaled.
  519. * When monitoring RX memory and if \ref Sn_RX_RSR is same or bigger than Pn_BDPTHR, PIN "BRDYn" is signaled.
  520. * The value for Pn_BDPTHR can't exceed TX/RX memory size allocated by TMSR or RMSR such like as \ref TMS01R or \ref RMS01R.
  521. */
  522. #define Pn_BDPTHR(n) (_W5300_IO_BASE_ + 0x60 + n*4 + 2)
  523. /**
  524. * @ingroup Common_register_group_W5300
  525. * @brief W5300 identification register.
  526. * @details Read Only. 0x5300.
  527. */
  528. #define IDR (_W5300_IO_BASE_ + 0xFE)
  529. #define VERSIONR IDR
  530. //----------------------------- W5300 SOCKET Registers -----------------------------
  531. /**
  532. * @ingroup Socket_register_group_W5300
  533. * @brief Socket Mode register(R/W)
  534. * @details @ref Sn_MR configures the option or protocol type of Socket n.\n\n
  535. * Each bit of @ref Sn_MR defined as the following.
  536. * <table>
  537. * <tr> <td>15</td> <td>14</td> <td>13</td> <td>12</td> <td>11</td> <td>10</td> <td>9</td> <td>8</td> </tr>
  538. * <tr> <td colspan=7> Reserved. Read as 0 </td> <td>ALIGN</td> </tr>
  539. * <tr> <td>7</td> <td>6</td> <td>5</td> <td>4</td> <td>3</td> <td>2</td> <td>1</td> <td>0</td> </tr>
  540. * <tr> <td>MULTI</td> <td>MF</td> <td>ND/IGMPv</td> <td>Reserved</td> <td colspan=4>PROTOCOL[3:0]</td> </tr>
  541. * </table>
  542. * - @ref Sn_MR_ALIGN : Alignment bit of Sn_MR, Only valid in \ref Sn_MR_TCP. (C0 : Include TCP PACK_INFO, 1 : Not include TCP PACK_INFO)
  543. * - @ref Sn_MR_MULTI : Support UDP Multicasting
  544. * - @ref Sn_MR_MF : Enable MAC Filter (0 : Disable, 1 - Enable), When enabled, W5300 can receive only both own and broadcast packet.
  545. * - @ref Sn_MR_ND : No Delayed Ack(TCP) flag
  546. * - @ref Sn_MR_IGMPv : IGMP version used <b>in UDP mulitcasting</b>. (0 : Version 2, 1 : Version 2)
  547. * - <b>PROTOCOL[3:0]</b>
  548. * <table>
  549. * <tr> <td><b>Protocol[3]</b></td> <td><b>Protocol[2]</b></td> <td><b>Protocol[1]</b></td> <td><b>Protocol[0]</b></td> <td>@b Meaning</td> </tr>
  550. * <tr> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>Closed</td> </tr>
  551. * <tr> <td>0</td> <td>0</td> <td>0</td> <td>1</td> <td>TCP</td> </tr>
  552. * <tr> <td>0</td> <td>0</td> <td>1</td> <td>0</td> <td>UDP</td> </tr>
  553. * <tr> <td>0</td> <td>0</td> <td>1</td> <td>1</td> <td>IPCRAW</td> </tr>
  554. * <tr> <td>0</td> <td>1</td> <td>0</td> <td>0</td> <td>MACRAW</td> </tr>
  555. * <tr> <td>0</td> <td>1</td> <td>0</td> <td>1</td> <td>PPPoE</td> </tr>
  556. * </table>
  557. *
  558. * - @ref Sn_MR_PPPoE : PPPoE
  559. * - @ref Sn_MR_MACRAW : MAC LAYER RAW SOCK
  560. * - @ref Sn_MR_IPRAW : IP LAYER RAW SOCK
  561. * - @ref Sn_MR_UDP : UDP
  562. * - @ref Sn_MR_TCP : TCP
  563. * - @ref Sn_MR_CLOSE : Unused socket
  564. * @note MACRAW mode should be only used in Socket 0.
  565. */
  566. #define Sn_MR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x00)
  567. /**
  568. * @ingroup Socket_register_group_W5300
  569. * @brief Socket command register(R/W)
  570. * @details This is used to set the command for Socket n such as OPEN, CLOSE, CONNECT, LISTEN, SEND, and RECEIVE.\n
  571. * After W5500 accepts the command, the @ref Sn_CR register is automatically cleared to 0x00.
  572. * Even though @ref Sn_CR is cleared to 0x00, the command is still being processed.\n
  573. * To check whether the command is completed or not, please check the @ref Sn_IR or @ref Sn_SR.
  574. * - @ref Sn_CR_OPEN : Initialize or open socket.
  575. * - @ref Sn_CR_LISTEN : Wait connection request in TCP mode(<b>Server mode</b>)
  576. * - @ref Sn_CR_CONNECT : Send connection request in TCP mode(<b>Client mode</b>)
  577. * - @ref Sn_CR_DISCON : Send closing request in TCP mode.
  578. * - @ref Sn_CR_CLOSE : Close socket.
  579. * - @ref Sn_CR_SEND : Update TX buffer pointer and send data.
  580. * - @ref Sn_CR_SEND_MAC : Send data with MAC address, so without ARP process.
  581. * - @ref Sn_CR_SEND_KEEP : Send keep alive message.
  582. * - @ref Sn_CR_RECV : Update RX buffer pointer and receive data.
  583. * - @ref Sn_CR_PCON : PPPoE connection begins by transmitting PPPoE discovery packet.
  584. * - @ref Sn_CR_PDISCON : Closes PPPoE connection.
  585. * - @ref Sn_CR_PCR : In each phase, it transmits REQ message.
  586. * - @ref Sn_CR_PCN : In each phase, it transmits NAK message.
  587. * - @ref Sn_CR_PCJ : In each phase, it transmits REJECT message.
  588. */
  589. #define Sn_CR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x02)
  590. /**
  591. * @ingroup Socket_register_group_W5300
  592. * @brief socket interrupt mask register(R)
  593. * @details @ref Sn_IMR masks the interrupt of Socket n.
  594. * Each bit corresponds to each bit of @ref Sn_IR. When a Socket n Interrupt is occurred and the corresponding bit of @ref Sn_IMR is
  595. * the corresponding bit of @ref Sn_IR becomes When both the corresponding bit of @ref Sn_IMR and @ref Sn_IR are and the n-th bit of @ref IR is
  596. * Host is interrupted by asserted INTn PIN to low.
  597. */
  598. #define Sn_IMR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x04)
  599. /**
  600. * @ingroup Socket_register_group_W5300
  601. * @brief Socket interrupt register(R)
  602. * @details @ref Sn_IR indicates the status of Socket Interrupt such as establishment, termination, receiving data, timeout).\n
  603. * When an interrupt occurs and the corresponding bit of @ref Sn_IMR is the corresponding bit of @ref Sn_IR becomes \n
  604. * In order to clear the @ref Sn_IR bit, the host should write the bit to \n
  605. * <table>
  606. * <tr> <td>15</td> <td>14</td> <td>13</td> <td>12</td> <td>11</td> <td>10</td> <td>9</td> <td>8</td> </tr>
  607. * <tr> <td colspan=8> Reserved. Read as 0</td> </tr>
  608. * <tr> <td>7</td> <td>6</td> <td>5</td> <td>4</td> <td>3</td> <td>2</td> <td>1</td> <td>0</td> </tr>
  609. * <tr> <td>PRECV</td> <td>PFAIL</td> <td>PNEXT</td> <td>SENDOK</td> <td>TIMEOUT</td> <td>RECV</td> <td>DISCON</td> <td>CON</td> </tr>
  610. * </table>
  611. * - \ref Sn_IR_PRECV : PPP receive
  612. * - \ref Sn_IR_PFAIL : PPP fail
  613. * - \ref Sn_IR_PNEXT : PPP next phase
  614. * - \ref Sn_IR_SENDOK : SENDOK
  615. * - \ref Sn_IR_TIMEOUT : TIMEOUT
  616. * - \ref Sn_IR_RECV : RECV
  617. * - \ref Sn_IR_DISCON : DISCON
  618. * - \ref Sn_IR_CON : CON
  619. */
  620. #define Sn_IR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x06)
  621. /**
  622. * @ingroup Socket_register_group_W5300
  623. * @brief Socket status register(R)
  624. * @details @ref Sn_SSR indicates the status of Socket n.\n
  625. * The status of Socket n is changed by @ref Sn_CR or some special control packet as SYN, FIN packet in TCP.
  626. * @par Normal status
  627. * - @ref SOCK_CLOSED : Closed
  628. * - @ref SOCK_INIT : Initiate state
  629. * - @ref SOCK_LISTEN : Listen state
  630. * - @ref SOCK_ESTABLISHED : Success to connect
  631. * - @ref SOCK_CLOSE_WAIT : Closing state
  632. * - @ref SOCK_UDP : UDP socket
  633. * - @ref SOCK_IPRAW : IPRAW socket
  634. * - @ref SOCK_MACRAW : MAC raw mode socket
  635. * - @ref SOCK_PPPoE : PPPoE mode Socket
  636. *@par Temporary status during changing the status of Socket n.
  637. * - @ref SOCK_SYNSENT : This indicates Socket n sent the connect-request packet (SYN packet) to a peer.
  638. * - @ref SOCK_SYNRECV : It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer.
  639. * - @ref SOCK_FIN_WAIT : Connection state
  640. * - @ref SOCK_CLOSING : Closing state
  641. * - @ref SOCK_TIME_WAIT : Closing state
  642. * - @ref SOCK_LAST_ACK : Closing state
  643. * - @ref SOCK_ARP : ARP request state
  644. */
  645. #define Sn_SSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x08)
  646. #define Sn_SR(n) Sn_SSR(n) ///< For Compatible ioLibrary. Refer to @ref Sn_SSR(n)
  647. /**
  648. * @ingroup Socket_register_group_W5300
  649. * @brief source port register(R/W)
  650. * @details @ref Sn_PORTR configures the source port number of Socket n.
  651. * It is valid when Socket n is used in TCP/UPD mode. It should be set before OPEN command is ordered.
  652. */
  653. #define Sn_PORTR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0A)
  654. #define Sn_PORT(n) Sn_PORTR(n) ///< For compatible ioLibrary. Refer to @ref Sn_PORTR(n).
  655. /**
  656. * @ingroup Socket_register_group_W5300
  657. * @brief Peer MAC register address(R/W)
  658. * @details @ref Sn_DHAR configures the destination hardware address of Socket n when using SEND_MAC command in UDP mode or
  659. * it indicates that it is acquired in ARP-process by CONNECT/SEND command.
  660. */
  661. #define Sn_DHAR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0C)
  662. /**
  663. * @ingroup Socket_register_group_W5300
  664. * @brief Peer port register address(R/W)
  665. * @details @ref Sn_DPORTR configures or indicates the destination port number of Socket n. It is valid when Socket n is used in TCP/UDP mode.
  666. * In TCP clientmode, it configures the listen port number of TCP serverbefore CONNECT command.
  667. * In TCP Servermode, it indicates the port number of TCP client after successfully establishing connection.
  668. * In UDP mode, it configures the port number of peer to be transmitted the UDP packet by SEND/SEND_MAC command.
  669. */
  670. #define Sn_DPORTR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x12)
  671. #define Sn_DPORT(n) Sn_DPORTR(n) ///< For compatible ioLibrary. Refer to \ref Sn_DPORTR.
  672. /**
  673. * @ingroup Socket_register_group_W5300
  674. * @brief Peer IP register address(R/W)
  675. * @details @ref Sn_DIPR configures or indicates the destination IP address of Socket n. It is valid when Socket n is used in TCP/UDP mode.
  676. * In TCP client mode, it configures an IP address of TCP serverbefore CONNECT command.
  677. * In TCP server mode, it indicates an IP address of TCP clientafter successfully establishing connection.
  678. * In UDP mode, it configures an IP address of peer to be received the UDP packet by SEND or SEND_MAC command.
  679. */
  680. #define Sn_DIPR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x14)
  681. /**
  682. * @ingroup Socket_register_group_W5300
  683. * @brief Maximum Segment Size(Sn_MSSR0) register address(R/W)
  684. * @details @ref Sn_MSSR configures or indicates the MTU(Maximum Transfer Unit) of Socket n.
  685. */
  686. #define Sn_MSSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x18)
  687. /**
  688. * @ingroup Socket_register_group_W5300
  689. * @brief Keep Alive Timer register(R/W)
  690. * @details @ref Sn_KPALVTR configures the transmitting timer of KEEP ALIVE(KA)packet of SOCKETn. It is valid only in TCP mode,
  691. * and ignored in other modes. The time unit is 5s.
  692. * KA packet is transmittable after @ref Sn_SR is changed to SOCK_ESTABLISHED and after the data is transmitted or received to/from a peer at least once.
  693. * In case of '@ref Sn_KPALVTR > 0', W5500 automatically transmits KA packet after time-period for checking the TCP connection (Auto-keepalive-process).
  694. * In case of '@ref Sn_KPALVTR = 0', Auto-keep-alive-process will not operate,
  695. * and KA packet can be transmitted by SEND_KEEP command by the host (Manual-keep-alive-process).
  696. * Manual-keep-alive-process is ignored in case of '@ref Sn_KPALVTR > 0'.
  697. */
  698. #define Sn_KPALVTR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x1A)
  699. /**
  700. * @ingroup Socket_register_group_W5300
  701. * @brief IP Protocol(PROTO) Register(R/W)
  702. * @details \ref Sn_PROTO that sets the protocol number field of the IP header at the IP layer. It is
  703. * valid only in IPRAW mode, and ignored in other modes.
  704. */
  705. #define Sn_PROTOR(n) Sn_KPALVTR(n)
  706. /**
  707. * @ingroup Socket_register_group_W5300
  708. * @brief IP Type of Service(TOS) Register(R/W)
  709. * @details @ref Sn_TOSR configures the TOS(Type Of Service field in IP Header) of Socket n.
  710. * It is set before OPEN command.
  711. */
  712. #define Sn_TOSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x1C)
  713. #define Sn_TOS(n) Sn_TOSR(n) ///< For compatible ioLibrary. Refer to Sn_TOSR
  714. /**
  715. * @ingroup Socket_register_group_W5300
  716. * @brief IP Time to live(TTL) Register(R/W)
  717. * @details @ref Sn_TTLR configures the TTL(Time To Live field in IP header) of Socket n.
  718. * It is set before OPEN command.
  719. */
  720. #define Sn_TTLR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x1E)
  721. #define Sn_TTL(n) Sn_TTLR(n) ///< For compatible ioLibrary. Refer to Sn_TTLR
  722. /**
  723. * @ingroup Socket_register_group_W5300
  724. * @brief SOCKETn TX write size register(R/W)
  725. * @details It sets the byte size of the data written in internal TX memory through @ref Sn_TX_FIFOR.
  726. * It is set before SEND or SEND_MAC command, and can't be bigger than internal TX memory
  727. * size set by TMSR such as @ref TMS01R, TMS23R and etc.
  728. */
  729. #define Sn_TX_WRSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x20)
  730. /**
  731. * @ingroup Socket_register_group_W5300
  732. * @brief Transmit free memory size register(R)
  733. * @details Sn_TX_FSR indicates the free size of Socket n TX Buffer Block. It is initialized to the configured size by TMSR such as @ref TMS01SR.
  734. * Data bigger than Sn_TX_FSR should not be saved in the Socket n TX Buffer because the bigger data overwrites the previous saved data not yet sent.
  735. * Therefore, check before saving the data to the Socket n TX Buffer, and if data is equal or smaller than its checked size,
  736. * transmit the data with SEND/SEND_MAC command after saving the data in Socket n TX buffer. But, if data is bigger than its checked size,
  737. * transmit the data after dividing into the checked size and saving in the Socket n TX buffer.
  738. */
  739. #define Sn_TX_FSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0024)
  740. /**
  741. * @ingroup Socket_register_group_w5300
  742. * @brief Received data size register(R)
  743. * @details @ref Sn_RX_RSR indicates the data size received and saved in Socket n RX Buffer.
  744. * @ref Sn_RX_RSR does not exceed the RMSR such as @ref RMS01SR and is calculated as the difference between
  745. * ?Socket n RX Write Pointer (@ref Sn_RX_WR)and Socket n RX Read Pointer (@ref Sn_RX_RD)
  746. */
  747. #define Sn_RX_RSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0028)
  748. /**
  749. * @ingroup Socket_register_group_W5300
  750. * @brief Fragment field value in IP header register(R/W)
  751. * @details @ref Sn_FRAGR configures the FRAG(Fragment field in IP header).
  752. */
  753. #define Sn_FRAGR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x002C)
  754. #define Sn_FRAG(n) Sn_FRAGR(n)
  755. /**
  756. * @ingroup Socket_register_group_W5300
  757. * @brief SOCKET n TX FIFO regsiter
  758. * @details It indirectly accesses internal TX memory of SOCKETn.
  759. * The internal TX memory can't be accessed directly by the host, but can be accessed through Sn_TX_FIFOR.
  760. * If @ref MR(MT) = '0', only the Host-Write of internal TX memory is allowed through Sn_TX_FIFOR.
  761. * But if @ref MR(MT) is '1', both of Host-Read and Host-Write are allowed.
  762. */
  763. #define Sn_TX_FIFOR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x2E)
  764. /**
  765. * @ingroup Socket_register_group_W5300
  766. * @brief SOCKET n RX FIFO register
  767. * @details It indirectly accesses to internal RX memory of SOCKETn.
  768. * The internal RX memory can't be directly accessed by the host, but can be accessed through Sn_RX_FIFOR.
  769. * If MR(MT) = '0', only the Host-Read of internal RX memory is allowed through Sn_RX_FIFOR.
  770. * But if MR(MT) is '1', both of Host-Read and Host-Write are allowed.
  771. */
  772. #define Sn_RX_FIFOR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x30)
  773. //#define Sn_TX_SADR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x32)
  774. //#define Sn_RX_SADR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x34)
  775. //#define Sn_TX_RD(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x36)
  776. //#define Sn_TX_WR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x38)
  777. //#define Sn_TX_ACK(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x3A)
  778. //#define Sn_RX_RD(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x3C)
  779. //#define Sn_RX_WR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x3E)
  780. /************************************/
  781. /* The bit of MR regsiter defintion */
  782. /************************************/
  783. #define MR_DBW (1 << 15) /**< Data bus width bit of \ref MR. Read Only. (0 : 8Bit, 1 : 16Bit)*/
  784. #define MR_MPF (1 << 14) /**< Mac layer pause frame bit of \ref MR. (0 : Disable, 1 : Enable)*/
  785. #define MR_WDF(X) ((X & 0x07) << 11) /**< Write data fetch time bit of \ref MR. Fetch Data from DATA bus after PLL_CLK * MR_WDF[2:0]*/
  786. #define MR_RDH (1 << 10) /**< Read data hold time bit of \ref MR. Hold Data on DATA bus during 2 * PLL_CLK after CS high*/
  787. #define MR_FS (1 << 8) /**< FIFO swap bit of \ref MR. Swap MSB & LSB of \ref Sn_TX_FIFOR & Sn_RX_FIFOR (0 : No swap, 1 : Swap) */
  788. #define MR_RST (1 << 7) /**< S/W reset bit of \ref MR. (0 : Normal Operation, 1 : Reset (automatically clear after reset))*/
  789. #define MR_MT (1 << 5) /**< Memory test bit of \ref MR. (0 : Normal, 1 : Internal Socket memory write & read Test)*/
  790. #define MR_PB (1 << 4) /**< Ping block bit of \ref MR. (0 : Unblock, 1 : Block)*/
  791. #define MR_PPPoE (1 << 3) /**< PPPoE bit of \ref MR. (0 : No use PPPoE, 1: Use PPPoE)*/
  792. #define MR_DBS (1 << 2) /**< Data bus swap of \ref MR. Valid only 16bit mode (0 : No swap, 1 : Swap)*/
  793. #define MR_IND (1 << 0) /**< Indirect mode bit of \ref MR. (0 : Direct mode, 1 : Indirect mode) */
  794. /************************************/
  795. /* The bit of IR regsiter definition */
  796. /************************************/
  797. #define IR_IPCF (1 << 7) /**< IP conflict bit of \ref IR. To clear, Write the bit to '1'. */
  798. #define IR_DPUR (1 << 6) /**< Destination port unreachable bit of \ref IR. To clear, Write the bit to '1'. */
  799. #define IR_PPPT (1 << 5) /**< PPPoE terminate bit of \ref IR. To clear, Write the bit to '1'. */
  800. #define IR_FMTU (1 << 4) /**< Fragment MTU bit of IR. To clear, Write the bit to '1'. */
  801. #define IR_SnINT(n) (0x01 << n) /**< SOCKETn interrupt occurrence bit of \ref IR. To clear, Clear \ref Sn_IR*/
  802. /*****************************************/
  803. /* The bit of Pn_BRDYR regsiter definition*/
  804. /*****************************************/
  805. #define Pn_PEN (1 << 7) /**< PIN 'BRDYn' enable bit of Pn_BRDYR. */
  806. #define Pn_MT (1 << 6) /**< PIN memory type bit of Pn_BRDYR. */
  807. #define Pn_PPL (1 << 5) /**< PIN Polarity bit of Pn_BRDYR. */
  808. #define Pn_SN(n) ((n & 0x07) << 0) /**< What socket to monitor. */
  809. /***************************************/
  810. /* The bit of Sn_MR regsiter definition */
  811. /***************************************/
  812. /**
  813. * @brief Alignment bit of \ref Sn_MR.
  814. * @details It is valid only in the TCP (\ref Sn_MR_TCP) with TCP communication,
  815. * when every the received DATA packet size is of even number and set as '1',
  816. * data receiving performance can be improved by removing PACKET-INFO(data size) that is attached to every the received DATA packet.
  817. */
  818. #define Sn_MR_ALIGN (1 << 8)
  819. /**
  820. * @brief Multicasting bit of \ref Sn_MR
  821. * @details It is valid only in UDP (\ref Sn_MR_UDP).
  822. * In order to implement multicasting, set the IP address and port number in @ref Sn_DIPR and @ref Sn_DPORTR respectively before "OPEN" command(@ref Sn_CR_OPEN).\n
  823. * 0 : Disable, 1 : Enable
  824. */
  825. #define Sn_MR_MULTI (1 << 7)
  826. /**
  827. * @brief MAC filter bit of \ref Sn_MR
  828. * @details It is valid in MACRAW(@ref Sn_MR_MACRAW).
  829. * When this bit is set as ‘1’, W5300 can receive packet that is belong in itself or broadcasting.
  830. * When this bit is set as ‘0’, W5300 can receive all packets on Ethernet.
  831. * When using the hybrid TCP/IP stack, it is recommended to be set as ‘1’ for reducing the receiving overhead of host. \n
  832. * 0 : Disable, 1 : Enable
  833. */
  834. #define Sn_MR_MF (1 << 6)
  835. /**
  836. * @brief IGMP version bit of \ref Sn_MR
  837. * details It is valid in case of @ref Sn_MR_MULTI='1' and UDP(@ref Sn_MR_UDP).
  838. * It configures IGMP version to send IGMP message such as <b>Join/Leave/Report</b> to multicast-group. \n
  839. * 0 : IGMPv2, 1 : IGMPv1
  840. */
  841. #define Sn_MR_IGMPv (1 << 5)
  842. #define Sn_MR_MC Sn_MR_IGMPv ///< For compatible ioLibrary
  843. /**
  844. * @brief No delayed ack bit of \ref Sn_MR
  845. * @details It is valid in TCP(@ref Sn_MR_TCP).
  846. * In case that it is set as '1', ACK packet is transmitted right after receiving DATA packet from the peer.
  847. * It is recommended to be set as '1' for TCP performance improvement.
  848. * In case that it is set as '0', ACK packet is transmitted after the time set in @ref _RTR_ regardless of DATA packet receipt.\n
  849. * 0 : No use, 1 : Use
  850. */
  851. #define Sn_MR_ND (1 << 5)
  852. /**
  853. * @brief No mode
  854. * @details This configures the protocol mode of Socket n.
  855. * @sa Sn_MR
  856. */
  857. #define Sn_MR_CLOSE 0x00
  858. /**
  859. * @brief TCP mode
  860. * @details This configures the protocol mode of Socket n.
  861. * @sa Sn_MR
  862. */
  863. #define Sn_MR_TCP 0x01
  864. /**
  865. * @brief UDP mode
  866. * @details This configures the protocol mode of Socket n.
  867. * @sa Sn_MR
  868. */
  869. #define Sn_MR_UDP 0x02 /**< Protocol bits of \ref Sn_MR. */
  870. /**
  871. * @brief IP LAYER RAW mode
  872. * @details This configures the protocol mode of Socket n.
  873. * @sa Sn_MR
  874. */
  875. #define Sn_MR_IPRAW 0x03 /**< Protocol bits of \ref Sn_MR. */
  876. /**
  877. * @brief MAC LAYER RAW mode
  878. * @details This configures the protocol mode of Socket 0.
  879. * @sa Sn_MR
  880. * @note MACRAW mode should be only used in Socket 0.
  881. */
  882. #define Sn_MR_MACRAW 0x04
  883. /**
  884. * @brief PPPoE mode
  885. * @details This configures the protocol mode of Socket 0.
  886. * @sa Sn_MR
  887. * @note PPPoE mode should be only used in Socket 0.
  888. */
  889. #define Sn_MR_PPPoE 0x05 /**< Protocol bits of \ref Sn_MR. */
  890. #define SOCK_STREAM Sn_MR_TCP /**< For Berkeley Socket API, Refer to @ref Sn_MR_TCP */
  891. #define SOCK_DGRAM Sn_MR_UDP /**< For Berkeley Socket API, Refer to @ref Sn_MR_UDP */
  892. /******************************/
  893. /* The values of CR definition */
  894. /******************************/
  895. /**
  896. * @brief Initialize or open a socket
  897. * @details Socket n is initialized and opened according to the protocol selected in Sn_MR(P3:P0).
  898. * The table below shows the value of @ref Sn_SR corresponding to @ref Sn_MR.\n
  899. * <table>
  900. * <tr> <td>\b Sn_MR (P[3:0])</td> <td>\b Sn_SR</td> </tr>
  901. * <tr> <td>Sn_MR_CLOSE (000)</td> <td></td> </tr>
  902. * <tr> <td>Sn_MR_TCP (001)</td> <td>SOCK_INIT (0x13)</td> </tr>
  903. * <tr> <td>Sn_MR_UDP (010)</td> <td>SOCK_UDP (0x22)</td> </tr>
  904. * <tr> <td>Sn_MR_IPRAW (010)</td> <td>SOCK_IPRAW (0x32)</td> </tr>
  905. * <tr> <td>Sn_MR_MACRAW (100)</td> <td>SOCK_MACRAW (0x42)</td> </tr>
  906. * <tr> <td>Sn_MR_PPPoE (101)</td> <td>SOCK_PPPoE (0x5F)</td> </tr>
  907. * </table>
  908. */
  909. #define Sn_CR_OPEN 0x01
  910. /**
  911. * @brief Wait connection request in TCP mode(Server mode)
  912. * @details This is valid only in TCP mode (\ref Sn_MR(P3:P0) = \ref Sn_MR_TCP).
  913. * In this mode, Socket n operates as a TCP serverand waits for connection-request (SYN packet) from any TCP client
  914. * The @ref Sn_SR changes the state from \ref SOCK_INIT to \ref SOCKET_LISTEN.
  915. * When a TCP clientconnection request is successfully established,
  916. * the @ref Sn_SR changes from SOCK_LISTEN to SOCK_ESTABLISHED and the @ref Sn_IR(0) becomes
  917. * But when a TCP clientconnection request is failed, @ref Sn_IR(3) becomes and the status of @ref Sn_SR changes to SOCK_CLOSED.
  918. */
  919. #define Sn_CR_LISTEN 0x02
  920. /**
  921. * @brief Send connection request in TCP mode(Client mode)
  922. * @details To connect, a connect-request (SYN packet) is sent to <b>TCP server</b>configured by @ref Sn_DIPR & Sn_DPORT(destination address & port).
  923. * If the connect-request is successful, the @ref Sn_SR is changed to @ref SOCK_ESTABLISHED and the Sn_IR(0) becomes \n\n
  924. * The connect-request fails in the following three cases.\n
  925. * 1. When a @b ARPTO occurs (@ref Sn_IR[3] = '1') because destination hardware address is not acquired through the ARP-process.\n
  926. * 2. When a @b SYN/ACK packet is not received and @b TCPTO (Sn_IR(3) = )\n
  927. * 3. When a @b RST packet is received instead of a @b SYN/ACK packet. In these cases, @ref Sn_SR is changed to @ref SOCK_CLOSED.
  928. * @note This is valid only in TCP mode and operates when Socket n acts as <b>TCP client</b>
  929. */
  930. #define Sn_CR_CONNECT 0x04
  931. /**
  932. * @brief Send closing request in TCP mode
  933. * @details Regardless of <b>TCP server</b>or <b>TCP client</b> the DISCON command processes the disconnect-process (b>Active close</b>or <b>Passive close</b>.\n
  934. * @par Active close
  935. * it transmits disconnect-request(FIN packet) to the connected peer\n
  936. * @par Passive close
  937. * When FIN packet is received from peer, a FIN packet is replied back to the peer.\n
  938. * @details When the disconnect-process is successful (that is, FIN/ACK packet is received successfully), @ref Sn_SR is changed to @ref SOCK_CLOSED.\n
  939. * Otherwise, @b TCPTO occurs (\ref Sn_IR[3]='1') and then @ref Sn_SR is changed to @ref SOCK_CLOSED.
  940. * @note Valid only in TCP mode.
  941. */
  942. #define Sn_CR_DISCON 0x08
  943. /**
  944. * @brief Close socket
  945. * @details @ref Sn_SR is changed to @ref SOCK_CLOSED.
  946. */
  947. #define Sn_CR_CLOSE 0x10
  948. /**
  949. * @brief Update TX buffer pointer and send data
  950. * @details SEND command transmits all the data in the Socket n TX buffer thru @ref Sn_TX_FIFOR.\n
  951. * For more details, please refer to Socket n TX Free Size Register (@ref Sn_TX_FSR) and Socket TX Write Size register (@ref Sn_TX_WRSR).
  952. */
  953. #define Sn_CR_SEND 0x20
  954. /**
  955. * @brief Send data with MAC address, so without ARP process
  956. * @details The basic operation is same as SEND.\n
  957. * Normally SEND command transmits data after destination hardware address is acquired by the automatic ARP-process(Address Resolution Protocol).\n
  958. * But SEND_MAC command transmits data without the automatic ARP-process.\n
  959. * In this case, the destination hardware address is acquired from @ref Sn_DHAR configured by host, instead of APR-process.
  960. * @note Valid only in UDP mode.
  961. */
  962. #define Sn_CR_SEND_MAC 0x21
  963. /**
  964. * @brief Send keep alive message
  965. * @details It checks the connection status by sending 1byte keep-alive packet.\n
  966. * If the peer can not respond to the keep-alive packet during timeout time, the connection is terminated and the timeout interrupt will occur.
  967. * @note Valid only in TCP mode.
  968. */
  969. #define Sn_CR_SEND_KEEP 0x22
  970. /**
  971. * @brief Update RX buffer pointer and receive data
  972. * @details RECV completes the processing of the received data in Socket n RX Buffer thru @ref Sn_RX_FIFOR).\n
  973. * For more details, refer to Socket n RX Received Size Register (@ref Sn_RX_RSR) & @ref Sn_RX_FIFOR.
  974. */
  975. #define Sn_CR_RECV 0x40 /**< RECV command value of \ref Sn_CR */
  976. #define Sn_CR_PCON 0x23 /**< PPPoE connection begins by transmitting PPPoE discovery packet. Refer to \ref Sn_CR */
  977. #define Sn_CR_PDISCON 0x24 /**< Closes PPPoE connection. Refer to \ref Sn_CR */
  978. #define Sn_CR_PCR 0x25 /**< In each phase, it transmits REQ message. Refer to \ref Sn_CR */
  979. #define Sn_CR_PCN 0x26 /**< In each phase, it transmits NAK message. Refer to \ref Sn_CR */
  980. #define Sn_CR_PCJ 0x27 /**< In each phase, it transmits REJECT message. Refer to \ref Sn_CR */
  981. /*********************************/
  982. /* The values of Sn_IR definition */
  983. /*********************************/
  984. #define Sn_IR_PRECV 0x80 /**< It is set in the case that option data which is not supported is received. Refer to \ref Sn_IR */
  985. #define Sn_IR_PFAIL 0x40 /**< It is set in the case that PAP authentication is failed. Refer to \ref Sn_IR */
  986. #define Sn_IR_PNEXT 0x20 /**< It is set in the case that the phase is changed during PPPoE connection process. \ref Sn_IR */
  987. #define Sn_IR_SENDOK 0x10 /**< It is set when SEND command is completed. Refer to \ref Sn_IR */
  988. #define Sn_IR_TIMEOUT 0x08 /**< It is set when ARPTO or TCPTO is occured. Refer to \ref Sn_IR */
  989. #define Sn_IR_RECV 0x04 /**< It is set whenever data is received from a peer. Refer to \ref Sn_IR */
  990. #define Sn_IR_DISCON 0x02 /**< It is set when FIN or FIN/ACK packet is received from a peer. Refer to \ref Sn_IR */
  991. #define Sn_IR_CON 0x01 /**< It is set one time when the connection is successful and then @ref Sn_SR is changed to @ref SOCK_ESTABLISHED. */
  992. /**********************************/
  993. /* The values of Sn_SSR definition */
  994. /**********************************/
  995. /**
  996. * @brief The state of SOCKET intialized or closed
  997. * @details This indicates that Socket n is released.\n
  998. * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to @ref SOCK_CLOSED regardless of previous status.
  999. */
  1000. #define SOCK_CLOSED 0x00
  1001. /**
  1002. * @brief The state of ARP process
  1003. * @details It is temporary state for getting a peer MAC address when TCP connect or UDP Data Send\n
  1004. * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to @ref SOCK_CLOSED regardless of previous status.
  1005. */
  1006. #define SOCK_ARP 0x01 /**< ARP-request is transmitted in order to acquire destination hardware address. */
  1007. /**
  1008. * @brief Initiate state in TCP.
  1009. * @details This indicates Socket n is opened with TCP mode.\n
  1010. * It is changed to @ref SOCK_INIT when \ref Sn_MR(P[3:0]) = '001' and OPEN command(\ref Sn_CR_OPEN) is ordered.\n
  1011. * After SOCK_INIT, user can use LISTEN(@ref Sn_CR_LISTEN)/CONNECT(@ref Sn_CR_CONNET) command.
  1012. */
  1013. #define SOCK_INIT 0x13
  1014. /**
  1015. * @brief Listen state
  1016. * @details This indicates Socket n is operating as <b>TCP server</b>mode and waiting for connection-request (SYN packet) from a peer <b>TCP client</b>.\n
  1017. * It will change to @ref SOCK_ESTALBLISHED when the connection-request is successfully accepted.\n
  1018. * Otherwise it will change to @ref SOCK_CLOSED after TCPTO (@ref Sn_IR_TIMEOUT = '1') is occurred.
  1019. */
  1020. #define SOCK_LISTEN 0x14
  1021. /**
  1022. * @brief Connection state
  1023. * @details This indicates Socket n sent the connect-request packet (SYN packet) to a peer.\n
  1024. * It is temporarily shown when @ref Sn_SR is changed from @ref SOCK_INIT to @ref SOCK_ESTABLISHED by @ref Sn_CR_CONNECT command.\n
  1025. * If connect-accept(SYN/ACK packet) is received from the peer at SOCK_SYNSENT, it changes to @ref SOCK_ESTABLISHED.\n
  1026. * Otherwise, it changes to @ref SOCK_CLOSED after TCPTO (@ref Sn_IR_TIMEOUT = '1') is occurred.
  1027. */
  1028. #define SOCK_SYNSENT 0x15
  1029. /**
  1030. * @brief Connection state
  1031. * @details It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer.\n
  1032. * If socket n sends the response (SYN/ACK packet) to the peer successfully, it changes to @ref SOCK_ESTABLISHED. \n
  1033. * If not, it changes to @ref SOCK_CLOSED after timeout (@ref Sn_IR_TIMEOUT = '1') is occurred.
  1034. */
  1035. #define SOCK_SYNRECV 0x16
  1036. /**
  1037. * @brief Success to connect
  1038. * @details This indicates the status of the connection of Socket n.\n
  1039. * It changes to @ref SOCK_ESTABLISHED when the <b>TCP SERVER</b>processed the SYN packet from the <b>TCP CLIENT</b>during @ref SOCK_LISTEN, or
  1040. * when the @ref Sn_CR_CONNECT command is successful.\n
  1041. * During @ref SOCK_ESTABLISHED, DATA packet can be transferred using @ref Sn_CR_SEND or @ref Sn_CR_RECV command.
  1042. */
  1043. #define SOCK_ESTABLISHED 0x17
  1044. /**
  1045. * @brief Closing state
  1046. * @details These indicate Socket n is closing.\n
  1047. * These are shown in disconnect-process such as active-close and passive-close.\n
  1048. * When Disconnect-process is successfully completed, or when timeout(@ref Sn_CR_TIMTEOUT = '1') is occurred, these change to @ref SOCK_CLOSED.
  1049. */
  1050. #define SOCK_FIN_WAIT 0x18
  1051. /**
  1052. * @brief Closing state
  1053. * @details These indicate Socket n is closing.\n
  1054. * These are shown in disconnect-process such as active-close and passive-close.\n
  1055. * When Disconnect-process is successfully completed, or when timeout occurs, these change to @ref SOCK_CLOSED.
  1056. */
  1057. #define SOCK_CLOSING 0x1A
  1058. /**
  1059. * @brief Closing state
  1060. * @details These indicate Socket n is closing.\n
  1061. * These are shown in disconnect-process such as active-close and passive-close.\n
  1062. * When Disconnect-process is successfully completed, or when timeout occurs, these change to @ref SOCK_CLOSED.
  1063. */
  1064. #define SOCK_TIME_WAIT 0x1B
  1065. /**
  1066. * @brief Closing state
  1067. * @details This indicates Socket n received the disconnect-request (FIN packet) from the connected peer.\n
  1068. * This is half-closing status, and data can be transferred.\n
  1069. * For full-closing, @ref Sn_CR_DISCON command is used. But For just-closing, @ref Sn_CR_CLOSE command is used.
  1070. */
  1071. #define SOCK_CLOSE_WAIT 0x1C
  1072. /**
  1073. * @brief Closing state
  1074. * @details This indicates Socket n is waiting for the response (FIN/ACK packet) to the disconnect-request (FIN packet) by passive-close.\n
  1075. * It changes to @ref SOCK_CLOSED when Socket n received the response successfully, or when timeout (@ref Sn_IR_TIMEOUT = '1') is occurred.
  1076. */
  1077. #define SOCK_LAST_ACK 0x1D
  1078. /**
  1079. * @brief UDP socket
  1080. * @details This indicates Socket n is opened in UDP mode(@ref Sn_MR(P[3:0]) = '010').\n
  1081. * It changes to SOCK_UDP when @ref Sn_MR(P[3:0]) = '010' and @ref Sn_CR_OPEN command is ordered.\n
  1082. * Unlike TCP mode, data can be transfered without the connection-process.
  1083. */
  1084. #define SOCK_UDP 0x22
  1085. /**
  1086. * @brief IP raw mode socket
  1087. * @details TThe socket is opened in IPRAW mode. The SOCKET status is change to SOCK_IPRAW when @ref Sn_MR (P3:P0) is
  1088. * Sn_MR_IPRAW and @ref Sn_CR_OPEN command is used.\n
  1089. * IP Packet can be transferred without a connection similar to the UDP mode.
  1090. */
  1091. #define SOCK_IPRAW 0x32
  1092. /**
  1093. * @brief MAC raw mode socket
  1094. * @details This indicates Socket 0 is opened in MACRAW mode (@ref Sn_MR(P[3:0]) = '100' and n = 0) and is valid only in Socket 0.\n
  1095. * It changes to SOCK_MACRAW when @ref Sn_MR(P[3:0] = 100)and @ ref Sn_CR_OPEN command is ordered.\n
  1096. * Like UDP mode socket, MACRAW mode Socket 0 can transfer a MAC packet (Ethernet frame) without the connection-process.
  1097. */
  1098. #define SOCK_MACRAW 0x42 /**< SOCKET0 is open as MACRAW mode. */
  1099. /**
  1100. * @brief PPPoE mode socket
  1101. * @details It is the status that SOCKET0 is opened as PPPoE mode.
  1102. * It is changed to SOCK_PPPoE in case of @ref Sn_CR_OPEN command is ordered and @ref Sn_MR(P3:P0)= @ref Sn_MR_PPPoE\n
  1103. * It is temporarily used at the PPPoE connection.
  1104. */
  1105. #define SOCK_PPPoE 0x5F /**< SOCKET0 is open as PPPoE mode. */
  1106. /* IP PROTOCOL */
  1107. #define IPPROTO_IP 0 //< Dummy for IP
  1108. #define IPPROTO_ICMP 1 //< Control message protocol
  1109. #define IPPROTO_IGMP 2 //< Internet group management protocol
  1110. #define IPPROTO_GGP 3 //< Gateway^2 (deprecated)
  1111. #define IPPROTO_TCP 6 //< TCP
  1112. #define IPPROTO_PUP 12 //< PUP
  1113. #define IPPROTO_UDP 17 //< UDP
  1114. #define IPPROTO_IDP 22 //< XNS idp
  1115. #define IPPROTO_ND 77 //< UNOFFICIAL net disk protocol
  1116. #define IPPROTO_RAW 255 //< Raw IP packet
  1117. /**
  1118. * @brief Enter a critical section
  1119. *
  1120. * @details It is provided to protect your shared code which are executed without distribution. \n \n
  1121. *
  1122. * In non-OS environment, It can be just implemented by disabling whole interrupt.\n
  1123. * In OS environment, You can replace it to critical section api supported by OS.
  1124. *
  1125. * \sa WIZCHIP_READ(), WIZCHIP_WRITE()
  1126. * \sa WIZCHIP_CRITICAL_EXIT()
  1127. */
  1128. #define WIZCHIP_CRITICAL_ENTER() WIZCHIP.CRIS._enter()
  1129. #ifdef _exit
  1130. #undef _exit
  1131. #endif
  1132. /**
  1133. * @brief Exit a critical section
  1134. *
  1135. * @details It is provided to protect your shared code which are executed without distribution. \n\n
  1136. *
  1137. * In non-OS environment, It can be just implemented by disabling whole interrupt. \n
  1138. * In OS environment, You can replace it to critical section api supported by OS.
  1139. *
  1140. * @sa WIZCHIP_READ(), WIZCHIP_WRITE()
  1141. * @sa WIZCHIP_CRITICAL_ENTER()
  1142. */
  1143. #define WIZCHIP_CRITICAL_EXIT() WIZCHIP.CRIS._exit()
  1144. ////////////////////////
  1145. // Basic I/O Function //
  1146. ////////////////////////
  1147. /**
  1148. * @ingroup Basic_IO_function_W5300
  1149. * @brief It reads 1 byte value from a register.
  1150. * @param AddrSel Register address
  1151. * @return The value of register
  1152. */
  1153. uint16_t WIZCHIP_READ (uint32_t AddrSel);
  1154. /**
  1155. * @ingroup Basic_IO_function_W5300
  1156. * @brief It writes 1 byte value to a register.
  1157. * @param AddrSel Register address
  1158. * @param wb Write data
  1159. * @return void
  1160. */
  1161. void WIZCHIP_WRITE(uint32_t AddrSel, uint16_t wb );
  1162. /***********************************
  1163. * COMMON Register Access Function *
  1164. ***********************************/
  1165. /**
  1166. * @ingroup Common_register_access_function_W5300
  1167. * @brief Set Mode Register
  1168. * @param (@ref iodata_t)mr The value to be set.
  1169. * @sa getMR()
  1170. */
  1171. #if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_)
  1172. #if (_WIZCHIP_IO_BUS_WIDTH_ == 8)
  1173. #define setMR(mr) \
  1174. (*((uint8_t*)MR) = (uint8_t)((mr) >> 8)); (*((uint8_t*)WIZCHIP_OFFSET_INC(MR,1)) = (uint8_t)((mr) & 0xFF))
  1175. #elif (_WIZCHIP_IO_BUS_WIDTH_ == 16)
  1176. #define setMR(mr) (*((uint16_t*)MR) = (uint16_t)((mr) & 0xFFFF))
  1177. #else
  1178. #error "Unknown _WIZCHIP_IO_BUS_WIDTH_. You should be define _WIZCHIP_IO_BUS_WIDTH as 8 or 16."
  1179. #endif
  1180. #else
  1181. #error "Unknown _WIZCHIP_IO_MODE_"
  1182. #endif
  1183. /**
  1184. * @ingroup Common_register_access_function_W5300
  1185. * @brief Get @ref MR.
  1186. * @return @ref iodata_t. The value of Mode register.
  1187. * @sa setMR()
  1188. */
  1189. #if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_)
  1190. #if (_WIZCHIP_IO_BUS_WIDTH_ == 8)
  1191. #define getMR() (((uint16_t)(*((uint8_t*)MR)) << 8) + (((uint16_t)(*((uint8_t*)WIZCHIP_OFFSET_INC(MR,1)))) & 0x00FF))
  1192. #elif(_WIZCHIP_IO_BUS_WIDTH_ == 16)
  1193. #define getMR() (*((uint16_t*)MR))
  1194. #else
  1195. #error "Unknown _WIZCHIP_IO_BUS_WIDTH_. You should be define _WIZCHIP_IO_BUS_WIDTH as 8 or 16."
  1196. #endif
  1197. #else
  1198. #error "Unknown _WIZCHIP_IO_MODE_"
  1199. #endif
  1200. /**
  1201. * @ingroup Common_register_access_function_W5300
  1202. * @brief Set \ref IR register
  1203. * @param (uint16_t)ir Value to set \ref IR register.
  1204. * @sa getIR()
  1205. */
  1206. #define setIR(ir) \
  1207. WIZCHIP_WRITE(IR, ir & 0xF0FF)
  1208. /**
  1209. * @ingroup Common_register_access_function_W5300
  1210. * @brief Get \ref IR register
  1211. * @return uint8_t. Value of \ref IR register.
  1212. * @sa setIR()
  1213. */
  1214. #define getIR() \
  1215. (WIZCHIP_READ(IR) & 0xF0FF)
  1216. /**
  1217. * @ingroup Common_register_access_function_W5300
  1218. * @brief Set \ref _IMR_ register
  1219. * @param (uint16_t)imr Value to set @ref _IMR_ register.
  1220. * @sa getIMR()
  1221. */
  1222. #define setIMR(imr) \
  1223. WIZCHIP_WRITE(_IMR_, imr & 0xF0FF)
  1224. /**
  1225. * @ingroup Common_register_access_function_W5300
  1226. * @brief Get \ref _IMR_ register
  1227. * @return uint16_t. Value of \ref IR register.
  1228. * @sa setIMR()
  1229. */
  1230. #define getIMR() \
  1231. (WIZCHIP_READ(_IMR_) & 0xF0FF)
  1232. /**
  1233. * @ingroup Common_register_access_function_W5300
  1234. * @brief Set local MAC address
  1235. * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes.
  1236. * @sa getSHAR()
  1237. */
  1238. #define setSHAR(shar) { \
  1239. WIZCHIP_WRITE(SHAR, (((uint16_t)((shar)[0])) << 8) + (((uint16_t)((shar)[1])) & 0x00FF)); \
  1240. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SHAR,2), (((uint16_t)((shar)[2])) << 8) + (((uint16_t)((shar)[3])) & 0x00FF)); \
  1241. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SHAR,4), (((uint16_t)((shar)[4])) << 8) + (((uint16_t)((shar)[5])) & 0x00FF)); \
  1242. }
  1243. /**
  1244. * @ingroup Common_register_access_function
  1245. * @brief Get local MAC address
  1246. * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes.
  1247. * @sa setSHAR()
  1248. */
  1249. #define getSHAR(shar) { \
  1250. (shar)[0] = (uint8_t)(WIZCHIP_READ(SHAR) >> 8); \
  1251. (shar)[1] = (uint8_t)(WIZCHIP_READ(SHAR)); \
  1252. (shar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,2)) >> 8); \
  1253. (shar)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,2))); \
  1254. (shar)[4] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,4)) >> 8); \
  1255. (shar)[5] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,4))); \
  1256. }
  1257. /**
  1258. * @ingroup Common_register_access_function_W5300
  1259. * @brief Set gateway IP address
  1260. * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes.
  1261. * @sa getGAR()
  1262. */
  1263. #define setGAR(gar) { \
  1264. WIZCHIP_WRITE(GAR, (((uint16_t)((gar)[0])) << 8) + (((uint16_t)((gar)[1])) & 0x00FF)); \
  1265. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(GAR,2), (((uint16_t)((gar)[2])) << 8) + (((uint16_t)((gar)[3])) & 0x00FF)); \
  1266. }
  1267. /**
  1268. * @ingroup Common_register_access_function_W5300
  1269. * @brief Get gateway IP address
  1270. * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes.
  1271. * @sa setGAR()
  1272. */
  1273. #define getGAR(gar) { \
  1274. (gar)[0] = (uint8_t)(WIZCHIP_READ(GAR) >> 8); \
  1275. (gar)[1] = (uint8_t)(WIZCHIP_READ(GAR)); \
  1276. (gar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(GAR,2)) >> 8); \
  1277. (gar)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(GAR,2))); \
  1278. }
  1279. /**
  1280. * @ingroup Common_register_access_function_W5300
  1281. * @brief Set subnet mask address
  1282. * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes.
  1283. * @sa getSUBR()
  1284. */
  1285. #define setSUBR(subr) { \
  1286. WIZCHIP_WRITE(SUBR, (((uint16_t)((subr)[0])) << 8) + (((uint16_t)((subr)[1])) & 0x00FF)); \
  1287. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SUBR,2), (((uint16_t)((subr)[2])) << 8) + (((uint16_t)((subr)[3])) & 0x00FF)); \
  1288. }
  1289. /**
  1290. * @ingroup Common_register_access_function_W5300
  1291. * @brief Get subnet mask address
  1292. * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes.
  1293. * @sa setSUBR()
  1294. */
  1295. #define getSUBR(subr) { \
  1296. (subr)[0] = (uint8_t)(WIZCHIP_READ(SUBR) >> 8); \
  1297. (subr)[1] = (uint8_t)(WIZCHIP_READ(SUBR)); \
  1298. (subr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SUBR,2)) >> 8); \
  1299. (subr)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SUBR,2))); \
  1300. }
  1301. /**
  1302. * @ingroup Common_register_access_function_W5300
  1303. * @brief Set local IP address
  1304. * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes.
  1305. * @sa getSIPR()
  1306. */
  1307. #define setSIPR(sipr) { \
  1308. WIZCHIP_WRITE(SIPR, (((uint16_t)((sipr)[0])) << 8) + (((uint16_t)((sipr)[1])) & 0x00FF)); \
  1309. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SIPR,2), (((uint16_t)((sipr)[2])) << 8) + (((uint16_t)((sipr)[3])) & 0x00FF)); \
  1310. }
  1311. /**
  1312. * @ingroup Common_register_access_function_W5300
  1313. * @brief Get local IP address
  1314. * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes.
  1315. * @sa setSIPR()
  1316. */
  1317. #define getSIPR(sipr) { \
  1318. (sipr)[0] = (uint8_t)(WIZCHIP_READ(SIPR) >> 8); \
  1319. (sipr)[1] = (uint8_t)(WIZCHIP_READ(SIPR)); \
  1320. (sipr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SIPR,2)) >> 8); \
  1321. (sipr)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SIPR,2))); \
  1322. }
  1323. /**
  1324. * @ingroup Common_register_access_function_W5300
  1325. * @brief Set @ref _RTR_ register
  1326. * @param (uint16_t)rtr Value to set @ref _RTR_ register.
  1327. * @sa getRTR()
  1328. */
  1329. #define setRTR(rtr) \
  1330. WIZCHIP_WRITE(_RTR_, rtr)
  1331. /**
  1332. * @ingroup Common_register_access_function_W5300
  1333. * @brief Get @ref _RTR_ register
  1334. * @return uint16_t. Value of @ref _RTR_ register.
  1335. * @sa setRTR()
  1336. */
  1337. #define getRTR() \
  1338. WIZCHIP_READ(_RTR_)
  1339. /**
  1340. * @ingroup Common_register_access_function_W5300
  1341. * @brief Set @ref _RCR_ register
  1342. * @param (uint8_t)rcr Value to set @ref _RCR_ register.
  1343. * @sa getRCR()
  1344. */
  1345. #define setRCR(rcr) \
  1346. WIZCHIP_WRITE(_RCR_, ((uint16_t)rcr)&0x00FF)
  1347. /**
  1348. * @ingroup Common_register_access_function_W5300
  1349. * @brief Get @ref _RCR_ register
  1350. * @return uint8_t. Value of @ref _RCR_ register.
  1351. * @sa setRCR()
  1352. */
  1353. #define getRCR() \
  1354. ((uint8_t)(WIZCHIP_READ(_RCR_) & 0x00FF))
  1355. /**
  1356. * @ingroup Common_register_access_function_W5300
  1357. * @brief Set @ref TMS01R register
  1358. * @param (uint16_t)tms01r Value to set @ref TMS01R register. The lower socket memory size is located at MSB of tms01r.
  1359. * @sa getTMS01R()
  1360. */
  1361. #define setTMS01R(tms01r) \
  1362. WIZCHIP_WRITE(TMS01R,tms01r)
  1363. /**
  1364. * @ingroup Common_register_access_function_W5300
  1365. * @brief Get @ref TMS01R register
  1366. * @return uint16_t. Value of @ref TMS01R register.
  1367. * @sa setTMS01R()
  1368. */
  1369. #define getTMS01R() \
  1370. WIZCHIP_READ(TMS01R)
  1371. /**
  1372. * @ingroup Common_register_access_function_W5300
  1373. * @brief Set @ref TMS23R register
  1374. * @param (uint16_t)tms23r Value to set @ref TMS23R register. The lower socket memory size is located at MSB of tms01r.
  1375. * @sa getTMS23R()
  1376. */
  1377. #define setTMS23R(tms23r) \
  1378. WIZCHIP_WRITE(TMS23R,tms23r)
  1379. /**
  1380. * @ingroup Common_register_access_function_W5300
  1381. * @brief Get @ref TMS23R register
  1382. * @return uint16_t. Value of @ref TMS23R register.
  1383. * @sa setTMS23R()
  1384. */
  1385. #define getTMS23R() \
  1386. WIZCHIP_READ(TMS23R)
  1387. /**
  1388. * @ingroup Common_register_access_function_W5300
  1389. * @brief Set @ref TMS45R register
  1390. * @param (uint16_t)tms45r Value to set @ref TMS45R register. The lower socket memory size is located at MSB of tms45r.
  1391. * @sa getTMS45R()
  1392. */
  1393. #define setTMS45R(tms45r) \
  1394. WIZCHIP_WRITE(TMS45R,tms45r)
  1395. /**
  1396. * @ingroup Common_register_access_function_W5300
  1397. * @brief Get @ref TMS45R register
  1398. * @return uint16_t. Value of @ref TMS45R register.
  1399. * @sa setTMS45R()
  1400. */
  1401. #define getTMS45R() \
  1402. WIZCHIP_READ(TMS45R)
  1403. /**
  1404. * @ingroup Common_register_access_function_W5300
  1405. * @brief Set @ref TMS67R register
  1406. * @param (uint16_t)tms67r Value to set @ref TMS67R register. The lower socket memory size is located at MSB of tms67r.
  1407. * @sa getTMS67R()
  1408. */
  1409. #define setTMS67R(tms67r) \
  1410. WIZCHIP_WRITE(TMS67R,tms67r)
  1411. /**
  1412. * @ingroup Common_register_access_function_W5300
  1413. * @brief Get @ref TMS67R register
  1414. * @return uint16_t. Value of @ref TMS67R register.
  1415. * @sa setTMS67R()
  1416. */
  1417. #define getTMS67R() \
  1418. WIZCHIP_READ(TMS67R)
  1419. /**
  1420. * @ingroup Common_register_access_function_W5300
  1421. * @brief Set @ref TMSR0 ~ @ref TMSR7 register
  1422. * @param (uint8_t)sn Socket number. It should be 0 ~ 7.
  1423. * @param (uint8_t)tmsr Value to set @ref TMSR0 ~@ref TMSR7 register.
  1424. * @sa getTMSR()
  1425. */
  1426. void setTMSR(uint8_t sn,uint8_t tmsr);
  1427. #define setSn_TXBUF_SIZE(sn, tmsr) setTMSR(sn, tmsr) ///< For compatible ioLibrary
  1428. /**
  1429. * @ingroup Common_register_access_function_W5300
  1430. * @brief Get @ref TMSR0 ~ @ref TMSR7 register
  1431. * @param (uint8_t)sn Socket number. It should be 0 ~ 7.
  1432. * @return uint8_t. Value of @ref TMSR0 ~ @ref TMSR7
  1433. * @sa getTMSR()
  1434. */
  1435. uint8_t getTMSR(uint8_t sn);
  1436. #define getSn_TXBUF_SIZE(sn) getTMSR(sn) ///< For compatible ioLibrary
  1437. /**
  1438. * @ingroup Common_register_access_function_W5300
  1439. * @brief Set @ref RMS01R register
  1440. * @param (uint16_t)rms01r Value to set @ref RMS01R register. The lower socket memory size is located at MSB of rms01r.
  1441. * @sa getRMS01R()
  1442. */
  1443. #define setRMS01R(rms01r) \
  1444. WIZCHIP_WRITE(RMS01R,rms01r)
  1445. /**
  1446. * @ingroup Common_register_access_function_W5300
  1447. * @brief Get @ref RMS01R register
  1448. * @return uint16_t. Value of @ref RMS01R register.
  1449. * @sa setRMS01R()
  1450. */
  1451. #define getRMS01R() \
  1452. WIZCHIP_READ(RMS01R)
  1453. /**
  1454. * @ingroup Common_register_access_function_W5300
  1455. * @brief Set @ref RMS23R register
  1456. * @param (uint16_t)rms23r Value to set @ref RMS23R register. The lower socket memory size is located at MSB of rms01r.
  1457. * @sa getRMS23R()
  1458. */
  1459. #define setRMS23R(rms23r) \
  1460. WIZCHIP_WRITE(RMS23R,rms23r)
  1461. /**
  1462. * @ingroup Common_register_access_function_W5300
  1463. * @brief Get @ref RMS23R register
  1464. * @return uint16_t. Value of @ref RMS23R register.
  1465. * @sa setRMS23R()
  1466. */
  1467. #define getRMS23R() \
  1468. WIZCHIP_READ(RMS23R)
  1469. /**
  1470. * @ingroup Common_register_access_function_W5300
  1471. * @brief Set @ref RMS45R register
  1472. * @param (uint16_t)rms45r Value to set @ref RMS45R register. The lower socket memory size is located at MSB of rms45r.
  1473. * @sa getRMS45R()
  1474. */
  1475. #define setRMS45R(rms45r) \
  1476. WIZCHIP_WRITE(RMS45R,rms45r)
  1477. /**
  1478. * @ingroup Common_register_access_function_W5300
  1479. * @brief Get @ref RMS45R register
  1480. * @return uint16_t. Value of @ref RMS45R register.
  1481. * @sa setRMS45R()
  1482. */
  1483. #define getRMS45R() \
  1484. WIZCHIP_READ(RMS45R)
  1485. /**
  1486. * @ingroup Common_register_access_function_W5300
  1487. * @brief Set @ref RMS67R register
  1488. * @param (uint16_t)rms67r Value to set @ref RMS67R register. The lower socket memory size is located at MSB of rms67r.
  1489. * @sa getRMS67R()
  1490. */
  1491. #define setRMS67R(rms67r) \
  1492. WIZCHIP_WRITE(RMS67R,rms67r)
  1493. /**
  1494. * @ingroup Common_register_access_function_W5300
  1495. * @brief Get @ref RMS67R register
  1496. * @return uint16_t. Value of @ref RMS67R register.
  1497. * @sa setRMS67R()
  1498. */
  1499. #define getRMS67R() \
  1500. WIZCHIP_READ(RMS67R)
  1501. /**
  1502. * @ingroup Common_register_access_function_W5300
  1503. * @brief Set @ref RMS01R ~ @ref RMS67R register
  1504. * @param (uint8_t)sn Socket number. It should be 0 ~ 7.
  1505. * @param (uint8_t)rmsr Value to set @ref RMSR0 ~@ref RMSR7 register.
  1506. * @sa getTMSR()
  1507. */
  1508. void setRMSR(uint8_t sn,uint8_t rmsr);
  1509. #define setSn_RXBUF_SIZE(sn,rmsr) setRMSR(sn, rmsr) ///< For compatible ioLibrary
  1510. /**
  1511. * @ingroup Common_register_access_function_W5300
  1512. * @brief Get @ref RMS01R ~ @ref RMS67R register
  1513. * @param (uint8_t)sn Socket number. It shoudl be 0 ~ 7.
  1514. * @return uint8_t. Value of @ref RMSR0 ~ @ref RMSR7 register.
  1515. * @sa setRMSR()
  1516. */
  1517. uint8_t getRMSR(uint8_t sn);
  1518. #define getSn_RXBUF_SIZE(sn) getRMSR(sn) ///< For compatible ioLibrary
  1519. /**
  1520. * @ingroup Common_register_access_function_W5300
  1521. * @brief Set @ref MTYPER register
  1522. * @param (uint16_t)mtyper Value to set @ref MTYPER register.
  1523. * @sa getMTYPER()
  1524. */
  1525. #define setMTYPER(mtype) \
  1526. WIZCHIP_WRITE(MTYPER, mtype)
  1527. /**
  1528. * @ingroup Common_register_access_function_W5300
  1529. * @brief Get @ref MTYPER register
  1530. * @return uint16_t. Value of @ref MTYPER register.
  1531. * @sa setMTYPER()
  1532. */
  1533. #define getMTYPER() \
  1534. WIZCHIP_READ(MTYPER)
  1535. /**
  1536. * @ingroup Common_register_access_function_W5300
  1537. * @brief Get @ref RATR register
  1538. * @return uint16_t. Value of @ref PATR register.
  1539. */
  1540. #define getPATR() \
  1541. WIZCHIP_READ(PATR)
  1542. /**
  1543. * @ingroup Common_register_access_function_W5300
  1544. * @brief Set @ref PTIMER register
  1545. * @param (uint8_t)ptimer Value to set @ref PTIMER register.
  1546. * @sa getPTIMER()
  1547. */
  1548. #define setPTIMER(ptimer) \
  1549. WIZCHIP_WRITE(PTIMER, ((uint16_t)ptimer) & 0x00FF)
  1550. /**
  1551. * @ingroup Common_register_access_function_W5300
  1552. * @brief Get @ref PTIMER register
  1553. * @return uint8_t. Value of @ref PTIMER register.
  1554. * @sa setPTIMER()
  1555. */
  1556. #define getPTIMER() \
  1557. ((uint8_t)(WIZCHIP_READ(PTIMER) & 0x00FF))
  1558. /**
  1559. * @ingroup Common_register_access_function_W5300
  1560. * @brief Set @ref PMAGIC register
  1561. * @param (uint8_t)pmagic Value to set @ref PMAGIC register.
  1562. * @sa getPMAGIC()
  1563. */
  1564. #define setPMAGIC(pmagic) \
  1565. WIZCHIP_WRITE(PMAGIC, ((uint16_t)pmagic) & 0x00FF)
  1566. /**
  1567. * @ingroup Common_register_access_function_W5300
  1568. * @brief Get @ref PMAGIC register
  1569. * @return uint8_t. Value of @ref PMAGIC register.
  1570. * @sa setPMAGIC()
  1571. */
  1572. #define getPMAGIC() \
  1573. ((uint8_t)(WIZCHIP_READ(PMAGIC) & 0x00FF))
  1574. /**
  1575. * @ingroup Common_register_access_function_W5300
  1576. * @brief Get @ref PSID register
  1577. * @return uint16_t. Value of @ref PSID register.
  1578. */
  1579. #define getPSIDR() \
  1580. WIZCHIP_READ(PSIDR)
  1581. /**
  1582. * @ingroup Common_register_access_function_W5300
  1583. * @brief Get @ref PDHAR register
  1584. * @param (uint8_t*)pdhar Pointer variable to PPP destination MAC register address. It should be allocated 6 bytes.
  1585. */
  1586. #define getPDHAR(pdhar) { \
  1587. (pdhar)[0] = (uint8_t)(WIZCHIP_READ(PDHAR) >> 8); \
  1588. (pdhar)[1] = (uint8_t)(WIZCHIP_READ(PDHAR)); \
  1589. (pdhar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,2)) >> 8); \
  1590. (pdhar)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,2))); \
  1591. (pdhar)[4] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,4)) >> 8); \
  1592. (pdhar)[5] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,4))); \
  1593. }
  1594. /**
  1595. * @ingroup Common_register_access_function_W5300
  1596. * @brief Get unreachable IP address. @ref UIPR
  1597. * @param (uint8_t*)uipr Pointer variable to get unreachable IP address. It should be allocated 4 bytes.
  1598. */
  1599. #define getUIPR(uipr) { \
  1600. (uipr)[0] = (uint8_t)(WIZCHIP_READ(UIPR) >> 8); \
  1601. (uipr)[1] = (uint8_t)(WIZCHIP_READ(UIPR)); \
  1602. (uipr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(UIPR,2)) >> 8); \
  1603. (uipr)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(UIPR,2))); \
  1604. }
  1605. /**
  1606. * @ingroup Common_register_access_function_W5300
  1607. * @brief Get @ref UPORTR register
  1608. * @return uint16_t. Value of @ref UPORTR register.
  1609. */
  1610. #define getUPORTR() \
  1611. WIZCHIP_READ(UPORTR)
  1612. /**
  1613. * @ingroup Common_register_access_function_W5300
  1614. * @brief Get @ref FMTUR register
  1615. * @return uint16_t. Value of @ref FMTUR register.
  1616. */
  1617. #define getFMTUR() \
  1618. WIZCHIP_READ(FMTUR)
  1619. /**
  1620. * @ingroup Common_register_access_function_W5300
  1621. * @brief Get @ref Pn_BRDYR register
  1622. * @return uint8_t. Value of @ref Pn_BRDYR register.
  1623. */
  1624. #define getPn_BRDYR(p) \
  1625. ((uint8_t)(WIZCHIP_READ(Pn_BRDYR(p)) & 0x00FF))
  1626. /**
  1627. * @ingroup Common_register_access_function_W5300
  1628. * @brief Set @ref Pn_BRDYR register
  1629. * @param p Pin number (p = 0,1,2,3)
  1630. * @param brdyr Set a value @ref Pn_BRDYR(p).
  1631. */
  1632. #define setPn_BRDYR(p, brdyr) \
  1633. WIZCHIP_WRITE(Pn_BRDYR(p), brdyr & 0x00E7)
  1634. /**
  1635. * @ingroup Common_register_access_function_W5300
  1636. * @brief Get @ref Pn_BDPTHR register
  1637. * @param p Pin number (p = 0,1,2,3)
  1638. * @return uint16_t. Value of @ref Pn_BDPTHR register.
  1639. */
  1640. #define getPn_BDPTHR(p) \
  1641. WIZCHIP_READ(Pn_BDPTHR(p))
  1642. /**
  1643. * @ingroup Common_register_access_function_W5300
  1644. * @brief Set @ref Pn_BDPTHR register
  1645. * @param p Pin number (p = 0,1,2,3)
  1646. * @param bdpthr Value of @ref Pn_BDPTHR
  1647. */
  1648. #define setPn_BDPTHR(p, bdpthr) \
  1649. WIZCHIP_WRITE(Pn_BDPTHR(p),bdpthr)
  1650. /**
  1651. * @ingroup Common_register_access_function_W5300
  1652. * @brief Get @ref IDR register
  1653. * @return uint16_t. Always 0x5300.
  1654. */
  1655. #define getIDR() \
  1656. WIZCHIP_READ(IDR)
  1657. /***********************************
  1658. * SOCKET Register Access Function *
  1659. ***********************************/
  1660. /**
  1661. * @ingroup Socket_register_access_function_W5300
  1662. * @brief Set @ref Sn_MR register
  1663. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1664. * @param (uint8_t)mr Value to set @ref Sn_MR
  1665. * @sa getSn_MR()
  1666. */
  1667. #define setSn_MR(sn, mr) \
  1668. WIZCHIP_WRITE(Sn_MR(sn),mr)
  1669. /**
  1670. * @ingroup Socket_register_access_function_W5300
  1671. * @brief Get @ref Sn_MR register
  1672. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1673. * @return uint8_t. Value of @ref Sn_MR.
  1674. * @sa setSn_MR()
  1675. */
  1676. #define getSn_MR(sn) \
  1677. WIZCHIP_READ(Sn_MR(sn))
  1678. /**
  1679. * @ingroup Socket_register_access_function_W5300
  1680. * @brief Set @ref Sn_CR register
  1681. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1682. * @param (uint8_t)cr Value to set @ref Sn_CR
  1683. * @sa getSn_CR()
  1684. */
  1685. #define setSn_CR(sn, cr) \
  1686. WIZCHIP_WRITE(Sn_CR(sn), ((uint16_t)cr) & 0x00FF)
  1687. /**
  1688. * @ingroup Socket_register_access_function_W5300
  1689. * @brief Get @ref Sn_CR register
  1690. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1691. * @return uint8_t. Value of @ref Sn_CR.
  1692. * @sa setSn_CR()
  1693. */
  1694. #define getSn_CR(sn) \
  1695. ((uint8_t)WIZCHIP_READ(Sn_CR(sn)))
  1696. /**
  1697. * @ingroup Socket_register_access_function_W5300
  1698. * @brief Set @ref Sn_IMR register
  1699. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1700. * @param (uint8_t)imr Value to set @ref Sn_IMR
  1701. * @sa getSn_IMR()
  1702. */
  1703. #define setSn_IMR(sn, imr) \
  1704. WIZCHIP_WRITE(Sn_IMR(sn), ((uint16_t)imr) & 0x00FF)
  1705. /**
  1706. * @ingroup Socket_register_access_function_W5300
  1707. * @brief Get @ref Sn_IMR register
  1708. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1709. * @return uint8_t. Value of @ref Sn_IMR.
  1710. * @sa setSn_IMR()
  1711. */
  1712. #define getSn_IMR(sn) \
  1713. ((uint8_t)WIZCHIP_READ(Sn_IMR(sn)))
  1714. /**
  1715. * @ingroup Socket_register_access_function_W5300
  1716. * @brief Set @ref Sn_IR register
  1717. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1718. * @param (uint8_t)ir Value to set @ref Sn_IR
  1719. * @sa getSn_IR()
  1720. */
  1721. #define setSn_IR(sn, ir) \
  1722. WIZCHIP_WRITE(Sn_IR(sn), ((uint16_t)ir) & 0x00FF)
  1723. /**
  1724. * @ingroup Socket_register_access_function_W5300
  1725. * @brief Get @ref Sn_IR register
  1726. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1727. * @return uint8_t. Value of @ref Sn_IR.
  1728. * @sa setSn_IR()
  1729. */
  1730. #define getSn_IR(sn) \
  1731. ((uint8_t)WIZCHIP_READ(Sn_IR(sn)))
  1732. /**
  1733. * @ingroup Socket_register_access_function_W5300
  1734. * @brief Get @ref Sn_SR register
  1735. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1736. * @return uint8_t. Value of @ref Sn_SR.
  1737. */
  1738. #define getSn_SSR(sn) \
  1739. ((uint8_t)WIZCHIP_READ(Sn_SR(sn)))
  1740. #define getSn_SR(sn) getSn_SSR(sn) ///< For compatible ioLibrary. Refer to getSn_SSR().
  1741. /**
  1742. * @ingroup Socket_register_access_function_W5300
  1743. * @brief Set @ref Sn_PORTR register
  1744. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1745. * @param (uint16_t)port Variable to set @ref Sn_PORTR.
  1746. * @sa getSn_PORTR()
  1747. */
  1748. #define setSn_PORTR(sn, port) \
  1749. WIZCHIP_WRITE(Sn_PORTR(sn), port)
  1750. #define setSn_PORT(sn, port) setSn_PORTR(sn, port) ///< For compatible ioLibrary
  1751. /**
  1752. * @ingroup Socket_register_access_function_W5300
  1753. * @brief Get @ref Sn_PORTR register
  1754. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1755. * @return uint16_t. Variable of @ref Sn_PORTR.
  1756. * @sa setSn_PORTR()
  1757. */
  1758. #define getSn_PORTR(sn) \
  1759. WIZCHIP_READ(Sn_PORTR(sn))
  1760. #define getSn_PORT(sn) getSn_PORTR(sn) ///< For compatible ioLibrary
  1761. /**
  1762. * @ingroup Socket_register_access_function_W5300
  1763. * @brief Set @ref Sn_DHAR register
  1764. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1765. * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes.
  1766. * @sa getSn_DHAR()
  1767. */
  1768. #define setSn_DHAR(sn, dhar) { \
  1769. WIZCHIP_WRITE(Sn_DHAR(sn), (((uint16_t)((dhar)[0])) << 8) + (((uint16_t)((dhar)[1])) & 0x00FF)); \
  1770. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),2), (((uint16_t)((dhar)[0])) << 8) + (((uint16_t)((dhar)[1])) & 0x00FF)); \
  1771. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),4), (((uint16_t)((dhar)[0])) << 8) + (((uint16_t)((dhar)[1])) & 0x00FF)); \
  1772. }
  1773. /**
  1774. * @ingroup Socket_register_access_function_W5300
  1775. * @brief Get @ref Sn_MR register
  1776. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1777. * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes.
  1778. * @sa setSn_DHAR()
  1779. */
  1780. #define getSn_DHAR(sn, dhar) { \
  1781. (dhar)[0] = (uint8_t)(WIZCHIP_READ(Sn_DHAR(sn)) >> 8); \
  1782. (dhar)[1] = (uint8_t) WIZCHIP_READ(Sn_DHAR(sn)); \
  1783. (dhar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),2)) >> 8); \
  1784. (dhar)[3] = (uint8_t) WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),2)); \
  1785. (dhar)[4] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),4)) >> 8); \
  1786. (dhar)[5] = (uint8_t) WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),4)); \
  1787. }
  1788. /**
  1789. * @ingroup Socket_register_access_function_W5300
  1790. * @brief Set @ref Sn_DPORT register
  1791. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1792. * @param (uint16_t)dport Value to set @ref Sn_DPORT
  1793. * @sa getSn_DPORT()
  1794. */
  1795. #define setSn_DPORTR(sn, dport) \
  1796. WIZCHIP_WRITE(Sn_DPORTR(sn),dport)
  1797. #define setSn_DPORT(sn, dport) setSn_DPORTR(sn,dport) ///< For compatible ioLibrary. Refer to @ref Sn_DPORTR.
  1798. /**
  1799. * @ingroup Socket_register_access_function_W5300
  1800. * @brief Get @ref Sn_DPORT register
  1801. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1802. * @return uint16_t. Value of @ref Sn_DPORT.
  1803. * @sa setSn_DPORT()
  1804. * @note This function is not available because W5300 have a bug to read @ref Sn_DPORTR. \n
  1805. * Don't use this function.
  1806. */
  1807. #define getSn_DPORTR(sn) \
  1808. WIZCHIP_READ(Sn_DPORTR(sn))
  1809. #define getSn_DPORT(sn) getSn_DPORTR(sn) ///< For compatible ioLibrary. Refer to @ref Sn_DPORTR.
  1810. /**
  1811. * @ingroup Socket_register_access_function_W5300
  1812. * @brief Set @ref Sn_DIPR register
  1813. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1814. * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes.
  1815. * @sa getSn_DIPR()
  1816. */
  1817. #define setSn_DIPR(sn, dipr) { \
  1818. WIZCHIP_WRITE(Sn_DIPR(sn), (((uint16_t)((dipr)[0])) << 8) + (((uint16_t)((dipr)[1])) & 0x00FF)); \
  1819. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DIPR(sn),2), (((uint16_t)((dipr)[2])) << 8) + (((uint16_t)((dipr)[3])) & 0x00FF)); \
  1820. }
  1821. /**
  1822. * @ingroup Socket_register_access_function_W5300
  1823. * @brief Get @ref Sn_DIPR register
  1824. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1825. * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes.
  1826. * @sa setSn_DIPR()
  1827. */
  1828. #define getSn_DIPR(sn, dipr) { \
  1829. (dipr)[0] = (uint8_t)(WIZCHIP_READ(Sn_DIPR(sn)) >> 8); \
  1830. (dipr)[1] = (uint8_t) WIZCHIP_READ(Sn_DIPR(sn)); \
  1831. (dipr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DIPR(sn),2)) >> 8); \
  1832. (dipr)[3] = (uint8_t) WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DIPR(sn),2)); \
  1833. }
  1834. /**
  1835. * @ingroup Socket_register_access_function_W5300
  1836. * @brief Set @ref Sn_MSSR register
  1837. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1838. * @param (uint16_t)mss Value to set @ref Sn_MSSR
  1839. * @sa setSn_MSSR()
  1840. */
  1841. #define setSn_MSSR(sn, mss) \
  1842. WIZCHIP_WRITE(Sn_MSSR(sn), mss)
  1843. /**
  1844. * @ingroup Socket_register_access_function_W5300
  1845. * @brief Get @ref Sn_MSSR register
  1846. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1847. * @return uint16_t. Value of @ref Sn_MSSR.
  1848. * @sa setSn_MSSR()
  1849. */
  1850. #define getSn_MSSR(sn) \
  1851. WIZCHIP_READ(Sn_MSSR(sn))
  1852. /**
  1853. * @ingroup Socket_register_access_function_W5300
  1854. * @brief Set @ref Sn_KPALVTR register
  1855. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1856. * @param (uint8_t)kpalvt Value to set @ref Sn_KPALVTR
  1857. * @sa getSn_KPALVTR()
  1858. */
  1859. #define setSn_KPALVTR(sn, kpalvt) \
  1860. WIZCHIP_WRITE(Sn_KPALVTR(sn), (WIZCHIP_READ(Sn_KPALVTR(sn)) & 0x00FF) | (((uint16_t)kpalvt)<<8))
  1861. /**
  1862. * @ingroup Socket_register_access_function_W5300
  1863. * @brief Get @ref Sn_KPALVTR register
  1864. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1865. * @return uint8_t. Value of @ref Sn_KPALVTR.
  1866. * @sa setSn_KPALVTR()
  1867. */
  1868. #define getSn_KPALVTR(sn) \
  1869. ((uint8_t)(WIZCHIP_READ(Sn_KPALVTR(sn)) >> 8))
  1870. /**
  1871. * @ingroup Socket_register_access_function_W5300
  1872. * @brief Set @ref Sn_PROTOR register
  1873. * @param (uint8_t)sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
  1874. * @param (uint8_t)proto Value to set \ref Sn_PROTOR
  1875. * @sa getSn_PROTOR()
  1876. */
  1877. #define setSn_PROTOR(sn, proto) \
  1878. WIZCHIP_WRITE(Sn_PROTOR(sn),(WIZCHIP_READ(Sn_PROTOR(sn)) & 0xFF00) | (((uint16_t)proto) & 0x00FF))
  1879. #define setSn_PROTO(sn,proto) setSn_PROTOR(sn,proto) ///< For compatible ioLibrary
  1880. /**
  1881. * @ingroup Socket_register_access_function_W5300
  1882. * @brief Get @ref Sn_PROTOR register
  1883. * @param (uint8_t)sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
  1884. * @return uint8_t. Value of @ref Sn_PROTOR.
  1885. * @sa setSn_PROTOR()
  1886. */
  1887. #define getSn_PROTOR(sn) \
  1888. ((uint8_t)WIZCHIP_READ(Sn_PROTOR(sn)))
  1889. #define getSn_PROTO(sn) getSn_PROTOR(sn) ///< For compatible ioLibrary
  1890. /**
  1891. * @ingroup Socket_register_access_function_W5300
  1892. * @brief Set @ref Sn_TX_WRSR register
  1893. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1894. * @param (uint32_t)txwrs Value to set @ref Sn_KPALVTR (It should be <= 0x00010000)
  1895. * @sa getSn_TX_WRSR()
  1896. */
  1897. #define setSn_TX_WRSR(sn, txwrs) { \
  1898. WIZCHIP_WRITE(Sn_TX_WRSR(sn), (uint16_t)(((uint32_t)txwrs) >> 16)); \
  1899. WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_TX_WRSR(sn),2), (uint16_t)txwrs); \
  1900. }
  1901. /**
  1902. * @ingroup Socket_register_access_function_W5300
  1903. * @brief Get @ref Sn_TX_WRSR register
  1904. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1905. * @return uint32_t. Value of Sn_TX_WRSR.
  1906. * @sa setSn_TX_WRSR()
  1907. */
  1908. #define getSn_TX_WRSR(sn) \
  1909. ( (((uint32_t)WIZCHIP_READ(Sn_TX_WRSR(sn))) << 16) + (((uint32_t)WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_WRSR(sn),1))) & 0x0000FFFF) )
  1910. /**
  1911. * @ingroup Socket_register_access_function_W5300
  1912. * @brief Get @ref Sn_TX_FSR register
  1913. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1914. * @return uint32_t. Value of @ref Sn_TX_FSR.
  1915. */
  1916. uint32_t getSn_TX_FSR(uint8_t sn);
  1917. /**
  1918. * @ingroup Socket_register_access_function_W5300
  1919. * @brief Get @ref Sn_RX_RSR register
  1920. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1921. * @return uint32_t. Value of @ref Sn_RX_RSR.
  1922. */
  1923. uint32_t getSn_RX_RSR(uint8_t sn);
  1924. /**
  1925. * @ingroup Socket_register_access_function_W5300
  1926. * @brief Set @ref Sn_TX_FIFOR register
  1927. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1928. * @param (uint16_t)txfifo. Value to set @ref Sn_TX_FIFOR.
  1929. */
  1930. #define setSn_TX_FIFOR(sn, txfifo) \
  1931. WIZCHIP_WRITE(Sn_TX_FIFOR(sn), txfifo);
  1932. /**
  1933. * @ingroup Socket_register_access_function_W5300
  1934. * @brief Get @ref Sn_RX_FIFOR register
  1935. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1936. * @return uint16_t. Value of @ref Sn_RX_FIFOR.
  1937. */
  1938. #define getSn_RX_FIFOR(sn) \
  1939. WIZCHIP_READ(Sn_RX_FIFOR(sn));
  1940. /**
  1941. * @ingroup Socket_register_access_function_W5300
  1942. * @brief Set @ref Sn_TOSR register
  1943. * @param (uint8_t)sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
  1944. * @param (uint8_t)tos Value to set @ref Sn_TOSR
  1945. * @sa getSn_TOSR()
  1946. */
  1947. #define setSn_TOSR(sn, tos) \
  1948. WIZCHIP_WRITE(Sn_TOS(sn), ((uint16_t)tos) & 0x00FF)
  1949. #define setSn_TOS(sn,tos) setSn_TOSR(sn,tos) ///< For compatible ioLibrar
  1950. /**
  1951. * @ingroup Socket_register_access_function_W5300
  1952. * @brief Get @ref Sn_TOSR register
  1953. * @param (uint8_t)sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_ </b>.
  1954. * @return uint8_t. Value of Sn_TOSR.
  1955. * @sa setSn_TOSR()
  1956. */
  1957. #define getSn_TOSR(sn) \
  1958. ((uint8_t)WIZCHIP_READ(Sn_TOSR(sn)))
  1959. #define getSn_TOS(sn) getSn_TOSR(sn) ///< For compatible ioLibrar
  1960. /**
  1961. * @ingroup Socket_register_access_function_W5300
  1962. * @brief Set @ref Sn_TTLR register
  1963. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1964. * @param (uint8_t)ttl Value to set @ref Sn_TTLR
  1965. * @sa getSn_TTLR()
  1966. */
  1967. #define setSn_TTLR(sn, ttl) \
  1968. WIZCHIP_WRITE(Sn_TTLR(sn), ((uint16_t)ttl) & 0x00FF)
  1969. #define setSn_TTL(sn,ttl) setSn_TTLR(sn,ttl) ///< For compatible ioLibrary
  1970. /**
  1971. * @ingroup Socket_register_access_function_W5300
  1972. * @brief Get @ref Sn_TTLR register
  1973. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1974. * @return uint8_t. Value of @ref Sn_TTLR.
  1975. * @sa setSn_TTLR()
  1976. */
  1977. #define getSn_TTLR(sn) \
  1978. ((uint8_t)WIZCHIP_READ(Sn_TTL(sn)))
  1979. #define getSn_TTL(sn) getSn_TTLR(sn) ///< For compatible ioLibrary
  1980. /**
  1981. * @ingroup Socket_register_access_function_W5300
  1982. * @brief Set @ref Sn_FRAGR register
  1983. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1984. * @param (uint16_t)frag Value to set @ref Sn_FRAGR
  1985. * @sa getSn_FRAGR()
  1986. */
  1987. #define setSn_FRAGR(sn, frag) \
  1988. WIZCHIP_WRITE(Sn_FRAGR(sn), ((uint16_t)frag) & 0x00FF)
  1989. #define setSn_FRAG(sn,frag) setSn_FRAGR(sn,flag)
  1990. /**
  1991. * @ingroup Socket_register_access_function_W5300
  1992. * @brief Get @ref Sn_FRAGR register
  1993. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  1994. * @return uint16_t. Value of @ref Sn_FRAGR.
  1995. * @sa setSn_FRAGR()
  1996. */
  1997. #define getSn_FRAGR(sn) \
  1998. (WIZCHIP_READ(Sn_FRAG(sn)))
  1999. #define getSn_FRAG(sn) getSn_FRAGR(sn)
  2000. /////////////////////////////////////
  2001. // Sn_TXBUF & Sn_RXBUF IO function //
  2002. /////////////////////////////////////
  2003. /**
  2004. * @brief Socket_register_access_function_W5300
  2005. * @brief Gets the max buffer size of socket sn passed as parameter.
  2006. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  2007. * @return uint32_t. Value of Socket n RX max buffer size.
  2008. */
  2009. #define getSn_RxMAX(sn) \
  2010. (((uint32_t)getSn_RXBUF_SIZE(sn)) << 10)
  2011. /**
  2012. * @brief Socket_register_access_function_W5300
  2013. * @brief Gets the max buffer size of socket sn passed as parameters.
  2014. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  2015. * @return uint32_t. Value of Socket n TX max buffer size.
  2016. */
  2017. #define getSn_TxMAX(sn) \
  2018. (((uint32_t)getSn_TXBUF_SIZE(sn)) << 10)
  2019. /**
  2020. * @ingroup Basic_IO_function_W5300
  2021. * @brief It copies data to internal TX memory
  2022. *
  2023. * @details This function reads the Tx write pointer register and after that,
  2024. * it copies the <i>wizdata(pointer buffer)</i> of the length of <i>len(variable)</i> bytes to internal TX memory
  2025. * and updates the Tx write pointer register.
  2026. * This function is being called by send() and sendto() function also.
  2027. *
  2028. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  2029. * @param wizdata Pointer buffer to write data
  2030. * @param len Data length
  2031. * @sa wiz_recv_data()
  2032. */
  2033. void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint32_t len);
  2034. /**
  2035. * @ingroup Basic_IO_function_W5300
  2036. * @brief It copies data to your buffer from internal RX memory
  2037. *
  2038. * @details This function read the Rx read pointer register and after that,
  2039. * it copies the received data from internal RX memory
  2040. * to <i>wizdata(pointer variable)</i> of the length of <i>len(variable)</i> bytes.
  2041. * This function is being called by recv() also.
  2042. *
  2043. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  2044. * @param wizdata Pointer buffer to read data
  2045. * @param len Data length
  2046. * @sa wiz_send_data()
  2047. */
  2048. void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint32_t len);
  2049. /**
  2050. * @ingroup Basic_IO_function_W5300
  2051. * @brief It discard the received data in RX memory.
  2052. * @details It discards the data of the length of <i>len(variable)</i> bytes in internal RX memory.
  2053. * @param (uint8_t)sn Socket number. It should be <b>0 ~ 7</b>.
  2054. * @param len Data length
  2055. */
  2056. void wiz_recv_ignore(uint8_t sn, uint32_t len);
  2057. /// \cond DOXY_APPLY_CODE
  2058. #endif
  2059. /// \endcond
  2060. #ifdef __cplusplus
  2061. }
  2062. #endif
  2063. #endif // _W5300_H_