OSDN Git Service

チケット #26459 : 複数シリアルポートの同時使用対応を実施。当然ながら既存のコードも問題なく動作する。
authorshintamainjp <shintamainjp@users.sourceforge.jp>
Tue, 4 Oct 2011 13:47:11 +0000 (13:47 +0000)
committershintamainjp <shintamainjp@users.sourceforge.jp>
Tue, 4 Oct 2011 13:47:11 +0000 (13:47 +0000)
asp/CHANGES.LPC
asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.cfg
asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.h
asp/pdic/uart/uart.h
asp/target/lpcxpresso1768_gcc/target_config.c
asp/target/lpcxpresso1768_gcc/target_syssvc.h

index 9368a48..1009fac 100644 (file)
@@ -1,5 +1,15 @@
 * Release 1.7.2 (次のリリースに含まれる予定の修正)
- - 「チケット #26384 checksumコマンドの対応」に対応 (2011/09/26 shintamainjp)
+
+ - 「チケット #26459 複数シリアルポートの同時使用対応」を実施。 (2010/10/04 shintamainjp)
+   - pdic/uart/uart.hの割り込みベクタ番号定義をSIO_BAUD_RATE_PORTxを参照して自動的に行うようにした。
+   - target/lpcxpresso1768_gcc/target_syssvc.hにおいて、SIOx_PORTIDを定義するようにした。
+   - target/lpcxpresso1768_gcc/target_syssvc.hにおいて、SIO_BAUD_RATE_DEFAULTの定義を削除した。
+   - target/lpcxpresso1768_gcc/target_syssvc.hにおいて、SIO_BAUD_RATE_PORTxの定義を追加した。
+   - target/lpcxpresso1768_gcc/target_config.cで、SIO_BAUD_RATE_PORTx定義の有無で自動的にピン設定とtarget_uart_initを実行するようにした。
+   - arch/arm_m_gcc/lpc1700_gcc/chip_serial.cfgで、SIO_BAUD_RATE_PORTx定義の有無で自動的に割り込みハンドラを登録するようにした。
+   - arch/arm_m_gcc/lpc1700_gcc/chip_serial.hに、INTPRI_SIOxとINTATR_SIOxの定義を追加した。
+
+ - 「チケット #26384 checksumコマンドの対応」に対応。 (2011/09/26 shintamainjp)
    - asp/trunk/asp/target/lpcxpresso1768_gcc/Makefile.targetのhexファイル生成の実装を変更した。
    - binファイルを生成し、チェックサム修正プログラムを実行してからhexファイルを生成するようにした。
    - asp/trunk/asp/sample/Makefileのbinファイル生成の実装を変更した。
index 9796ee9..0e4ca9a 100644 (file)
@@ -4,5 +4,24 @@
 
 #include "target_serial.h"
 ATT_INI({ TA_NULL, 0, sio_initialize });
-ATT_ISR({ TA_NULL, SIO_PORTID, INTNO_SIO, sio_isr, 1 });
-CFG_INT(INTNO_SIO, { TA_ENAINT|INTATR_SIO, INTPRI_SIO });
+
+#if defined(SIO_BAUD_RATE_PORT1)
+ATT_ISR({ TA_NULL, SIO1_PORTID, INTNO_SIO1, sio_isr, 1 });
+CFG_INT(INTNO_SIO1, { TA_ENAINT | INTATR_SIO1, INTPRI_SIO1 });
+#endif
+
+#if defined(SIO_BAUD_RATE_PORT2)
+ATT_ISR({ TA_NULL, SIO2_PORTID, INTNO_SIO2, sio_isr, 2 });
+CFG_INT(INTNO_SIO2, { TA_ENAINT | INTATR_SIO2, INTPRI_SIO2 });
+#endif
+
+#if defined(SIO_BAUD_RATE_PORT3)
+ATT_ISR({ TA_NULL, SIO3_PORTID, INTNO_SIO3, sio_isr, 3 });
+CFG_INT(INTNO_SIO3, { TA_ENAINT | INTATR_SIO3, INTPRI_SIO3 });
+#endif
+
+#if defined(SIO_BAUD_RATE_PORT4)
+ATT_ISR({ TA_NULL, SIO4_PORTID, INTNO_SIO4, sio_isr, 4 });
+CFG_INT(INTNO_SIO4, { TA_ENAINT | INTATR_SIO4, INTPRI_SIO4 });
+#endif
+
index 71de05a..39d5058 100644 (file)
  *  引数として使う。
  */
 
-#define INTPRI_SIO             -3                              /* 割込み優先度 */
+#define INTPRI_SIO1  (-3)    /**< SIO1割込み優先度 */
+#define INTPRI_SIO2  (-3)    /**< SIO2割込み優先度 */
+#define INTPRI_SIO3  (-3)    /**< SIO3割込み優先度 */
+#define INTPRI_SIO4  (-3)    /**< SIO4割込み優先度 */
 
 /**
- * \brief å\89²è¾¼ã\81¿å\84ªå\85\88度
+ * \brief å\89²è¾¼ã\81¿å±\9eæ\80§
  * \details
- *  UART割込みハンドラ登録のための定数。コンフィギュレータが静的コンフィギュレーション時に、シリアルポート登録用
- *  引数として使う。この値は0でかまわない。
+ *  UART割込みハンドラ登録のための定数。
+ *  コンフィギュレータが静的コンフィギュレーション時に、
+ *  シリアルポート登録用引数として使う。
+ *  この値は0でかまわない。
  */
-#define INTATR_SIO             0                               /* 割込み属性 */
+
+#define INTATR_SIO1 (0) /**< SIO1割込み属性 */
+#define INTATR_SIO2 (0) /**< SIO2割込み属性 */
+#define INTATR_SIO3 (0) /**< SIO3割込み属性 */
+#define INTATR_SIO4 (0) /**< SIO4割込み属性 */
 
 #endif /* TOPPERS_CHIP_SERIAL_H */
 /**
index 2c82164..1312200 100644 (file)
 /*
  *  SIOの割込みベクタ番号
  */
-#if (SIO_PORTID == 1)
-#define INHNO_SIO              INHNO_UART0
-#define INTNO_SIO              INHNO_UART0
-#elif (SIO_PORTID == 2)
-#define INHNO_SIO              INHNO_UART1
-#define INTNO_SIO              INHNO_UART1
-#elif (SIO_PORTID == 3)
-#define INHNO_SIO              INHNO_UART2
-#define INTNO_SIO              INHNO_UART2
-#elif (SIO_PORTID == 4)
-#define INHNO_SIO              INHNO_UART3
-#define INTNO_SIO              INHNO_UART3
+#if defined (SIO_BAUD_RATE_PORT1)
+#define INHNO_SIO1             INHNO_UART0
+#define INTNO_SIO1             INHNO_UART0
 #endif
 
+#if defined (SIO_BAUD_RATE_PORT2)
+#define INHNO_SIO2             INHNO_UART1
+#define INTNO_SIO2             INHNO_UART1
+#endif
+
+#if defined (SIO_BAUD_RATE_PORT3)
+#define INHNO_SIO3             INHNO_UART2
+#define INTNO_SIO3             INHNO_UART2
+#endif
 
+#if defined (SIO_BAUD_RATE_PORT4)
+#define INHNO_SIO4             INHNO_UART3
+#define INTNO_SIO4             INHNO_UART3
+#endif
 
 /**
  * \ingroup SIOAPI
index a184226..420277a 100644 (file)
  */
 void target_initialize(void)
 {
-
        /*
         *  チップ依存部の初期化。この呼び出しは削除してはいけない。
         */
@@ -159,31 +158,41 @@ void target_initialize(void)
         *  種類持っている。以下のコードはそれらのうちの一つに対応しているにすぎない。必要に応じて
         *  アプリケーション・プログラマが書き換えて使うこと。
         */
-#if (SIO_PORTID==1)
+
+#if defined (SIO_BAUD_RATE_PORT1)
        /* Port0.2,3 ピンをUART0に割り当てる。*/
        LPC_PINCON->PINSEL0 |= PINSEL_UART0_TX | PINSEL_UART0_RX;
-#elif (SIO_PORTID==2)
+       target_uart_init(SIO1_PORTID);
+#endif
+
+#if defined (SIO_BAUD_RATE_PORT2)
        /* Port2.0,1 ピンをUART1に割り当てる。*/
        LPC_PINCON->PINSEL4 |= PINSEL_UART1_TX | PINSEL_UART1_RX;
-#elif (SIO_PORTID==3)
+       target_uart_init(SIO2_PORTID);
+#endif
+
+#if defined (SIO_BAUD_RATE_PORT3)
        /* Port0.10,11 ピンをUART2に割り当てる。*/
        LPC_PINCON->PINSEL0 |= PINSEL_UART2_TX | PINSEL_UART2_RX;
        /* UART2 の電源をオンにする */
        LPC_SC->PCONP |=  PCUART2;
-#elif (SIO_PORTID==4)
+       target_uart_init(SIO3_PORTID);
+#endif
+
+#if defined (SIO_BAUD_RATE_PORT4)
        /* Port0.0,1 ピンをUART3に割り当てる。*/
        LPC_PINCON->PINSEL0 |= PINSEL_UART3_TX | PINSEL_UART3_RX;
        /* UART3 の電源をオンにする */
        LPC_SC->PCONP |=  PCUART3;
-#else
-#error "SIO_PORTID NOT Supported"
+       target_uart_init(SIO4_PORTID);
 #endif
 
-
-       /*
-        *  バナー出力用のシリアル初期化
-        */
-       target_uart_init(SIO_PORTID);
+        /*
+         * バナー出力用のシリアル初期化を実行する。
+         * 上記のシリアルポート初期化と重複するかもしれないが、
+         * ここではこれを許容する。
+         */
+        target_uart_init(SIO_PORTID);
 }
 
 
index f6b8e1d..ca9b031 100644 (file)
 #endif
 
 /**
+ * \brief システムで使用可能なシリアルポート1に対するID番号。
+ * \details 対応するシリアルポートは実装の詳細で決まる。
+ */
+#define SIO1_PORTID            (1)
+
+/**
+ * \brief システムで使用可能なシリアルポート2に対するID番号。
+ * \details 対応するシリアルポートは実装の詳細で決まる。
+ */
+#define SIO2_PORTID            (2)
+
+/**
+ * \brief システムで使用可能なシリアルポート3に対するID番号。
+ * \details 対応するシリアルポートは実装の詳細で決まる。
+ */
+#define SIO3_PORTID            (3)
+
+/**
+ * \brief システムで使用可能なシリアルポート4に対するID番号。
+ * \details 対応するシリアルポートは実装の詳細で決まる。
+ */
+#define SIO4_PORTID            (4)
+
+/**
  * \brief コンソールが使用するシリアルポートID
  * \details
  * UIF用コンソールに使用するポート番号である。ポート番号は1から始まる整数。
  * LPCX1768では、PORT番号に応じて正しいUARTにピンを割り当て、必要に応じて電源を与えなければならない。
  * これらは target_config.c の target_initialize() にまとめてある。ただし、target_initialize()が
  * 対応するのは限定的な組み合わせである。詳しくは、 target_initialize() のコメントを参照。
+ *
+ * コンソール用シリアルポートにはSIO1_PORTIDで定義されたポートを使用する。
  */
-#define SIO_PORTID             (1)
-
+#define SIO_PORTID             (SIO1_PORTID)
 
 /**
   * \brief UARTドライバが管理する内蔵UARTの数
  */
 #define TNUM_SIOP_UART   (1)
+
 /**
   * \brief システムが管理するシリアル・ポートの総数
   * \details
  */
 #define TNUM_PORT        TNUM_SIOP_UART                /* システムが管理するシリアルポートの総数 */
 
-
 /*
  * SIOポートコンフィギュレーションの正当性確認
  *
  * \details
  * logtaskで使用する。1オリジン。
  *
- * ã\82·ã\82¹ã\83\86ã\83 ã\83­ã\82°ç\94¨ã\81®ã\82·ã\83ªã\82¢ã\83«ã\83\9dã\83¼ã\83\88ã\81¯ã\80\81ã\82³ã\83³ã\82½ã\83¼ã\83«ç\94¨ã\81®ã\82·ã\83ªã\82¢ã\83«ã\83\9dã\83¼ã\83\88ã\81¨å¼·è¦\81することが多い。
+ * ã\82·ã\82¹ã\83\86ã\83 ã\83­ã\82°ç\94¨ã\81®ã\82·ã\83ªã\82¢ã\83«ã\83\9dã\83¼ã\83\88ã\81¯ã\80\81ã\82³ã\83³ã\82½ã\83¼ã\83«ç\94¨ã\81®ã\82·ã\83ªã\82¢ã\83«ã\83\9dã\83¼ã\83\88ã\81¨å\85±ç\94¨することが多い。
  */
 #define LOGTASK_PORTID   SIO_PORTID
 
 /**
- * \brief シリアルポートのデフォルトボーレート
+ * \brief シリアルポート1のボーレート
+ *
  * \details
  * TOPPERS/ASPのシリアルポート1に対するボーレート設定値である。
- * シリアルポートの番号は1オリジンになっている。特に設定しない限り、
- * 2番以降のシリアルポートに対しても同じ値が設定される。2番以降の
- * シリアルポートの速度を変えたければ、マクロSIOx_BAUD_RATEを宣言する。
+ * この宣言を有効にするとシリアルポートが活性化される。
+ * シリアルポートのピン設定はtarget_config.cに実装されている。
+ * LPC1700では複数のピン設定があるため、実装の詳細を確認すること。
+ *
+ * このファイルで定義されているTNUM_SIOP_UARTの定義数を実際に使用する
+ * UART数と一致させる事。
  */
-#define SIO_BAUD_RATE_DEFAULT          (57600)
+#define SIO_BAUD_RATE_PORT1            (57600)
 
-//#define SIO_BAUD_RATE_PORT1          (57600)
-//#define SIO_BAUD_RATE_PORT2          (57600)
-//#define SIO_BAUD_RATE_PORT3          (57600)
-//#define SIO_BAUD_RATE_PORT4          (57600)
+/**
+ * \brief シリアルポート2のボーレート
+ *
+ * \details
+ * TOPPERS/ASPのシリアルポート2に対するボーレート設定値である。
+ * この宣言を有効にするとシリアルポートが活性化される。
+ * シリアルポートのピン設定はtarget_config.cに実装されている。
+ * LPC1700では複数のピン設定があるため、実装の詳細を確認すること。
+ *
+ * このファイルで定義されているTNUM_SIOP_UARTの定義数を実際に使用する
+ * UART数と一致させる事。
+ */
+// #define SIO_BAUD_RATE_PORT2         (57600)
+
+/**
+ * \brief シリアルポート3のボーレート
+ *
+ * \details
+ * TOPPERS/ASPのシリアルポート3に対するボーレート設定値である。
+ * この宣言を有効にするとシリアルポートが活性化される。
+ * シリアルポートのピン設定はtarget_config.cに実装されている。
+ * LPC1700では複数のピン設定があるため、実装の詳細を確認すること。
+ *
+ * このファイルで定義されているTNUM_SIOP_UARTの定義数を実際に使用する
+ * UART数と一致させる事。
+ */
+// #define SIO_BAUD_RATE_PORT3         (57600)
+
+/**
+ * \brief シリアルポート4のボーレート
+ *
+ * \details
+ * TOPPERS/ASPのシリアルポート4に対するボーレート設定値である。
+ * この宣言を有効にするとシリアルポートが活性化される。
+ * シリアルポートのピン設定はtarget_config.cに実装されている。
+ * LPC1700では複数のピン設定があるため、実装の詳細を確認すること。
+ *
+ * このファイルで定義されているTNUM_SIOP_UARTの定義数を実際に使用する
+ * UART数と一致させる事。
+ */
+// #define SIO_BAUD_RATE_PORT4         (57600)
 
 /**
  * \brief システムログの低レベル出力のための文字出力
 extern void    target_fput_log(char_t c);
 
 #endif /* TOPPERS_TARGET_SYSSVC_H */
+
 /**
  * \}
  */
+