SIO_PORTIDを4まで使えるようにしたい
残作業はtarget_config.cにあるポート設定をpdic/uartモジュール側に隠蔽すること。 但し、この変更には原作者の了承が必要と思う。
このチケットは三つに分割すべきだと思われる。
1. に関しては、緊急ならば修正には反対しない。しかし、ターゲット非依存部をバージョンアップすると確実にデグレードする。修正するしないにかかわらず、問題だと考えるならTOPPERSのMLで問題提起して、公式コードを変更してもらうべき。
3. これについては反対。ピン設定のバリエーションは多すぎる。たとえば、UART3の送受信ピンの配置バリエーションは9通りある(送信3, 受信3)。LPC1700だけでこれだけバリエーションを作り、それをuart.cに吸収させると、複数アーキテクチャで強要したときに、爆発的に複雑になる可能性が高い。SIO_PORTIDの宣言箇所に「target_config.cのtarget_initialize()内部でピン設定を行え」と、コメントを付加すれば十分だと思われる。
「syssvc/serial.cとsyssvc/serial.cfgでポート4を扱えるようにする」に関してはTOPPERSのメーリングリストに問題提起した。
疑問1: 「UARTを使いたい」という要求にPORT設定は含まれないのだろうか? どちらが正しいというものではない。どちらがカーネルユーザにとって自然かということ。
疑問2: ドライバ(UARTのドライブ)と支援ライブラリ(ポートの設定)という2層構造での実現が考えられないだろうか?
UARTのピン設定のバリエーションは(TXとRXを無理に分離しなければ)以下のようになっている。
これらの設定をユーザーに整理された形でライブラリ関数として提供できるならば支援関数によるポート設定はアリだと思う。
もう一つのあまりきれいではない方法として、以下のようなUARTの全部の組み合わせをtarget_config.c の target_initialize()に用意しておくことが考えられる。
#if 1 /* P0.2, P0.3ピンをTXD0,RXD0に割り当てる。*/ LPC_PINCON->PINSEL0 &= ~0x3 << 4; LPC_PINCON->PINSEL0 |= 0x1 << 4; LPC_PINCON->PINSEL0 &= ~0x3 << 6; LPC_PINCON->PINSEL0 |= 0x1 << 6; #endif #if 0 /* P0.15, P0.16ピンをTXD1,RXD1に割り当てる。*/ LPC_PINCON->PINSEL0 &= ~0x3 << 30; LPC_PINCON->PINSEL0 |= 0x1 << 30; LPC_PINCON->PINSEL1 &= ~0x3 << 0; LPC_PINCON->PINSEL1 |= 0x1 << 0; #endif
このチケットは
の、二つからなっている。そこで、本チケットを前者の意味だけに限定し、後者をチケット #25227 に移すことにする。
以下の理由により本チケットをクローズする。
なお、本チケットのタイトルを
から
に変更した。
2011/May/22 今後、このチケットは「SIO_PORTIDを4まで使えるようにしたい」という、機能リクエストの意味だけを持たせることにする。変更の単純化はチケット #25227 に移動する。
以下、オリジナルのチケット。
現状、事実上1以外の指定はソースをあちこち見なければならないが、これを修正しSIO_PORTIDを柔軟に変更できるようにしたい。