ブートモードの選択
オプションバイトに格納されている設定ビット nBOOT0/nBOOT1 を使用して,3種類のブートモードを選択できます.
| ブートモード選択 | . | モード | . |
|---|---|---|---|
| nBOOT1 | nBOOT0 | ブートメモリサイズBoot memory size ==0 | ブートメモリサイズBoot memory size !=0 |
| X | 0 | メインフラッシュブート | メインフラッシュブート |
| 0 | 1 | SRAMブート | SRAMブート |
| 1 | 1 | N/A | ロードフラッシュブート(Load Flash boots) |
クロックソース
LSEクロックソース
このボードではクロックソースを3つから選択できます.
オンボード水晶発振子(工場出荷時のデフォルト設定)
ボード上の32.768 kHz水晶発振子をHSEクロックソースとして使用します.
PC1からクロック入力
CN3に引き出された PC1 ピンから外部クロック信号を入力できます.
この場合は,ボード上の R49 をオープンにします.
LEXT未使用
マイコンの PB7 および PC1 を GPIO として使用します.
マイコン
内蔵SRAM
PY32L020シリーズは3KBのSRAMを搭載しています.バイト(8ビット),ハーフワード(16ビット),ワード(32ビット)単位でアクセスできます.
定義されたアドレス範囲外のメモリにアクセスすると、HardFault割り込みが発生します.
フラッシュメモリ
次の2つの物理領域で構成されています.
メインフラッシュ領域
24KB(アプリケーションおよびユーザデータ用).ユーザ設定により,最大4KBをユーザブートローダとして構成できます.
情報領域(0.75KB)
工場出荷時設定バイト(0,128バイト).
次の情報を格納するために使用します.
・ HSI周波数選択値および対応するトリミング値
・ HSIの異なる周波数に対応する消去および書き込み時間の構成パラメータ値
工場出荷時設定用バイト(128バイト)
トリミングデータ(HSIトリミングを含む)および電源投入時の検証コードの格納に使います.
UID(128バイト)
UIDの格納に使います.
オプションバイト(128バイト)
ハードウェアおよびストレージ保護に関する設定を格納します.
ユーザOTPメモリ(128バイト)
ユーザデータを格納します.
フラッシュメモリのインターフェースは,AHBプロトコルに基づいて命令読み出しおよびデータアクセスできます.レジスタを介したフラッシュメモリの基本的な書き込みおよび消去動作を実現します.
内蔵フラッシュメモリ
フラッシュメモリの主な仕様
| メインフラッシュブロック | 最大24KB(6 K × 32ビット) |
|---|---|
| 情報ブロック | 0.75 KB(192 × 32ビット) |
| ページサイズ | 128バイト |
| セクタサイズ | 4KB |
| フラッシュメモリインターフェースの機能 | フラッシュメモリのプログラム/消去動作 |
| . | 書き込み保護 |
| . | 読み出し保護 |
フラッシュメモリの機能概要
フラッシュメモリの構成
フラッシュメモリは,コードおよびデータ定数の両方を格納できる64ビット幅のメモリセルで構成されています.ページサイズは128バイト,セクタサイズは4KBです.
機能的には,メインフラッシュ(最大容量24KB)とインフォメーションフラッシュ(最大容量0.75KB)に分割されます.
メインフラッシュに対しては,ページ消去操作を行うことができます.
書き込み保護が設定されている場合でも,メインフラッシュに対して一括消去(Mass erase)を行えます.
電源制御
電源供給(Power supply)
電源供給概要
| No. | 電源 | 電圧 | 説明 |
|---|---|---|---|
| 1 | VCC | 1.7 ~ 5.5 V | 電源ピンを介して供給されます. |
| 2 | VCCA | 1.7 ~ 5.5 V | ほとんどのアナログモジュールの電源は,VCCパッド(VCCの供給元と同じ) から供給されます |
| 3 | VCCIO | 1.7 ~ 5.5 V | VCCパッド経由で供給されるIO用の電源.IO電圧は,電源電圧(VCC)±0.3V程度 |
電圧レギュレータ
このマイコンには,3つの電圧レギュレータが搭載されています.
1:MR(メインレギュレータ)
Runモードで使います.
2:LPR(低消費電力レギュレータ)
Stopモードにおいて,より低い消費電力での動作を可能にします.
3:DLPR(ディープ低消費電力レギュレータ)
低消費電力モードにおいて、最小の消費電力を実現します.
Runモードでは,MRが動作し続けて1.2Vの電圧を出力し,LPRはオフになります.
Stopモードでは,MRまたはLPRのいずれから電力を供給するかをソフトウェアで選択できます.
電源監視
リセット
パワーオンリセット(POR)およびパワーダウンリセット(PDR)機能を内蔵しています.全ての動作モードにおいて機能します.
POR/PDRに加え,BOR(ブラウンアウトリセット)機能も実装されています.
BORを有効にする場合,オプションバイトによってBORの閾値を選択でき,電圧上昇時および下降時の検出ポイントを個別に設定できます.
低消費電力制御
システムリセットまたはパワーオンリセット後,マイコンはデフォルトでRunモード(動作モード)になります.CPUを動作させ続ける必要がない場合には,電力を節約するための低消費電力モードを利用できます.
低消費電力モード
概要
Runモードに加え,3つの低消費電力モードがあります.
1:Sleepモード
CPUクロックを停止させた状態でも,周辺回路(NVIC,SysTickなど)が動作し続けるように設定できます.
2:Stopモード
SRAMおよびレジスタの内容は保持されます.HSI(高速内部発振器)は停止します.
3:Deep_stopモード
Stopモードと同様ですが,復帰(ウェイクアップ)に長い時間を要します.GPIO,IWDG(クロック源:LSE),NRST,LPTIM(クロック源:LSE)によってDeep_stopモードから復帰できます.
Stopモードでは,LSI,LSE,LPTIMを動作させ続けることができます.
Stopモードでは,ソフトウェアによってVR(電圧レギュレータ)の状態を制御し,MR(メインレギュレータ)またはLPR(低消費電力レギュレータ)のどちらから給電するかを設定できます.
LPRで給電する場合,消費電力は低減されますが復帰時間は長くなります.
MRで給電する場合,消費電力は増加しますが,短い時間で復帰できます.
さらに,Runモードにおいても次の方法で消費電力を低減できます.
・システムクロック周波数の低減
・アイドル状態の周辺回路のクロック停止
スリープモード
スリープモードへの移行
スリープモードへ移行するには,WFI(Wait for Interrupt;割り込み待ち)またはWFE(Wait for Event;イベント待ち)命令を実行します.
スリープモードへの移行メカニズムは,次の2つのオプションから選択できます.
どちらを使うかは,Cortex-M0+システム制御レジスタの SLEEPONEXIT ビットで設定します.
Sleep-now(即時スリープ)
SLEEPONEXIT ビットがクリアされている場合, WFI または WFE 命令が実行されると直ちにマイコンはスリープモードに移行します.
Sleep-on-exit(終了時スリープ)
SLEEPONEXIT ビットがセットされている場合,マイコンは最低優先度の ISR (割り込みサービスルーチン)から抜けると直ちにスリープモードに移行します.
スリープモード中,全てのI/Oピンは Run モード(動作モード)と同じ状態を維持します.
スリープモードからの復帰
WFI 命令を使用してスリープモードに移行した場合, NVIC (入れ子構造ベクトル割り込みコントローラ)によって受け付けられた任意の周辺機能割り込みにより,デバイスをスリープモードから復帰させることができます.
WFE 命令を使用してスリープモードに移行した場合,イベントが発生すると直ちにマイコンはスリープモードから復帰します.
復帰イベントは次のいずれかの方法で発生します.
1:
周辺機能制御レジスタを書き換えることで割り込みを有効にする(ただし NVIC では有効にしない)とともに,Cortex-M0+システム制御レジスタの SEVONPEND ビットを有効にします.マイコンが WFE から復帰した際、周辺機能の割り込みペンディングビットをクリアする必要があります.
2:
外部または内部の EXTI ラインをイベントモードに設定します.CPU が WFE から復帰した際、周辺機能の割り込みペンディングビットをクリアする必要はありません.このモードでは,割り込みの入り口/出口処理に時間を費やさないため,最短時間で復帰できます.
Stopモード
Stopモードは,Cortex-M0+のディープスリープ(Deep Sleep)モードに周辺回路のクロックゲーティングを組み合わせたものです.電圧レギュレータは,ノーマルモードまたは低消費電力モードのいずれかに設定可能です.Stopモードでは,HSI はオフになりますが,SRAM およびレジスタの内容は保持されます.
LSI,LSE,LPTIM,IWDGはソフトウェアで設定可能です.低消費電力ウェイクアップ機能や一部の RCC ロジックは動作し続けますが,残りの VDDD ドメイン内のデジタルモジュールへのクロック入力はオフになります.
Stopモード中,全てのI/OピンはRunモードと同じ状態を維持します.
Stopモードへの移行
Stopモードでの消費電力をさらに低減するために, PWR_CR1.LPR を設定することで,異なるStopモードへ移行することができます.
フラッシュメモリへ書き込み中の場合,メモリへのアクセスが完了するまでStopモードへの移行は遅延されます(ソフトウェアは VFlash_SR レジスタの BSY ビットを読み取り,消去および書き込み動作が完了したかどうかを判断します).
APB ドメインへアクセス中の場合にも,APB アクセスが完了するまでStopモードへの移行は遅延されます.
Stopモードからの復帰
割り込みまたはウェイクアップイベントの発行によりStopモードから復帰する際,HSI 発振器がシステムクロックとして選択されます.
電圧レギュレータが低消費電力モードで動作している場合,Stopモードから復帰する際に起動遅延が追加で発生します.
Stopモード中に内部レギュレータをオンのままにしておくと,消費電力は増加しますが,起動時間は短縮されます.
システムクロック周波数の低減
Runモードにおいて,プリスケーラレジスタで分周設定を行うことにより,システムクロック( SYSCLK , HCLK , PCLK )の周波数を低減できます.これらのプリスケーラは,Sleepモードへの移行前に周辺回路のクロック周波数を低減するためにも使用可能です.
周辺回路のクロックゲーティング
Runモードにおいて,個々の周辺回路やメモリの AHB クロック( HCLK )および APB クロック( PCLK )を任意のタイミングで停止させ,消費電力を低減することができます.
Sleepモードでの消費電力をさらに低減するために, WFI または WFE 命令の実行前に周辺回路のクロックを停止させることも可能です.
リセット
パワーリセットとシステムリセットの2種類のリセットがあります.
リセット要因
パワーリセット
パワーリセットは,次のいずれかのイベントが発生したときに生成されます。
・電源投入/電源遮断リセット ( POR/PDR )
・ブラウンアウトリセット ( BOR )
システムリセット
システムリセットは,クロック制御/ステータスレジスタ内のリセットフラグおよび RTC ドメイン内のレジスタを除く,全てのレジスタをリセット値に設定します.
システムリセットは,次のいずれかのイベントが発生したときに生成されます.
・NRSTピン(外部リセット)
・独立ウォッチドッグリセット ( IWDG )
・SYSRESETREQ ソフトウェアリセット
・オプションバイトローダリセット
・パワーリセット (POR/PDR,BOR)
リセット要因は, RCC_CSR レジスタのリセット識別ビットを確認することで特定できます.
NRSTピン(外部リセット)
リセット入力
デバイス内部で生成されたリセットは,このピンには出力されません。
GPIO
特定のオプションビット( NRST_MODE )により, NRST ピンの動作を以下のように設定可能です.
このモードでは,NRST ピンに入力された有効なリセット信号はデバイス内部のロジックに伝達されますが,
このモードでは,GPIO機能(PC0)は使用できません.
パルスジェネレータは,各内部リセット要因に対して,少なくとも40µsのリセットパルス幅を保証します.
このモードでは,このピンをPC10標準GPIOとして使用できます.ピンのリセット機能は使用できません.
リセットはデバイス内部のリセット要因からのみ可能であり,その信号はピンには出力されません.
クロック
クロックソース
外部高速クロック(HSEバイパス)
外部クロックは PA6 から入力されます.
外部クロック信号が有効になると, PA6 のIO入力機能が自動的に有効化されます.その際, PA6 をGPIOとして使用することはできません.
外部低速クロック(LSE)
LSEクリスタルは,32.768kHzの低速外部クリスタルまたはセラミック共振子です.これは,リアルタイムクロックなどに使用できます.
LSEクリスタルのオン/オフはバックアップドメイン制御レジスタ( RCC_BDCR )の LSEON ビットによって制御され,駆動能力は LSE_DRIVER[1:0] によって調整可能です.
バックアップドメイン制御レジスタ( RCC_BDCR )の LSERDY ビットは、LSEクリスタルの発振が安定しているかどうかを示します.起動時には,ハードウェアによってこのビットが1にセットされるまで,LSEクロック信号は出力されません.
クロック割り込みレジスタで許可されている場合,割り込み要求を発生させることができます.
外部クロックソース(LSEバイパス)
OSC32_OUT ピンはフローティング状態にします.
内部高速クロックHSI
内部低速クロックLSI
このモードでは,32.768kHzの周波数を持つ外部クロックソースを供給する必要があります.
バックアップドメイン制御レジスタ( RCC_BDCR )の LSEBYP ビットおよび LSEON ビットを設定することでこのモードを選択できます.
OSC32_OUT ピンをフローティング状態に保ちつつ,デューティ比50%の外部クロック信号を OSC32_IN ピンに接続する必要があります.
内部高速クロックは,システムクロックとして使用します.電源投入時のデフォルトのシステムクロック周波数は24MHzです.ソフトウェア設定により48MHzに切り替えることができます.
内部低速クロックは,IWDG および LPTIM のクロックとして,またデバイスが低速で動作する際のシステムクロックとして使用されます.クロックの中心周波数は32.768kHzに設計されています.
クロックセキュリティシステム(CSS)
クロックセキュリティシステムはソフトウェアで有効にできます.この場合,LSEの起動遅延後にクロック検出機能がオンになります.LSEがオフになると,クロック検出機能もオフになります.LSEクロックに障害が検出されると,LSEオシレータは自動的に無効になり,クロック障害イベントが高度制御タイマ(TIM1)のブレーク入力に送信されます.そしてソフトウェアに障害を知らせる割り込み(クロックセキュリティシステム割り込み;CSSI)が生成されます.これにより,救援操作を行うことができます.
CSSIは,Cortex-M0+のNMI(マスク不能割り込み)と結びついています.
注意: CSSが有効な場合,HSEクロックが故障するとCSS割り込みが発生し,NMIがトリガされます.CSS割り込み保留ビットがクリアされない限り,NMIはトリガされ続けます.そのため,NMI ISRでは,クロック割り込みレジスタ(RCC_CIR)のCSSCビットを設定して,CSS割り込みをクリアする必要があります.
LSEオシレータが直接または間接的にシステムクロックとして使用されている場合,故障が検知されるとシステムクロックはLSIオシレータに切り替わり,LSEオシレータは無効になります.
出力クロック
ボードレベルのアプリケーションを便利にしたり,BOMコストを節約したり,デバッグ要件を満たすためにデバイスはクロック出力機能を提供する必要があります.つまり,MCO信号(並列周波数分周)がGPIOのマルチプレックス機能を通じてクロック出力機能を実現するために使われます.
出力クロック源
- HSI
- SYSCLK
- HSE (bypass)
- LSE
- LSI
クロックキャリブレーション
温度や電圧により,内部クロック(HSI,LSIなど)の周波数は変動します.システムの外部作業環境の変化に応じて,周波数のずれを補正できます.
外部環境が変化したときに,チップ内部のクロック周波数をリアルタイムに測定し,問題を特定します.そして,ソフトウェアで内部クロックのキャリブレーションパラメータを微調整し,動的にキャリブレーションします.
HSIキャリブレーション
クロック測定
基本的な原理はクロックソースの比率に基づいており,精度は2つのクロックソースの比率に密接に関連します.比率が大きいほど,測定は良くなります.
内部クロック周波数は,LSE信号の連続するエッジ間のHSIクロック数で測定できます.LSEの高精度(ppmレベル)を使うことで,同じ分解能でクロック周波数を測定できます.
HSIオシレータには,ユーザがアクセスできる専用のキャリブレーションビットがあります.
TIM14の入力キャプチャチャネルは,GPIOかチップ内クロックのどちらかを示します.この選択は,TIM14_ORのTI1_RMP[1:0]レジスタで行います.選択肢は次の通りです.
- TIM14チャンネル1はGPIOに接続される
- TIM14チャンネル1はMCO(マイクロコントローラクロック出力)に接続される
クロックキャリブレーション
HSIクロックの異常が検出されると,ソフトウェアに通知されて中断処理が行われます.内部クロックのキャリブレーションパラメータは,ソフトウェアによって微調整され,動的キャリブレーションを実現します.
TIM14チャネル1の入力キャプチャにLSEをMCOマルチプレクサ経由で接続する主な目的は,HSIを正確に測定することです(この場合,HSIはシステムクロックソースに設定する必要がある).2つの連続したLSE信号の立ち上がり/立ち下がりの間でHSIクロックの回数をカウントすることで,内部クロックサイクルを測定します.
これにより,外部クリスタルオシレータが接続されているときのLSEの高精度(ppm)を活用でき,内部クロックの周波数を同じ解像度で測定します.その後,環境に関わる周波数ドリフトを補正するためにクロック源を校正できます.
HSIはユーザがアクセスできる専用の校正レジスタビットで設計されています.この実装の基本原理は相対測定(例えばHSI/LSEの比率)です.精度は2つのクロック源の周波数比に関連します.
GPIO
リセット中およびリセット直後は,代替機能(AF)は有効ではなく,ほとんどのI/Oポートはアナログモードに設定されています.
リセット後,デバッグピンはAFプルアップ/プルダウン状態になります.
- PA2: SWCLK
プルダウンモード - PB6-SWDIO
プルアップモードです.ピンが出力として設定されている場合,出力データレジスタ(GPIOx_ODR)に書き込まれた値がI/Oピンに出力されます.出力ドライバは,プッシュプルモードまたはオープンドレインモードで使用可能です.
入力データレジスタ(GPIOx_IDR)は,AHB クロックサイクルごとにI/Oピン上のデータをキャプチャします.
全てのGPIOピンは,内部プルアップ抵抗およびプルダウン抵抗(弱)を備えており,GPIOx_PUPDRレジスタの値に応じて有効または無効に設定できます.
I/Oピンの代替機能マルチプレクサおよびマッピング
デバイスのI/Oピンは,マルチプレクサを介してオンボードの周辺機能(ペリフェラル)やモジュールに接続されています.このマルチプレクサにより,あるI/Oピンに対して一度に接続できる周辺機能の代替機能(AF)は1つだけに制限されます.そのため,同一のI/Oピンに割り当てられた周辺機能間で競合が発生することはありません.
各I/Oピンは,最大8つの代替機能入力(AF0~AF7)を持つマルチプレクサを備えており,これらは GPIOx_AFRL レジスタ(ピン0~7用)によって設定可能です.
リセット後のマルチプレクサの選択状態は、代替機能0(AF0)です.I/Oは, GPIOx_MODER レジスタを介して代替機能モードに設定されます.
この柔軟なI/Oマルチプレクサ・アーキテクチャに加え,各周辺機能にも代替機能がマッピングされています.
小型パッケージにおいて利用可能な周辺機能の数を最適化するために,異なるI/Oピンに割り当てられます.
特定の構成でI/Oを使用するには,次の手順に従う必要があります.
デバッグ機能
デバイスのリセット後,これらのピンは直ちにデバッガホストで使用可能な代替機能(alternate function)ピンとして割り当てられます.
GPIO
GPIOx_MODER レジスタで,対象のI/Oを出力,入力,またはアナログのいずれかに設定します.
周辺機能の代替機能(Peripheral alternate function)
・GPIOx_AFRL レジスタで,I/Oを目的のAFx(代替機能)に接続します.
・GPIOx_OTYPER,GPIOx_PUPDR,GPIOx_OSPEEDER レジスタを使用して,それぞれのタイプ,プルアップ/プルダウン,および出力速度を選択します.
・GPIOx_MODER レジスタで,対象のI/Oを代替機能として設定します.
追加機能
・ADCやDACの接続は,GPIOモードの設定に関わらず,ADC または DAC のレジスタで有効にできます.ただし, ADC や COMP を使用する場合は, GPIOx_MODER レジスタでGPIOをアナログモードに設定することが推奨されます.
・発振器などの追加機能については,関連する PWR および RCC レジスタで必要な機能を設定します.これらの機能は,標準の GPIO レジスタでの設定よりも優先されます.
I/Oポート制御レジスタ
各GPIOポートには,最大8つのI/Oを設定するための4つの32ビット・メモリマップ制御レジスタ(GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR)が用意されています. GPIOx_MODER レジスタは,I/Oモード(入力,出力,AF,アナログ)の選択に使用されます. GPIOx_OTYPER およびGPIOx_OSPEEDR レジスタは,出力タイプ(プッシュプルまたはオープンドレイン)と速度の選択に使用されます. GPIOx_PUPDR レジスタは、I/Oの方向にかかわらず,プルアップまたはプルダウンの選択に使用されます.
各GPIOには,入力データレジスタ( GPIOx_IDR )と出力データレジスタ( GPIOx_ODR )という,2つの16ビット・メモリマップ・データレジスタがあります. GPIOx_ODR は出力するデータを保持し,読み出し/書き込みが可能です.I/Oを介して入力されたデータは,読み出し専用レジスタである入力データレジスタ( GPIOx_IDR )に格納されます.
I/O data bitwise handling
ビットセット/リセットレジスタ( GPIOx_BSRR )は,アプリケーションが出力データレジスタ( GPIOx_ODR )の各ビットを個別にセット(1に設定)およびリセット(0に設定)できるようにする32ビットレジスタです.このレジスタのサイズは GPIOx_ODR の2倍です.
GPIOx_ODR の各ビットには, GPIOx_BSRR 内の2つの制御ビット,BS(i)とBR(i)が対応しています.BS(i)ビットに1を書き込むと,対応するODR(i)ビットがセットされます.
BR(i)ビットに1を書き込むと,対応するODR(i)ビットがリセットされます.
GPIOx_BSRR のビットに0を書き込んでも, GPIOx_ODR の対応するビットには影響しません.GPIOx_BSRR において,あるビットに対してセットとリセットの両方の操作を同時に行おうとした場合は,セット操作が優先されます.
GPIOx_BSRR レジスタを使用してGPIOx_ODR の個々のビット値を変更する操作はワンショットの動作であり、 GPIOx_ODR のビットをロックするものではありません. GPIOx_ODR のビットには,いつでも直接アクセス可能です. GPIOx_BSRR レジスタは,アトミックなビット単位の操作を行う手段を提供します.
GPIOx_ODR レジスタのビット単位の書き込みを行う際,ソフトウェアで割り込みを無効にする必要はありません.単一のアトミックな AHB 書き込みアクセスで,1つまたは複数のビットを変更することが可能です.
GPIOロック機構
GPIOx_LCKR レジスタに対して特定の書き込みシーケンスを実行することで,GPIO制御レジスタを固定(フリーズ)することができます.固定対象となるレジスタは, GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRLです.
GPIOx_LCKR レジスタへの書き込みには,特定の書き込み/読み出しシーケンスを実行する必要があります.このレジスタのビット16に対して適切な LOCK シーケンスが実行されると,LCKR[7:0] の値を使用してI/Oの設定がロックされます(書き込みシーケンス中,LCKR[7:0] の値は一定である必要があります).ポートビットに対してLOCK シーケンスが実行されると,そのポートビットの値は,次のマイコンリセットまたは周辺回路リセットが行われるまで変更できなくなります. GPIOx_LCKR の各ビットは,制御レジスタ(GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL)内の対応するビットを固定します.
LOCK シーケンスは,GPIOx_LCKR レジスタへのワード(32ビット)アクセスを使用してのみ実行可能です.これは, GPIOx_LCKR のビット16をビット[7:0]と同時に設定する必要があるためです.
I/Oオルタネート機能の入出力
各I/Oで利用可能なオルタネート機能(代替機能)の入出力のいずれかを選択するために,2つのレジスタが用意されています.これらのレジスタを使用することで,ユーザはアプリケーションの要件に応じて,オルタネート機能を別のピンに接続することができます.
つまり, GPIOx_AF オルタネート機能レジスタを使用することで,各GPIOに複数の周辺機能が多重化(マルチプレクス)されているのです.これにより,アプリケーションは各I/Oに対して利用可能な機能のいずれかを選択できます.AF選択信号はオルタネート機能の入力と出力で共通なので,特定のI/Oのオルタネート機能入出力として単一のチャネルが選択されます.
全てのポートは外部割り込み機能を備えています.外部割り込みラインを使用するには,対象のピンがアナログモードに設定されておらず,かつ発振器用ピンとして使用されていない必要があります(これにより,入力トリガが有効に保たれます).
I/Oポートが入力として設定されている場合
・ 出力バッファは無効になります.
・ シュミットトリガ入力が有効になります.
・ GPIOx_PUPDR レジスタの値に応じて,プルアップ抵抗およびプルダウン抵抗が有効になります.
・ I/Oピン上のデータは,AHB クロックサイクルごとに入力データレジスタにサンプリングされます.
・ 入力データレジスタへの読み出しアクセスにより,I/Oの状態が取得されます.
出力構成
I/Oポートが出力として設定されている場合
出力バッファは無効になります
・オープンドレインモード
出力レジスタが 0 の場合,N-MOSがアクティブになります.出力レジスタが 1 の場合,ポートはHi-Z状態になります(P-MOSはアクティブになりません).
・プッシュプルモード
出力レジスタが 0 の場合,N-MOSがアクティブになります。出力レジスタが 1 の場合,P-MOSがアクティブになります.
・ シュミットトリガ入力が有効になります.
・ GPIOx_PUPDR レジスタの値に応じて,プルアップ抵抗およびプルダウン抵抗が有効になります.
・ I/Oピンのデータは, AHB クロックサイクルごとにサンプリングされ,入力データレジスタに取り込まれます.
・ 入力データレジスタを読み出すと,I/Oの状態が取得されます.
・ 出力データレジスタを読み出すと,最後に書き込まれた値が取得されます.
オルタネート機能の設定
I/Oポートがオルタネート機能として設定されている場合:
・ 出力バッファは,オープンドレイン・モードまたはプッシュプル・モードに設定可能です.
・ 出力バッファは,内部周辺回路からの信号(代替機能出力)によって駆動されます.
・ シュミットトリガ入力が有効になります.
・ PIOx_PUPDR レジスタの値に応じて,プルアップ抵抗およびプルダウン抵抗が有効になります.
・ I/Oピン上のデータは,AHBクロックサイクルごとにサンプリングされ,入力データレジスタに取り込まれます.
・ 入力データレジスタを読み出すことで,I/Oの状態を取得できます.
アナログ設定
I/Oポートがアナログ設定としてプログラムされている場合:
・出力バッファは無効になります.
・シュミットトリガ入力は無効になり,I/Oピンの全てのアナログ値で消費電力はゼロになります.シュミットトリガの出力は一定値(0)に固定されます.
・弱いプルアップ/プルダウン抵抗はハードウェアによって無効化されます( GPIOx_PUPDR を00に設定).
・入力データレジスタへの読み取りアクセスは値として1を取得します.
LSEオシレータのピンをGPIOとして使う
LSEオシレータがOFFになっているとき(リセット後のデフォルト状態),関連するオシレータピンは通常のGPIOとして使えます.
HSEやLSEオシレータがONになっているとき( RCC_CSR レジスタの LSEON ビットを設定した場合),対応するポートはアナログポートとして設定する必要があります.
オシレータがユーザ外部クロックモードで設定されている場合,クロック入力には OSC_IN または OSC32_IN ピンのみが予約され, OSC_OUT または OSC32_OUT ピンは引き続き通常のGPIOとして使えます.
GPIOレジスタ
周辺回路レジスタは,ワード,ハーフワード,またはバイトモードで書き込むことができます.
GPIOポートモードレジスタ ( GPIOA_MODER,GPIOB_MODER,GPIOC_MODER )
アドレスオフセット: 0x00
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 | 予約 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| MODE7[1:0] | MODE6[1:0] | MODE5[1:0] | MODE4[1:0] | MODE3[1:0] | MODE2[1:0] | MODE1[1:0] | MODE0[1:0] | ||||||||
| RW | RW | RW | RW | RW | RW | RW | RW | RW | RW | RW | RW | RW | RW | RW | RW |
| Bit | 名前 | R/W | リセット値 | 機能 |
|---|---|---|---|---|
| [15:0] | MODEy[1:0] | RW | 16'hFFEF(PA). 16 'hFFFF (PB, SWD configured), 16 'hEFFF (PB, SWD ot configured), 16'h000E (PC, SWD configured), 16'h000F (PC, SWD not configured) | y=7~0. I/Oモードの設定のためにソフトウェアから書き込まれます.00:入力モード,01:出力モード,10:Alternate 機能モード, 11: アナログモード(リセット状態) |
リセット値:
▲GPIOA
0x0000 FFEF
▲GPIOB
- Flashオプションバイト(SWD設定時): 0x0000 FFFF
- Flashオプションバイト(SWD未設定時): 0x0000 EFFF
▲GPIOC - Flashオプションバイト(SWD設定時): 0x0000 FFFF
- Flashオプションバイト(SWD未設定時): 0x0000 EFFF
GPIOポート プルアップ/プルダウン レジスタ( GPIOA_PUPDR, GPIOB_PUPDR, GPIOC_PUPDR )
アドレスオフセット: 0x0C
リセット値
▲GPIOA
0x0000 0020
▲GPIOB
- Flashオプションバイト(SWD設定時): 0x0000 0000
- Flashオプションバイト(SWD未設定時): 0x0000 1000
▲GPIOC - Flashオプションバイト(SWD設定時): 0x0000 0001
- Flashオプションバイト(SWD未設定時): 0x0000 0000
GPIOデータ入力レジスタ ( GPIOA_IDR,GPIOB_IDR,GPIOC_IDR )
現在のGPIOピンの状態を読み取ります.
アドレスオフセット:0x10
リセット値:0x0000 XXXX
GPIOポート出力レジスタ(GPIOA_ODR,GPIOB_ODR,GPIOC_ODR)
レジスタに書き込むことで対応するGPIOに出力します.
アドレスオフセット:0x14
リセット値:0x0000 0000
| ビット | 名前 | R/W | リセット値 | 機能 |
|---|---|---|---|---|
| [31:8] | 予約 | - | - | - |
| [7:0] | ODy | RW | 8’h0 |
y=7~0.ビットの値はソフトウェアから読み書きできます.ODRビットは, GPIOx_BSRR または GPIOx_BRRレジスタ(x = A~F)を操作することで独立してセット/リセットできます. |
GPIOポート ビット セット/リセット レジスタ( GPIOA_BSRR,GPIOB_BSRR,GPIOC_BSRR)
GPIOポート設定ロックレジスタ ( GPIOA_LCKR,GPIOB_LCKR,GPIOC_LCKR )
このレジスタは,ビット16(LCKK)に正しい書き込みシーケンスが適用されたときに,ポートビットの設定をロックするために使用されます.ビット[7:0]の値はGPIOの設定をロックするために使われます.書き込みシーケンス中,LCKR[7:0]の値は変更されてはいけません.ポートビットに対してLOCKシーケンスが適用されると,次のシステムリセットまでそのポートビットの値は変更できなくなります.
注: GPIOx_LCKR レジスタに書き込むには特定の書き込みシーケンスが必要です.このロックシーケンス中はワードアクセス(32ビット長)のみが許可されます.
各ロックビットは,特定の設定レジスタ(コントロールレジスタおよび代替機能レジスタ)を固定します.
アドレスオフセット: 0x1C
システム構成コントローラ ( SYSCFG )
PY32L020シリーズが持つ,システム構成コントローラのレジスタの目的は次の通りです.
- 特定のI/OポートにおけるI2Cアナログフィルタの有効化/無効化
- コード領域の先頭に配置されたメモリのリマッピング
- GPIOへの外部割り込みライン接続の管理
- 堅牢性機能の管理
SYSCFGレジスタ
SYSCFG構成レジスタ1 ( SYSCFG_CFGR1 )
このレジスタは,メモリの特定の設定や特殊なI/O機能の制御に使用されます.
アクセス可能なメモリのタイプの設定に,2ビット(アドレス0x0000 0000)を使います.これらのビットは,ソフトウェアによる物理的なリマップを選択し,ハードウェアによるBOOT選択をバイパスするために使用されます.リセット後,これらのビットは,実際のブートモード設定によって選択された値になります.
アナログ-デジタルコンバータ(ADC)
PY32L020には12ビットのSAR ADCが搭載されています.最大10チャネル(外部チャネル8つ,内部チャンネル2つ)を測定できます.ADCの内部電圧リファレンスはVREFBUF(1.5V,2.048V,2.5V)または電源電圧VCCです.
内部チャネルはTS_VINとVREFINTです.
各チャネルは,シングル,連続,スキャン,または非連続モードで実行できます.ADCの結果は,左揃えまたは右揃えの16ビットデータレジスタに格納されます.
電圧監視
アナログ電圧監視機能により,入力電圧がユーザが設定した上限値または下限値を超えたかどうかを検出できます.
省電力モード
低周波数時に消費電力が低くなる省電力モードがあります.
割り込みトリガ
電圧監視用のアナログウォッチドッグによって,選択したタイマに対して割り込みやトリガを生成できます.
ADCの主な特徴
- 高性能
— 分解能は12ビット,10ビット,8ビット,6ビットに設定可能
— ADC変換時間:12ビットで1.3µs(0.75Msps)
— 自己キャリブレーション
— サンプリング時間のプログラム可能
— データ整列モードのプログラム可能 - 低消費電力性能
- アナログ入力チャネル
— 8つの外部アナログ入力
— アプリケーションはPCLKの周波数を下げて低消費電力動作をしながらも,最適なADC性能を維持可能
— 自動オフモード:低周波PCLKのアプリケーションでのADCオーバーランを防止
— 内部温度センサ用チャネル1つ(TS_VIN)
— 内部基準電圧用チャネル1つ(VREFINT) - 変換の開始は次の方法で行えます
— ソフトウェア
— 極性を設定できるハードウェアトリガ(例:TIM1) - 変換モード
— シングルモード:単一チャネルを変換するか、チャネルのシーケンスをスキャンできます
— 連続モード:選択した入力を連続的に変換します
— 断続モード:トリガごとに選択した入力を一度だけ変換します - 割り込み生成
— サンプリング終了時
— 変換終了時
— シーケンス変換終了時
— アナログウォッチドッグ
— オーバーランイベント - アナログウォッチドッグ
キャリブレーション(ADCAL)
ADCにはキャリブレーション機能があります.手順中,ADCはキャリブレーション係数を計算し,次回ADCの電源オフまで内部的に適用されます.キャリブレーション中はアプリケーションでADCを使用せず,完了するまで待つ必要があります.
キャリブレーションをADC処理の前に行うことで,製造誤差に起因するチップごとに異なるオフセット誤差を取り除きます.
ADCソフトウェアキャリブレーション
キャリブレーションを開始するために,ファームウェア内で,ADCAL = 1に設定します.ADCのクロックとしては,システムクロックのみがサポートされます.
キャリブレーションが完了すると,ADCALはクリアされます.
ADCの動作条件が変わった場合(VCCの変化によってADCオフセットやミスマッチオフセットが生じます.主な要因は,次いで温度変化です),再度キャリブレーションを行えます.
キャリブレーションの手順を次に示します.
- CKMODE select system clock
- Set ADCAL=1
- Wait until ADCAL=0
コンパレータ(COMP)
汎用コンパレータがチップに内蔵されています.タイマと組み合わせて使えます.コンパレータは次のような用途で使えます.
ウェイクアップ
アナログ信号でトリガして,低電力モードからウェイクアップさせる
アナログ信号の調整
コンパレータをタイマのPWM出力と接続して,サイクルごとの電流制御ループ
COMPの主な機能
各コンパレータは,正または負の入力端子を構成可能であり,柔軟な電圧選択が可能です.
・複数のI/Oピン
・電源電圧(VCC)および分圧回路による15段階の分圧値(1/16,2/16... ,15/16)を利用可能
・内部リファレンスバッファ(1.5 V,2.048 V,2.5 V)および分圧回路による15段階の分圧値(1/16、2/16...
15/16)を利用可能
出力はI/Oまたはタイマ入力への接続によってトリガ可能
・OCREF_CLRイベント(サイクルごとの電流制御)
・高速PWMシャットダウン用のブレーキ機能
参考文献
(1)PY32L020_Datasheet_V2.0