Changeset 107 for uKadecot/trunk/uip/target/if_rx62n/ether_phy.c
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/uip/target/if_rx62n/ether_phy.c
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 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$ … … 99 95 switch(state){ 100 96 case PHY_STATE_UNINIT: 101 /* PHY ÌZbg*/97 /* PHYのリセット */ 102 98 phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_RESET); 103 99 104 /* 500ms ÒÂ*/105 /* tslp_tsk(500); svH*/100 /* 500ms待つ */ 101 /* tslp_tsk(500); 不要? */ 106 102 /* continue; */ 107 103 case PHY_STATE_RESETING: 108 /* Zbg®¹ÌmF*/104 /* リセット完了の確認 */ 109 105 if((phy_read_reg(phy_addr, PHY_CONTROL_REGISTER) & PHY_CONTROL_RESET) != 0) 110 106 return PHY_STATE_RESETING; … … 130 126 if(reset < 2){ 131 127 #endif 132 /* N®¹ÌmF*/128 /* リンク完了の確認 */ 133 129 if(!phy_is_link(phy_addr)) 134 130 return PHY_STATE_RESET; … … 137 133 reset = 0; 138 134 #endif 139 /* I[glSVG[V̨mç¹ðLøÉÝè*/135 /* オートネゴシエーションのお知らせを有効に設定 */ 140 136 phy_write_reg(phy_addr, PHY_AN_ADVERTISEMENT_REGISTER, 141 137 PHY_AN_AD_100BASE_T4 | PHY_AN_AD_100BASE_TX_FULL_DUPLEX | PHY_AN_AD_100BASE_TX_HALF_DUPLEX 142 138 | PHY_AN_AD_10BASE_T_FULL_DUPLEX | PHY_AN_AD_10BASE_T_HALF_DUPLEX | PHY_AN_AD_SELECTOR_FIELD); 143 139 144 /* I[glSVG[VðLøÉÝè*/140 /* オートネゴシエーションを有効に設定 */ 145 141 phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_SPEED_SELECT | PHY_CONTROL_A_N_ENABLE); 146 142 … … 151 147 if(reset < 2){ 152 148 #endif 153 /* I[glSVG[V®¹ÌmF*/149 /* オートネゴシエーション完了の確認 */ 154 150 if((phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_A_N_COMPLETE) == 0) 155 151 return PHY_STATE_LINKED; … … 174 170 { 175 171 #ifdef __RX 176 /* NÌmF*/172 /* リンクの確認 */ 177 173 return (phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_LINK_STATUS) != 0; 178 174 #else … … 186 182 int i; 187 183 188 /* PRE F32ÂÌA±µ½1b */184 /* PRE :32個の連続した1b */ 189 185 for (i = 0; i < 32; i++) 190 186 phy_write_bit(true); 191 187 192 /* ST Ft[Ìæªð¦·01bÌCg*/193 phy_write_bit(false); 194 phy_write_bit(true); 195 196 /* OP FANZXíÊð¦·R[hÌCg*/197 phy_write_bit(true); 198 phy_write_bit(false); 199 200 /* PHYAD FPHY-LSIÌAhXª1ÔÌêA00001bðCgiMSB ©çCgjB*/188 /* ST :フレームの先頭を示す01bのライト */ 189 phy_write_bit(false); 190 phy_write_bit(true); 191 192 /* OP :アクセス種別を示すコードのライト */ 193 phy_write_bit(true); 194 phy_write_bit(false); 195 196 /* PHYAD :PHY-LSIのアドレスが1番の場合、00001bをライト(MSB から順次ライト)。 */ 201 197 phy_write_bit((phy_addr & 0x10) != 0); 202 198 phy_write_bit((phy_addr & 0x08) != 0); … … 205 201 phy_write_bit((phy_addr & 0x01) != 0); 206 202 207 /* REGAD FWX^AhXª1ÔÌêA00001bðCgiMSB©çCgjB*/203 /* REGAD :レジスタアドレスが1番の場合、00001bをライト(MSBから順次ライト)。 */ 208 204 phy_write_bit((reg_addr & 0x10) != 0); 209 205 phy_write_bit((reg_addr & 0x08) != 0); … … 212 208 phy_write_bit((reg_addr & 0x01) != 0); 213 209 214 /* TA FMII/RMIIC^tF[XãÅf[^ÌM³ðØèÖ¦éÔ*/215 /* uoXðúviZ0Æ\Ljðs¤*/210 /* TA :MII/RMIIインタフェース上でデータの送信元を切り替える時間 */ 211 /* 「バス解放」(Z0と表記)を行う */ 216 212 phy_release_bus(); 217 213 218 /* DATA F16rbgÌf[^BMSB©ç[h*/214 /* DATA :16ビットのデータ。MSBから順次リード */ 219 215 for (bit = 0x8000; bit != 0; bit >>= 1) { 220 216 if(phy_read_bit()) … … 222 218 } 223 219 224 /* IDLE FÌMIIÇtH[}bgüÍÜÅÌÒ@Ô*/225 /* ·ÅÉTAÉoXðúÏÝÅ è§äsv*/220 /* IDLE :次のMII管理フォーマット入力までの待機時間 */ 221 /* すでにTA時にバス解放済みであり制御不要 */ 226 222 phy_release_bus(); 227 223 … … 234 230 uint16_t bit; 235 231 236 /* PRE F32ÂÌA±µ½1b */232 /* PRE :32個の連続した1b */ 237 233 for (i = 0; i < 32; i++) 238 234 phy_write_bit(true); 239 235 240 /* ST Ft[Ìæªð¦·01bÌCg*/241 phy_write_bit(false); 242 phy_write_bit(true); 243 244 /* OP FANZXíÊð¦·R[hÌCg*/245 phy_write_bit(false); 246 phy_write_bit(true); 247 248 /* PHYAD FPHY-LSIÌAhXª1ÔÌêA00001bðCgiMSB ©çCgjB*/236 /* ST :フレームの先頭を示す01bのライト */ 237 phy_write_bit(false); 238 phy_write_bit(true); 239 240 /* OP :アクセス種別を示すコードのライト */ 241 phy_write_bit(false); 242 phy_write_bit(true); 243 244 /* PHYAD :PHY-LSIのアドレスが1番の場合、00001bをライト(MSB から順次ライト)。 */ 249 245 phy_write_bit((phy_addr & 0x10) != 0); 250 246 phy_write_bit((phy_addr & 0x08) != 0); … … 253 249 phy_write_bit((phy_addr & 0x01) != 0); 254 250 255 /* REGAD FWX^AhXª1ÔÌêA00001bðCgiMSB©çCgjB*/251 /* REGAD :レジスタアドレスが1番の場合、00001bをライト(MSBから順次ライト)。 */ 256 252 phy_write_bit((reg_addr & 0x10) != 0); 257 253 phy_write_bit((reg_addr & 0x08) != 0); … … 260 256 phy_write_bit((reg_addr & 0x01) != 0); 261 257 262 /* TA FMII/RMIIC^tF[XãÅf[^ÌM³ðØèÖ¦éÔ*/263 /* 10b ðCg*/264 phy_write_bit(true); 265 phy_write_bit(false); 266 267 /* DATA F16rbgÌf[^BMSB©çCg*/258 /* TA :MII/RMIIインタフェース上でデータの送信元を切り替える時間 */ 259 /* 10bをライト */ 260 phy_write_bit(true); 261 phy_write_bit(false); 262 263 /* DATA :16ビットのデータ。MSBから順次ライト */ 268 264 for (bit = 0x8000; bit != 0; bit >>= 1) { 269 265 phy_write_bit((reg_data & bit) != 0); 270 266 } 271 267 272 /* IDLE FÌMIIÇtH[}bgüÍÜÅÌÒ@Ô*/273 /* uPÆoXðúviXÆ\Ljðs¤*/268 /* IDLE :次のMII管理フォーマット入力までの待機時間 */ 269 /* 「単独バス解放」(Xと表記)を行う */ 274 270 phy_single_rel_bus(); 275 271 } … … 278 274 279 275 /* 280 * 1 rbgf[^ÌCg276 * 1 ビットデータのライト 281 277 */ 282 278 static void phy_write_bit(bool_t bit) … … 285 281 uint32_t data = bit ? ETHERC_PIR_MDO : 0; 286 282 287 /* PHY C^tF[XWX^ÖÌCg*/283 /* PHY部インタフェースレジスタへのライト */ 288 284 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/); 289 285 290 286 for(i = ETHERC_PIR_WAIT; i > 0; i--); 291 287 292 /* PHY C^tF[XWX^ÖÌCg*/288 /* PHY部インタフェースレジスタへのライト */ 293 289 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | ETHERC_PIR_MDC); 294 290 295 291 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 296 292 297 /* PHY C^tF[XWX^ÖÌCg*/293 /* PHY部インタフェースレジスタへのライト */ 298 294 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/); 299 295 … … 302 298 303 299 /* 304 * oXðú300 * バス解放 305 301 */ 306 302 static void phy_release_bus() … … 308 304 int i; 309 305 310 /* PHY C^tF[XWX^ÖÌCg*/306 /* PHY部インタフェースレジスタへのライト */ 311 307 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 312 308 313 309 for(i = ETHERC_PIR_WAIT; i > 0; i--); 314 310 315 /* PHY C^tF[XWX^ÖÌCg*/311 /* PHY部インタフェースレジスタへのライト */ 316 312 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC); 317 313 318 314 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 319 315 320 /* PHY C^tF[XWX^ÖÌCg*/316 /* PHY部インタフェースレジスタへのライト */ 321 317 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 322 318 … … 325 321 326 322 /* 327 * 1 rbgf[^Ì[h323 * 1 ビットデータのリード 328 324 */ 329 325 static bool_t phy_read_bit() … … 334 330 for(i = ETHERC_PIR_WAIT; i > 0; i--); 335 331 336 /* PHY C^tF[XWX^ÖÌCg*/332 /* PHY部インタフェースレジスタへのライト */ 337 333 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC); 338 334 339 335 for(i = ETHERC_PIR_WAIT; i > 0; i--); 340 336 341 /* PHY C^tF[XWX^ÖÌCg*/337 /* PHY部インタフェースレジスタへのライト */ 342 338 bit = (sil_rew_mem(ETHERC_PIR) & ETHERC_PIR_MDI) != 0; 343 339 344 340 for(i = ETHERC_PIR_WAIT; i > 0; i--); 345 341 346 /* PHY C^tF[XWX^ÖÌCg*/342 /* PHY部インタフェースレジスタへのライト */ 347 343 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 348 344 … … 353 349 354 350 /* 355 * PÆoXðú351 * 単独バス解放 356 352 */ 357 353 static void phy_single_rel_bus() … … 361 357 for(i = ETHERC_PIR_WAIT; i > 0; i--); 362 358 363 /* PHY C^tF[XWX^ÖÌCg*/359 /* PHY部インタフェースレジスタへのライト */ 364 360 sil_wrw_mem(ETHERC_PIR, ETHERC_PIR_MMD | ETHERC_PIR_MDC); 365 361 366 362 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 367 363 368 /* PHY C^tF[XWX^ÖÌCg*/364 /* PHY部インタフェースレジスタへのライト */ 369 365 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 370 366 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.