Changeset 167 for UsbWattMeter/trunk/lwip-1.4.1/ports/grsakura/ether_phy.c
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
UsbWattMeter/trunk/lwip-1.4.1/ports/grsakura/ether_phy.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 6 6 * Copyright (C) 2014 Cores Co., Ltd. Japan 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æÑºLÌ³ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêĢ鱯D 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æÑºL 19 * Ì³ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pūȢ`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æÑºLÌ³ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 33 * ÆÓ·é±ÆD 8 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 13 * スコード中に含まれていること. 14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 17 * の無保証規定を掲載すること. 18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 20 * と. 21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 24 * 報告すること. 25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 29 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id$ … … 98 94 switch(state){ 99 95 case PHY_STATE_UNINIT: 100 /* PHY ÌZbg*/96 /* PHYのリセット */ 101 97 phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_RESET); 102 98 103 /* 500ms ÒÂ*/104 /* tslp_tsk(500); svH*/99 /* 500ms待つ */ 100 /* tslp_tsk(500); 不要? */ 105 101 /* continue; */ 106 102 case PHY_STATE_RESETING: 107 /* Zbg®¹ÌmF*/103 /* リセット完了の確認 */ 108 104 if((phy_read_reg(phy_addr, PHY_CONTROL_REGISTER) & PHY_CONTROL_RESET) != 0) 109 105 return PHY_STATE_RESETING; … … 129 125 if(reset < 2){ 130 126 #endif 131 /* N®¹ÌmF*/127 /* リンク完了の確認 */ 132 128 if(!phy_is_link(phy_addr)) 133 129 return PHY_STATE_RESET; … … 136 132 reset = 0; 137 133 #endif 138 /* I[glSVG[V̨mç¹ðLøÉÝè*/134 /* オートネゴシエーションのお知らせを有効に設定 */ 139 135 phy_write_reg(phy_addr, PHY_AN_ADVERTISEMENT_REGISTER, 140 136 PHY_AN_AD_100BASE_T4 | PHY_AN_AD_100BASE_TX_FULL_DUPLEX | PHY_AN_AD_100BASE_TX_HALF_DUPLEX 141 137 | PHY_AN_AD_10BASE_T_FULL_DUPLEX | PHY_AN_AD_10BASE_T_HALF_DUPLEX | PHY_AN_AD_SELECTOR_FIELD); 142 138 143 /* I[glSVG[VðLøÉÝè*/139 /* オートネゴシエーションを有効に設定 */ 144 140 phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_SPEED_SELECT | PHY_CONTROL_A_N_ENABLE); 145 141 … … 150 146 if(reset < 2){ 151 147 #endif 152 /* I[glSVG[V®¹ÌmF*/148 /* オートネゴシエーション完了の確認 */ 153 149 if((phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_A_N_COMPLETE) == 0) 154 150 return PHY_STATE_LINKED; … … 173 169 { 174 170 #ifdef __RX 175 /* NÌmF*/171 /* リンクの確認 */ 176 172 return (phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_LINK_STATUS) != 0; 177 173 #else … … 185 181 int i; 186 182 187 /* PRE F32ÂÌA±µ½1b */183 /* PRE :32個の連続した1b */ 188 184 for (i = 0; i < 32; i++) 189 185 phy_write_bit(true); 190 186 191 /* ST Ft[Ìæªð¦·01bÌCg*/192 phy_write_bit(false); 193 phy_write_bit(true); 194 195 /* OP FANZXíÊð¦·R[hÌCg*/196 phy_write_bit(true); 197 phy_write_bit(false); 198 199 /* PHYAD FPHY-LSIÌAhXª1ÔÌêA00001bðCgiMSB ©çCgjB*/187 /* ST :フレームの先頭を示す01bのライト */ 188 phy_write_bit(false); 189 phy_write_bit(true); 190 191 /* OP :アクセス種別を示すコードのライト */ 192 phy_write_bit(true); 193 phy_write_bit(false); 194 195 /* PHYAD :PHY-LSIのアドレスが1番の場合、00001bをライト(MSB から順次ライト)。 */ 200 196 phy_write_bit((phy_addr & 0x10) != 0); 201 197 phy_write_bit((phy_addr & 0x08) != 0); … … 204 200 phy_write_bit((phy_addr & 0x01) != 0); 205 201 206 /* REGAD FWX^AhXª1ÔÌêA00001bðCgiMSB©çCgjB*/202 /* REGAD :レジスタアドレスが1番の場合、00001bをライト(MSBから順次ライト)。 */ 207 203 phy_write_bit((reg_addr & 0x10) != 0); 208 204 phy_write_bit((reg_addr & 0x08) != 0); … … 211 207 phy_write_bit((reg_addr & 0x01) != 0); 212 208 213 /* TA FMII/RMIIC^tF[XãÅf[^ÌM³ðØèÖ¦éÔ*/214 /* uoXðúviZ0Æ\Ljðs¤*/209 /* TA :MII/RMIIインタフェース上でデータの送信元を切り替える時間 */ 210 /* 「バス解放」(Z0と表記)を行う */ 215 211 phy_release_bus(); 216 212 217 /* DATA F16rbgÌf[^BMSB©ç[h*/213 /* DATA :16ビットのデータ。MSBから順次リード */ 218 214 for (bit = 0x8000; bit != 0; bit >>= 1) { 219 215 if(phy_read_bit()) … … 221 217 } 222 218 223 /* IDLE FÌMIIÇtH[}bgüÍÜÅÌÒ@Ô*/224 /* ·ÅÉTAÉoXðúÏÝÅ è§äsv*/219 /* IDLE :次のMII管理フォーマット入力までの待機時間 */ 220 /* すでにTA時にバス解放済みであり制御不要 */ 225 221 phy_release_bus(); 226 222 … … 233 229 uint16_t bit; 234 230 235 /* PRE F32ÂÌA±µ½1b */231 /* PRE :32個の連続した1b */ 236 232 for (i = 0; i < 32; i++) 237 233 phy_write_bit(true); 238 234 239 /* ST Ft[Ìæªð¦·01bÌCg*/240 phy_write_bit(false); 241 phy_write_bit(true); 242 243 /* OP FANZXíÊð¦·R[hÌCg*/244 phy_write_bit(false); 245 phy_write_bit(true); 246 247 /* PHYAD FPHY-LSIÌAhXª1ÔÌêA00001bðCgiMSB ©çCgjB*/235 /* ST :フレームの先頭を示す01bのライト */ 236 phy_write_bit(false); 237 phy_write_bit(true); 238 239 /* OP :アクセス種別を示すコードのライト */ 240 phy_write_bit(false); 241 phy_write_bit(true); 242 243 /* PHYAD :PHY-LSIのアドレスが1番の場合、00001bをライト(MSB から順次ライト)。 */ 248 244 phy_write_bit((phy_addr & 0x10) != 0); 249 245 phy_write_bit((phy_addr & 0x08) != 0); … … 252 248 phy_write_bit((phy_addr & 0x01) != 0); 253 249 254 /* REGAD FWX^AhXª1ÔÌêA00001bðCgiMSB©çCgjB*/250 /* REGAD :レジスタアドレスが1番の場合、00001bをライト(MSBから順次ライト)。 */ 255 251 phy_write_bit((reg_addr & 0x10) != 0); 256 252 phy_write_bit((reg_addr & 0x08) != 0); … … 259 255 phy_write_bit((reg_addr & 0x01) != 0); 260 256 261 /* TA FMII/RMIIC^tF[XãÅf[^ÌM³ðØèÖ¦éÔ*/262 /* 10b ðCg*/263 phy_write_bit(true); 264 phy_write_bit(false); 265 266 /* DATA F16rbgÌf[^BMSB©çCg*/257 /* TA :MII/RMIIインタフェース上でデータの送信元を切り替える時間 */ 258 /* 10bをライト */ 259 phy_write_bit(true); 260 phy_write_bit(false); 261 262 /* DATA :16ビットのデータ。MSBから順次ライト */ 267 263 for (bit = 0x8000; bit != 0; bit >>= 1) { 268 264 phy_write_bit((reg_data & bit) != 0); 269 265 } 270 266 271 /* IDLE FÌMIIÇtH[}bgüÍÜÅÌÒ@Ô*/272 /* uPÆoXðúviXÆ\Ljðs¤*/267 /* IDLE :次のMII管理フォーマット入力までの待機時間 */ 268 /* 「単独バス解放」(Xと表記)を行う */ 273 269 phy_single_rel_bus(); 274 270 } … … 277 273 278 274 /* 279 * 1 rbgf[^ÌCg275 * 1 ビットデータのライト 280 276 */ 281 277 static void phy_write_bit(bool_t bit) … … 284 280 uint32_t data = bit ? ETHERC_PIR_MDO : 0; 285 281 286 /* PHY C^tF[XWX^ÖÌCg*/282 /* PHY部インタフェースレジスタへのライト */ 287 283 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/); 288 284 289 285 for(i = ETHERC_PIR_WAIT; i > 0; i--); 290 286 291 /* PHY C^tF[XWX^ÖÌCg*/287 /* PHY部インタフェースレジスタへのライト */ 292 288 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | ETHERC_PIR_MDC); 293 289 294 290 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 295 291 296 /* PHY C^tF[XWX^ÖÌCg*/292 /* PHY部インタフェースレジスタへのライト */ 297 293 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/); 298 294 … … 301 297 302 298 /* 303 * oXðú299 * バス解放 304 300 */ 305 301 static void phy_release_bus() … … 307 303 int i; 308 304 309 /* PHY C^tF[XWX^ÖÌCg*/305 /* PHY部インタフェースレジスタへのライト */ 310 306 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 311 307 312 308 for(i = ETHERC_PIR_WAIT; i > 0; i--); 313 309 314 /* PHY C^tF[XWX^ÖÌCg*/310 /* PHY部インタフェースレジスタへのライト */ 315 311 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC); 316 312 317 313 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 318 314 319 /* PHY C^tF[XWX^ÖÌCg*/315 /* PHY部インタフェースレジスタへのライト */ 320 316 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 321 317 … … 324 320 325 321 /* 326 * 1 rbgf[^Ì[h322 * 1 ビットデータのリード 327 323 */ 328 324 static bool_t phy_read_bit() … … 333 329 for(i = ETHERC_PIR_WAIT; i > 0; i--); 334 330 335 /* PHY C^tF[XWX^ÖÌCg*/331 /* PHY部インタフェースレジスタへのライト */ 336 332 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC); 337 333 338 334 for(i = ETHERC_PIR_WAIT; i > 0; i--); 339 335 340 /* PHY C^tF[XWX^ÖÌCg*/336 /* PHY部インタフェースレジスタへのライト */ 341 337 bit = (sil_rew_mem(ETHERC_PIR) & ETHERC_PIR_MDI) != 0; 342 338 343 339 for(i = ETHERC_PIR_WAIT; i > 0; i--); 344 340 345 /* PHY C^tF[XWX^ÖÌCg*/341 /* PHY部インタフェースレジスタへのライト */ 346 342 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 347 343 … … 352 348 353 349 /* 354 * PÆoXðú350 * 単独バス解放 355 351 */ 356 352 static void phy_single_rel_bus() … … 360 356 for(i = ETHERC_PIR_WAIT; i > 0; i--); 361 357 362 /* PHY C^tF[XWX^ÖÌCg*/358 /* PHY部インタフェースレジスタへのライト */ 363 359 sil_wrw_mem(ETHERC_PIR, ETHERC_PIR_MMD | ETHERC_PIR_MDC); 364 360 365 361 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 366 362 367 /* PHY C^tF[XWX^ÖÌCg*/363 /* PHY部インタフェースレジスタへのライト */ 368 364 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 369 365 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.