From: shintamainjp Date: Tue, 4 Oct 2011 13:47:11 +0000 (+0000) Subject: チケット #26459 : 複数シリアルポートの同時使用対応を実施。当然ながら既存のコードも問題なく動作する。 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=bb116e864e3682c44cc16f0b1a9d517d8c9102b4;p=toppersasp4lpc%2Fasp.git チケット #26459 : 複数シリアルポートの同時使用対応を実施。当然ながら既存のコードも問題なく動作する。 --- diff --git a/asp/CHANGES.LPC b/asp/CHANGES.LPC index 9368a48..1009fac 100644 --- a/asp/CHANGES.LPC +++ b/asp/CHANGES.LPC @@ -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ファイル生成の実装を変更した。 diff --git a/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.cfg b/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.cfg index 9796ee9..0e4ca9a 100644 --- a/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.cfg +++ b/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.cfg @@ -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 + diff --git a/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.h b/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.h index 71de05a..39d5058 100644 --- a/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.h +++ b/asp/arch/arm_m_gcc/lpc1700_gcc/chip_serial.h @@ -65,15 +65,24 @@ * 引数として使う。 */ -#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 割込み優先度 + * \brief 割込み属性 * \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 */ /** diff --git a/asp/pdic/uart/uart.h b/asp/pdic/uart/uart.h index 2c82164..1312200 100644 --- a/asp/pdic/uart/uart.h +++ b/asp/pdic/uart/uart.h @@ -57,21 +57,25 @@ /* * 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 diff --git a/asp/target/lpcxpresso1768_gcc/target_config.c b/asp/target/lpcxpresso1768_gcc/target_config.c index a184226..420277a 100644 --- a/asp/target/lpcxpresso1768_gcc/target_config.c +++ b/asp/target/lpcxpresso1768_gcc/target_config.c @@ -129,7 +129,6 @@ */ 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); } diff --git a/asp/target/lpcxpresso1768_gcc/target_syssvc.h b/asp/target/lpcxpresso1768_gcc/target_syssvc.h index f6b8e1d..ca9b031 100644 --- a/asp/target/lpcxpresso1768_gcc/target_syssvc.h +++ b/asp/target/lpcxpresso1768_gcc/target_syssvc.h @@ -85,6 +85,30 @@ #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から始まる整数。 @@ -92,14 +116,16 @@ * 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 @@ -107,7 +133,6 @@ */ #define TNUM_PORT TNUM_SIOP_UART /* システムが管理するシリアルポートの総数 */ - /* * SIOポートコンフィギュレーションの正当性確認 * @@ -123,24 +148,65 @@ * \details * logtaskで使用する。1オリジン。 * - * システムログ用のシリアルポートは、コンソール用のシリアルポートと強要することが多い。 + * システムログ用のシリアルポートは、コンソール用のシリアルポートと共用することが多い。 */ #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 システムログの低レベル出力のための文字出力 @@ -150,6 +216,8 @@ extern void target_fput_log(char_t c); #endif /* TOPPERS_TARGET_SYSSVC_H */ + /** * \} */ +