10. I/Oポート
10.1 GPIO概要
CH559は45のI/Oピンを提供しますが、いくつかのピンは代替機能を持っています。それらの中で、ポートP0~P3の入出力とP4の出力はビット単位でアクセスすることができます。
ピンが代替機能として構成されていない場合、デフォルトは汎用I/Oピンの状態です。汎用デジタルI/Oとして使用する場合、すべてのI/Oポートは真のリードモディファイライト命令を持っています。SETBやCLRなどのビット操作命令をサポートし、特定のピンやポートレベルの方向を独立して変更することができます。
10.2 GPIOレジスタ
このセクションのすべてのレジスタとビットは、共通のフォーマットで表現されています。小文字の"n"はポートのシリアル番号(n = 0, 1, 2, 3)を表します。小文字の"x"はビットの通し番号(x = 0, 1, 2, 3, 4, 5, 6, 7)を表しています。
表10.2.1 GPIOレジスタ一覧
名前 | アドレス | 概要 | リセット値 |
---|---|---|---|
P0 | 80h | P0ポート入出力レジスタ | FFh |
P0_DIR | C4h | P0ポート方向制御レジスタ | 00h |
P0_PU | C5h | P0ポートプルアップ許可レジスタ | 00h/FFh |
P1 | 90h | P1ポート入出力レジスタ | FFh |
P1_IE | B9h | P1ポート入力許可レジスタ | FFh |
P1_DIR | BAh | P1ポート方向制御レジスタ | 00h |
P1_PU | BBh | P1ポートプルアップ許可レジスタ | FFh |
P2 | A0h | P2ポート入出力レジスタ | FFh |
P2_DIR | BCh | P2ポート方向制御レジスタ | 00h |
P2_PU | BDh | P2ポートプルアップ許可レジスタ | FFh |
P3 | B0h | P3ポート入出力レジスタ | FFh |
P3_DIR | BEh | P3ポート方向制御レジスタ | 00h |
P3_PU | BFh | P3ポートプルアップ許可レジスタ | FFh |
P4_OUT | C0h | P4ポート出力レジスタ | 00h |
P4_IN | C1h | P4ポート入力レジスタ(読み込み専用) | FFh |
P4_DIR | C2h | P4ポート方向制御レジスタ | 00h |
P4_PU | C3h | P4ポートプルアップ許可レジスタ | FFh |
P4_CFG | C7h | P4ポート制御レジスタ | 00h |
P5_IN | C7h | P5ポート入力レジスタ(読み込み専用) | 00h |
PIN_FUNC | CEh | ピン機能選択レジスタ | 00h |
PORT_CFG | C6h | ポート制御レジスタ | 0Fh |
XBUS_SPEED | FDh | バススピード制御レジスタ | FFh |
XBUS_AUX | A2h | バス補助制御レジスタ | 00h |
ポート制御レジスタ(PORT_CFG):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:4] | bPn_DRV | RW | Pn ポート出力ドライブ能力選択 0: ドライブ電流5mAレベルを選択。 1: P0/P2/P3はドライブ電流20mAレベル、P1はドライブ電流10mAレベルを選択。 | 0000b |
[3:0] | bPn_OC | RW | Pnポートオープンドレイン出力許可 0: プッシュプル出力に設定。 1: オープンドレイン出力に設定。 | 1111b |
Pnポート入出力レジスタ(Pn):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | Pn.0~Pn.7 | RW | Pn.xピンの入力およびデータ出力ステータスビットです。ビット単位でのアクセス可能 | FFh |
Pnポート方向制御レジスタ(Pn_DIR):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | Pn_DIR | RW | Pn.xピン方向設定 | 00h |
P0ポートプルアップ許可レジスタ(P0_PU)とPnポートプルアップ許可レジスタ(Pn_PU), n = 1/2/3:
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | P0_PU | RW | P0.xピンプルアップ抵抗が有効になります(En_P0_Pullup = 0が構成されている場合) | 00h | P0.xピンプルアップ抵抗が有効になります(En_P0_Pullup = 1が構成されている場合) | FFh |
[7:0] | Pn_PU | RW | Pn.xピンのプルアップ抵抗が有効になります。 0: プルアップを無効 1: プルアップを有効 | FFh |
Pnポートの構成は、PORT_CFGのbPn_OC、ポート方向制御レジスタのPn_DIR、ポートプルアップ許可レジスタのPn_PUの組み合わせにより、以下のように実装されています。
表10.2.2 ポート構成レジスタの組み合わせ
bPn_OC | Pn_DIR | Pn_PU | 概要 |
---|---|---|---|
0 | 0 | 0 | ハイインピーダンス入力モード、ピンにプルアップ抵抗なし |
0 | 0 | 1 | プルアップ入力モード、ピンはプルアップ抵抗付き |
0 | 1 | x | プッシュプル出力モードでは、対称駆動が可能なため、大電流を出力したり吸収したりすることができます |
1 | 0 | 0 | ハイインピーダンス入力弱擬似双方向モード、オープンドレイン出力、端子にプルアップ抵抗なし |
1 | 1 | 0 | ハイインピーダンス入力擬似双方向モード、オープンドレイン出力、ピン上のプルアップ抵抗なし、出力がLOWからHIGHに変化すると、自動的に2クロックサイクルでHIGHを駆動し、変換を高速化します |
1 | 0 | 1 | 弱擬似双方向モード(8051の模倣)、オープンドレイン出力、サポート入力、プルアップ抵抗付きピン |
1 | 1 | 1 | 準双方向モード(標準8051)、オープンドレイン出力、サポート入力、ピンは、出力がLOWからHIGHに変化するときにプルアップ抵抗を持っている、それは自動的に変換を高速化するために2クロックサイクルのためにHIGHを駆動します |
ポートP0~P3は、純粋な入力またはプッシュプル出力と準双方向モードをサポートしています。ポート P4 は純入力またはプッシュプル出力、その他のモードに対応しています。各端子には VDD33 に接続された自由に制御可能な内部プルアップ抵抗と GND に接続された保護ダイオードを内蔵しています。
図10.2.1は、P1ポートのP1.x端子の等価回路図です。P1_IEとAIN、ADC_CHANNを除去した後、P0、P2、P3ポートに適用することができます。
図10.2.1 I/Oピン等価回路図
P1ポート入力許可レジスタ(P1_IE):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | P1_IE | RW | P1.xピン入力許可。 0: ADCに使用され、デジタル入力は無効 1: デジタル入力が有効 | FFh |
10.3 P4ポート
P4ポート入力許可レジスタ(P4_OUT):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | P4_OUT.0~P4_OUT.7 | RW | P4.xピンデータ出力ビットです。ビット単位アクセス可能 | 00h |
P4ポート入力レジスタ(P4_IN):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | P4_IN | R0 | P4.xピン入力ステータスビット | FFh |
P4ポートプルアップ許可レジスタ(P4_PU):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | P4_PU | RW | P4.xプルアップ抵抗が有効になっています。 0: プルアップを無効 1: プルアップを有効 | FFh |
P4ポート方向制御レジスタ(P4_DIR):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:0] | P4_DIR | RW | P4.xのピン方向の設定 0: 入力 1: 出力 | 00h |
P4ポート制御レジスタ(P4_CFG)とP5ポート入力レジスタ(P5_IN):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
7 | P5.7 | R0 | P5.7ピン入力ステータスビット | 0 |
6 | bIO_INT_ACT | R0 | GPIO割り込み要求の有効化状態です。 | 0 |
5 | P5.5 | R0 | P5.5ピン入力ステータスビットと制御可能な内蔵プルダウン抵抗 | 0 |
4 | P5.4 | R0 | P5.4ピン入力ステータスビットと制御可能な内蔵プルダウン抵抗 | 0 |
3 | bSPI0_PIN_X | RW | SPI0ピンSCS/SCKマッピング許可です。 0: P1.4/P1.7が使用されます。 1: P4.6/P4.7が使用されます。 | 0 |
2 | bP4_DRV | RW | P4ポートの出力ドライブ能力選択。 0: ドライブ電流5mAレベル 1: ドライブ電流20mAレベル | 0 |
1 | P5.1 | R0 | P5.1ピン入力ステータスビットと制御可能な内蔵プルダウン抵抗 | 0 |
0 | P5.0 | R0 | P5.0ピン入力ステータスビットと制御可能な内蔵プルダウン抵抗 | 0 |
10.4 GPIOマルチプレックスとマッピング
CH559 の I/O 端子の一部には代替機能があります。電源投入後は、すべて汎用 I/O ピンです。異なる機能モジュールが有効になった後、対応するピンはそれぞれの機能モジュールの対応する機能ピンとして構成されます。
ピン機能選択レジスタ(PIN_FUNC):
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
7 | bPWM1_PIN_X | RW | PWM1/PWM2ピンマッピング許可ビットです。 0: PWM1/2はP2.4/P2.5を使用 1: PWM1/2はP4.3/P4.5を使用 | 0 |
6 | bTMR3_PIN_X | RW | PWM3/CAP3ピンマッピング許可ビットです。 0: PWM3/CAP3はP1.2を使用 1: PWM3/CAP3はP4.2を使用 | 0 |
5 | bT2EX_PIN_X | RW | T2EX/CAP2ピンマッピング許可ビットです。 0: T2EX/CAP2はP1.1を使用 1: T2EX/CAP2はP2.5を使用 | 0 |
4 | bUART0_PIN_X | RW | UART0ピンマッピング許可ビットです。 0: RXD0/TXD0はP3.0/P3.1を使用 1: RXD0/TXD0はP0.2/P0.3を使用 | 0 |
3 | bXBUS_EN | RW | xBUS外部バス機能許可ビット。 0: 外部バスを無効 1: P0ポートを8ビットのデータバスとして、P3.6/P3.7をバスアクセス時の書き込み/読み出しストローブ制御として有効にします。 | 0 |
2 | bXBUS_CS_OE | RW | xBUS外部バスチップセレクト出力許可ビットです。 0: チップセレクトの出力を無効にし、外部回路でデコードすることができます。 1: P3.4がCS0に設定され(XCS0チップセレクト0, アクティブロー), ALEが無効の時はバスアドレスA15が反転してP3.3(チップセレクト1, アクティブローに相当)に出力されます。 | 0 |
1 | bXBUS_AH_OE | RW | xBUS外部バスハイ 8 ビットアドレス出力許可ビット。 0: 出力を無効にします。 1: MOVX_@DPTR命令が外部バスにアクセスしている間は、出力を無効にします。P2ポートの出力バスアドレスは上位8ビットです。 | 0 |
0 | bXBUS_AL_OE | RW | xBUS 外部バスの下位 8 ビットのアドレス出力許可ビットです。 0: 多重化されたアドレスモードです。外部バスへのアクセス時には必要に応じて下位8ビットのアドレスがデータバスと多重化され、外部回路はALEでラッチ制御されます。 1: ダイレクトアドレスモードです。下位8ビットのアドレスA0~A7はP4.0~P4.5、P3.5~P2.7を介して出力されます。 | 0 |
表10.2.1 I/Oピン等価回路図
GPIO | その他の機能 : 左から優先順位の高い順 |
---|---|
P0[0] | AD0, UDTR/bUDTR, P0.0 |
P0[1] | AD1, URTS/bURTS, P0.1 |
P0[2] | AD2, RXD_/bRXD_, P0.2 |
P0[3] | AD3, TXD_/bTXD_, P0.3 |
P0[4] | AD4, UCTS/bUCTS, P0.4 |
P0[5] | AD5, UDSR/bUDSR, P0.5 |
P0[6] | AD6, URI/bURI, P0.6 |
P0[7] | AD7, UDCD/bUDCD, P0.7 |
P1[0] | AIN0, T2/bT2, CAP1/bCAP1, P1.0 |
P1[1] | AIN1, T2EX/bT2EX, CAP2/bCAP2, P1.1 |
P1[2] | AIN2, PWM3/bPWM3, CAP3/bCAP3, P1.2 |
P1[3] | AIN3, P1.3 |
P1[4] | AIN4, SCS/bSCS, P1.4 |
P1[5] | AIN5, MOSI/bMOSI, P1.5 |
P1[6] | AIN6, MISO/bMISO, P1.6 |
P1[7] | AIN7, SCK/bSCK, P1.7 |
P2[0] | A8, P2.0 |
P2[1] | MOSI1/bMOSI1, A9, P2.1 |
P2[2] | MISO1/bMISO1, A10, P2.2 |
P2[3] | SCK1/bSCK1, A11, P2.3 |
P2[4] | PWM1/bPWM1, A12, P2.4 |
P2[5] | TNOW/bTNOW, PWM2/bPWM2, A13, T2EX_/bT2EX_, CAP2_/bCAP2_, P2.5 |
P2[6] | RXD1/bRXD1, A14, P2.6 |
P2[7] | TXD1/bTXD1, DA7/bDA7, A15, P2.7 |
P3[0] | RXD/bRXD, P3.0 |
P3[1] | TXD/bTXD, P3.1 |
P3[2] | LED0/bLED0, INT0/bINT0, P3.2 |
P3[3] | LED1/bLED1, !A15, INT1/bINT1, P3.3 |
P3[4] | LEDC/bLEDC, XCS0/bXCS0, T0/bT0, P3.4 |
P3[5] | DA6/bDA6, T1/bT1, P3.5 |
P3[6] | WR/bWR, P3.6 |
P3[7] | RD/bRD, P3.7 |
P4[0] | LED2/bLED2, A0, RXD1_/bRXD1_, P4.0 |
P4[1] | A1, P4.1 |
P4[2] | PWM3_/bPWM3_, CAP3_/bCAP3_, A2, P4.2 |
P4[3] | PWM1_/bPWM1_, A3, P4.3 |
P4[4] | LED3/bLED3, TNOW_/bTNOW_, TXD1_/bTXD1_, A4, P4.4 |
P4[5] | PWM2_/bPWM2_, A5, P4.5 |
P4[6] | XI, SCS_/bSCS_, P4.6 |
P4[7] | XO, SCK_/bSCK_, P4.7 |
P5[0] | DM/bDM, P5.0 |
P5[1] | DP/bDP, P5.1 |
P5[4] | HM/bHM, ALE, XB, P5.4 |
P5[5] | HP/bHP, !A15, XA, P5.5 |
P5[7] | RST/bRST, P5.7 |
上表の左から順に記載されている優先順位は、複数の機能モジュールが競合して GPIO を使用する場合の優先順位を示しています。例えば、P2ポートは出力バスアドレスの上位8ビットに設定されています。 実際にA8~A11アドレスのみを使用している場合は、A12~A15アドレスを使用していないときにP2.4~P2.7ピンを無駄にしないように、P2.4/P2.5はより優先度の高いPWM1/PWM2機能に、P2.6はRXD1機能に、P2.7はより優先度の高いTXD1やDA7機能に使用することができます。