- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/tinet/netdev/if_rx62n/ether_phy.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r313 r315 6 6 * Copyright (C) 2014 Cores Co., Ltd. Japan 7 7 * 8 * ä¸è¨èä½æ¨©è 9 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 10 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 11 * å¤ã»åé 12 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 13 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 14 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 15 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 16 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 17 * ç¨ã§ããå½¢ã§åé 18 å¸ããå ´åã«ã¯ï¼åé 19 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 20 * è 21 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 22 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 23 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 24 * ç¨ã§ããªãå½¢ã§åé 25 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 26 * ã¨ï¼ 27 * (a) åé 28 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 29 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 30 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 31 * (b) åé 32 å¸ã®å½¢æ 33 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 34 * å ±åãããã¨ï¼ 35 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 36 * 害ãããï¼ä¸è¨èä½æ¨©è 37 ããã³TOPPERSããã¸ã§ã¯ããå 38 責ãããã¨ï¼ 39 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 40 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 41 ããã³TOPPERSããã¸ã§ã¯ãã 42 * å 43 責ãããã¨ï¼ 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 * 免責すること. 44 30 * 45 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 46 ã 47 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 48 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 49 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 50 * ã®è²¬ä»»ãè² ããªãï¼ 31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 51 36 * 52 37 * @(#) $Id$ … … 109 94 { 110 95 #ifndef _MSC_VER 111 /* PHY ã®ãªã»ãã*/96 /* PHYのリセット */ 112 97 phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_RESET); 113 98 114 /* 500mså¾ 115 㤠*/ 116 /* tslp_tsk(500); ä¸è¦ï¼ */ 117 118 /* ãªã»ããå®äºã®ç¢ºèª */ 99 /* 500ms待つ */ 100 /* tslp_tsk(500); 不要? */ 101 102 /* リセット完了の確認 */ 119 103 while((phy_read_reg(phy_addr, PHY_CONTROL_REGISTER) & PHY_CONTROL_RESET) != 0) 120 104 tslp_tsk(1); … … 127 111 uint16_t status; 128 112 #ifndef _MSC_VER 129 /* ãªã³ã¯å®äºã®ç¢ºèª*/113 /* リンク完了の確認 */ 130 114 while((phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_LINK_STATUS) == 0) 131 115 tslp_tsk(1); 132 116 133 /* ãªã¼ããã´ã·ã¨ã¼ã·ã§ã³ã®ãç¥ãããæå¹ã«è¨å®*/117 /* オートネゴシエーションのお知らせを有効に設定 */ 134 118 phy_write_reg(phy_addr, PHY_AN_ADVERTISEMENT_REGISTER, 135 119 PHY_AN_AD_100BASE_T4 | PHY_AN_AD_100BASE_TX_FULL_DUPLEX | PHY_AN_AD_100BASE_TX_HALF_DUPLEX 136 120 | PHY_AN_AD_10BASE_T_FULL_DUPLEX | PHY_AN_AD_10BASE_T_HALF_DUPLEX | PHY_AN_AD_SELECTOR_FIELD); 137 121 138 /* ãªã¼ããã´ã·ã¨ã¼ã·ã§ã³ãæå¹ã«è¨å®*/122 /* オートネゴシエーションを有効に設定 */ 139 123 phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_SPEED_SELECT | PHY_CONTROL_A_N_ENABLE); 140 124 141 /* ãªã¼ããã´ã·ã¨ã¼ã·ã§ã³å®äºã®ç¢ºèª*/125 /* オートネゴシエーション完了の確認 */ 142 126 while((phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_A_N_COMPLETE) == 0) 143 127 tslp_tsk(1); … … 157 141 { 158 142 #ifndef _MSC_VER 159 /* ãªã³ã¯ã®ç¢ºèª*/143 /* リンクの確認 */ 160 144 return (phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_LINK_STATUS) == 0; 161 145 #else … … 169 153 int i; 170 154 171 /* PRE ï¼32åã®é£ç¶ãã1b */155 /* PRE :32個の連続した1b */ 172 156 for (i = 0; i < 32; i++) 173 157 phy_write_bit(true); 174 158 175 /* ST ï¼ãã¬ã¼ã ã®å 176 é ã示ã01bã®ã©ã¤ã */ 177 phy_write_bit(false); 178 phy_write_bit(true); 179 180 /* OP ï¼ã¢ã¯ã»ã¹ç¨®å¥ã示ãã³ã¼ãã®ã©ã¤ã */ 181 phy_write_bit(true); 182 phy_write_bit(false); 183 184 /* PHYAD ï¼PHY-LSIã®ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSB ããé 次ã©ã¤ãï¼ã */ 159 /* ST :フレームの先頭を示す01bのライト */ 160 phy_write_bit(false); 161 phy_write_bit(true); 162 163 /* OP :アクセス種別を示すコードのライト */ 164 phy_write_bit(true); 165 phy_write_bit(false); 166 167 /* PHYAD :PHY-LSIのアドレスが1番の場合、00001bをライト(MSB から順次ライト)。 */ 185 168 phy_write_bit((phy_addr & 0x10) != 0); 186 169 phy_write_bit((phy_addr & 0x08) != 0); … … 189 172 phy_write_bit((phy_addr & 0x01) != 0); 190 173 191 /* REGAD ï¼ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSBããé 次ã©ã¤ãï¼ã*/174 /* REGAD :レジスタアドレスが1番の場合、00001bをライト(MSBから順次ライト)。 */ 192 175 phy_write_bit((reg_addr & 0x10) != 0); 193 176 phy_write_bit((reg_addr & 0x08) != 0); … … 196 179 phy_write_bit((reg_addr & 0x01) != 0); 197 180 198 /* TA ï¼MII/RMIIã¤ã³ã¿ãã§ã¼ã¹ä¸ã§ãã¼ã¿ã®éä¿¡å 199 ãåãæ¿ããæé */ 200 /* ããã¹è§£æ¾ãï¼Z0ã¨è¡¨è¨ï¼ãè¡ã */ 181 /* TA :MII/RMIIインタフェース上でデータの送信元を切り替える時間 */ 182 /* 「バス解放」(Z0と表記)を行う */ 201 183 phy_release_bus(); 202 184 203 /* DATA ï¼16ãããã®ãã¼ã¿ãMSBããé 次ãªã¼ã*/185 /* DATA :16ビットのデータ。MSBから順次リード */ 204 186 for (bit = 0x8000; bit != 0; bit >>= 1) { 205 187 if(phy_read_bit()) … … 207 189 } 208 190 209 /* IDLE ï¼æ¬¡ã®MII管çãã©ã¼ãããå 210 ¥åã¾ã§ã®å¾ 211 æ©æé */ 212 /* ãã§ã«TAæã«ãã¹è§£æ¾æ¸ã¿ã§ããå¶å¾¡ä¸è¦ */ 191 /* IDLE :次のMII管理フォーマット入力までの待機時間 */ 192 /* すでにTA時にバス解放済みであり制御不要 */ 213 193 phy_release_bus(); 214 194 … … 221 201 uint16_t bit; 222 202 223 /* PRE ï¼32åã®é£ç¶ãã1b */203 /* PRE :32個の連続した1b */ 224 204 for (i = 0; i < 32; i++) 225 205 phy_write_bit(true); 226 206 227 /* ST ï¼ãã¬ã¼ã ã®å 228 é ã示ã01bã®ã©ã¤ã */ 229 phy_write_bit(false); 230 phy_write_bit(true); 231 232 /* OP ï¼ã¢ã¯ã»ã¹ç¨®å¥ã示ãã³ã¼ãã®ã©ã¤ã */ 233 phy_write_bit(false); 234 phy_write_bit(true); 235 236 /* PHYAD ï¼PHY-LSIã®ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSB ããé 次ã©ã¤ãï¼ã */ 207 /* ST :フレームの先頭を示す01bのライト */ 208 phy_write_bit(false); 209 phy_write_bit(true); 210 211 /* OP :アクセス種別を示すコードのライト */ 212 phy_write_bit(false); 213 phy_write_bit(true); 214 215 /* PHYAD :PHY-LSIのアドレスが1番の場合、00001bをライト(MSB から順次ライト)。 */ 237 216 phy_write_bit((phy_addr & 0x10) != 0); 238 217 phy_write_bit((phy_addr & 0x08) != 0); … … 241 220 phy_write_bit((phy_addr & 0x01) != 0); 242 221 243 /* REGAD ï¼ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSBããé 次ã©ã¤ãï¼ã*/222 /* REGAD :レジスタアドレスが1番の場合、00001bをライト(MSBから順次ライト)。 */ 244 223 phy_write_bit((reg_addr & 0x10) != 0); 245 224 phy_write_bit((reg_addr & 0x08) != 0); … … 248 227 phy_write_bit((reg_addr & 0x01) != 0); 249 228 250 /* TA ï¼MII/RMIIã¤ã³ã¿ãã§ã¼ã¹ä¸ã§ãã¼ã¿ã®éä¿¡å 251 ãåãæ¿ããæé */ 252 /* 10bãã©ã¤ã */ 253 phy_write_bit(true); 254 phy_write_bit(false); 255 256 /* DATA ï¼16ãããã®ãã¼ã¿ãMSBããé 次ã©ã¤ã */ 229 /* TA :MII/RMIIインタフェース上でデータの送信元を切り替える時間 */ 230 /* 10bをライト */ 231 phy_write_bit(true); 232 phy_write_bit(false); 233 234 /* DATA :16ビットのデータ。MSBから順次ライト */ 257 235 for (bit = 0x8000; bit != 0; bit >>= 1) { 258 236 phy_write_bit((reg_data & bit) != 0); 259 237 } 260 238 261 /* IDLE ï¼æ¬¡ã®MII管çãã©ã¼ãããå 262 ¥åã¾ã§ã®å¾ 263 æ©æé */ 264 /* ãåç¬ãã¹è§£æ¾ãï¼Xã¨è¡¨è¨ï¼ãè¡ã */ 239 /* IDLE :次のMII管理フォーマット入力までの待機時間 */ 240 /* 「単独バス解放」(Xと表記)を行う */ 265 241 phy_single_rel_bus(); 266 242 } … … 269 245 270 246 /* 271 * 1 ããããã¼ã¿ã®ã©ã¤ã247 * 1 ビットデータのライト 272 248 */ 273 249 static void phy_write_bit(bool_t bit) … … 276 252 uint32_t data = bit ? ETHERC_PIR_MDO : 0; 277 253 278 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/254 /* PHY部インタフェースレジスタへのライト */ 279 255 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/); 280 256 281 257 for(i = ETHERC_PIR_WAIT; i > 0; i--); 282 258 283 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/259 /* PHY部インタフェースレジスタへのライト */ 284 260 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | ETHERC_PIR_MDC); 285 261 286 262 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 287 263 288 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/264 /* PHY部インタフェースレジスタへのライト */ 289 265 sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/); 290 266 … … 293 269 294 270 /* 295 * ãã¹è§£æ¾271 * バス解放 296 272 */ 297 273 static void phy_release_bus() … … 299 275 int i; 300 276 301 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/277 /* PHY部インタフェースレジスタへのライト */ 302 278 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 303 279 304 280 for(i = ETHERC_PIR_WAIT; i > 0; i--); 305 281 306 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/282 /* PHY部インタフェースレジスタへのライト */ 307 283 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC); 308 284 309 285 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 310 286 311 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/287 /* PHY部インタフェースレジスタへのライト */ 312 288 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 313 289 … … 316 292 317 293 /* 318 * 1 ããããã¼ã¿ã®ãªã¼ã294 * 1 ビットデータのリード 319 295 */ 320 296 static bool_t phy_read_bit() … … 325 301 for(i = ETHERC_PIR_WAIT; i > 0; i--); 326 302 327 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/303 /* PHY部インタフェースレジスタへのライト */ 328 304 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC); 329 305 330 306 for(i = ETHERC_PIR_WAIT; i > 0; i--); 331 307 332 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/308 /* PHY部インタフェースレジスタへのライト */ 333 309 bit = (sil_rew_mem(ETHERC_PIR) & ETHERC_PIR_MDI) != 0; 334 310 335 311 for(i = ETHERC_PIR_WAIT; i > 0; i--); 336 312 337 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/313 /* PHY部インタフェースレジスタへのライト */ 338 314 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 339 315 … … 344 320 345 321 /* 346 * åç¬ãã¹è§£æ¾322 * 単独バス解放 347 323 */ 348 324 static void phy_single_rel_bus() … … 352 328 for(i = ETHERC_PIR_WAIT; i > 0; i--); 353 329 354 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/330 /* PHY部インタフェースレジスタへのライト */ 355 331 sil_wrw_mem(ETHERC_PIR, ETHERC_PIR_MMD | ETHERC_PIR_MDC); 356 332 357 333 for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--); 358 334 359 /* PHY é¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã*/335 /* PHY部インタフェースレジスタへのライト */ 360 336 sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/); 361 337 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.