Changeset 389 for azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 4 * Copyright (C) 2014-2018 Cores Co., Ltd. Japan 5 5 * 6 * ä¸è¨èä½æ¨©è 7 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 8 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 9 * å¤ã»åé 10 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 11 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 12 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 13 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 14 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 15 * ç¨ã§ããå½¢ã§åé 16 å¸ããå ´åã«ã¯ï¼åé 17 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 18 * è 19 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 20 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 21 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 22 * ç¨ã§ããªãå½¢ã§åé 23 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 24 * ã¨ï¼ 25 * (a) åé 26 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 27 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 28 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 29 * (b) åé 30 å¸ã®å½¢æ 31 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 32 * å ±åãããã¨ï¼ 33 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 34 * 害ãããï¼ä¸è¨èä½æ¨©è 35 ããã³TOPPERSããã¸ã§ã¯ããå 36 責ãããã¨ï¼ 37 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 38 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ãã 40 * å 41 責ãããã¨ï¼ 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 11 * スコード中に含まれていること. 12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 15 * の無保証規定を掲載すること. 16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 18 * と. 19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 20 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 22 * 報告すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 * 免責すること. 42 28 * 43 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 44 ã 45 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 46 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 47 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 48 * ã®è²¬ä»»ãè² ããªãï¼ 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 49 34 * 50 35 * @(#) $Id$ … … 64 49 #include "scif.h" 65 50 66 /* PWM åºå(490Hz) */51 /* PWM出力(490Hz) */ 67 52 #define TPU_BASE_COUNTER (48000000 / 4 / 490) 68 53 … … 136 121 return E_OK; 137 122 138 /* æ±ç¨å 139 ¥åºåãã¼ãã«è¨å® */ 123 /* 汎用入出力ポートに設定 */ 140 124 switch (pin) { 141 125 case D0: … … 175 159 } 176 160 177 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ã許å¯*/161 /* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */ 178 162 sil_wrb_mem(MPC_PWPR_ADDR, 0x00); 179 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ã許å¯*/163 /* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */ 180 164 sil_wrb_mem(MPC_PWPR_ADDR, 0x40); 181 165 … … 184 168 case D0: 185 169 if (gpio) { 186 /* P21 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P21ã¨ãã*/170 /* P21端子機能制御レジスタ P21とする */ 187 171 sil_wrb_mem(MPC_P21PFS_ADDR, 0x00); 188 172 } 189 173 else { 190 /* P21 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCA3ã¨ãã*/174 /* P21端子機能制御レジスタ TIOCA3とする */ 191 175 sil_wrb_mem(MPC_P21PFS_ADDR, 0x03); 192 176 } … … 196 180 case D1: 197 181 if (gpio) { 198 /* P20 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P20ã¨ãã*/182 /* P20端子機能制御レジスタ P20とする */ 199 183 sil_wrb_mem(MPC_P20PFS_ADDR, 0x00); 200 184 } 201 185 else { 202 /* P20 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCB3ã¨ãã*/186 /* P20端子機能制御レジスタ TIOCB3とする */ 203 187 sil_wrb_mem(MPC_P20PFS_ADDR, 0x03); 204 188 } … … 208 192 case D2: 209 193 if (gpio) { 210 /* P22 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P22ã¨ãã*/194 /* P22端子機能制御レジスタ P22とする */ 211 195 sil_wrb_mem(MPC_P22PFS_ADDR, 0x00); 212 196 } 213 197 else { 214 /* P22 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCC3ã¨ãã*/198 /* P22端子機能制御レジスタ TIOCC3とする */ 215 199 sil_wrb_mem(MPC_P22PFS_ADDR, 0x03); 216 200 } … … 220 204 case D3: 221 205 if (gpio) { 222 /* P23 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P23ã¨ãã*/206 /* P23端子機能制御レジスタ P23とする */ 223 207 sil_wrb_mem(MPC_P23PFS_ADDR, 0x00); 224 208 } 225 209 else { 226 /* P23 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCD3ã¨ãã*/210 /* P23端子機能制御レジスタ TIOCD3とする */ 227 211 sil_wrb_mem(MPC_P23PFS_ADDR, 0x03); 228 212 } … … 232 216 case D4: 233 217 if (gpio) { 234 /* P24 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P24ã¨ãã*/218 /* P24端子機能制御レジスタ P24とする */ 235 219 sil_wrb_mem(MPC_P24PFS_ADDR, 0x00); 236 220 } 237 221 else { 238 /* P24 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCB4ã¨ãã*/222 /* P24端子機能制御レジスタ TIOCB4とする */ 239 223 sil_wrb_mem(MPC_P24PFS_ADDR, 0x03); 240 224 } … … 244 228 case D5: 245 229 if (gpio) { 246 /* P25 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P25ã¨ãã*/230 /* P25端子機能制御レジスタ P25とする */ 247 231 sil_wrb_mem(MPC_P25PFS_ADDR, 0x00); 248 232 } 249 233 else { 250 /* P25 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCA4ã¨ãã*/234 /* P25端子機能制御レジスタ TIOCA4とする */ 251 235 sil_wrb_mem(MPC_P25PFS_ADDR, 0x03); 252 236 } … … 256 240 case D6: 257 241 if (gpio) { 258 /* P32 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P32ã¨ãã*/242 /* P32端子機能制御レジスタ P32とする */ 259 243 sil_wrb_mem(MPC_P32PFS_ADDR, 0x00); 260 244 } 261 245 else { 262 /* P32 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCC0ã¨ãã*/246 /* P32端子機能制御レジスタ TIOCC0とする */ 263 247 sil_wrb_mem(MPC_P32PFS_ADDR, 0x03); 264 248 } … … 268 252 case D7: 269 253 if (gpio) { 270 /* P33 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P33ã¨ãã*/254 /* P33端子機能制御レジスタ P33とする */ 271 255 sil_wrb_mem(MPC_P33PFS_ADDR, 0x00); 272 256 } 273 257 else { 274 /* P33 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCD0ã¨ãã*/258 /* P33端子機能制御レジスタ TIOCD0とする */ 275 259 sil_wrb_mem(MPC_P33PFS_ADDR, 0x03); 276 260 } … … 281 265 } 282 266 283 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® æ¸ãè¾¼ã¿ãç¦æ¢*/267 /* 書き込みプロテクトレジスタの設定 書き込みを禁止 */ 284 268 sil_wrb_mem(MPC_PWPR_ADDR, 0x80); 285 269 286 /* æ©è½ãã¼ãã«è¨å®*/270 /* 機能ポートに設定 */ 287 271 if (!gpio) { 288 272 switch (pin) { … … 427 411 void gpio_mode(gpio_t *obj, PinMode mode) 428 412 { 429 /* æ±ç¨å 430 ¥åºåãã¼ãã«è¨å® */ 413 /* 汎用入出力ポートに設定 */ 431 414 change_pin_function(obj->pin, true); 432 415 … … 438 421 void gpio_dir(gpio_t *obj, PinDirection direction) 439 422 { 440 /* æ±ç¨å 441 ¥åºåãã¼ãã«è¨å® */ 423 /* 汎用入出力ポートに設定 */ 442 424 change_pin_function(obj->pin, true); 443 425 … … 614 596 { 615 597 /* 616 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å®(S12AD)598 * モジュールストップ機能の設定(S12AD) 617 599 */ 618 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* æ¸è¾¼ã¿è¨±å¯*/600 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* 書込み許可 */ 619 601 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 620 602 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA17_BIT); 621 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* æ¸è¾¼ã¿ç¦æ¢ */ 622 623 /* 12bitADCåæå */ 624 sil_wrh_mem(S12AD_ADEXICR_ADDR, 0x0000); /* 温度ã»ã³ãµåºåãå 625 é¨åºæºé»å§éé¸æ */ 626 sil_wrh_mem(S12AD_ADANS0_ADDR, 0x00FF); /* å¤æãã¼ãAN000ï½AN007é¸æãAN008ï½AN015éé¸æ */ 627 sil_wrh_mem(S12AD_ADANS1_ADDR, 0x0000); /* å¤æãã¼ãAN016ï½AN020éé¸æ */ 603 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* 書込み禁止 */ 604 605 /* 12bitADC初期化 */ 606 sil_wrh_mem(S12AD_ADEXICR_ADDR, 0x0000); /* 温度センサ出力、内部基準電圧非選択 */ 607 sil_wrh_mem(S12AD_ADANS0_ADDR, 0x00FF); /* 変換ポートAN000~AN007選択、AN008~AN015非選択 */ 608 sil_wrh_mem(S12AD_ADANS1_ADDR, 0x0000); /* 変換ポートAN016~AN020非選択 */ 628 609 } 629 610 … … 687 668 int i; 688 669 689 /* ADC ã®å¤æçµæåå¾*/670 /* ADCの変換結果取得 */ 690 671 if ((sil_reb_mem(S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0) { 691 672 for (i = 0; i < 8; i++) { … … 701 682 } 702 683 703 /* å¤æéå§ï¼ã·ã³ã°ã«ã¹ãã£ã³ã¢ã¼ãï¼*/684 /* 変換開始(シングルスキャンモード) */ 704 685 sil_wrb_mem(S12AD_ADCSR_ADDR, S12AD_ADCSR_ADST_BIT); 705 686 } … … 716 697 void pwmout_init(pwmout_t* obj, PinName pin) 717 698 { 718 /* PWM åºå(490Hz) */719 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* æ¸è¾¼ã¿è¨±å¯*/699 /* PWM出力(490Hz) */ 700 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* 書込み許可 */ 720 701 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 721 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA13_BIT); /* TPU0 ï½TPU5 */722 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/723 724 /* ã«ã¦ã³ã¿ã¯ããã¯ã®é¸æãã«ã¦ã³ã¿ã¯ãªã¢è¦å ã®é¸æ*/702 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA13_BIT); /* TPU0~TPU5 */ 703 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* 書込み禁止 */ 704 705 /* カウンタクロックの選択、カウンタクリア要因の選択 */ 725 706 sil_wrb_mem(TPU0_TCR_ADDR, (1 << TPU_TCR_TPSC_OFFSET) | (1 << TPU_TCR_CKEG_OFFSET) 726 707 | (1 << TPU_TCR_CCLR_OFFSET)); … … 729 710 sil_wrb_mem(TPU4_TCR_ADDR, (1 << TPU_TCR_TPSC_OFFSET) | (1 << TPU_TCR_CKEG_OFFSET) 730 711 | (3 << TPU_TCR_CCLR_OFFSET)); 731 /* 波形åºåã¬ãã«ã®é¸æ*/712 /* 波形出力レベルの選択 */ 732 713 sil_wrb_mem(TPU0_TIORL_ADDR, (5 << TPU_TIORL_IOC_OFFSET) | (5 << TPU_TIORL_IOD_OFFSET)); 733 714 sil_wrb_mem(TPU3_TIORH_ADDR, (5 << TPU_TIORH_IOA_OFFSET) | (5 << TPU_TIORH_IOB_OFFSET)); 734 715 sil_wrb_mem(TPU3_TIORL_ADDR, (5 << TPU_TIORL_IOC_OFFSET) | (5 << TPU_TIORL_IOD_OFFSET)); 735 716 sil_wrb_mem(TPU4_TIOR_ADDR, (5 << TPU_TIOR_IOA_OFFSET) | (5 << TPU_TIOR_IOB_OFFSET)); 736 /* TGRy ã®è¨å®*/717 /* TGRyの設定 */ 737 718 sil_wrh_mem(TPU0_TGRA_ADDR, TPU_BASE_COUNTER); 738 719 sil_wrh_mem(TPU0_TGRC_ADDR, 0); … … 744 725 sil_wrh_mem(TPU4_TGRA_ADDR, 0); 745 726 sil_wrh_mem(TPU4_TGRB_ADDR, 0); 746 /* PWM ã¢ã¼ã2ã®è¨å®*/727 /* PWMモード2の設定 */ 747 728 sil_wrb_mem(TPU0_TMDR_ADDR, 3); 748 729 sil_wrb_mem(TPU3_TMDR_ADDR, 3); 749 730 sil_wrb_mem(TPU4_TMDR_ADDR, 3); 750 /* åæåä½è¨å®*/731 /* 同期動作設定 */ 751 732 sil_wrb_mem(TPUA_TSYR_ADDR, TPU_TSYR_SYNC0_BIT | TPU_TSYR_SYNC3_BIT | TPU_TSYR_SYNC4_BIT); 752 /* ã«ã¦ã³ãåä½éå§*/733 /* カウント動作開始 */ 753 734 sil_wrb_mem(TPUA_TSTR_ADDR, TPU_TSTR_CST0_BIT | TPU_TSTR_CST3_BIT | TPU_TSTR_CST4_BIT); 754 735 } … … 756 737 void pwmout_free(pwmout_t* obj) 757 738 { 758 /* ã«ã¦ã³ãåä½çµäº*/739 /* カウント動作終了 */ 759 740 sil_wrb_mem(TPUA_TSTR_ADDR, 0); 760 741 } … … 778 759 { 779 760 /* 780 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å®761 * モジュールストップ機能の設定 781 762 */ 782 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* æ¸è¾¼ã¿è¨±å¯*/763 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* 書込み許可 */ 783 764 sil_wrw_mem(SYSTEM_MSTPCRB_ADDR, 784 765 sil_rew_mem(SYSTEM_MSTPCRB_ADDR) & ~SCI_MSTPCRB_BIT(base_address)); 785 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* æ¸è¾¼ã¿ç¦æ¢ */ 786 787 /* éåä¿¡ç¦æ¢, SCKn端åã¯å 788 ¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */ 766 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* 書込み禁止 */ 767 768 /* 送受信禁止, SCKn端子は入出力ポートとして使用 */ 789 769 sil_wrb_mem(SCI_SCR(base_address), 0x00U); 790 770 … … 794 774 switch (mode) { 795 775 case sciSerial: 796 /* HIGHç¶æ 797 ã«è¨å® */ 776 /* HIGH状態に設定 */ 798 777 sil_wrb_mem(PORT2_PODR_ADDR, 799 778 sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT); 800 /* TXåºå/RXå 801 ¥åãã¼ãè¨å® */ 779 /* TX出力/RX入力ポート設定 */ 802 780 sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT) & ~PORT_PDR_B1_BIT); 803 /* ãã«ã¢ããç¡å¹*/781 /* プルアップ無効 */ 804 782 sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B1_BIT)); 805 783 /* RX CMOS */ … … 807 785 (sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK)) 808 786 | (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm1_OFFSET)); 809 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/787 /* 周辺機能として使用 */ 810 788 sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT); 811 789 break; 812 790 case sciI2C: 813 /* HIGHç¶æ 814 ã«è¨å® */ 791 /* HIGH状態に設定 */ 815 792 sil_wrb_mem(PORT2_PODR_ADDR, 816 793 sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT); 817 /* SCL,SDA åºåãã¼ãè¨å®*/794 /* SCL,SDA 出力ポート設定 */ 818 795 sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B1_BIT); 819 /* ãã«ã¢ããæå¹*/796 /* プルアップ有効 */ 820 797 sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) | PORT_PCR_B0_BIT | PORT_PCR_B1_BIT); 821 /* N ãã£ãã«ãªã¼ãã³ãã¬ã¤ã³*/798 /* Nチャネルオープンドレイン */ 822 799 sil_wrb_mem(PORT2_ODR0_ADDR, 823 800 (sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK)) 824 801 | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm1_OFFSET)); 825 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/802 /* 周辺機能として使用 */ 826 803 sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT); 827 804 break; 828 805 case sciSPIM: 829 /* HIGHç¶æ 830 ã«è¨å® */ 806 /* HIGH状態に設定 */ 831 807 sil_wrb_mem(PORT2_PODR_ADDR, 832 808 sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT | PORT_PODR_B2_BIT); 833 /* MOSIåºå/MISOå 834 ¥å/SCKå 835 ¥åºåãã¼ãè¨å® */ 809 /* MOSI出力/MISO入力/SCK入出力ポート設定 */ 836 810 sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B2_BIT) & ~PORT_PDR_B1_BIT); 837 /* ãã«ã¢ããç¡å¹*/811 /* プルアップ無効 */ 838 812 sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B1_BIT | PORT_PCR_B2_BIT)); 839 813 /* MISO CMOS */ … … 841 815 (sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK | PORT_ODR_Pm2_MASK)) 842 816 | (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm1_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET)); 843 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/817 /* 周辺機能として使用 */ 844 818 sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT | PORT_PMR_B2_BIT); 845 819 break; 846 820 } 847 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ã許å¯*/821 /* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */ 848 822 sil_wrb_mem(MPC_PWPR_ADDR, 0x00); 849 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ã許å¯*/823 /* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */ 850 824 sil_wrb_mem(MPC_PWPR_ADDR, 0x40); 851 825 852 /* P20 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD0/SMOSI0/SSDA0ã¨ãã*/826 /* P20端子機能制御レジスタ TXD0/SMOSI0/SSDA0とする */ 853 827 sil_wrb_mem(MPC_P20PFS_ADDR, 0x0A); 854 /* P21 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD0/SMISO0/SSCL0ã¨ãã*/828 /* P21端子機能制御レジスタ RXD0/SMISO0/SSCL0とする */ 855 829 sil_wrb_mem(MPC_P21PFS_ADDR, 0x0A); 856 830 if (mode == sciSPIM) { 857 /* P22 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK0ã¨ãã*/831 /* P22端子機能制御レジスタ SCK0とする */ 858 832 sil_wrb_mem(MPC_P22PFS_ADDR, 0x0A); 859 833 } 860 834 861 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® æ¸ãè¾¼ã¿ãç¦æ¢*/835 /* 書き込みプロテクトレジスタの設定 書き込みを禁止 */ 862 836 sil_wrb_mem(MPC_PWPR_ADDR, 0x80); 863 837 break; … … 866 840 switch (mode) { 867 841 case sciSerial: 868 /* HIGHç¶æ 869 ã«è¨å® */ 842 /* HIGH状態に設定 */ 870 843 sil_wrb_mem(PORT5_PODR_ADDR, 871 844 sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B2_BIT); 872 /* TXåºå/RXå 873 ¥åãã¼ãè¨å® */ 845 /* TX出力/RX入力ポート設定 */ 874 846 sil_wrb_mem(PORT5_PDR_ADDR, (sil_reb_mem(PORT5_PDR_ADDR) | PORT_PDR_B0_BIT) & ~PORT_PDR_B2_BIT); 875 /* ãã«ã¢ããç¡å¹*/847 /* プルアップ無効 */ 876 848 sil_wrb_mem(PORT5_PCR_ADDR, sil_reb_mem(PORT5_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B2_BIT)); 877 849 /* RX CMOS */ … … 879 851 (sil_reb_mem(PORT5_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm2_MASK)) 880 852 | (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET)); 881 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/853 /* 周辺機能として使用 */ 882 854 sil_wrb_mem(PORT5_PMR_ADDR, sil_reb_mem(PORT5_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B2_BIT); 883 855 break; 884 856 case sciI2C: 885 /* HIGHç¶æ 886 ã«è¨å® */ 857 /* HIGH状態に設定 */ 887 858 sil_wrb_mem(PORT5_PODR_ADDR, 888 859 sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B2_BIT); 889 /* SCL,SDA åºåãã¼ãè¨å®*/860 /* SCL,SDA 出力ポート設定 */ 890 861 sil_wrb_mem(PORT5_PDR_ADDR, sil_reb_mem(PORT5_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B2_BIT); 891 /* ãã«ã¢ããæå¹*/862 /* プルアップ有効 */ 892 863 sil_wrb_mem(PORT5_PCR_ADDR, sil_reb_mem(PORT5_PCR_ADDR) | PORT_PCR_B0_BIT | PORT_PCR_B2_BIT); 893 /* N ãã£ãã«ãªã¼ãã³ãã¬ã¤ã³*/864 /* Nチャネルオープンドレイン */ 894 865 sil_wrb_mem(PORT5_ODR0_ADDR, 895 866 (sil_reb_mem(PORT5_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm2_MASK)) 896 867 | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm2_OFFSET)); 897 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/868 /* 周辺機能として使用 */ 898 869 sil_wrb_mem(PORT5_PMR_ADDR, sil_reb_mem(PORT5_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B2_BIT); 899 870 break; 900 871 case sciSPIM: 901 /* HIGHç¶æ 902 ã«è¨å® */ 872 /* HIGH状態に設定 */ 903 873 sil_wrb_mem(PORT5_PODR_ADDR, 904 874 sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT | PORT_PODR_B2_BIT); 905 /* MOSIåºå/MISOå 906 ¥å/SCKå 907 ¥åºåãã¼ãè¨å® */ 875 /* MOSI出力/MISO入力/SCK入出力ポート設定 */ 908 876 sil_wrb_mem(PORT5_PDR_ADDR, (sil_reb_mem(PORT5_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B1_BIT) & ~PORT_PDR_B2_BIT); 909 /* ãã«ã¢ããç¡å¹*/877 /* プルアップ無効 */ 910 878 sil_wrb_mem(PORT5_PCR_ADDR, sil_reb_mem(PORT5_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B1_BIT | PORT_PCR_B2_BIT)); 911 879 /* MISO CMOS */ … … 913 881 (sil_reb_mem(PORT5_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK | PORT_ODR_Pm2_MASK)) 914 882 | (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm1_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET)); 915 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/883 /* 周辺機能として使用 */ 916 884 sil_wrb_mem(PORT5_PMR_ADDR, sil_reb_mem(PORT5_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT | PORT_PMR_B1_BIT | PORT_PMR_B2_BIT); 917 885 break; 918 886 } 919 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ã許å¯*/887 /* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */ 920 888 sil_wrb_mem(MPC_PWPR_ADDR, 0x00); 921 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ã許å¯*/889 /* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */ 922 890 sil_wrb_mem(MPC_PWPR_ADDR, 0x40); 923 891 924 /* P50 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSDA2ã¨ãã*/892 /* P50端子機能制御レジスタ SSDA2とする */ 925 893 sil_wrb_mem(MPC_P50PFS_ADDR, 0x0A); 926 /* P52 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSCL2ã¨ãã*/894 /* P52端子機能制御レジスタ SSCL2とする */ 927 895 sil_wrb_mem(MPC_P52PFS_ADDR, 0x0A); 928 896 if (mode == sciSPIM) { 929 /* P51 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK2ã¨ãã*/897 /* P51端子機能制御レジスタ SCK2とする */ 930 898 sil_wrb_mem(MPC_P51PFS_ADDR, 0x0A); 931 899 } 932 900 933 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® æ¸ãè¾¼ã¿ãç¦æ¢*/901 /* 書き込みプロテクトレジスタの設定 書き込みを禁止 */ 934 902 sil_wrb_mem(MPC_PWPR_ADDR, 0x80); 935 903 break; … … 938 906 switch (mode) { 939 907 case sciSerial: 940 /* HIGHç¶æ 941 ã«è¨å® */ 908 /* HIGH状態に設定 */ 942 909 sil_wrb_mem(PORT2_PODR_ADDR, 943 910 sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B5_BIT); 944 /* TXåºå/RXå 945 ¥åãã¼ãè¨å® */ 911 /* TX出力/RX入力ポート設定 */ 946 912 sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B3_BIT) & ~PORT_PDR_B5_BIT); 947 /* ãã«ã¢ããç¡å¹*/913 /* プルアップ無効 */ 948 914 sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B3_BIT | PORT_PCR_B5_BIT)); 949 915 /* RX CMOS */ … … 951 917 (sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm3_MASK | PORT_ODR_Pm5_MASK)) 952 918 | (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm5_OFFSET)); 953 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/919 /* 周辺機能として使用 */ 954 920 sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B3_BIT | PORT_PMR_B5_BIT); 955 921 break; 956 922 case sciI2C: 957 /* HIGHç¶æ 958 ã«è¨å® */ 923 /* HIGH状態に設定 */ 959 924 sil_wrb_mem(PORT2_PODR_ADDR, 960 925 sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B5_BIT); 961 /* SCL,SDA åºåãã¼ãè¨å®*/926 /* SCL,SDA 出力ポート設定 */ 962 927 sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B3_BIT | PORT_PDR_B5_BIT); 963 /* ãã«ã¢ããæå¹*/928 /* プルアップ有効 */ 964 929 sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) | PORT_PCR_B3_BIT | PORT_PCR_B5_BIT); 965 /* N ãã£ãã«ãªã¼ãã³ãã¬ã¤ã³*/930 /* Nチャネルオープンドレイン */ 966 931 sil_wrb_mem(PORT2_ODR0_ADDR, 967 932 (sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm3_MASK | PORT_ODR_Pm5_MASK)) 968 933 | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm5_OFFSET)); 969 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/934 /* 周辺機能として使用 */ 970 935 sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B3_BIT | PORT_PMR_B5_BIT); 971 936 break; 972 937 case sciSPIM: 973 /* HIGHç¶æ 974 ã«è¨å® */ 938 /* HIGH状態に設定 */ 975 939 sil_wrb_mem(PORT2_PODR_ADDR, 976 940 sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B4_BIT | PORT_PODR_B5_BIT); 977 /* MOSIåºå/MISOå 978 ¥å/SCKå 979 ¥åºåãã¼ãè¨å® */ 941 /* MOSI出力/MISO入力/SCK入出力ポート設定 */ 980 942 sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B3_BIT | PORT_PDR_B4_BIT) & ~PORT_PDR_B5_BIT); 981 /* ãã«ã¢ããç¡å¹*/943 /* プルアップ無効 */ 982 944 sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B3_BIT | PORT_PCR_B4_BIT | PORT_PCR_B5_BIT)); 983 945 /* MISO CMOS */ … … 985 947 (sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm3_MASK | PORT_ODR_Pm4_MASK | PORT_ODR_Pm5_MASK)) 986 948 | (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm4_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm5_OFFSET)); 987 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/949 /* 周辺機能として使用 */ 988 950 sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B3_BIT | PORT_PMR_B4_BIT | PORT_PMR_B4_BIT | PORT_PMR_B5_BIT); 989 951 break; 990 952 } 991 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ã許å¯*/953 /* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */ 992 954 sil_wrb_mem(MPC_PWPR_ADDR, 0x00); 993 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ã許å¯*/955 /* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */ 994 956 sil_wrb_mem(MPC_PWPR_ADDR, 0x40); 995 957 996 /* P23 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSDA2ã¨ãã*/958 /* P23端子機能制御レジスタ SSDA2とする */ 997 959 sil_wrb_mem(MPC_P23PFS_ADDR, 0x0A); 998 /* P25 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSCL2ã¨ãã*/960 /* P25端子機能制御レジスタ SSCL2とする */ 999 961 sil_wrb_mem(MPC_P25PFS_ADDR, 0x0A); 1000 962 if (mode == sciSPIM) { 1001 /* P24 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK2ã¨ãã*/963 /* P24端子機能制御レジスタ SCK2とする */ 1002 964 sil_wrb_mem(MPC_P24PFS_ADDR, 0x0A); 1003 965 } 1004 966 1005 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® æ¸ãè¾¼ã¿ãç¦æ¢*/967 /* 書き込みプロテクトレジスタの設定 書き込みを禁止 */ 1006 968 sil_wrb_mem(MPC_PWPR_ADDR, 0x80); 1007 969 break; … … 1010 972 switch (mode) { 1011 973 case sciSerial: 1012 /* HIGHç¶æ 1013 ã«è¨å® */ 974 /* HIGH状態に設定 */ 1014 975 sil_wrb_mem(PORT3_PODR_ADDR, 1015 976 sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT); 1016 /* TXåºå/RXå 1017 ¥åãã¼ãè¨å® */ 977 /* TX出力/RX入力ポート設定 */ 1018 978 sil_wrb_mem(PORT3_PDR_ADDR, (sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B2_BIT) & ~PORT_PDR_B3_BIT); 1019 /* ãã«ã¢ããç¡å¹*/979 /* プルアップ無効 */ 1020 980 sil_wrb_mem(PORT3_PCR_ADDR, sil_reb_mem(PORT3_PCR_ADDR) & ~(PORT_PCR_B2_BIT | PORT_PCR_B3_BIT)); 1021 981 /* RX CMOS */ … … 1023 983 (sil_reb_mem(PORT3_ODR0_ADDR) & ~(PORT_ODR_Pm2_MASK | PORT_ODR_Pm3_MASK)) 1024 984 | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET)); 1025 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/985 /* 周辺機能として使用 */ 1026 986 sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B2_BIT | PORT_PMR_B3_BIT); 1027 987 break; 1028 988 case sciI2C: 1029 /* HIGHç¶æ 1030 ã«è¨å® */ 989 /* HIGH状態に設定 */ 1031 990 sil_wrb_mem(PORT3_PODR_ADDR, 1032 991 sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT); 1033 /* SCL,SDA åºåãã¼ãè¨å®*/992 /* SCL,SDA 出力ポート設定 */ 1034 993 sil_wrb_mem(PORT3_PDR_ADDR, sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B2_BIT | PORT_PDR_B3_BIT); 1035 /* ãã«ã¢ããæå¹*/994 /* プルアップ有効 */ 1036 995 sil_wrb_mem(PORT3_PCR_ADDR, sil_reb_mem(PORT3_PCR_ADDR) | PORT_PCR_B2_BIT | PORT_PCR_B3_BIT); 1037 /* N ãã£ãã«ãªã¼ãã³ãã¬ã¤ã³*/996 /* Nチャネルオープンドレイン */ 1038 997 sil_wrb_mem(PORT3_ODR0_ADDR, 1039 998 (sil_reb_mem(PORT3_ODR0_ADDR) & ~(PORT_ODR_Pm2_MASK | PORT_ODR_Pm3_MASK)) 1040 999 | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm2_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm3_OFFSET)); 1041 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/1000 /* 周辺機能として使用 */ 1042 1001 sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B2_BIT | PORT_PMR_B3_BIT); 1043 1002 break; 1044 1003 case sciSPIM: 1045 /* HIGHç¶æ 1046 ã«è¨å® */ 1004 /* HIGH状態に設定 */ 1047 1005 sil_wrb_mem(PORT3_PODR_ADDR, 1048 1006 sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT | PORT_PODR_B4_BIT); 1049 /* MOSIåºå/MISOå 1050 ¥å/SCKå 1051 ¥åºåãã¼ãè¨å® */ 1007 /* MOSI出力/MISO入力/SCK入出力ポート設定 */ 1052 1008 sil_wrb_mem(PORT3_PDR_ADDR, (sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B2_BIT | PORT_PDR_B4_BIT) & ~PORT_PDR_B3_BIT); 1053 /* ãã«ã¢ããç¡å¹*/1009 /* プルアップ無効 */ 1054 1010 sil_wrb_mem(PORT3_PCR_ADDR, sil_reb_mem(PORT3_PCR_ADDR) & ~(PORT_PCR_B2_BIT | PORT_PCR_B3_BIT | PORT_PCR_B4_BIT)); 1055 1011 /* MISO CMOS */ … … 1057 1013 (sil_reb_mem(PORT3_ODR0_ADDR) & ~(PORT_ODR_Pm2_MASK | PORT_ODR_Pm3_MASK | PORT_ODR_Pm4_MASK)) 1058 1014 | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm4_OFFSET)); 1059 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/1015 /* 周辺機能として使用 */ 1060 1016 sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B2_BIT | PORT_PMR_B3_BIT | PORT_PMR_B4_BIT); 1061 1017 break; 1062 1018 } 1063 1019 1064 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ã許å¯*/1020 /* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */ 1065 1021 sil_wrb_mem(MPC_PWPR_ADDR, 0x00); 1066 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ã許å¯*/1022 /* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */ 1067 1023 sil_wrb_mem(MPC_PWPR_ADDR, 0x40); 1068 1024 1069 /* P32 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD6/SMOSI6/SSDA6ã¨ãã*/1025 /* P32端子機能制御レジスタ TXD6/SMOSI6/SSDA6とする */ 1070 1026 sil_wrb_mem(MPC_P32PFS_ADDR, 0x0A); 1071 /* P33 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD6/SMISO6/SSCL6ã¨ãã*/1027 /* P33端子機能制御レジスタ RXD6/SMISO6/SSCL6とする */ 1072 1028 sil_wrb_mem(MPC_P33PFS_ADDR, 0x0A); 1073 1029 if (mode == sciSPIM) { 1074 /* P34 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK6ã¨ãã*/1030 /* P34端子機能制御レジスタ SCK6とする */ 1075 1031 sil_wrb_mem(MPC_P34PFS_ADDR, 0x0A); 1076 1032 } 1077 1033 1078 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® æ¸ãè¾¼ã¿ãç¦æ¢*/1034 /* 書き込みプロテクトレジスタの設定 書き込みを禁止 */ 1079 1035 sil_wrb_mem(MPC_PWPR_ADDR, 0x80); 1080 1036 break; … … 1083 1039 switch (mode) { 1084 1040 case sciSerial: 1085 /* HIGHç¶æ 1086 ã«è¨å® */ 1041 /* HIGH状態に設定 */ 1087 1042 sil_wrb_mem(PORTC_PODR_ADDR, 1088 1043 sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B6_BIT | PORT_PODR_B7_BIT); 1089 /* TXåºå/RXå 1090 ¥åãã¼ãè¨å® */ 1044 /* TX出力/RX入力ポート設定 */ 1091 1045 sil_wrb_mem(PORTC_PDR_ADDR, (sil_reb_mem(PORTC_PDR_ADDR) | PORT_PDR_B6_BIT) & ~PORT_PDR_B7_BIT); 1092 /* ãã«ã¢ããç¡å¹*/1046 /* プルアップ無効 */ 1093 1047 sil_wrb_mem(PORTC_PCR_ADDR, sil_reb_mem(PORTC_PCR_ADDR) & ~(PORT_PCR_B6_BIT | PORT_PCR_B7_BIT)); 1094 1048 /* RX CMOS */ … … 1096 1050 (sil_reb_mem(PORTC_ODR0_ADDR) & ~(PORT_ODR_Pm6_MASK | PORT_ODR_Pm7_MASK)) 1097 1051 | (PORT_ODR_CMOS << PORT_ODR_Pm6_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm7_OFFSET)); 1098 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/1052 /* 周辺機能として使用 */ 1099 1053 sil_wrb_mem(PORTC_PMR_ADDR, sil_reb_mem(PORTC_PMR_ADDR) | PORT_PMR_B6_BIT | PORT_PMR_B7_BIT); 1100 1054 break; 1101 1055 case sciI2C: 1102 /* HIGHç¶æ 1103 ã«è¨å® */ 1056 /* HIGH状態に設定 */ 1104 1057 sil_wrb_mem(PORTC_PODR_ADDR, 1105 1058 sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B6_BIT | PORT_PODR_B7_BIT); 1106 /* SCL,SDA åºåãã¼ãè¨å®*/1059 /* SCL,SDA 出力ポート設定 */ 1107 1060 sil_wrb_mem(PORTC_PDR_ADDR, sil_reb_mem(PORTC_PDR_ADDR) | PORT_PDR_B6_BIT | PORT_PDR_B7_BIT); 1108 /* ãã«ã¢ããæå¹*/1061 /* プルアップ有効 */ 1109 1062 sil_wrb_mem(PORTC_PCR_ADDR, sil_reb_mem(PORTC_PCR_ADDR) | PORT_PCR_B6_BIT | PORT_PCR_B7_BIT); 1110 /* N ãã£ãã«ãªã¼ãã³ãã¬ã¤ã³*/1063 /* Nチャネルオープンドレイン */ 1111 1064 sil_wrb_mem(PORTC_ODR0_ADDR, 1112 1065 (sil_reb_mem(PORTC_ODR0_ADDR) & ~(PORT_ODR_Pm6_MASK | PORT_ODR_Pm7_MASK)) 1113 1066 | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm6_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm7_OFFSET)); 1114 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/1067 /* 周辺機能として使用 */ 1115 1068 sil_wrb_mem(PORTC_PMR_ADDR, sil_reb_mem(PORTC_PMR_ADDR) | PORT_PMR_B6_BIT | PORT_PMR_B7_BIT); 1116 1069 break; 1117 1070 case sciSPIM: 1118 /* HIGHç¶æ 1119 ã«è¨å® */ 1071 /* HIGH状態に設定 */ 1120 1072 sil_wrb_mem(PORTC_PODR_ADDR, 1121 1073 sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B7_BIT | PORT_PODR_B6_BIT | PORT_PODR_B5_BIT); 1122 /* MOSIåºå/MISOå 1123 ¥å/SCKå 1124 ¥åºåãã¼ãè¨å® */ 1074 /* MOSI出力/MISO入力/SCK入出力ポート設定 */ 1125 1075 sil_wrb_mem(PORTC_PDR_ADDR, (sil_reb_mem(PORTC_PDR_ADDR) | PORT_PDR_B5_BIT | PORT_PDR_B7_BIT) & ~PORT_PDR_B6_BIT); 1126 /* ãã«ã¢ããç¡å¹*/1076 /* プルアップ無効 */ 1127 1077 sil_wrb_mem(PORTC_PCR_ADDR, sil_reb_mem(PORTC_PCR_ADDR) & ~(PORT_PCR_B5_BIT | PORT_PCR_B7_BIT | PORT_PCR_B6_BIT)); 1128 1078 /* MISO CMOS */ … … 1130 1080 (sil_reb_mem(PORTC_ODR0_ADDR) & ~(PORT_ODR_Pm5_MASK | PORT_ODR_Pm6_MASK | PORT_ODR_Pm7_MASK)) 1131 1081 | (PORT_ODR_CMOS << PORT_ODR_Pm5_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm6_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm7_OFFSET)); 1132 /* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨*/1082 /* 周辺機能として使用 */ 1133 1083 sil_wrb_mem(PORTC_PMR_ADDR, sil_reb_mem(PORTC_PMR_ADDR) | PORT_PMR_B5_BIT | PORT_PMR_B6_BIT | PORT_PMR_B7_BIT); 1134 1084 break; 1135 1085 } 1136 1086 1137 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ã許å¯*/1087 /* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */ 1138 1088 sil_wrb_mem(MPC_PWPR_ADDR, 0x00); 1139 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ã許å¯*/1089 /* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */ 1140 1090 sil_wrb_mem(MPC_PWPR_ADDR, 0x40); 1141 1091 1142 /* PC7 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD8/SMOSI8/SSDA8ã¨ãã*/1092 /* PC7端子機能制御レジスタ TXD8/SMOSI8/SSDA8とする */ 1143 1093 sil_wrb_mem(MPC_PC7PFS_ADDR, 0x0A); 1144 /* PC6 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD8/SMISO8/SSCL8ã¨ãã*/1094 /* PC6端子機能制御レジスタ RXD8/SMISO8/SSCL8とする */ 1145 1095 sil_wrb_mem(MPC_PC6PFS_ADDR, 0x0A); 1146 1096 if (mode == sciSPIM) { 1147 /* PC5 端åæ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK8ã¨ãã*/1097 /* PC5端子機能制御レジスタ SCK8とする */ 1148 1098 sil_wrb_mem(MPC_PC5PFS_ADDR, 0x0A); 1149 1099 } 1150 1100 1151 /* æ¸ãè¾¼ã¿ãããã¯ãã¬ã¸ã¹ã¿ã®è¨å® æ¸ãè¾¼ã¿ãç¦æ¢*/1101 /* 書き込みプロテクトレジスタの設定 書き込みを禁止 */ 1152 1102 sil_wrb_mem(MPC_PWPR_ADDR, 0x80); 1153 1103 break; … … 1157 1107 void sci_disable(void *base_address) 1158 1108 { 1159 /* éåä¿¡ç¦æ¢, SCKn端åã¯å 1160 ¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */ 1109 /* 送受信禁止, SCKn端子は入出力ポートとして使用 */ 1161 1110 sil_wrb_mem(SCI_SCR(base_address), 0x00U); 1162 1111 1163 1112 /* 1164 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å®1113 * モジュールストップ機能の設定 1165 1114 */ 1166 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* æ¸è¾¼ã¿è¨±å¯*/1115 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* 書込み許可 */ 1167 1116 sil_wrw_mem(SYSTEM_MSTPCRB_ADDR, 1168 1117 sil_rew_mem(SYSTEM_MSTPCRB_ADDR) | SCI_MSTPCRB_BIT(base_address)); 1169 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/1118 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* 書込み禁止 */ 1170 1119 } 1171 1120 … … 1189 1138 brr = (brr / 2) + (brr % 2) - 1; 1190 1139 1191 /* SMR ã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããè¨å®*/1192 /* ã¯ããã¯é¸æããã(SMR.CKS[1:0]ããããè¨å®)ããã以å¤ã®ããããâ0âã«è¨å®*/1140 /* SMRに送信/ 受信フォーマットを設定 */ 1141 /* クロック選択ビット(SMR.CKS[1:0]ビットを設定)、それ以外のビットを“0”に設定 */ 1193 1142 sil_wrb_mem(SCI_SMR(base_address), clk); 1194 1143 1195 /* ãããã¬ã¼ããè¨å®*/1144 /* ビットレートを設定 */ 1196 1145 sil_wrb_mem(SCI_BRR(base_address), brr); 1197 1146 } … … 1248 1197 dis_int(obj->tei_intno); 1249 1198 1250 /* SCI æå¹*/1199 /* SCI有効 */ 1251 1200 sci_enable(obj->base_address, sciSerial); 1252 1201 1253 /* SIMR1.IICM ããããâ0âã«è¨å®*/1202 /* SIMR1.IICMビットを“0”に設定 */ 1254 1203 sil_wrb_mem(SCI_SIMR1(obj->base_address), 1255 1204 sil_reb_mem(SCI_SIMR1(obj->base_address)) & ~IICM); 1256 1205 1257 /* SPMR.CKPH, CKPOL ããããâ0âã«è¨å®*/1206 /* SPMR.CKPH, CKPOLビットを“0”に設定 */ 1258 1207 sil_wrb_mem(SCI_SPMR(obj->base_address), 1259 1208 sil_reb_mem(SCI_SPMR(obj->base_address)) & ~(CKPH | CKPOL)); … … 1261 1210 sci_set_frequency(obj->base_address, /*9600*/115200); 1262 1211 1263 /* SCMR ã¬ã¸ã¹ã¿ã¯SDIRããããâ0âãSINVããããâ0âãSMIFããããâ0âã«è¨å®*/1212 /* SCMRレジスタはSDIRビットを“0”、SINVビットを“0”、SMIFビットを“0”に設定 */ 1264 1213 sil_wrb_mem(SCI_SCMR(obj->base_address), 1265 1214 (sil_reb_mem(SCI_SCMR(obj->base_address)) & ~(SINV | SMIF | SDIR))); 1266 1215 1267 /* SMR ã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããè¨å®*/1216 /* SMRに送信/ 受信フォーマットを設定 */ 1268 1217 serial_format(obj, 8, ParityNone, 1); 1269 1218 1270 /* éå信許å¯*/1219 /* 送受信許可 */ 1271 1220 sil_wrb_mem(SCI_SCR(obj->base_address), 1272 1221 (sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE)); … … 1281 1230 dis_int(obj->tei_intno); 1282 1231 1283 /* SCI ç¡å¹*/1232 /* SCI無効 */ 1284 1233 sci_disable(obj->base_address); 1285 1234 … … 1291 1240 uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address)); 1292 1241 1293 /* éåä¿¡ç¦æ¢, SCKn端åã¯å 1294 ¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */ 1242 /* 送受信禁止, SCKn端子は入出力ポートとして使用 */ 1295 1243 sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U); 1296 1244 1297 1245 sci_set_frequency(obj->base_address, baudrate); 1298 1246 1299 /* éå信許å¯*/1247 /* 送受信許可 */ 1300 1248 sil_wrb_mem(SCI_SCR(obj->base_address), scr); 1301 1249 } … … 1349 1297 1350 1298 for (;;) { 1351 /* SSR.ORER, PER, FER ãã©ã°ããªã¼ã*/1299 /* SSR.ORER, PER, FERフラグをリード */ 1352 1300 ssr = sil_reb_mem(SCI_SSR(obj->base_address)); 1353 1301 1354 /* åä¿¡ã¨ã©ã¼ãçºçããã¨ã*/1302 /* 受信エラーが発生したとき */ 1355 1303 if ((ssr & (ORER | PER | FER)) != 0) { 1356 /* ãªã¼ãã©ã³ã¨ã©ã¼*/1304 /* オーバランエラー */ 1357 1305 if ((ssr & ORER) != 0) { 1358 /* RDR ã¬ã¸ã¹ã¿ããªã¼ã*/1306 /* RDRレジスタをリード */ 1359 1307 c = (int)sil_reb_mem(SCI_RDR(obj->base_address)); 1360 1308 } 1361 /* ãã¬ã¼ãã³ã°ã¨ã©ã¼*/1309 /* フレーミングエラー */ 1362 1310 if ((ssr & FER) != 0) { 1363 1311 } 1364 /* ããªãã£ã¨ã©ã¼*/1312 /* パリティエラー */ 1365 1313 if ((ssr & PER) != 0) { 1366 1314 } 1367 1315 } 1368 1316 1369 /* SSR.ORER, PER, FER ãã©ã°ãâ0âã«è¨å®*/1317 /* SSR.ORER, PER, FERフラグを“0”に設定 */ 1370 1318 sil_wrb_mem(SCI_SSR(obj->base_address), ssr & ~(ORER | PER | FER)); 1371 1319 1372 /* SSR.ORER, PER, FER ãã©ã°ããªã¼ã*/1320 /* SSR.ORER, PER, FERフラグをリード */ 1373 1321 ssr = sil_reb_mem(SCI_SSR(obj->base_address)); 1374 1322 1375 /* RXI å²ãè¾¼ã¿*/1323 /* RXI割り込み */ 1376 1324 if (serial_readable(obj)) { 1377 1325 clear_int(obj->rxi_intno); … … 1382 1330 } 1383 1331 1384 /* RDR ã¬ã¸ã¹ã¿ããªã¼ã*/1332 /* RDRレジスタをリード */ 1385 1333 c = (int)sil_reb_mem(SCI_RDR(obj->base_address)); 1386 1334 … … 1478 1426 } 1479 1427 1480 /* SCI æå¹*/1428 /* SCI有効 */ 1481 1429 sci_enable(obj->base_address, sciI2C); 1482 1430 1483 /* SIMR3.IICSDAS[1:0](b5-b4), IICSCLS[1:0](b7-b6) ããããâ11bâã«è¨å®*/1431 /* SIMR3.IICSDAS[1:0](b5-b4), IICSCLS[1:0](b7-b6)ビットを“11b”に設定 */ 1484 1432 sil_wrb_mem(SCI_SIMR3(obj->base_address), 0xF0U); 1485 1433 1486 1434 sci_set_frequency(obj->base_address, 100000); 1487 1435 1488 /* SCMR ã¬ã¸ã¹ã¿ã¯SDIRããããâ1âãSINVããããâ0âãSMIFããããâ0âã«è¨å®*/1436 /* SCMRレジスタはSDIRビットを“1”、SINVビットを“0”、SMIFビットを“0”に設定 */ 1489 1437 sil_wrb_mem(SCI_SCMR(obj->base_address), 1490 1438 (sil_reb_mem(SCI_SCMR(obj->base_address)) & ~(SINV | SMIF)) | SDIR); 1491 1439 1492 /* SEMR ãSNFRãSIMR1ãSIMR2ãSPMRã¬ã¸ã¹ã¿ã«å¤ãè¨å®*/1493 /* SEMR ã¬ã¸ã¹ã¿ã¯ãNFENããããè¨å®*/1440 /* SEMR、SNFR、SIMR1、SIMR2、SPMRレジスタに値を設定 */ 1441 /* SEMRレジスタは、NFENビットを設定 */ 1494 1442 sil_wrb_mem(SCI_SEMR(obj->base_address), NFEN); 1495 1443 1496 /* SNFR ã¬ã¸ã¹ã¿ã¯ãNFCS[2:0]ããããè¨å®*/1444 /* SNFRレジスタは、NFCS[2:0]ビットを設定*/ 1497 1445 sil_wrb_mem(SCI_SNFR(obj->base_address), 1); 1498 1446 1499 /* SIMR1 ã¬ã¸ã¹ã¿ã¯ãIICMããããâ1âã«è¨å®ããIICDL[4:0]ã ãããè¨å®*/1447 /* SIMR1レジスタは、IICMビットを“1”に設定し、IICDL[4:0]ビ ットを設定 */ 1500 1448 sil_wrb_mem(SCI_SIMR1(obj->base_address), IICM | (3 << 3)); 1501 1449 1502 /* SIMR2 ã¬ã¸ã¹ã¿ã¯ãIICACKTãIICCSCããããâ1âã«è¨å®ããIICINTMããããè¨å®*/1450 /* SIMR2レジスタは、IICACKT、IICCSCビットを“1”に設定し、IICINTMビットを設定 */ 1503 1451 sil_wrb_mem(SCI_SIMR2(obj->base_address), IICACKT | IICCSC | IICINTM); 1504 1452 1505 /* SPMRã¬ã¸ã¹ã¿ã¯ãå 1506 ¨ãããâ0âã«è¨å® */ 1453 /* SPMRレジスタは、全ビット“0”に設定 */ 1507 1454 sil_wrb_mem(SCI_SPMR(obj->base_address), 0); 1508 1455 1509 /* éå信許å¯*/1456 /* 送受信許可 */ 1510 1457 sil_wrb_mem(SCI_SCR(obj->base_address), 1511 1458 (sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE)); … … 1516 1463 uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address)); 1517 1464 1518 /* éåä¿¡ç¦æ¢, SCKn端åã¯å 1519 ¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */ 1465 /* 送受信禁止, SCKn端子は入出力ポートとして使用 */ 1520 1466 sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U); 1521 1467 1522 1468 sci_set_frequency(obj->base_address, hz); 1523 1469 1524 /* éå信許å¯*/1470 /* 送受信許可 */ 1525 1471 sil_wrb_mem(SCI_SCR(obj->base_address), scr); 1526 1472 } … … 1531 1477 return 0; 1532 1478 1533 /* SIMR3.IICSTAREQ ããããâ1âã«è¨å®ããã¨åæã«ã1534 * SIMR3.IICSCLS[1:0],IICSDAS[1:0] ããããâ01bâã«è¨å®*/1479 /* SIMR3.IICSTAREQビットを“1”に設定すると同時に、 1480 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ビットを“01b”に設定 */ 1535 1481 sil_wrb_mem(SCI_SIMR3(obj->base_address), IICSTAREQ | (1 << 4) | (1 << 6)); 1536 1482 … … 1553 1499 return 0; 1554 1500 1555 /* SIMR3.IICSTPREQ ããããâ1âã«è¨å®ããã¨åæã«ã1556 * SIMR3.IICSCLS[1:0],IICSDAS[1:0] ããããâ01bâã«è¨å®*/1501 /* SIMR3.IICSTPREQビットを“1”に設定すると同時に、 1502 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ビットを“01b”に設定 */ 1557 1503 sil_wrb_mem(SCI_SIMR3(obj->base_address), IICSTPREQ | (1 << 4) | (1 << 6)); 1558 1504 … … 1565 1511 return 0; 1566 1512 1567 /* éä¿¡å²ãè¾¼ã¿è¦æ±ãç¦æ¢*/1513 /* 送信割り込み要求を禁止 */ 1568 1514 sil_wrb_mem(SCI_SCR(obj->base_address), 1569 1515 (sil_reb_mem(SCI_SCR(obj->base_address)) & ~(RIE)) | TEIE | TIE); 1570 1516 1571 /* éå§æ¡ä»¶ã®çæ*/1517 /* 開始条件の生成 */ 1572 1518 i2c_start(obj); 1573 1519 1574 /* STI(TEI) å²ãè¾¼ã¿çºç確èª*/1520 /* STI(TEI)割り込み発生確認 */ 1575 1521 while (!probe_int(obj->tei_intno)) 1576 1522 dly_tsk(2); 1577 1523 clear_int(obj->tei_intno); 1578 1524 1579 /* SIMR3.IICSTIF ãã©ã°ãâ0âã«è¨å®ãã*/1525 /* SIMR3.IICSTIFフラグを“0”に設定し、 */ 1580 1526 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1581 1527 sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF); 1582 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0] ããããâ00bâã«è¨å®*/1528 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“00b”に設定 */ 1583 1529 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1584 1530 sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~((3 << 4) | (3 << 6))); 1585 1531 1586 /* TDR ã¬ã¸ã¹ã¿ã«ã¹ã¬ã¼ãã¢ãã¬ã¹ãR/Wããããã©ã¤ã*/1532 /* TDRレジスタにスレーブアドレス、R/Wビットをライト */ 1587 1533 sil_wrb_mem(SCI_TDR(obj->base_address), address | 1); 1588 1534 1589 /* TXI å²ãè¾¼ã¿çºç確èª*/1535 /* TXI割り込み発生確認 */ 1590 1536 while (!probe_int(obj->txi_intno)) 1591 1537 dly_tsk(10); 1592 1538 clear_int(obj->txi_intno); 1593 1539 1594 /* ã¹ã¬ã¼ãããã¤ã¹ããã®ACKã確èª*/1540 /* スレーブデバイスからのACKを確認 */ 1595 1541 if ((sil_reb_mem(SCI_SISR(obj->base_address)) & IICACKR) == 0) { 1596 /* SIMR2.IICACKT ããããâ0âã«è¨å®*/1542 /* SIMR2.IICACKTビットを“0”に設定 */ 1597 1543 sil_wrb_mem(SCI_SIMR2(obj->base_address), sil_reb_mem(SCI_SIMR2(obj->base_address)) & ~IICACKT); 1598 /* SCR.RIE ããããâ1âã«è¨å®*/1544 /* SCR.RIEビットを“1”に設定 */ 1599 1545 sil_wrb_mem(SCI_SCR(obj->base_address), sil_reb_mem(SCI_SCR(obj->base_address)) | RIE); 1600 1546 1601 1547 for (int i = 0; i < length; i++) { 1602 /* 次ãã¼ã¿ãæçµ*/1548 /* 次データが最終 */ 1603 1549 if (i == length - 1) { 1604 /* SIMR2.IICACKT ããããâ1âã«è¨å®*/1550 /* SIMR2.IICACKTビットを“1”に設定 */ 1605 1551 sil_wrb_mem(SCI_SIMR2(obj->base_address), sil_reb_mem(SCI_SIMR2(obj->base_address)) | IICACKT); 1606 1552 } 1607 1553 1608 /* TDR ã¬ã¸ã¹ã¿ã«ããã¼ãã¼ã¿âFFhâãã©ã¤ã*/1554 /* TDRレジスタにダミーデータ“FFh”をライト */ 1609 1555 sil_wrb_mem(SCI_TDR(obj->base_address), 0xFF); 1610 1556 1611 /* RXI å²ãè¾¼ã¿çºç確èª*/1557 /* RXI割り込み発生確認 */ 1612 1558 while (!probe_int(obj->rxi_intno)) 1613 1559 dly_tsk(10); 1614 1560 clear_int(obj->rxi_intno); 1615 1561 1616 /* RDR ã¬ã¸ã¹ã¿ã®åä¿¡ãã¼ã¿ããªã¼ã*/1562 /* RDRレジスタの受信データをリード */ 1617 1563 *data = sil_reb_mem(SCI_RDR(obj->base_address)); 1618 1564 data++; 1619 1565 1620 /* TXI å²ãè¾¼ã¿çºç確èª*/1566 /* TXI割り込み発生確認 */ 1621 1567 while (!probe_int(obj->txi_intno)) 1622 1568 dly_tsk(10); … … 1626 1572 1627 1573 if (stop) { 1628 /* åæ¢æ¡ä»¶ã®çæ*/1574 /* 停止条件の生成 */ 1629 1575 i2c_stop(obj); 1630 1576 1631 /* STI(TEI) å²ãè¾¼ã¿çºç確èª*/1577 /* STI(TEI)割り込み発生確認 */ 1632 1578 while (!probe_int(obj->tei_intno)) 1633 1579 dly_tsk(2); 1634 1580 clear_int(obj->tei_intno); 1635 1581 1636 /* SIMR3.IICSTIF ãã©ã°ãâ0âã«è¨å®ãã*/1582 /* SIMR3.IICSTIFフラグを“0”に設定し、*/ 1637 1583 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1638 1584 sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF); 1639 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0] ããããâ11bâã«è¨å®*/1585 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“11b”に設定 */ 1640 1586 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1641 1587 sil_reb_mem(SCI_SIMR3(obj->base_address)) | ((3 << 4) | (3 << 6))); … … 1650 1596 return 0; 1651 1597 1652 /* åä¿¡å²ãè¾¼ã¿è¦æ±ãç¦æ¢*/1598 /* 受信割り込み要求を禁止 */ 1653 1599 sil_wrb_mem(SCI_SCR(obj->base_address), 1654 1600 (sil_reb_mem(SCI_SCR(obj->base_address)) & ~(RIE)) | TEIE | TIE); 1655 1601 1656 /* éå§æ¡ä»¶ã®çæ*/1602 /* 開始条件の生成 */ 1657 1603 i2c_start(obj); 1658 1604 1659 /* STI(TEI) å²ãè¾¼ã¿çºç確èª*/1605 /* STI(TEI)割り込み発生確認 */ 1660 1606 while (!probe_int(obj->tei_intno)) 1661 1607 dly_tsk(2); 1662 1608 clear_int(obj->tei_intno); 1663 1609 1664 /* SIMR3.IICSTIF ãã©ã°ãâ0âã«è¨å®ãã*/1610 /* SIMR3.IICSTIFフラグを“0”に設定し、 */ 1665 1611 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1666 1612 sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF); 1667 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0] ããããâ00bâã«è¨å®*/1613 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“00b”に設定 */ 1668 1614 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1669 1615 sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~((3 << 4) | (3 << 6))); 1670 1616 1671 /* TDR ã¬ã¸ã¹ã¿ã«ã¹ã¬ã¼ãã¢ãã¬ã¹ãR/Wããããã©ã¤ã*/1617 /* TDRレジスタにスレーブアドレス、R/Wビットをライト */ 1672 1618 sil_wrb_mem(SCI_TDR(obj->base_address), address); 1673 1619 1674 /* TXI å²ãè¾¼ã¿çºç確èª*/1620 /* TXI割り込み発生確認 */ 1675 1621 while (!probe_int(obj->txi_intno)) 1676 1622 dly_tsk(10); 1677 1623 clear_int(obj->txi_intno); 1678 1624 1679 /* ã¹ã¬ã¼ãããã¤ã¹ããã®ACKã確èª*/1625 /* スレーブデバイスからのACKを確認 */ 1680 1626 if ((sil_reb_mem(SCI_SISR(obj->base_address)) & IICACKR) == 0) { 1681 1627 1682 1628 for (int i = 0; i < length; i++) { 1683 /* TDR ã¬ã¸ã¹ã¿ã«ã¹ã¬ã¼ãã¢ãã¬ã¹ãR/Wããããã©ã¤ã*/1629 /* TDRレジスタにスレーブアドレス、R/Wビットをライト */ 1684 1630 sil_wrb_mem(SCI_TDR(obj->base_address), *data); 1685 1631 data++; 1686 1632 1687 /* TXI å²ãè¾¼ã¿çºç確èª*/1633 /* TXI割り込み発生確認 */ 1688 1634 while (!probe_int(obj->txi_intno)) 1689 1635 dly_tsk(10); … … 1693 1639 1694 1640 if (stop) { 1695 /* åæ¢æ¡ä»¶ã®çæ*/1641 /* 停止条件の生成 */ 1696 1642 i2c_stop(obj); 1697 1643 1698 /* STI(TEI) å²ãè¾¼ã¿çºç確èª*/1644 /* STI(TEI)割り込み発生確認 */ 1699 1645 while (!probe_int(obj->tei_intno)) 1700 1646 dly_tsk(2); 1701 1647 clear_int(obj->tei_intno); 1702 1648 1703 /* SIMR3.IICSTIF ãã©ã°ãâ0âã«è¨å®ãã*/1649 /* SIMR3.IICSTIFフラグを“0”に設定し、*/ 1704 1650 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1705 1651 sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF); 1706 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0] ããããâ11bâã«è¨å®*/1652 /* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“11b”に設定 */ 1707 1653 sil_wrb_mem(SCI_SIMR3(obj->base_address), 1708 1654 sil_reb_mem(SCI_SIMR3(obj->base_address)) | ((3 << 4) | (3 << 6))); … … 1747 1693 } 1748 1694 1749 /* SCI æå¹*/1695 /* SCI有効 */ 1750 1696 sci_enable(obj->base_address, (ssel != NC) ? sciSPIS : sciSPIM); 1751 1697 1752 /* SIMR1.IICM ããããâ0âã«è¨å®*/1698 /* SIMR1.IICMビットを“0”に設定 */ 1753 1699 sil_wrb_mem(SCI_SIMR1(obj->base_address), 1754 1700 sil_reb_mem(SCI_SIMR1(obj->base_address)) & ~IICM); 1755 1701 1756 1702 if (ssel == NC) { 1757 /* SPMR.SSE, CTSE, MSS, MFF, CKPH, CKPOL ããããâ0âã«è¨å®*/1703 /* SPMR.SSE, CTSE, MSS, MFF, CKPH, CKPOLビットを“0”に設定 */ 1758 1704 sil_wrb_mem(SCI_SPMR(obj->base_address), 0); 1759 1705 } 1760 1706 else { 1761 /* SPMR, CTSE, MSS, MFF, CKPH, CKPOL ããããâ0âã«è¨å®*/1762 /* SPMR.SSE ããããâ1âã«è¨å®*/1707 /* SPMR, CTSE, MSS, MFF, CKPH, CKPOLビットを“0”に設定 */ 1708 /* SPMR.SSEビットを“1”に設定 */ 1763 1709 sil_wrb_mem(SCI_SPMR(obj->base_address), SSE); 1764 1710 } 1765 1711 1766 /* SCMR ã¬ã¸ã¹ã¿ã¯SDIRããããâ0âãSINVããããâ0âãSMIFããããâ0âã«è¨å®*/1712 /* SCMRレジスタはSDIRビットを“0”、SINVビットを“0”、SMIFビットを“0”に設定 */ 1767 1713 sil_wrb_mem(SCI_SCMR(obj->base_address), 1768 1714 (sil_reb_mem(SCI_SCMR(obj->base_address)) & ~(SMIF | SDIR)) | SINV); 1769 1715 1770 /* SMR ã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããã¯ããã¯åæå¼ã¢ã¼ãã§åä½ã§è¨å®*/1716 /* SMRに送信/ 受信フォーマットをクロック同期式モードで動作で設定 */ 1771 1717 sil_wrb_mem(SCI_SMR(obj->base_address), CM); 1772 1718 1773 1719 sci_set_frequency(obj->base_address, 1000000); 1774 1720 1775 /* éå信許å¯*/1721 /* 送受信許可 */ 1776 1722 sil_wrb_mem(SCI_SCR(obj->base_address), 1777 1723 (sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE)); … … 1780 1726 void spi_free(spi_t *obj) 1781 1727 { 1782 /* SCI ç¡å¹*/1728 /* SCI無効 */ 1783 1729 sci_disable(obj->base_address); 1784 1730 … … 1796 1742 } 1797 1743 1798 /* éåä¿¡ç¦æ¢, SCKn端åã¯å 1799 ¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */ 1744 /* 送受信禁止, SCKn端子は入出力ポートとして使用 */ 1800 1745 sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U); 1801 1746 1802 1747 spmr = sil_reb_mem(SCI_SPMR(obj->base_address)); 1803 1748 1804 /* ã¯ããã¯æ¥µæ§å転ãã/ãªã*/1749 /* クロック極性反転あり/なし */ 1805 1750 if (polarity) 1806 1751 spmr |= CKPOL; … … 1808 1753 spmr &= ~CKPOL; 1809 1754 1810 /* ã¯ããã¯ä½ç¸å転ãã/ãªã*/1755 /* クロック位相反転あり/なし */ 1811 1756 if (phase) 1812 1757 spmr |= CKPH; … … 1815 1760 1816 1761 if (slave) { 1817 /* SCKn端åã¯ã¯ããã¯å 1818 ¥åã¨ãã¦ä½¿ç¨ */ 1762 /* SCKn端子はクロック入力として使用 */ 1819 1763 sil_wrb_mem(SCI_SCR(obj->base_address), 1820 1764 (sil_reb_mem(SCI_SCR(obj->base_address)) & ~CKE) | 2); 1821 1765 1822 /* SPMR.MSS ããããâ1âã«è¨å®*/1766 /* SPMR.MSSビットを“1”に設定 */ 1823 1767 sil_wrb_mem(SCI_SPMR(obj->base_address), spmr | MSS); 1824 1768 } 1825 1769 else { 1826 /* SCKn 端åã¯ã¯ããã¯åºåã¨ãã¦ä½¿ç¨*/1770 /* SCKn端子はクロック出力として使用 */ 1827 1771 sil_wrb_mem(SCI_SCR(obj->base_address), 1828 1772 sil_reb_mem(SCI_SCR(obj->base_address)) & ~CKE); 1829 1773 1830 /* SPMR.MSS ããããâ0âã«è¨å®*/1774 /* SPMR.MSSビットを“0”に設定 */ 1831 1775 sil_wrb_mem(SCI_SPMR(obj->base_address), spmr & ~MSS); 1832 1776 } 1833 1777 1834 /* éå信許å¯*/1778 /* 送受信許可 */ 1835 1779 sil_wrb_mem(SCI_SCR(obj->base_address), 1836 1780 (sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE)); … … 1841 1785 uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address)); 1842 1786 1843 /* éåä¿¡ç¦æ¢, SCKn端åã¯å 1844 ¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */ 1787 /* 送受信禁止, SCKn端子は入出力ポートとして使用 */ 1845 1788 sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U); 1846 1789 1847 1790 sci_set_frequency(obj->base_address, hz); 1848 1791 1849 /* éå信許å¯*/1792 /* 送受信許可 */ 1850 1793 sil_wrb_mem(SCI_SCR(obj->base_address), scr); 1851 1794 } … … 1853 1796 int spi_master_write(spi_t *obj, int value) 1854 1797 { 1855 /* TXI å²ãè¾¼ã¿çºç確èª*/1798 /* TXI割り込み発生確認 */ 1856 1799 while (!probe_int(obj->txi_intno)) 1857 1800 ; 1858 1801 1859 /* éä¿¡ãã¼ã¿ãã©ã¤ã*/1802 /* 送信データをライト */ 1860 1803 sil_wrb_mem(SCI_TDR(obj->base_address), (char)value); 1861 1804 … … 1868 1811 } 1869 1812 } 1870 /* RXI å²ãè¾¼ã¿çºç確èª*/1813 /* RXI割り込み発生確認 */ 1871 1814 while (!probe_int(obj->rxi_intno)); 1872 1815 1873 /* åä¿¡ãã¼ã¿ããªã¼ã*/1816 /* 受信データをリード */ 1874 1817 return sil_reb_mem(SCI_RDR(obj->base_address)); 1875 1818 }
Note:
See TracChangeset
for help on using the changeset viewer.