100
© 2013 Microchip Technology Inc. DS61154C_JP - p.34-1 コントローラ エリア ネットワーク (CAN) 34 セクション 34. コントローラ エリア ネットワーク (CAN) ハイライト 本章では以下のトピックを説明します。 34.1 はじめに ............................................................... 34-2 34.2 CAN メッセージのフォーマット........................................... 34-4 34.3 CAN レジスタ........................................................... 34-9 34.4 CAN モジュールの有効化と無効化........................................34-47 34.5 CAN モジュールの動作モード............................................34-47 34.6 CAN メッセージの処理..................................................34-49 34.7 CAN メッセージの送信..................................................34-56 34.8 CAN メッセージのフィルタ処理..........................................34-68 34.9 CAN メッセージの受信..................................................34-75 34.10 ビットタイミング ......................................................34-83 34.11 CAN のエラー管理......................................................34-87 34.12 CAN 割り込み..........................................................34-90 34.13 CAN 受信メッセージのタイムスタンプ処理................................34-94 34.14 省電力モード ..........................................................34-95 34.15 関連アプリケーション ノート ............................................34-96 34.16 改訂履歴 ..............................................................34-97 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

Embed Size (px)

Citation preview

Page 1: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

注意 : この日本語版文書は参考資料としてご利用ください。 新情報は必ずオリジナルの英語版をご参照願います。

セクション 34. コントローラ エリア ネットワーク (CAN)

コントローラ

エリア

ネットワーク

(CA

N)

34

ハイライト

本章では以下のトピックを説明します。

34.1 はじめに ...............................................................34-2

34.2 CAN メッセージのフォーマット...........................................34-4

34.3 CAN レジスタ...........................................................34-9

34.4 CAN モジュールの有効化と無効化........................................34-47

34.5 CAN モジュールの動作モード............................................34-47

34.6 CAN メッセージの処理..................................................34-49

34.7 CAN メッセージの送信..................................................34-56

34.8 CAN メッセージのフィルタ処理..........................................34-68

34.9 CAN メッセージの受信..................................................34-75

34.10 ビットタイミング ......................................................34-83

34.11 CAN のエラー管理......................................................34-87

34.12 CAN 割り込み..........................................................34-90

34.13 CAN 受信メッセージのタイムスタンプ処理................................34-94

34.14 省電力モード ..........................................................34-95

34.15 関連アプリケーション ノート............................................34-96

34.16 改訂履歴 ..............................................................34-97

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-1

Page 2: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.1 はじめに

PIC32のコントローラ エリア ネットワーク (CAN)モジュールは、主に産業用と車載アプリケー ションで使われる CAN 仕様 2.0B を実装します。この非同期シリアルデータ通信プロトコルは、電気的ノイズの多い環境において信頼性の高い通信を提供します。PIC32 ファミリは 大 2 つの CAN モジュールを内蔵します。図 34-1 に、代表的な CAN バス回路方式を示します。

図 34-1: 代表的な CAN バスネットワーク

CAN モジュールの主な特長は以下の通りです。

• 規格への準拠 :

- CAN 仕様 2.0B に完全準拠

- 大 1 Mbps までのビットレートをプログラム可能

• メッセージの送受信 :

- 32 個のメッセージ FIFO

- 各 FIFO は 大 32 個、合計 1024 個のメッセージを格納可能

- FIFO は送信メッセージ FIFO または受信メッセージ FIFO のどちらかに設定可能

- 送信に使うメッセージ FIFO の優先度レベルをユーザが定義可能

- メッセージ フィルタ処理用の 32 個のアクセプタンス フィルタ

- メッセージ フィルタ処理用の 4 個のアクセプタンス フィルタマスク レジスタ

- リモート送信要求 (RTR) に対する自動応答

- DeviceNet™ アドレッシングをサポート

Note: 本書は、デバイス データシートの内容の補足を目的としています。本書の内容は、 PIC32 ファミリの一部のデバイスには対応していません。

本書の内容がお客様のご使用になるデバイスに対応しているかどうかは、 新デバイス データシート内の「コントローラ エリア ネットワーク (CAN)」の章の冒 頭に記載された注意書きでご確認ください。

デバイス データシートとファミリ リファレンス マニュアルの各セクションは、 Microchip社のウェブサイト http://www.microchip.comからダウンロードできます。

CANbus

CAN1

PIC®

with IntegratedECAN

CANTransceiver

dsPIC33Fwith Integrated

ECAN™

dsPIC30Fwith Integrated

CAN

TransceiverCAN

TransceiverCAN

TransceiverCAN

CAN2

CANTransceiver

PIC32

DS61154C_JP - p.34-2 © 2013 Microchip Technology Inc.

Page 3: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

• その他の特長 :

- セルフテスト、システム診断、バス監視用のループバック モード、リッスンオール メッセージ モード、リッスンオンリー モード

- 低消費電力動作モード

- CAN モジュールは PIC32 システムバス上でバスマスタとして機能

- 動作にダイレクトメモリ アクセス (DMA) チャンネルは不要

- 専用タイムスタンプ タイマ

- データのみメッセージ受信モード

図 34-2 に、CAN モジュールの一般的な構造を示します。

図 34-2: PIC32 CAN モジュールのブロック図

CAN モジュールはプロトコル エンジン、メッセージ アクセプタンス フィルタ、メッセージ ア センブリ バッファ (MAB) より構成されます。プロトコル エンジンは、CAN バスを介してメッ セージを送受信します (CAN 仕様 2.0B に準拠 )。受信されたメッセージは、受信メッセージ ア センブリ バッファ内で組み立てられます。続いて受信メッセージはメッセージ アクセプタン ス フィルタによってフィルタ処理されます。送信メッセージ アセンブリ バッファは、送信メッ セージをプロトコル エンジンで処理する間、保持します。

CAN メッセージ バッファはデバイス RAM 内に配置されます。CAN モジュール内には CAN メッセージ バッファは一切存在しません。従って、メッセージは全てデバイス RAM に格納さ れます。CAN モジュールは PIC32 システムバス上のバスマスタであり、必要に応じてデバイス RAM にデータを読み書きします。CAN モジュールは動作に DMA を使わず、DMA またはCPU が介在する事なくデバイス RAM からメッセージをフェッチします。

Message Buffer 31

Message Buffer 1Message Buffer 0

Message Buffer 31

Message Buffer 1Message Buffer 0

Message Buffer 31

Message Buffer 1Message Buffer 0

FIFO0 FIFO1 FIFO31

Device RAM

Up

to 3

2 M

essa

ge B

uffe

rs

CAN Message FIFO (up to 32 FIFOs)

MessageBuffer Size

2 or 4 Words

System Bus

CPU

CAN Module

32 Filters4 Masks

CxTX

CxRX

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-3

Page 4: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.2 CAN メッセージのフォーマット

CAN バスのプロトコルは非同期通信を使います。情報はトランスミッタからレシーバにデータフレーム単位で渡されます。データフレームは、図 34-3 に示すように、その内容を定義する複数のバイトフィールドから構成されます。

各フレームは SOF (Start of Frame) ビットフィールドから始まり、EOF (End Of Frame) ビット フィールドで終わります。SOF に続くアービトレーション フィールドと制御フィールドは、 メッセージのタイプ、フォーマット、長さ、優先度を示します。これらの情報を使う事で、CANバス上の各ノードはメッセージに対して適切に応答できます。データフィールドはメッセージの内容を搬送し、0 ~ 8 バイトの可変長です。巡回冗長検査 (CRC) フィールドと肯定応答 (ACK)フィールドは誤り防止用に使います。

図 34-3: CAN バスメッセージ フレーム

CAN バスプロトコルは以下の 4 種類のフレームをサポートします。

• データフレーム - データをトランスミッタからレシーバに搬送する

• リモートフレーム - バス上のノードが、別のノードから同じ識別子を持つデータフレームを 送信するよう要求するために送信する

• エラーフレーム - ノードがエラーを検出した時に送信する

• オーバーロード フレーム - データフレームまたはリモートフレームを連続して送信する時 に次のフレームを遅延させる

• インターフレーム スペース - 連続するフレーム同士を分離する

CAN 仕様 2.0B では、さらに以下の 2 つのデータ フォーマットを定義しています。

• 標準データフレーム - 11 ビットの識別子を使う標準メッセージ用

• 拡張データフレーム - 29 ビットの識別子を使う拡張メッセージ用

CAN 仕様には以下の 3 つのバージョンが存在します。

• 2.0A - 29 ビットの識別子をエラーとみなす

• 2.0B パッシブ - 29 ビットの識別子メッセージを無視する

• 2.0B アクティブ - 11 ビットと 29 ビットの両方の識別子を処理する

PIC32 の CAN モジュールは CAN 仕様 2.0B に準拠し、同時により強力なメッセージ フィルタ 処理機能を備えています。

Note: CAN プロトコルの詳細は、Bosch CAN バス仕様 2.0B を参照してください。この 仕様は、以下のウェブサイトからダウンロードできます。 http://www.semiconductors.bosch.de

SOF

EOF

ARBITRATION CONTROL DATA ACKCRC

DS61154C_JP - p.34-4 © 2013 Microchip Technology Inc.

Page 5: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.2.1 標準データフレーム

標準データフレーム メッセージは、図 34-4 に示すように、SOF ビットから始まり、その後に 12 ビットのアービトレーション フィールドが続きます。アービトレーション フィールドは、 11 ビットの識別子と RTR ビットを格納します。識別子はメッセージに含まれる情報のタイプを定義します。各受信ノードは、識別子に基づいて、そのメッセージに対応すべきかどうかを判断します。RTR ビットにより、データフレームとリモートフレームを区別します。標準データフレームの場合、RTR ビットはクリアされています。

アービトレーション フィールドの後に、6 ビットの制御フィールドが続きます。このフィール ドは、メッセージの内容に関する追加の情報を提供します。制御フィールドの 初のビットは識別子拡張 (IDE) ビットで、メッセージが標準データフレームまたは拡張データフレームのどちらであるかを識別します。標準データフレームは、IDE ビット送信時のドミナント状態 ( 論理レベル「0」) で示されます。制御フィールドの 2 番目のビットは予約済み (RB0) ビットで、ドミナント状態 ( 論理レベル「0」) です。制御フィールドの残りの 4 ビットは、メッセージ内のデータバイト数を示すデータ長コード (DLC) です。

制御フィールドの後にデータフィールドが続きます。このフィールドはメッセージデータ ( データ フレームの実際のペイロード ) を格納しています。このフィールドは 0 ~ 8 バイトの可変長です。バイト数はユーザが選択できます。

データフィールドの後に CRC フィールドが続きます。これは 1 ビットのデリミタを含む 15ビットの CRC シーケンスです。

肯定応答 (ACK) フィールドはリセッシブビット ( 論理レベル「1」) として送信され、データを正しく受信したレシーバによってドミナントビットとして上書きされます。レシーバは、アクセプタンス フィルタの比較結果に関係なく、メッセージに対して肯定応答を返します。

後のフィールドは、メッセージの終わりを示す 7 ビットのリセッシブビットを格納した EOFフィールドです。

図 34-4: 標準データフレームのフォーマット

SID10 SID1

SOF

IDENTIFIER 11 Bits

RTR

IDE

RB0DLC

4 BitsDATA8 Bytes

CRC16 Bits

ACK

2 Bits

EOF

7 BitsIFS

3 Bits

SID0

9/19/2006 - 9/26/2006

11-bit Identifier

Interframe Space

9/19/2006 - 9/26/2006 9/19/2006 - 9/26/2006Data 9/19/2006 - 9/26/20069/19/2006 - 9/26/2006

9 - 9/26/2006

Frame Interframe Space

9/19/2006 - 9/26/2006

IDE is Dominant (Logical ‘0’)

RTR is Dominant (Logical ‘0’)

RB0 is Dominant (Logical ‘0’)

/19/ArbitrationField

ControlField Field

CRCField

ACKField

End-of-

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-5

Page 6: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.2.2 拡張データフレーム

拡張データフレームは、図 34-5 に示すように、SOF ビットから始まり、その後に 31 ビットのアービトレーション フィールドが続きます。拡張データフレームのアービトレーション フィー ルドには、29 ビットの識別子が含まれ、代替リモート要求 (SRR) ビットと IDE ビットで区切られた 2 つのフィールドに格納されます。SRR ビットは、メッセージがリモートフレームかどうかを示します。拡張データフレームの場合、SRR = 1です。IDE ビットはデータフレームの タイプを示します。拡張データフレームの場合、IDE = 1です。

拡張データフレームの制御フィールドは 7 ビットで構成されます。先頭ビットは RTR です。拡張データフレームの場合、RTR = 0です。続く 2 つのビット RB1 と RB0 は、ドミナント状態 の予約済みビット ( 論理レベル「0」) です。制御フィールドの残りの 4 ビットは、メッセージ内のデータバイト数を示す DLC です。

拡張データフレーム内の残りのフィールドは標準データフレームと同一です。

図 34-5: 拡張データフレームのフォーマット

SID10 SID1

SOF

IDENTIFIER 11 Bits

SRR

IDE

RTR

DLC 4 BITS

CRC16 BITS

ACK2 BITS

EOF7 BITS

IFS3 BITS

SID0

Field

29-bit Identifier

9/19/2006 - 9/26/2006Control

9/19/2006 - 9/26/2006CRC

9/19/2006 - 9/26/2006

IDENTIFIER 18 BITS

EID17 EID1 EID0

RB1

RB0

IDE is Recessive (Logical ‘1’)

SRR is Recessive (Logical ‘1’)

RTR is Dominant (Logical ‘0’)

RB0 is Dominant (Logical ‘0’)

RB1 is Dominant (Logical ‘0’)

9/19/2006 - 9/26/2006ACK End of

Frame

9/19/2006 - 9/26/20069/19/2006 - 9/26/2006Data

DATA8 Bytes

ArbitrationField Field Field Field

DS61154C_JP - p.34-6 © 2013 Microchip Technology Inc.

Page 7: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.2.3 リモートフレーム

別のノードからのデータ受信を要求するノードは、リモートフレームを送信する事によって、送信元ノードからのデータ転送を開始できます。リモートフレームには、標準フォーマット ( 図 34-6)と拡張フォーマット ( 図 34-7) があります。

リモートフレームはデータフレームに似ていますが、以下の点で異なります。

• RTR ビットはリセッシブ (RTR = 1) である

• データフィールドがない (DLC = 0)

図 34-6: 標準リモートフレームのフォーマット

図 34-7: 拡張リモートフレームのフォーマット

SID10 SID1

S

O

F

IDENTIFIER11 Bits

R

T

R

I

D

E

DLC 4 Bits

CRC16 Bits

ACK 2 Bits

EOF7 Bits

IFS3 Bits

SID0

11-bit Identifier

RB0

IDE is Dominant (Logical ‘0’)

RTR is Recessive (Logical ‘1’)

RB0 is Dominant (Logical ‘0’)

Arbitration Field Control Field CRC Field ACK Field End of Frame

SID10 SID0

S

O

F

IDENTIFIER

11 Bits

S

R

R

I

D

E

R

T

R

DLC

4 Bits

CRC

16 Bits

ACK

2 Bits

EOF

7 Bits

IFS

3 Bits

SID1

Arbitration Field

29-bit Identifier

Control Field CRC Field

IDENTIFIER

18 Bits

EID17 EID1 EID0

R

B

1

R

B

0

IDE is Recessive (Logical ‘1’)

SRR is Recessive (Logical ‘1’)

RTR is Recessive (Logical ‘1’)

RB0 is Dominant (Logical ‘0’)

RB1 is Dominant (Logical ‘0’)

ACK FieldEnd of Frame

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-7

Page 8: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.2.4 エラーフレーム

バスエラーを検出した全てのノードはエラーフレームを生成します。エラーフレームは、エラーフラグ フィールドと、これに続くエラーデリミタ フィールドにより構成されます。エラーデ リミタは 8 ビットのリセッシブビットで構成されます。これにより、バスノードはエラー発生後にクリーンに通信を再開できます。エラーフラグ フィールドには、エラーを検出するノード のエラー状態に応じて、以下の 2 つのタイプがあります。

• エラーアクティブ フラグ - 連続する 6 ビットのドミナントビットを格納します。このフラグ はネットワーク上にある他の全てのノードに強制的にエラーエコー フラグを発生させるた め、バス上には 6 ~ 12 ビットのドミナントビット列が出現します。

• エラーパッシブ フラグ - 連続する 6 ビットのリセッシブビットを格納します。その結果、送 信中のノードがバスエラーを検出しない限り、エラーパッシブ フラグの送信はネットワーク 上の他のいかなるノードの通信にも影響を与えません。

34.2.5 オーバーロード フレーム

インターフレーム スペース中にドミナントビットを検出した場合、または次のメッセージ受信 に対してノードの準備が整っていない場合 ( 例 : 受信メッセージを読み出し中 )、ノードはオー バーロード フレームを生成できます。オーバーロード フレームは、アクティブエラー フラグ を格納したエラーフレームとフォーマットは同じですが、インターフレーム スペース中にのみ 生成可能です。オーバーロード フレームは、6 個のドミナントビットを格納したオーバーロー ド フラグフィールドと、これに続く 8 個のリセッシブビットを格納したオーバーロード デリ ミタ フィールドにより構成されます。ノードは、次のメッセージの開始を遅延させるために、 オーバーロード フレームを 大 2 回まで連続して生成できます。

34.2.6 インターフレーム スペース

インターフレーム スペースは、CAN バス上に送信されている連続するフレームを分離します。 インターミッションと呼ばれる 3 ビット以上のリセッシブビットで構成されます。インターフレーム スペースを使うと、次のフレームの開始前に、ノードが先に受信したメッセージを内部 的に処理するための時間を確保できます。送信ノードがエラーパッシブ状態である場合、そのノードが次のメッセージを送信する前に、インターフレーム スペースにさらに 8 個のリセッシ ブビットが挿入されます。この期間を送信サスペンド フィールドと呼び、他の送信ノードにバ スを制御する時間を与えます。

DS61154C_JP - p.34-8 © 2013 Microchip Technology Inc.

Page 9: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.3 CAN レジスタ

CAN モジュールのレジスタは、その機能によって以下のグループに分類できます。

• モジュールおよび CAN ビットレート コンフィグレーション レジスタ

• 割り込みおよびステータス レジスタ

• マスクおよびフィルタ コンフィグレーション レジスタ

• FIFO 制御レジスタ

34.3.1 モジュールおよびCANビットレート コンフィグレーション レジスタ

• CiCON: CAN モジュール制御レジスタ

このレジスタは、CAN モジュールの動作モードと DeviceNet のアドレッシングの設定に使います。

• CiCFG: CAN baud レート コンフィグレーション レジスタ

このレジスタは、baud レート プリスケーラによって各時間単位の長さを設定する制御ビッ トを格納し、同期ジャンプ幅 (SJW) を時間単位で指定します。また、各 CAN ビットセグメント ( 伝搬セグメントと位相セグメント 1 と 2) の時間単位数設定にも使います。

34.3.2 割り込みおよびステータス レジスタ

• CiINT: CAN 割り込みレジスタ

このレジスタを使うと、CAN モジュールの各種割り込み要因を有効 / 無効にできます。このレジスタは割り込みステータスフラグも格納します。

• CiVEC: CAN 割り込みコードレジスタ

このレジスタには CAN モジュールの割り込み要因とメッセージ フィルタ一致に関する情報 を提供するステータスビットがあります。これらの値は、各種のケースを処理するためのジャンプテーブルを実装する時に使えます。

• CiTREC: CAN 送受信エラーカウント レジスタ

このレジスタは送受信エラーカウンタ値に関する情報を提供します。このレジスタは各種の警告状態を示すビットも格納します。

• CiFSTAT: CAN FIFO ステータス レジスタ

このレジスタは全ての FIFO に対する割り込みステータスフラグを格納します。

• CiRXOVF: CAN 受信 FIFO オーバーフロー ステータス レジスタ

このレジスタは全てのFIFOに対するオーバーフロー割り込みステータスフラグを格納します。

• CiTMR: CAN タイマレジスタ

このレジスタは CAN メッセージ タイムスタンプ タイマとプリスケーラを含みます。

34.3.3 マスクおよびフィルタ コンフィグレーション レジスタ

• CiRXMn: CAN アクセプタンス フィルタマスク n レジスタ (n = 0、1、2、3)

これらのレジスタを使うと、フィルタマスクを設定できます。合計 4 つのマスクを使えます。

• CiFLTCON0: CAN フィルタ制御レジスタ 0 ~ CiFLTCON7: CAN フィルタ制御レジスタ 7

これらのレジスタを使うと、FIFO とマスクをフィルタに関連付ける事ができます。フィルタとマスクは 1 対 1 で関連付けできます。フィルタのイネーブル / ディセーブル ビットも格 納します。

• CiRXFn: CAN アクセプタンス フィルタ n レジスタ 7 (n = 0 ~ 31)

これらのレジスタは、受信メッセージに適用するフィルタを指定します。合計 32 個のフィルタを使えます。

Note: レジスタ識別子内の「i」は CAN1 または CAN2 を表します。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-9

Page 10: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.3.4 CAN モジュール制御レジスタ

• CiFIFOBA: CAN メッセージ バッファ ベースアドレス レジスタ

このレジスタは、CAN メッセージ バッファ空間のベース ( 開始 ) アドレスを格納します。これ は物理アドレスです。

• CiFIFOCONn: CAN FIFO 制御レジスタ (n = 0 ~ 31)

これらのレジスタは CAN メッセージ FIFO の制御と設定に使います。

• CiFIFOINTn: CAN FIFO 割り込みレジスタ (n = 0 ~ 31)

これらのレジスタを使うと、FIFO 割り込み要因を個別に有効化または無効化できます。これらのレジスタは割り込みステータスビットも格納します。

• CiFIFOUAn: CAN FIFO ユーザアドレス レジスタ (n = 0 ~ 31)

これらのレジスタは次のメッセージの読み出し元または書き込み先となる CAN メッセージFIFO 内のメモリ位置アドレスを格納します。

• CiFIFOCIn: CAN モジュール メッセージ インデックス レジスタ (n = 0 ~ 31)

これらのレジスタは、CAN モジュールが次に送信するメッセージ、または次に受信するメッセージの保存先となる、メッセージ FIFO 内のメッセージ バッファ インデックスを格納します。

表 34-1 に、CAN 関連レジスタのまとめを示します。各レジスタの詳細は後述します。未実装のレジスタとビットは全て「0」として読み出されます。

DS61154C_JP - p.34-10 © 2013 Microchip Technology Inc.

Page 11: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

表 34-1: CAN コントローラ レジスタのまとめ

レジスタ名ビットレンジ

Bit31/2315/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

CiCON(1) 31:24 - - - - ABAT REQOP<2:0>

23:16 OPMOD<2:0> CANCAP - - - -

15:8 ON - SIDLE - CANBUSY - - -

7:0 - - - DNCNT<4:0>

CiCFG(1) 31:24 - - - - - - - -

23:16 - WAKFIL - - - SEG2PH<2:0>

15:8 SEG2PHTS SAM SEG1PH<2:0> PRSEG<2:0>

7:0 SJW<1:0> BRP<5:0>

CiINT(1) 31:24 IVRIE WAKIE CERRIE SERRIE RBOVIE - - -

23:16 - - - - MODIE CTMRIE RBIE TBIE

15:8 IVRIF WAKIF CERRIF SERRIF RBOVIF - - -

7:0 - - - - MODIF CTMRIF RBIF TBIF

CiVEC(1) 31:24 - - - - - - - -

23:16 - - - - - - - -

15:8 - - - FILHIT<4:0>

7:0 - ICODE<6:0>

CiTREC(1) 31:24 - - - - - - - -

23:16 - - TXBO TXBP RXBP TXWARN RXWARN EWARN

15:8 TERRCNT<7:0>

7:0 RERRCNT<7:0>

CiFSTAT(1) 31:24 FIFOIP31 FIFOIP30 FIFOIP29 FIFOIP28 FIFOIP27 FIFOIP26 FIFOIP25 FIFOIP24

23:16 FIFOIP23 FIFOIP22 FIFOIP21 FIFOIP20 FIFOIP19 FIFOIP18 FIFOIP17 FIFOIP16

15:8 FIFOIP15 FIFOIP14 FIFOIP13 FIFOIP12 FIFOIP11 FIFOIP10 FIFOIP9 FIFOIP8

7:0 FIFOIP7 FIFOIP6 FIFOIP5 FIFOIP4 FIFOIP3 FIFOIP2 FIFOIP1 FIFOIP0

CiRXOVF(1) 31:24 RXOVF31 RXOVF30 RXOVF29 RXOVF28 RXOVF27 RXOVF26 RXOVF25 RXOVF24

23:16 RXOVF23 RXOVF22 RXOVF21 RXOVF20 RXOVF19 RXOVF18 RXOVF17 RXOVF16

15:8 RXOVF15 RXOVF14 RXOVF13 RXOVF12 RXOVF11 RXOVF10 RXOVF9 RXOVF8

7:0 RXOVF7 RXOVF6 RXOVF5 RXOVF4 RXOVF3 RXOVF2 RXOVF1 RXOVF0

CiTMR(1) 31:24 CANTS<15:8>

23:16 CANTS<7:0>

15:8 CANTSPRE<15:8>

7:0 CANTSPRE<7:0>

CiRXM0(1) 31:24 SID<10:3>

23:16 SID<2:0> -- MIDE - EID<17:16>

15:8 EID<15:8>

7:0 EID<7:0>

CiRXM1(1) 31:24 SID<10:3>

23:16 SID<2:0> -- MIDE - EID<17:16>

15:8 EID<15:8>

7:0 EID<7:0>

CiRXM2(1) 31:24 SID<10:3>

23:16 SID<2:0> -- MIDE - EID<17:16>

15:8 EID<15:8>

7:0 EID<7:0>

凡例 : 「-」 = 未実装、「0」として読み出されます。

Note 1: このレジスタには対応するクリア / セット / 反転レジスタがあり、そのアドレスは、それぞれ 0x4/0x8/0xC バイトのオフセットをしています。これらのレジスタの名前は、対応するレジスタの名前の後にそれぞれ「CLR」、「SET」、「INV」を追加します ( 例 : CiCONCLR)。 これらのレジスタの任意のビット位置に「1」を書き込むと、対応するレジスタの有効なビットがそれぞれクリア、セット、反転されます。これらのレジスタからの読み出しは無視します。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-11

Page 12: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

CiRXM3(1) 31:24 SID<10:3>

23:16 SID<2:0> -- MIDE - EID<17:16>

15:8 EID<15:8>

7:0 EID<7:0>

CiFLTCON0(1) 31:24 FLTEN3 MSEL3<1:0> FSEL3<4:0>

23:16 FLTEN2 MSEL2<1:0> FSEL2<4:0>

15:8 FLTEN1 MSEL1<1:0> FSEL1<4:0>

7:0 FLTEN0 MSEL0<1:0> FSEL0<4:0>

CiFLTCON1(1) 31:24 FLTEN7 MSEL7<1:0> FSEL7<4:0>

23:16 FLTEN6 MSEL6<1:0> FSEL6<4:0>

15:8 FLTEN5 MSEL5<1:0> FSEL5<4:0>

7:0 FLTEN4 MSEL4<1:0> FSEL4<4:0>

CiFLTCON2(1) 31:24 FLTEN11 MSEL11<1:0> FSEL11<4:0>

23:16 FLTEN10 MSEL10<1:0> FSEL10<4:0>

15:8 FLTEN9 MSEL9<1:0> FSEL9<4:0>

7:0 FLTEN8 MSEL8<1:0> FSEL8<4:0>

CiFLTCON3(1) 31:24 FLTEN15 MSEL15<1:0> FSEL15<4:0>

23:16 FLTEN14 MSEL14<1:0> FSEL14<4:0>

15:8 FLTEN13 MSEL13<1:0> FSEL13<4:0>

7:0 FLTEN12 MSEL12<1:0> FSEL12<4:0>

CiFLTCON4(1) 31:24 FLTEN19 MSEL19<1:0> FSEL19<4:0>

23:16 FLTEN18 MSEL18<1:0> FSEL18<4:0>

15:8 FLTEN17 MSEL17<1:0> FSEL17<4:0>

7:0 FLTEN16 MSEL16<1:0> FSEL16<4:0:

CiFLTCON5(1) 31:24 FLTEN23 MSEL23<1:0> FSEL23<4:0>

23:16 FLTEN22 MSEL22<1:0> FSEL22<4:0>

15:8 FLTEN21 MSEL21<1:0> FSEL21<4:0>

7:0 FLTEN20 MSEL20<1:0> FSEL20<4:0>

CiFLTCON6(1) 31:24 FLTEN27 MSEL27<1:0> FSEL27<4:0>

23:16 FLTEN26 MSEL26<1:0> FSEL26<4:0>

15:8 FLTEN25 MSEL25<1:0> FSEL25<4:0>

7:0 FLTEN24 MSEL24<1:0> FSEL24<4:0>

CiFLTCON7(1) 31:24 FLTEN31 MSEL31<1:0> FSEL31<4:0>

23:16 FLTEN30 MSEL30<1:0> FSEL30<4:0>

15:8 FLTEN29 MSEL29<1:0> FSEL29<4:0>

7:0 FLTEN28 MSEL28<1:0> FSEL28<4:0>

CiRXFn(1)

(n = 0 ~ 31)31:24 SID<10:3>

23:16 SID<2:0> -- EXID - EID<17:16>

15:8 EID<15:8>

7:0 EID<7:0>

CiFIFOBA(1) 31:24 CiFIFOBA<31:24>

23:16 CiFIFOBA<23:16>

15:8 CiFIFOBA<15:8>

7:0 CiFIFOBA<7:0>

CiFIFOCONn(1)

(n = 0 ~ 31)31:24 - - - - - - - -

23:16 - - - FSIZE<4:0>

15:8 - FRESET UINC DONLY - - - -

7:0 TXEN TXABAT TXLARB TXERR TXREQ RTREN TXPR<1:0>

表 34-1: CAN コントローラ レジスタのまとめ ( 続き )

レジスタ名ビットレンジ

Bit31/2315/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

凡例 : 「-」 = 未実装、「0」として読み出されます。

Note 1: このレジスタには対応するクリア / セット / 反転レジスタがあり、そのアドレスは、それぞれ 0x4/0x8/0xC バイトのオフセットをしています。これらのレジスタの名前は、対応するレジスタの名前の後にそれぞれ「CLR」、「SET」、「INV」を追加します ( 例 : CiCONCLR)。 これらのレジスタの任意のビット位置に「1」を書き込むと、対応するレジスタの有効なビットがそれぞれクリア、セット、反転されます。これらのレジスタからの読み出しは無視します。

DS61154C_JP - p.34-12 © 2013 Microchip Technology Inc.

Page 13: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

CiFIFOINTn(1)

(n = 0 ~ 31)31:24 - - - - - TXNFULLIE TXHALFIE TXEMPTYIE

23:16 - - - - RXOVFLIE RXFULLIE RXHALFIE RXNEMPTYIE

15:8 - - - - - TXNFULLIF TXHALFIF TXEMPTYIF

7:0 - - - - RXOVFLIF RXFULLIF RXHALFIF RXNEMPTYIF

CiFIFOUAn(1)

(n = 0 ~ 31)31:24 CiFIFOUA<31:24>

23:16 CiFIFOUA<23:16>

15:8 CiFIFOUA<15:8>

7:0 CiFIFOUA<7:0>

CiFIFOCIn(1)

(n = 0 ~ 31)31:24 - - - - - - - -

23:16 - - - - - - - -

15:8 - - - - - - - -

7:0 - - - CiFIFOCI<4:0>

表 34-1: CAN コントローラ レジスタのまとめ ( 続き )

レジスタ名ビットレンジ

Bit31/2315/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

凡例 : 「-」 = 未実装、「0」として読み出されます。

Note 1: このレジスタには対応するクリア / セット / 反転レジスタがあり、そのアドレスは、それぞれ 0x4/0x8/0xC バイトのオフセットをしています。これらのレジスタの名前は、対応するレジスタの名前の後にそれぞれ「CLR」、「SET」、「INV」を追加します ( 例 : CiCONCLR)。 これらのレジスタの任意のビット位置に「1」を書き込むと、対応するレジスタの有効なビットがそれぞれクリア、セット、反転されます。これらのレジスタからの読み出しは無視します。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-13

Page 14: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-1: CiCON: CAN モジュール制御レジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24U-0 U-0 U-0 U-0 S/HC-0 R/W-1 R/W-0 R/W-0

- - - - ABAT REQOP<2:0>

23:16R-1 R-0 R-0 R/W-0 U-0 U-0 U-0 U-0

OPMOD<2:0> CANCAP - - - -

15:8R/W-0 U-0 R/W-0 U-0 R-0 U-0 U-0 U-0

ON(1) - SIDLE - CANBUSY - - -

7:0U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

- - - DNCNT<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-28 未実装 :「0」として読み出し

bit 27 ABAT: 保留中の全送信中止ビット

1 = 全送信バッファに送信中止を通知する0 = モジュールは全送信が中止されるとこのビットをクリアする

bit 26-24 REQOP<2:0>: 要求動作モードビット

111 = リッスンオール メッセージ モードに設定する110 = 予約済み、使用禁止101 = 予約済み、使用禁止100 = コンフィグレーション モードに設定する011 = リッスンオンリー モードに設定する010 = ループバック モードに設定する001 = ディセーブル モードに設定する000 = 通常動作モードに設定する

bit 23-21 OPMOD<2:0>: 動作モード ステータスビット

111 = モジュールはリッスンオール メッセージ モードである110 = 予約済み101 = 予約済み100 = モジュールはコンフィグレーション モードである011 = モジュールはリッスンオンリー モードである010 = モジュールはループバック モードである001 = モジュールはディセーブル モードである000 = モジュールは通常動作モードである

bit 20 CANCAP: CAN メッセージ受信タイムスタンプ タイマ キャプチャ イネーブルビット

1 = 有効なメッセージ受信時に CANTMR の値をメッセージと共に格納する0 = CAN メッセージ受信タイムスタンプ タイマ キャプチャを無効にして、CANTMR を停止して消費電力

を節減する

bit 19-16 未実装 :「0」として読み出し

bit 15 ON: CAN ON ビット (1)

1 = CAN モジュールを有効にする0 = CAN モジュールを無効にする

bit 14 未実装 :「0」として読み出し

Note 1: ユーザ アプリケーションでこのビットをクリアした場合、CAN モジュールが現在の処理を完了し、この 要求に応答するまでに多数のサイクルを要する事があります。ユーザ アプリケーションは CANBUSY ビットをポーリングして、要求が受け付けられたかどうかを確認する必要があります。

DS61154C_JP - p.34-14 © 2013 Microchip Technology Inc.

Page 15: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 13 SIDLE: CAN の Stop-in-Idle ビット

1 = システムがアイドルに移行したら CAN の動作を停止する0 = システムがアイドルに移行しても CAN の動作を継続する

bit 12 未実装 :「0」として読み出し

bit 11 CANBUSY: CAN モジュール ビジービット

1 = CAN モジュールはアクティブである0 = CAN モジュールは完全に無効化されている

bit 10-5 未実装 :「0」として読み出し

bit 4-0 DNCNT<4:0>: DeviceNet フィルタビット番号ビット

11111 = 無効な選択 ( 大 18 ビットのデータと EID を比較 )•

10011 = 無効な選択 ( 大 18 ビットのデータと EID を比較 )10010 = データバイト 2 のビット 6 までと EID<17:0>(CiRXFn<17:0>) を比較する

00001 = データバイト 0 のビット 7 までと EID0(CiRXFn<0>) を比較する00000 = データバイトを比較しない

レジスタ 34-1: CiCON: CAN モジュール制御レジスタ ( 続き )

Note 1: ユーザ アプリケーションでこのビットをクリアした場合、CAN モジュールが現在の処理を完了し、この 要求に応答するまでに多数のサイクルを要する事があります。ユーザ アプリケーションは CANBUSY ビットをポーリングして、要求が受け付けられたかどうかを確認する必要があります。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-15

Page 16: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-2: CiCFG: CAN baud レート コンフィグレーション レジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

23:16U-0 R/W-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0

- WAKFIL - - - SEG2PH<2:0>(1,4)

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

SEG2PHTS(1) SAM(2) SEG1PH<2:0> PRSEG<2:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

SJW<1:0>(3) BRP<5:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-23 未実装 : 「0」として読み出し

bit 22 WAKFIL: CAN バスライン フィルタ イネーブルビット

1 = CAN バスライン フィルタを復帰 ( ウェイクアップ ) に使う0 = CAN バスライン フィルタを復帰に使わない

bit 21-19 未実装 : 「0」として読み出し

bit 18-16 SEG2PH<2:0>: 位相バッファ セグメント 2 ビット (1,5)

111 = 長さは 8 x TQ

000 = 長さは 1 x TQ

bit 15 SEG2PHTS: 位相セグメント 2 時間選択ビット (1)

1 = 自由にプログラム可能0 = SEG1PH の 大値または情報処理時間のどちらか大きい方の値

bit 14 SAM: CAN バスラインのサンプリング ビット (2)

1 = バスラインをサンプルポイントで 3 回サンプリングする0 = バスラインをサンプルポイントで 1 回サンプリングする

bit 13-11 SEG1PH<2:0>: 位相バッファ セグメント 1 ビット (4)

111 = 長さは 8 x TQ

000 = 長さは 1 x TQ

Note 1: SEG2PH SEG1PH。SEG2PHTS がクリアの場合、SEG2PH は自動的にセットされます。

2: BPR < 2 の場合、3 回のビット サンプリングは使えません。

3: SJW SEG2PH 

4: ビットあたりの時間単位は 7 より大きい必要があります ( つまり TQBIT > 7)。

Note: このレジスタを変更できるのは、CAN モジュールがコンフィグレーション モード (OPMOD<2:0>(CiCON<23:21>) = 100) の場合だけです。

DS61154C_JP - p.34-16 © 2013 Microchip Technology Inc.

Page 17: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 10-8 PRSEG<2:0>: 伝搬時間セグメントビット (4)

111 = 長さは 8 x TQ

000 = 長さは 1 x TQ

bit 7-6 SJW<1:0>: 同期ジャンプ幅ビット (3)

11 = 長さは 4 x TQ

10 = 長さは 3 x TQ

01 = 長さは 2 x TQ

00 = 長さは 1 x TQ

bit 5-0 BRP<5:0>: baud レート プリスケーラ ビット

111111 = TQ = (2 x 64)/FSYS

111110 = TQ = (2 x 63)/FSYS

000001 = TQ = (2 x 2)/FSYS

000000 = TQ = (2 x 1)/FSYS

レジスタ 34-2: CiCFG: CAN baud レート コンフィグレーション レジスタ ( 続き )

Note 1: SEG2PH SEG1PH。SEG2PHTS がクリアの場合、SEG2PH は自動的にセットされます。

2: BPR < 2 の場合、3 回のビット サンプリングは使えません。

3: SJW SEG2PH 

4: ビットあたりの時間単位は 7 より大きい必要があります ( つまり TQBIT > 7)。

Note: このレジスタを変更できるのは、CAN モジュールがコンフィグレーション モード (OPMOD<2:0>(CiCON<23:21>) = 100) の場合だけです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-17

Page 18: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-3: CiINT: CAN 割り込みレジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0 U-0

IVRIE WAKIE CERRIE SERRIE RBOVIE - - -

23:16U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

- - - - MODIE CTMRIE RBIE TBIE

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0 U-0

IVRIF WAKIF CERRIF SERRIF(1) RBOVIF - - -

7:0U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

- - - - MODIF CTMRIF RBIF TBIF

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 IVRIE: 無効メッセージ受信割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 30 WAKIE: CAN バス アクティビティ復帰割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 29 CERRIE: CAN バスエラー割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 28 SERRIE: システムエラー割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 27 RBOVIE: 受信バッファ オーバーフロー割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 26-20 未実装 :「0」として読み出し

bit 19 MODIE: モード変化割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 18 CTMRIE: CAN タイムスタンプ タイマ割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 17 RBIE: 受信バッファ割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 16 TBIE: 送信バッファ割り込みイネーブルビット1 = 割り込み要求を有効にする0 = 割り込み要求を無効にする

bit 15 IVRIF: 無効メッセージ受信割り込みフラグビット1 = 無効メッセージ割り込みが発生した0 = 無効メッセージ割り込みは発生していない

bit 14 WAKIF: CAN バス アクティビティ復帰割り込みフラグビット1 = バス アクティビティ復帰割り込みが発生した0 = バス アクティビティ復帰割り込みは発生していない

Note 1: このビットは、ON ビット (CiCON<15>) をクリア / セットして CAN モジュールを OFF/ON する事によってのみクリアできます。

DS61154C_JP - p.34-18 © 2013 Microchip Technology Inc.

Page 19: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 13 CERRIF: CAN バスエラー割り込みフラグビット1 = CAN バスエラーが発生した0 = CAN バスエラーは発生していない

bit 12 SERRIF: システムエラー割り込みフラグビット

1 = システムエラーが発生した ( 例 : 不正なアドレスがシステムバスに出力された )0 = システムエラーは発生していない

bit 11 RBOVIF: 受信バッファ オーバーフロー割り込みフラグビット

1 = 受信バッファ オーバーフローが発生した0 = 受信バッファ オーバーフローは発生していない

bit 10-4 未実装 :「0」として読み出し

bit 3 MODIF: CAN モード変化割り込みフラグビット

1 = CAN モジュールのモード変化が発生した (REQOP を反映して OPMOD<2:0> が変化した )0 = CAN モジュールのモード変化は発生していない

bit 2 CTMRIF: CAN タイマ オーバーフロー割り込みフラグビット

1 = CAN タイマ (CANTMR) のオーバーフローが発生した0 = CAN タイマ (CANTMR) のオーバーフローは発生していない

bit 1 RBIF: 受信バッファ割り込みフラグビット

1 = 受信バッファ割り込みが保留中である0 = 受信バッファ割り込みは保留中ではない

bit 0 TBIF: 送信バッファ割り込みフラグビット

1 = 送信バッファ割り込みが保留中である0 = 送信バッファ割り込みは保留中ではない

レジスタ 34-3: CiINT: CAN 割り込みレジスタ ( 続き )

Note 1: このビットは、ON ビット (CiCON<15>) をクリア / セットして CAN モジュールを OFF/ON する事によってのみクリアできます。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-19

Page 20: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-4: CiVEC: CAN 割り込みコードレジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

15:8U-0 U-0 U-0 R-0 R-0 R-0 R-0 R-0

- - - FILHIT<4:0>

7:0U-0 R-1 R-0 R-0 R-0 R-0 R-0 R-0

- ICODE<6:0>(1)

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-13 未実装 : 「0」として読み出し

bit 12-8 FILHIT<4:0>: フィルタ一致番号ビット

11111 = フィルタ 3111110 = フィルタ 30•••

00001 = フィルタ 100000 = フィルタ 0

bit 7 未実装 : 「0」として読み出し

bit 6-0 ICODE<6:0>: 割り込みフラグ コード ビット (1)

1111111 = 予約済み•••

1001000 = 予約済み1001000 = 無効メッセージを受信した (IVRIF)1000111 = CAN モジュールのモード変化 (MODIF)1000110 = CAN タイムスタンプ タイマ (CTMRIF)1000101 = バス帯域幅エラー (SERRIF)1000100 = アドレスエラー割り込み (SERRIF)1000011 = 受信 FIFO オーバーフロー割り込み (RBOVIF)1000010 = 復帰割り込み (WAKIF)1000001 = エラー割り込み (CERRIF)1000000 = 割り込みなし0111111 = 予約済み•••

0100000 = 予約済み0011111 = FIFO31 割り込み (CiFSTAT<31> がセット )0011110 = FIFO30 割り込み (CiFSTAT<30> がセット )•••

0000001 = FIFO1 割り込み (CiFSTAT<1> がセット )0000000 = FIFO0 割り込み (CiFSTAT<0> がセット )

Note 1: これらのビットは有効な割り込みに対してのみ更新されます。

DS61154C_JP - p.34-20 © 2013 Microchip Technology Inc.

Page 21: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

レジスタ 34-5: CiTREC: CAN 送受信エラーカウント レジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

23:16U-0 U-0 R-0 R-0 R-0 R-0 R-0 R-0

- - TXBO TXBP RXBP TXWARN RXWARN EWARN

15:8R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

TERRCNT<7:0>

7:0R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

RERRCNT<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-22 未実装 :「0」として読み出し

bit 21 TXBO: トランスミッタがバス OFF のエラー状態である (TERRCNT 256)

bit 20 TXBP: トランスミッタがバスパッシブのエラー状態である (TERRCNT 128)

bit 19 RXBP: レシーバがバスパッシブのエラー状態である (RERRCNT 128)

bit 18 TXWARN: トランスミッタが警告エラー状態である (128 > TERRCNT 96)

bit 17 RXWARN: レシーバが警告エラー状態である (128 > RERRCNT 96)

bit 16 EWARN: トランスミッタまたはレシーバが警告エラー状態である

bit 15-8 TERRCNT<7:0>: 送信エラーカウンタ

bit 7-0 RERRCNT<7:0>: 受信エラーカウンタ

レジスタ 34-6: CiFSTAT: CAN FIFO ステータス レジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

FIFOIP31 FIFOIP30 FIFOIP29 FIFOIP28 FIFOIP27 FIFOIP26 FIFOIP25 FIFOIP24

23:16R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

FIFOIP23 FIFOIP22 FIFOIP21 FIFOIP20 FIFOIP19 FIFOIP18 FIFOIP17 FIFOIP16

15:8R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

FIFOIP15 FIFOIP14 FIFOIP13 FIFOIP12 FIFOIP11 FIFOIP10 FIFOIP9 FIFOIP8

7:0R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

FIFOIP7 FIFOIP6 FIFOIP5 FIFOIP4 FIFOIP3 FIFOIP2 FIFOIP1 FIFOIP0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-0 FIFOIP<31:0>: FIFOn 割り込み保留ビット

1 = 1 つまたは複数の有効な FIFO の割り込みが保留中である0 = FIFO 割り込みが保留中ではない

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-21

Page 22: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

DS61154C_JP - p.34-22 © 2013 Microchip Technology Inc.

レジスタ 34-7: CiRXOVF: CAN 受信 FIFO オーバーフロー ステータス レジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

RXOVF31 RXOVF30 RXOVF29 RXOVF28 RXOVF27 RXOVF26 RXOVF25 RXOVF24

23:16R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

RXOVF23 RXOVF22 RXOVF21 RXOVF20 RXOVF19 RXOVF18 RXOVF17 RXOVF16

15:8R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

RXOVF15 RXOVF14 RXOVF13 RXOVF12 RXOVF11 RXOVF10 RXOVF9 RXOVF8

7:0R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

RXOVF7 RXOVF6 RXOVF5 RXOVF4 RXOVF3 RXOVF2 RXOVF1 RXOVF0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-0 RXOVF<31:0>: FIFOn 受信オーバーフロー割り込み保留ビット

1 = FIFO がオーバーフローした0 = FIFO はオーバーフローしていない

レジスタ 34-8: CiTMR: CAN タイマレジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CANTS<15:8>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CANTS<7:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CANTSPRE<15:8>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CANTSPRE<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-0 CANTS<15:0>: CAN タイムスタンプ タイマビット

これは CANCAP ビット (CiCON<20>) がセットされている場合、CANTSPRE システムクロックごとにインクリメントするフリーランニング タイマです。

bit 15-0 CANTSPRE<15:0>: CAN タイムスタンプ タイマ プリスケーラ ビット

65535 = CAN タイムスタンプ タイマ (CANTS) が 65,535 システムクロックごとにインクリメントする

0 = CAN タイムスタンプ タイマ (CANTS) がシステムクロックごとにインクリメントする

Note 1: CANCAP = 0の場合、CiTMR は停止します。

2: CiTMR プリスケーラのカウントは、CiTMR への書き込みでリセットされます (CANTSPRE は影響を受けません )。

Page 23: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

レジスタ 34-9: CiRXMn: CAN アクセプタンス フィルタマスク n レジスタ (n = 0、1、2、3)

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

SID<10:3>

23:16R/W-0 R/W-0 R/W-0 U-0 R/W-0 U-0 R/W-0 R/W-0

SID<2:0> - MIDE - EID<17:16>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

EID<15:8>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

EID<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-21 SID<10:0>: 標準識別子ビット

1 = フィルタ比較に SIDx ビットを含める

0 = フィルタ動作でビット SIDx を「ドントケア」とする

bit 20 未実装 : 「0」として読み出し

bit 19 MIDE: 識別子受信モードビット

1 = フィルタの EXID ビットに対応するメッセージタイプ ( 標準または拡張アドレス ) のみ一致する0 = フィルタが一致すれば (( フィルタ SID) = ( メッセージ SID) または ( フィルタ SID/EID) = ( メッセージ

SID/EID) の場合 )、標準アドレス メッセージまたは拡張アドレス メッセージのどちらかが一致する

bit 18 未実装 : 「0」として読み出し

bit 17-0 EID<17:0>: 拡張識別子ビット

1 = フィルタ比較に EIDx ビットを含める

0 = フィルタ動作でビット EIDx を「ドントケア」とする

Note: このレジスタを変更できるのは、CAN モジュールがコンフィグレーション モード (OPMOD<2:0>(CiCON<23:21>) = 100) の場合だけです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-23

Page 24: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-10: CiFLTCON0: CAN フィルタ制御レジスタ 0

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN3 MSEL3<1:0> FSEL3<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN2 MSEL2<1:0> FSEL2<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN1 MSEL1<1:0> FSEL1<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN0 MSEL0<1:0> FSEL0<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN3: フィルタ 3 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL3<1:0>: フィルタ 3 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL3<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN2: フィルタ 2 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL2<1:0>: フィルタ 2 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL2<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合

のみです。

DS61154C_JP - p.34-24 © 2013 Microchip Technology Inc.

Page 25: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN1: フィルタ 1 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL1<1:0>: フィルタ 1 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL1<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN0: フィルタ 0 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL0<1:0>: フィルタ 0 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL0<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-10: CiFLTCON0: CAN フィルタ制御レジスタ 0 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合

のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-25

Page 26: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-11: CiFLTCON1: CAN フィルタ制御レジスタ 1

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN7 MSEL7<1:0> FSEL7<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN6 MSEL6<1:0> FSEL6<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN5 MSEL5<1:0> FSEL5<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN4 MSEL4<1:0> FSEL4<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN7: フィルタ 7 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL7<1:0>: フィルタ 7 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL7<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN6: フィルタ 6 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL6<1:0>: フィルタ 6 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL6<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合

のみです。

DS61154C_JP - p.34-26 © 2013 Microchip Technology Inc.

Page 27: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN5: フィルタ 5 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL5<1:0>: フィルタ 5 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL5<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN4: フィルタ 4 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL4<1:0>: フィルタ 4 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL4<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-11: CiFLTCON1: CAN フィルタ制御レジスタ 1 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合

のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-27

Page 28: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-12: CiFLTCON2: CAN フィルタ制御レジスタ 2

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN11 MSEL11<1:0> FSEL11<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN10 MSEL10<1:0> FSEL10<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN9 MSEL9<1:0> FSEL9<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN8 MSEL8<1:0> FSEL8<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN11: フィルタ 11 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL11<1:0>: フィルタ 11 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL11<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN10: フィルタ 10 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL10<1:0>: フィルタ 10 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL10<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

DS61154C_JP - p.34-28 © 2013 Microchip Technology Inc.

Page 29: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN9: フィルタ 9 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL9<1:0>: フィルタ 9 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL9<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN8: フィルタ 8 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL8<1:0>: フィルタ 8 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL8<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-12: CiFLTCON2: CAN フィルタ制御レジスタ 2 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-29

Page 30: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-13: CiFLTCON3: CAN フィルタ制御レジスタ 3

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN15 MSEL15<1:0> FSEL15<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN14 MSEL14<1:0> FSEL14<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN13 MSEL13<1:0> FSEL13<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN12 MSEL12<1:0> FSEL12<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN15: フィルタ 15 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL15<1:0>: フィルタ 15 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL15<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN14: フィルタ 14 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL14<1:0>: フィルタ 14 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL14<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

DS61154C_JP - p.34-30 © 2013 Microchip Technology Inc.

Page 31: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN13: フィルタ 13 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL13<1:0>: フィルタ 13 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL13<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN12: フィルタ 12 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL12<1:0>: フィルタ 12 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL12<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-13: CiFLTCON3: CAN フィルタ制御レジスタ 3 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-31

Page 32: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

,4

レジスタ 34-14: CiFLTCON4: CAN フィルタ制御レジスタ 4

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN19 MSEL19<1:0> FSEL19<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN18 MSEL18<1:0> FSEL18<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN17 MSEL17<1:0> FSEL17<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN16 MSEL16<1:0> FSEL16<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN19: フィルタ 19 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL19<1:0>: フィルタ 19 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL19<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN18: フィルタ 18 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL18<1:0>: フィルタ 18 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL18<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

DS61154C_JP - p.34-32 © 2013 Microchip Technology Inc.

Page 33: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN17: フィルタ 17 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL17<1:0>: フィルタ 17 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL17<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN16: フィルタ 16 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL16<1:0>: フィルタ 16 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL16<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-14: CiFLTCON4: CAN フィルタ制御レジスタ 4 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-33

Page 34: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-15: CiFLTCON5: CAN フィルタ制御レジスタ 5

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN23 MSEL23<1:0> FSEL23<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN22 MSEL22<1:0> FSEL22<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN21 MSEL21<1:0> FSEL21<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN20 MSEL20<1:0> FSEL20<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN23: フィルタ 23 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL23<1:0>: フィルタ 23 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL23<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する•••

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN22: フィルタ 22 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL22<1:0>: フィルタ 22 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL22<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

DS61154C_JP - p.34-34 © 2013 Microchip Technology Inc.

Page 35: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN21: フィルタ 21 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL21<1:0>: フィルタ 21 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL21<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN20: フィルタ 20 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL20<1:0>: フィルタ 20 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL20<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-15: CiFLTCON5: CAN フィルタ制御レジスタ 5 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-35

Page 36: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-16: CiFLTCON6: CAN フィルタ制御レジスタ 6

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN27 MSEL27<1:0> FSEL27<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN26 MSEL26<1:0> FSEL26<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN25 MSEL25<1:0> FSEL25<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN24 MSEL24<1:0> FSEL24<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN27: フィルタ 27 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL27<1:0>: フィルタ 27 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL27<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN26: フィルタ 26 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL26<1:0>: フィルタ 26 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL26<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

DS61154C_JP - p.34-36 © 2013 Microchip Technology Inc.

Page 37: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN25: フィルタ 25 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL25<1:0>: フィルタ 25 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL25<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN24: フィルタ 24 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL24<1:0>: フィルタ 24 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL24<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-16: CiFLTCON6: CAN フィルタ制御レジスタ 6 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-37

Page 38: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-17: CiFLTCON7: CAN フィルタ制御レジスタ 7

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN31 MSEL31<1:0> FSEL31<4:0>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN30 MSEL30<1:0> FSEL30<4:0>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN29 MSEL29<1:0> FSEL29<4:0>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FLTEN28 MSEL28<1:0> FSEL28<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31 FLTEN31: フィルタ 31 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 30-29 MSEL31<1:0>: フィルタ 31 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 28-24 FSEL31<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 23 FLTEN30: フィルタ 30 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 22-21 MSEL30<1:0>: フィルタ 30 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 20-16 FSEL30<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

DS61154C_JP - p.34-38 © 2013 Microchip Technology Inc.

Page 39: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 15 FLTEN29: フィルタ 29 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 14-13 MSEL29<1:0>: フィルタ 29 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 12-8 FSEL29<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

bit 7 FLTEN28: フィルタ 28 イネーブルビット

1 = フィルタを有効にする0 = フィルタを無効にする

bit 6-5 MSEL28<1:0>: フィルタ 28 マスク選択ビット

11 = アクセプタンス マスク 3 を選択する10 = アクセプタンス マスク 2 を選択する01 = アクセプタンス マスク 1 を選択する00 = アクセプタンス マスク 0 を選択する

bit 4-0 FSEL28<4:0>: FIFO 選択ビット

11111 = フィルタに一致するメッセージを FIFO バッファ 31 に格納する

11110 = フィルタに一致するメッセージを FIFO バッファ 30 に格納する

00001 = フィルタに一致するメッセージを FIFO バッファ 1 に格納する00000 = フィルタに一致するメッセージを FIFO バッファ 0 に格納する

レジスタ 34-17: CiFLTCON7: CAN フィルタ制御レジスタ 7 ( 続き )

Note: このレジスタ内のビットを変更できるのは、対応するフィルタ イネーブルビット (FLTENn) が「0」の場合 のみです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-39

Page 40: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-18: CiRXFn: CAN アクセプタンス フィルタ n レジスタ 7 (n = 0 ~ 31)

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x

SID<10:3>

23:16R/W-x R/W-x R/W-x U-0 R/W-0 U-0 R/W-x R/W-x

SID<2:0> - EXID - EID<17:16>

15:8R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x

EID<15:8>

7:0R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x

EID<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-21 SID<10:0>: 標準識別子ビット

1 = フィルタに一致するにはメッセージ アドレスビット SIDx が「1」である必要がある0 = フィルタに一致するにはメッセージ アドレスビット SIDx が「0」である必要がある

bit 20 未実装 :「0」として読み出し

bit 19 EXID: 拡張識別子イネーブルビット

1 = 拡張識別子アドレスを持つメッセージにのみ一致する0 = 標準識別子アドレスを持つメッセージにのみ一致する

bit 18 未実装 :「0」として読み出し

bit 17-0 EID<17:0>: 拡張識別子ビット

1 = フィルタに一致するにはメッセージ アドレスビット EIDx が「1」である必要がある0 = フィルタに一致するにはメッセージ アドレスビット EIDx が「0」である必要がある

Note: このレジスタを変更できるのはフィルタが無効の場合 (FLTENn = 0) のみです。

DS61154C_JP - p.34-40 © 2013 Microchip Technology Inc.

Page 41: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

レジスタ 34-19: CiFIFOBA: CAN メッセージ バッファ ベースアドレス レジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CiFIFOBA<31:24>

23:16R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CiFIFOBA<23:16>

15:8R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CiFIFOBA<15:8>

7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0(1) R-0(1)

CiFIFOBA<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-0 CiFIFOBA<31:0>: CAN FIFO ベースアドレス ビット

全てのメッセージ バッファのベースアドレスを定義します。個々のメッセージ バッファは前のメッセージ バッファのサイズに基づいて配置されます。このアドレスは物理アドレスです。ビット <1:0> は読み出し専用で「0」が読み出されるため、メッセージはデバイス RAM 内で 32 ビットワード境界に整列される事に注意してください。

Note 1: このビットは未実装であり、常に「0」が読み出されます。これによって、メッセージはワード境界に整列されます。

Note: このレジスタを変更できるのは、CAN モジュールがコンフィグレーション モード (OPMOD<2:0>(CiCON<23:21>) = 100) の場合だけです。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-41

Page 42: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-20: CiFIFOCONn: CAN FIFO 制御レジスタ (n = 0 ~ 31)

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

23:16U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

- - - FSIZE<4:0>(1)

15:8U-0 S/HC-0 S/HC-0 R/W-0 U-0 U-0 U-0 U-0

- FRESET UINC DONLY(1) - - - -

7:0R/W-0 R-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0

TXEN TXABAT(2) TXLARB(3) TXERR(3) TXREQ RTREN TXPR<1:0>

凡例 : S = セット可能ビット HC = ハードウェア クリア可能ビット

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-21 未実装 : 「0」として読み出し

bit 20-16 FSIZE<4:0>: FIFO サイズビット (1)

11111 = FIFO の深さは 32 メッセージである

00010 = FIFO の深さは 3 メッセージである00001 = FIFO の深さは 2 メッセージである00000 = FIFO の深さは 1 メッセージである

bit 15 未実装 : 「0」として読み出し

bit 14 FRESET: FIFO リセットビット

1 = ビットをセットすると FIFO がリセットされ、FIFO がリセットされるとハードウェアによってクリア される ( このビットのセット後、ユーザは他の動作を実行する前にこのビットをポーリングしてクリ アされている事を確認する必要があります )

0 = 影響なし

bit 13 UINC: インクリメント ヘッド / テールビット

TXEN = 1: (FIFO を送信 FIFO として設定した場合 )このビットをセットすると FIFO ヘッドが 1 メッセージ分インクリメントする

TXEN = 0: (FIFO を受信 FIFO として設定した場合 )このビットをセットすると FIFO テールが 1 メッセージ分インクリメントする

bit 12 DONLY: メッセージデータのみ格納ビット (1)

TXEN = 1: (FIFO を送信 FIFO として設定した場合 )このビットは未使用で影響なし

TXEN = 0: (FIFO を受信 FIFO として設定した場合 )1 = FIFO にデータバイトのみを格納する0 = 識別子を含むメッセージ全体を格納する

bit 11-8 未実装 :「0」として読み出し

bit 7 TXEN: TX/RX バッファ選択ビット

1 = FIFO は送信 FIFO である0 = FIFO は受信 FIFO である

Note 1: これらのビットを変更できるのは、CAN モジュールがコンフィグレーション モード (OPMOD<2:0> (CiCON<23:21>) = 100) の場合だけです。

2: このビットは、メッセージ完了 ( または中止 ) または FIFO のリセット時に更新されます。

3: このビットは、このレジスタに対する読み出し時、または FIFO のリセット時にリセットされます。

DS61154C_JP - p.34-42 © 2013 Microchip Technology Inc.

Page 43: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 6 TXABAT: メッセージ中止ビット (2)

1 = メッセージは中止された0 = メッセージは正常に終了した

bit 5 TXLARB: メッセージ アービトレーション ロスト ビット (3)

1 = 送信中にメッセージのアービトレーション ロストが発生した0 = 送信中にメッセージのアービトレーション ロストは発生していない

bit 4 TXERR: 送信中のエラー検出ビット (3)

1 = メッセージ送信中にバスエラーが発生した0 = メッセージ送信中にバスエラーは発生していない

bit 3 TXREQ: メッセージ送信要求

TXEN = 1: (FIFO を送信 FIFO として設定した場合 )このビットを「1」に設定するとメッセージ送信が要求される (FIFO に格納された全てのメッセージが正常に送信されると、ビットは自動的にクリアされます )ビットがセット (「1」) されている時に「0」にクリアすると、メッセージの中止が要求される

TXEN = 0: (FIFO を受信 FIFO として設定した場合 )このビットは無効

bit 2 RTREN: 自動 RTR イネーブルビット

1 = リモート送信を受信すると TXREQ がセットされる0 = リモート送信を受信しても TXREQ には影響しない

bit 1-0 TXPR<1:0>: メッセージ送信優先度ビット

11 = 高位のメッセージ優先度10 = 中高位のメッセージ優先度01 = 中低位のメッセージ優先度00 = 低位のメッセージ優先度

レジスタ 34-20: CiFIFOCONn: CAN FIFO 制御レジスタ (n = 0 ~ 31) ( 続き )

Note 1: これらのビットを変更できるのは、CAN モジュールがコンフィグレーション モード (OPMOD<2:0> (CiCON<23:21>) = 100) の場合だけです。

2: このビットは、メッセージ完了 ( または中止 ) または FIFO のリセット時に更新されます。

3: このビットは、このレジスタに対する読み出し時、または FIFO のリセット時にリセットされます。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-43

Page 44: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

レジスタ 34-21: CiFIFOINTn: CAN FIFO 割り込みレジスタ (n = 0 ~ 31)

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0

- - - - - TXNFULLIE TXHALFIE TXEMPTYIE

23:16U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

- - - - RXOVFLIE RXFULLIE RXHALFIE RXNEMPTYIE

15:8U-0 U-0 U-0 U-0 U-0 R-0 R-0 R-0

- - - - - TXNFULLIF(1) TXHALFIF TXEMPTYIF(1)

7:0U-0 U-0 U-0 U-0 R/W-0 R-0 R-0 R-0

- - - - RXOVFLIF RXFULLIF(1) RXHALFIF(1) RXNEMPTYIF(1)

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-27 未実装 :「0」として読み出し

bit 26 TXNFULLIE: 送信 FIFO 非フル割り込みイネーブルビット

1 = FIFO がフルでない場合の割り込みを有効にする0 = FIFO がフルでない場合の割り込みを無効にする

bit 25 TXHALFIE: 送信 FIFO ハーフフル割り込みイネーブルビット

1 = FIFO が半分フルの場合の割り込みを有効にする0 = FIFO が半分フルの場合の割り込みを無効にする

bit 24 TXEMPTYIE: 送信 FIFO エンプティ割り込みイネーブルビット

1 = FIFO がエンプティの場合の割り込みを有効にする0 = FIFO がエンプティの場合の割り込みを無効にする

bit 23-20 未実装 :「0」として読み出し

bit 19 RXOVFLIE: オーバーフロー割り込みイネーブルビット

1 = オーバーフロー イベントの割り込みを有効にする0 = オーバーフロー イベントの割り込みを無効にする

bit 18 RXFULLIE: フル割り込みイネーブルビット

1 = FIFO がフルの場合の割り込みを有効にする0 = FIFO がフルの場合の割り込みを無効にする

bit 17 RXHALFIE: FIFO ハーフフル割り込みイネーブルビット

1 = FIFO が半分フルの場合の割り込みを有効にする0 = FIFO が半分フルの場合の割り込みを無効にする

bit 16 RXNEMPTYIE: 非エンプティ割り込みイネーブルビット

1 = FIFO がエンプティでない場合の割り込みを有効にする0 = FIFO がエンプティでない場合の割り込みを無効にする

bit 15-11 未実装 :「0」として読み出し

bit 10 TXNFULLIF: 送信 FIFO 非フル割り込みフラグビット (1)

TXEN = 1: (FIFO を送信バッファとして設定した場合 )1 = FIFO はフルでない0 = FIFO はフルである

TXEN = 0: (FIFO を受信バッファとして設定した場合 )未使用、「0」として読み出し

Note 1: このビットは読み出し専用で FIFO の状態を示します。

DS61154C_JP - p.34-44 © 2013 Microchip Technology Inc.

Page 45: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

bit 9 TXHALFIF: 送信 FIFO ハーフエンプティ割り込みフラグビット (1)

TXEN = 1: (FIFO を送信バッファとして設定した場合 )1 = FIFO 半分フルである0 = FIFO > 半分フルである

TXEN = 0: (FIFO を受信バッファとして設定した場合 )未使用、「0」として読み出し

bit 8 TXEMPTYIF: 送信 FIFO エンプティ割り込みフラグビット (1)

TXEN = 1: (FIFO を送信バッファとして設定した場合 )1 = FIFO はエンプティである0 = FIFO はエンプティではなく、1 つ以上の送信メッセージが待ち行列にある

TXEN = 0: (FIFO を受信バッファとして設定した場合 )未使用、「0」として読み出し

bit 7-4 未実装 :「0」として読み出し

bit 3 RXOVFLIF: 受信 FIFO オーバーフロー割り込みフラグビット

TXEN = 1: (FIFO を送信バッファとして設定した場合 )未使用、「0」として読み出し

TXEN = 0: (FIFO を受信バッファとして設定した場合 )1 = オーバーフロー イベントが発生した0 = オーバーフロー イベントは発生していない

bit 2 RXFULLIF: 受信 FIFO フル割り込みフラグビット (1)

TXEN = 1: (FIFO を送信バッファとして設定した場合 )未使用、「0」として読み出し

TXEN = 0: (FIFO を受信バッファとして設定した場合 )1 = FIFO はフルである0 = FIFO はフルでない

bit 1 RXHALFIF: 受信 FIFO ハーフフル割り込みフラグビット (1)

TXEN = 1: (FIFO を送信バッファとして設定した場合 )未使用、「0」として読み出し

TXEN = 0: (FIFO を受信バッファとして設定した場合 )1 = FIFO 半分フルである0 = FIFO < 半分フルである

bit 0 RXNEMPTYIF: 受信バッファ非エンプティ割り込みフラグビット (1)

TXEN = 1: (FIFO を送信バッファとして設定した場合 )未使用、「0」として読み出し

TXEN = 0: (FIFO を受信バッファとして設定した場合 )1 = FIFO はエンプティではなく、1 つ以上のメッセージがある0 = FIFO はエンプティである

レジスタ 34-21: CiFIFOINTn: CAN FIFO 割り込みレジスタ (n = 0 ~ 31) ( 続き )

Note 1: このビットは読み出し専用で FIFO の状態を示します。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-45

Page 46: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

DS61154C_JP - p.34-46 © 2013 Microchip Technology Inc.

レジスタ 34-22: CiFIFOUAn: CAN FIFO ユーザアドレス レジスタ (n = 0 ~ 31)

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24R-x R-x R-x R-x R-x R-x R-x R-x

CiFIFOUAn<31:24>

23:16R-x R-x R-x R-x R-x R-x R-x R-x

CiFIFOUAn<23:16>

15:8R-x R-x R-x R-x R-x R-x R-x R-x

CiFIFOUAn<15:8>

7:0R-x R-x R-x R-x R-x R-x R-0(2) R-0(2)

CiFIFOUAn<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-0 CiFIFOUAn<31:0>: CAN FIFO ユーザアドレス ビット

TXEN = 1: (FIFO を送信バッファとして設定した場合 )

このレジスタを読み出すと次のメッセージの書き込み先となるアドレス (FIFO ヘッド ) が返される

TXEN = 0: (FIFO を受信バッファとして設定した場合 )

このレジスタを読み出すと次のメッセージの読み出し元となるアドレス (FIFO テール ) が返される

Note 1: このビットからは常に「0」が読み出されます。これによって、メッセージはワード境界に整列されます。

Note: コンフィグレーション モードではこのレジスタが正しい読み出されない場合があるため、コンフィグレー

ション モード以外の場合にアクセスを限定する必要があります。

レジスタ 34-23: CiFIFOCIn: CAN モジュール メッセージ インデックス レジスタ (n = 0 ~ 31)

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

15:8U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

- - - - - - - -

7:0U-0 U-0 U-0 R-0 R-0 R-0 R-0 R-0

- - - CiFIFOCI<4:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 「1」 = ビットはセット 「0」 = ビットはクリア x = ビットは未知

bit 31-5 未実装 :「0」として読み出し

bit 4-0 CiFIFOCIn<4:0>: CAN 側 FIFO メッセージ インデックス ビット

TXEN = 1: (FIFO を送信バッファとして設定した場合 )

このレジスタを読み出すとFIFOが次に送信しようとしているメッセージに対するインデックスが返される

TXEN = 0: (FIFO を受信バッファとして設定した場合 )

このレジスタを読み出すと FIFO が次のメッセージの保存に使うメッセージに対するインデックスが返される

Page 47: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.4 CAN モジュールの有効化と無効化

CAN モジュールを OFF にすると、モジュール全体がリセット状態に保持され、ユーザは CANモジュール特殊機能レジスタ (SFR) だけにアクセスできます。CAN モジュールは、CAN 制御レジスタの ON ビット (CiCON<15>) をセットする事で有効にします。ON ビット (CiCON<15>)がセットされると、CAN モジュールは有効になり、CAN TX(CiTX) と RX(CiRx) ピンに優先度 を要求します。

CAN モジュールを OFF すると、モジュールはリセット状態に移行し、CiTX と CiRX ピンのデバイス制御を解放します。CAN モジュールを OFF すると、全てのメッセージ FIFO がリセットされます。

CAN モジュールが完全に OFF になるまでに多数のクロックを要する場合があります。CAN モジュール制御レジスタの CAN モジュール ビジービット (CANBUSY、CiCON<11>) は CAN モ ジュールの状態を示します。CAN モジュールが OFF になった事を確認するには、CANBUSYビット (CiCON<11>) をポーリングする必要があります。また、CAN モジュールを OFF する前に、モジュールがコンフィグレーション モード (34.5「CAN モジュールの動作モード」参照 ) で ある事を確認する事も重要です。これによって、メッセージ送信中に CAN モジュールが OFFとなる事によるバスエラーを防げます。例 34-1 に CAN1 モジュールを OFF にする手順を示します。

例 34-1: CAN1 モジュールの無効化

34.5 CAN モジュールの動作モード

CAN モジュールは、ユーザ アプリケーションから選択可能な以下の動作モードのどれか 1 つ で動作します。

• コンフィグレーション モード

• 通常動作モード

• リッスンオンリー モード

• リッスンオール メッセージ モード

• ループバック モード

• ディセーブル モード

動作モードは、CAN 制御レジスタ (CiCON<26:24>) の要求動作モードビット (REQOP<2:0>)にユーザ アプリケーションが書き込む事によって要求します。CAN モジュールは CAN 制御レ ジスタ (CiCON<23:21>)の動作モードビット (OPMOD<2:0>)によって要求されたモードへの移行に肯定応答します。モードの遷移は、CAN ネットワークと同期して実行されます。

ユーザ アプリケーションは、CAN 割り込みレジスタ (CiINT<19>) のモード変化割り込み (MODIE) ビットを有効にする事で、新しいモードに移行した時点で割り込みが発生するように設定できます。新しいモードが正常に適用された時点で、CAN 割り込みが生成されます。これに代わる方法として、OPMOD<2:0> ビット (CiCON<23:21>) をポーリングして CAN モジュールが正常にモードを切り換えたかどうか ( 現在の動作モードが要求した動作モードと一致しているかどうか ) を判断する事もできます。

/* Place the CAN module in Configuration mode. */

C1CONbits.REQOP = 4;while(C1CONbits.OPMOD != 4);

/* Switch the CAN module off. */C1CONCLR = 0x00008000; /*Clear the ON bit */while(C1CONbits.CANBUSY == 1);

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-47

Page 48: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.5.1 コンフィグレーション モード

デバイスリセット後のCANモジュールはコンフィグレーション モードです(OPMOD<2:0>ビッ ト (CiCON<23:21>) = 100)。エラーカウンタはクリアされ、全てのレジスタにはリセット値が 格納されます。CAN モジュールは、コンフィグレーション モードでのみ設定または初期化で きます。コンフィグレーション モードは、REQOP<2:0> ビット (CiCON<26:24>) を「100」に プログラミングする事で要求します。 ユーザ アプリケーションは CAN モジュールが実際にコ ンフィグレーション モードに移行するまで待つ必要があります。これは、OPMOD<2:0> ビッ ト (CiCON<23:21>) の値が「100」であるかどうかをポーリングする事で確認できます。以下のレジスタとビットはコンフィグレーション モードでのみ変更できます。

• CAN コンフィグレーション レジスタ (CiCFG)• CAN FIFO ベースアドレス レジスタ (CiFIFOBA)• CAN アクセプタンス フィルタマスク レジスタ (CiRXMn)• CAN FIFO 制御レジスタ (CiFIFOCONn<20:16>) の FIFO サイズビット (FSIZE<4:0>) とメッセージデータのみ格納 (DONLY) ビット (CiFIFOCONn<12>)

これによって、ユーザがプログラミング エラーによって偶発的に CAN プロトコルに違反しな いように保護します。

34.5.2 通常動作モード

通常動作モードの CAN モジュールは CAN バスに接続され、CAN メッセージを送受信できます。通常動作モードは、REQOP<2:0> ビット (CiCON<26:24>) を「000」にプログラミングして初期化した後に要求します。OPMOD<2:0> = 000 の場合、CAN モジュールは通常動作を始めます。 CAN モジュールは通常動作モードに移行する前に、バスのアイドル状態を確認します。

34.5.3 リッスンオンリー モード

リッスンオンリー モードは通常動作モードと似たモードです。リッスンオンリー モード時、 CAN モジュールはバスに接続されますがパッシブ状態です。メッセージを受信しますが、送信はしません。エラーフラグを生成せず、信号に肯定応答する事もありません。この状態では、エラーカウンタは無効です。リッスンオンリー モードは、CAN バスの baud レートを検出する 場合に使えます。その場合、相互に通信するノードが少なくとも後 2 つ必要です。各種の値を試す事で baud レートを求める事ができます。このモードは CAN バスがデータ トラフィック に影響を与えないためバスモニタとしても便利です。

34.5.4 リッスンオール メッセージ モード

リッスンオール メッセージ モードは通常動作モードと似たモードです。リッスンオール メッ セージ モードでは、メッセージ受信でエラーが発生しても受信バッファに転送します。それ以 外は通常動作モードと同様に送受信を行います。受信バッファはエラー発生時点までに受信されたデータを格納します。この場合もフィルタを有効化し設定する必要があります。

34.5.5 ループバック モード

ループバック モードはセルフテストで使い、CANモジュールが自身のメッセージを受信します。 このモードでは、CAN モジュールの送信経路を内部的に受信経路に接続します。ダミーの肯定応答を送信するため、別のノードが肯定応答ビットを送信する必要はありません。CAN メッセージが実際に CAN バスに送信される事はありません。

34.5.6 ディセーブル モード

ディセーブル モードは、CAN モジュールのエラーカウンタがリセットされない点を除き、コン フィグレーション モードと同じです。CAN モジュールは、REQOP<2:0> ビット (CiCON<26:24>) を「001」に設定する事でディセーブル モードに移行します。ディセーブル モードでは、メッ セージの送受信中でない限り、CAN モジュールの内部クロックが停止します。CAN モジュールは送受信中はディセーブル モードに移行できません。これは CAN モジュールがシステムバ スにエラーを発生させないためです。CAN モジュールは進行中のメッセージ送受信が完了した時点でディセーブル モードに移行します。OPMOD<2:0> ビット (CiCON<23:21>) が CAN モ ジュールが正常にディセーブル モードに移行したかどうかを示します。CAN モジュール送信 (CiTX) ピンは、CAN モジュールがディセーブル モードにいる間は受信状態を維持し、CAN バ スエラーを防ぎます。

Note: CANモジュールがバスまたはトランシーバに接続されていない場合、CANモジュールは通常動作モードに移行しません。これは、CAN モジュールが常に受信ピンでドミナント状態を検出するためです。

DS61154C_JP - p.34-48 © 2013 Microchip Technology Inc.

Page 49: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.6 CAN メッセージの処理

CAN モジュールは送受信する CAN メッセージをデバイス RAM に格納します。CAN モジュール自体にはユーザがアクセスできるメッセージ バッファがありません。図 34-8 に、デバイス RAM 内の CAN モジュール バッファ メモリの構成を示します。

図 34-8: CAN メッセージ バッファとデバイス RAM の構成

図 34-8 に示す通り、CAN モジュールはメッセージ バッファを FIFO として構成します。以下 の特性を備えた、独立した合計 32 個の FIFO を使えます。

• CAN メッセージ バッファのサイズは 小 1、 大 32

• サイズは個別に設定可能

• 送信メッセージ FIFO または受信メッセージ FIFO に設定可能

• ヘッドポインタとテールポインタはユーザが読み出し可能

• 割り込みは個別に設定可能

• ステータスビットがメッセージの送受信時の FIFO の状態を表示

• 送信 FIFO または受信 FIFO のどちらかに設定可能であるが両方に設定する事は不可 ( ある FIFO を送信に設定した場合、格納されたメッセージは全てが送信用となる )

• 互いに独立して送信 FIFO または受信 FIFO に順不同で設定可能

32 個のメッセージ FIFO は、それぞれに以下のレジスタに関連付けられています。

• CAN FIFO 制御レジスタ (CiFIFOCONn) ( レジスタ 34-20)

• CAN FIFO 割り込みレジスタ (CiFIFOINTn) ( レジスタ 34-21)

• CAN FIFO ユーザアドレス レジスタ (CiFIFOUAn) ( レジスタ 34-22)

• CAN FIFO メッセージ インデックス レジスタ (CiFIFOCIn) ( レジスタ 34-23)

CAN モジュールは、FIFO 内の 初のメッセージ バッファの開始アドレスしか必要としません。 CAN FIFO ベースアドレス レジスタ (CiFIFOBA) によって、このメッセージ バッファの開始ア ドレスをポイントします。CAN モジュールは各 FIFO の設定に基づいて、各 FIFO 内のメッセージ バッファのアドレスを自動的に求めます。各 FIFO は隣接し、全てのメッセージ バッファは 連続して配置されます。つまり、CAN メッセージ バッファ メモリには一切ギャップがありま せん。CiFIFOUAn レジスタが、ユーザ アプリケーションが次の読み書きに使うべき CAN メッ セージ バッファのアドレスを格納するのに対し、CiFIFOCIn レジスタは、CAN モジュールに よって次に送信または書き込まれるメッセージ バッファに対応した CAN メッセージ バッファ インデックスを格納します。

FIFO 関連割り込みとその他の CAN モジュール割り込みの詳細は、34.12「CAN 割り込み」を参照してください。

Message Buffer 31

Message Buffer 1Message Buffer 0

Message Buffer 31

Message Buffer 1Message Buffer 0

Message Buffer 31

Message Buffer 1Message Buffer 0

CANModule

FIFO0 FIFO1 FIFO31

Device RAM

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-49

Page 50: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.6.1 メッセージ FIFO の設定

ユーザ アプリケーションは CAN メッセージのバッファ処理用にデバイス RAM 空間を割り当て る必要があります。メッセージ バッファの各タイプに対する要件は以下の通りです。

• CAN 送信メッセージ バッファには 4 ワード (16 バイト ) のメモリが必要

• CAN 受信メッセージ バッファには、メッセージ全体 ( タイムスタンプ、データ、メッセージ ID) を格納する場合、4 ワード (16 バイト ) のメモリが必要

• CAN 受信メッセージ バッファには、データのみを格納する場合、2 ワード (8 バイト ) のメ モリが必要

ユーザ アプリケーションは各メッセージ FIFO のサイズを設定する必要があります。FIFO の サイズは、対応するCAN FIFO制御レジスタ(CiFIFOCONn<20:16>)のFIFOサイズ(FSIZE<4:0>) ビットで設定します。全ての FIFO には既定値として 低でも 1 個のメッセージ バッファが設 定されます。割り当てるメモリの合計は、各バッファのメモリサイズを考慮しながら FIFO 全体のバッファ数の合計を数える事で得られます。

CAN FIFO メッセージ バッファ処理モデルの使い方を 適化するために、ユーザ アプリケー ションは必要な数の FIFO を FIFO0 から始めて、FIFO1、FIFO2、FIFO3…の順に設定する必要があります。

例えば、ユーザ アプリケーションで 29 個の FIFO が必要で FIFO0、FIFO1、FIFO5 ~ FIFO31 を設定したとします。FIFO2、FIFO3、FIFO4 は設定しません。FIFO2、FIFO3、FIFO4 は設定していませんが、それぞれ RAM で 4 ワードを占有します。CAN モジュールはこれらの FIFOを使いませんが、FIFO5 のアドレスを求める際に考慮します。この例の場合、ユーザ アプリ ケーションは 32 個の FIFO 全てにメモリを割り当てる必要があります。FIFO2、FIFO3、FIFO4が占有するメモリは、ユーザ アプリケーションが使えます。

これを実現する 適の方法は、FIFO0 ~ FIFO28 を設定して、FIFO29、FIFO30、FIFO31 を設定しない事です。従って、ユーザ アプリケーションが割り当てる必要があるのは、FIFO29 個 分の空間だけです。図 34-9 に、例を示します。

図 34-9: CAN メッセージ バッファ FIFO の設定例 ( データのみ受信メッセージ バッファを含む )

FIFO NumberMessage Buffer Start Address

Message Buffer

FIFO(Transmit FIFO)

0x00001000 MB0

0x00001010 MB1

0x00001020 MB2

0x00001030 MB3

FIFO1(Data-only RX

Message)

0x00001040 MB0

0x00001048 MB1

FIFO3(Full Receive

Message)

0x00001050 MB0

0x00001060 MB1

0x00001070 MB2

0x00001080 MB3

A

B

C

A

B

C

C1FIFOCON0.TXEN = 1C1FIFOCON0.FSIZE = 3

C1FIFOCON1. TXEN = 0C1FIFOCON1.DONLY = 1C1FIFOCON1.FSIZE = 1

C1FIFOONC3.TXEN = 0C1FIFOCON3.DONLY = 0C1FIFOCON3.FSIZE = 3

CAN1FIFO ConfigurationC1FIFOBA = 0x00001000

(Start address of MB0 in FIFO0)

DS61154C_JP - p.34-50 © 2013 Microchip Technology Inc.

Page 51: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

図 34-9 に示す CAN1 メッセージ バッファ FIFO 設定の場合、FIFO0 には 4 つの送信バッファ があり、合計 16 ワード (4 バッファ x 4 ワード / バッファ ) が必要です。FIFO1 には 2 つのデー タのみ受信バッファがあり、合計 4 ワード (2 バッファ x 2 ワード / バッファ ) が必要です。 FIFO3 には 4 つの全受信バッファがあり、合計 16 ワード (4 バッファ x 4 ワード / バッファ) が 必要です。従って、全部で 36(16 + 4 +16) ワードのメモリを割り当てる必要があります。

別の例として、合計 4 つの FIFO を必要とする図 34-10 のユーザ アプリケーションを検討して みましょう。

図 34-10: CAN FIFO の設定例

FIFO0 と FIFO1 はそれぞれ 2 つのメッセージ バッファがあり、CAN メッセージ送信 FIFO と して設定します。FIFO2 と FIFO3 はそれぞれ 3 つのメッセージ バッファがあり、CAN メッ セージ受信 FIFO として設定します。FIFO0 と FIFO1 には、合計 16 ワードのメモリが必要です (2 FIFO x 2 メッセージ バッファ /FIFO x 4 ワード / メッセージ バッファ )。 FIFO2 と FIFO3 に は、合計 24 ワードのメモリが必要です (2 FIFO x 3 メッセージ バッファ/FIFO x 4 ワード / メッ セージ バッファ )。 従って、全部で 40(16 + 24) ワードのメモリを割り当てる必要があります。

以下の手順で CAN モジュール FIFO を設定します。

1. CAN メッセージ バッファ FIFO のメモリを割り当てます。

2. CAN モジュールをコンフィグレーション モードに移行させます (OPMOD<2:0> = 100)。

3. CAN FIFO ベースアドレス レジスタ (CiFIFOBA) を FIFO のベースアドレスで更新します。 これは、FIFO0 のメッセージ バッファ 0 の物理開始アドレスとする必要があります。

4. FSIZE<4:0> ビット (CiFIFOCONn<20:16>) を更新します。

5. FIFOを送信または受信FIFOのどちらにするかを設定します(TXENビット(CiFIFOCONn<7:0>))

6. CAN モジュールを通常動作モードに移行させます (OPMOD<2:0> = 000)。

例 34-2 に、上記の手順を使って図 34-10 の CAN メッセージ FIFO を設定する方法を示します。

FIFO NumberMessage Buffer Start Address

Message Buffer

FIFO00x00002000 MB0

0x00002010 MB1

FIFO10x00002020 MB0

0x00002030 MB1

FIFO2

0x00002040 MB0

0x00002050 MB1

0x00002060 MB2

FIFO3

0x00002070 MB0

0x00002080 MB1

0x00002090 MB2

A

B

C

D

C1FIFOCON0.TXEN = 1C1FIFOCON0.SIZE = 1

C1FIFOCON1.TXEN = 1C1FIFOCON1.SIZE = 1

C1FIFOCON2.TXEN = 0C1FIFOCON2.SIZE = 2

C1FIFOCON3.TXEN = 0C1FIFOCON3.SIZE = 2

CAN1FIFO ConfigurationC1FIFOBA = 0x00002000

A

B

C

D

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-51

Page 52: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

例 34-2: CAN メッセージ FIFO の設定/* This code snippet illustrates the steps required to configure the *//* PIC32 CAN Message FIFOs. The FIFO configuration example shown in *//* 図 34-5 will be used in this example. */

/* FIFO0 - Transmit - 2 MESSAGE BUFFERS *//* FIFO1 - Transmit - 2 MESSAGE BUFFERS *//* FIF02 - Receive - 3 MESSAGE BUFFERS *//* FIF03 - Receive - 3 MESSAGE BUFFERS *//* FIFO4 - FIFO31 - Not used */

/* Allocate a total of 40 words.

unsigned int CanFifoMessageBuffers[40];

/* Request CAN to switch to configuration mode and wait until it has switched */

C1CONbits.REQOP = 100while(C1CONbits.OPMOD != 100);

/* Initialize C1FIFOBA register with physical address of CAN message Buffer */

C1FIFOBA = KVA_TO_PA(CanFifoMessageBuffers); ;

/* Configure FIFO0 */C1FIFOCON0bits.FSIZE = 1;C1FIFOCON0SET = 0x80; /* Set the TXEN bit */

/* Configure FIFO1 */C1FIFOCON1bits.FSIZE = 1;C1FIFOCON1SET = 0x80; /* Set the TXEN bit */

/* Configure FIFO2 */C1FIFOCON2bits.FSIZE = 2;C1FIFOCON2CLR = 0x80; /* Clear the TXEN bit */

/* Configure FIFO3 */C1FIFOCON3bits.FSIZE = 2;C1FIFOCON3CLR = 0x80; /* Clear the TXEN bit */

/* The CAN module can now be placed into normal mode if no further *//* configuration is required. */

C1CONbits.REQOP = 0;

while(C1CONbits.OPMOD != 0);

DS61154C_JP - p.34-52 © 2013 Microchip Technology Inc.

Page 53: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.6.2 送信メッセージの FIFO への書き込み

データ送信に FIFO を使うには、送信 FIFO として設定する必要があります。それには CANFIFO 制御レジスタ (CiFIFOCONn<7>) の TX/RX バッファ選択 (TXEN) ビットをセットします。

CAN FIFO ユーザアドレス レジスタ (CiFIFOUAn) は、ユーザ アプリケーションがメッセージ を格納すべき FIFO 内の次のメッセージ バッファの物理アドレス (FIFO ヘッド位置と呼ぶ場合 もあります ) を格納します。CAN メッセージは CiFIFOUAn レジスタの開始位置に読み込む必要があります。

ユーザ アプリケーションは、FIFO 内の 1 個のメッセージ バッファへの書き込みが完了したら CAN FIFO 制御レジスタ (CiFIFOCONn<13>) のインクリメント ヘッド / テール (UINC) ビット をセットする必要があります。これによって、CAN モジュールは CiFIFOUAn レジスタに格納されたアドレスを 16 バイト、インクリメントします ( 従って、次のメッセージ バッファがポ イントされます )。以上でメッセージ送信の準備が整いました。CiFIFOUAn レジスタは、FIFOの終端に達すると先頭にロールオーバーします。

このためユーザ アプリケーションは FIFO ヘッド位置を追跡する必要がなく、この目的に CiFIFOUAn を使えます。以下の手順に従って、送信メッセージを送信 FIFO に書き込みます。

1. CiFIFOUAn レジスタを読み出し、このアドレスに 1 つのメッセージ (16 バイト ) を格納します。

2. UINC ビット (CiFIFOCONn<13>) をセットして、CiFIFOUAn レジスタを更新します。

3. CAN FIFO制御レジスタ (CiFIFOCONn<3>)のメッセージ送信要求 (TXREQ)ビットをセット してメッセージを送信します。

4. 待ち行列に入れるメッセージ数と FIFO サイズに応じてステップ 2 と 3 を繰り返します。

例 34-3 に、上記の手順を示します。この例では、CAN1 モジュールの FIFO0 に 4 つのメッセージを書き込みます。

例 34-3: 送信メッセージ FIFO への書き込み

/* This code snippet illustrates the steps to load a transmit message FIFO. *//* This example uses the CAN1 module. */

/* Four messages to be transmitted using transmit FIFO0 */

int message; /* Tracks the message buffer */unsigned int * currentMessageBuffer; /* Points to message buffer to be written */

message = 0;

for(message = 0; message <= 3; message ++){

/* Get the address of the message buffer to write to from the C1FIFOUA0 *//* register. Convert this physical address to virtual address. */

currentMessageBuffer = PA_TO_KVA1(C1FIF0UA0);

/* This procedure will load the message * buffer with the message to be transmitted. */

LoadMessageBuffer(currentMessageBuffer);

C1FIFOCON0SET = 0x2008; /* Set the UINC and TXREQ bit */}

/* At this point the messages are loaded in FIFO0 */

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-53

Page 54: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.6.3 FIFO 内の受信メッセージへのアクセス

データ受信に FIFO を使う場合、受信 FIFO として設定する必要があります。それには TXENビット (CiFIFOCONn<7>) をクリアします。メッセージの受信後、ユーザ アプリケーションは 読み出す 初のメッセージ バッファの物理開始アドレス (FIFO テールポインタとも呼ぶ ) を、 CiFIFOUAn レジスタから読み出す必要があります。これに続くアドレスからメッセージを読み出します。

FIFO からのメッセージ処理が完了したら、ユーザ アプリケーションは UINC ビット (CiFIFOCONn<13>) をセットして、メッセージ処理の完了とメッセージの上書きが可能である事を CAN モジュールに知らせる必要があります。これによってテールポインタがインクリメントされ、CiFIFOUAn レジスタが示すアドレスが DONLY ビット (CiFIFOCONn<12>) の値に応じて 4 ワードまたは 2 ワード大きくなります。CiFIFOUAn レジスタは、FIFO の終端に達すると先頭にロールオーバーします。

このためユーザ アプリケーションは FIFO テール位置を追跡する必要がなく、この目的に CiFIFOUAn を使えます。以下の手順に従って、受信 FIFO 内のメッセージを処理します。

1. FIFO 内にメッセージが存在するかどうかを判断するには、割り込みを使います。

2. CiFIFOUAn レジスタを読み出し、このアドレスにあるメッセージ (16 バイト ) を 1 つ処理します。

3. UINC ビット (CiFIFOCONn<13>) をセットして、CiFIFOUAn レジスタを更新します。

4. 割り込み条件が終了するまでステップ 1 と 2 を繰り返します。

例 34-4 に、上記の手順を使ったコードを示します。このサンプルコードでは、CAN1 モジュールのFIFO1を受信動作用に設定しています。FIFOがエンプティになるまで読み出しを続けます。

例 34-4: FIFO からの受信メッセージの読み出し/* This code snippet illustrates the steps to read messages from receive *//* message FIFO. This example uses the CAN1 module.*/

/* FIFO1 size is 4 messages and each message is 4 words long. */

unsigned int * currentMessageBuffer; /* Points to message buffer to be read */

while(1){

/* Keep reading until the FIFO is empty. */while(C1FIFOINT1bits.RXNEMPTYIF == 1){

/* Get the address of the message buffer to read from the C1FIFOUA1 *//* register. Convert this physical address to virtual address. */

currentMessageBuffer = PA_TO_KVA1(C1FIF0UA1);

ProcessReceivedMessage(currentMessageBuffer);

/* Set the UINC bit to tell the CAN module that * a message has been read. */

C1FIFOCON0SET = 0x2000;}

}

DS61154C_JP - p.34-54 © 2013 Microchip Technology Inc.

Page 55: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.6.4 FIFO のリセット

FIFO は以下の方法でリセットします。

• CAN FIFO 制御レジスタ (CiFIFOCONn<14>) の FIFO リセット (FRESET) ビットをセットする

• CAN モジュールをコンフィグレーション モードに移行させる (OPMOD<2:0> ビット(CiCON<23:21>) = 100)

• CAN モジュールを OFF にする (CiCON<15> = 0)

FIFO をリセットすると、ヘッドおよびテールポインタ、割り込みフラグ、CAN FIFO 制御レジ スタ (CiFIFOCONn) 内の以下のステータスビットがリセットされます : メッセージ中止 (TXABAT) ビット (CiFIFOCONn<6>)、メッセージ アービトレーション ロスト (TXLARB) ビット (CiFIFOCONn<5>)、送信中エラー検出 (TXERR) ビット (CiFIFOCONn<4>)。

FRESET ビット (CiFIFOCONn<14>) によって FIFO をリセットする前に、以下に注意する必要があります。

• FIFO が送信 FIFO の場合、送信が保留中でない事

• FIFO が受信 FIFO の場合、それがアクティブなフィルタからポイントされていない事

ユーザ アプリケーションが FIFO をリセットする代表的な状況は、ディセーブル モードの終了 時です。FRESET ビット (CiFIFOCONn<14>) による FIFO のリセット中、ユーザ アプリケー ションはこのビットをポーリングしてリセット動作が完了した事を確認する必要があります。例 34-5 に、この手順を示します。

例 34-5: メッセージ FIFO のリセット/* This code snippet shows how to reset a message FIFO. This example *//* uses FIFO0 of the CAN1 module. */

C1FIFOCON0SET = 0x00004000; /* Set the FRESET bit */while(C1FIFOCON0bits.FRESET == 1);

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-55

Page 56: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.7 CAN メッセージの送信

CAN モジュールは送信 FIFO に書き込まれたメッセージを送信します。メッセージ FIFO を送信用に設定する方法は、34.6.1「メッセージ FIFO の設定」と 34.6.2「送信メッセージの FIFOへの書き込み」を参照してください。

34.7.1 送信メッセージ バッファのフォーマット

送信メッセージ FIFO は、 大 32 個の CAN 送信メッセージ バッファを格納します。送信メッ セージ バッファは長さが 4 ワード (16 バイト ) で、表 34-2 に示す固定フォーマットを使います。 4 ワード (CMSGSID、CMSGEID、CMSGDATA0、CMSGDATA1) を格納します。これらのレジスタ内のビットは、CAN 仕様 2.0B が定義する CAN メッセージ内のビットフィールドに 1 対 1で対応しています。ユーザ アプリケーションは、送信 FIFO 内の全てのメッセージ バッファが 図 34-11 から図 34-14 に示すフォーマットに従っている事を確認する必要があります。

図 34-11: CMSGSID のフォーマット

表 34-2: システムメモリに格納される送信メッセージ バッファのフォーマット

ワード名Bit

31/2315/7Bit

30/22/14/6Bit

29/21/13/5Bit

28/20/12/4Bit

27/19/11/3Bit

26/18/10/2Bit

25/17/9/1Bit

24/16/8/0

CMSGSID 31:24 -- -- -- -- -- -- -- --

23:16 -- -- -- -- -- -- -- --

15:8 -- -- -- -- -- SID<10:8>

7:0 SID<7:0>

CMSGEID 31:24 -- -- SRR IDE EID<17:14>

23:16 EID<13:6>

15:8 EID<5:0> RTR RB1

7:0 -- -- --- RB0 DLC<3:0>

CMSGDATA0 31:24 送信バッファ データバイト 3

23:16 送信バッファ データバイト 2

15:8 送信バッファ データバイト 1

7:0 送信バッファ データバイト 0

CMSGDATA1 31:24 送信バッファ データバイト 7

23:16 送信バッファ データバイト 6

15:8 送信バッファ データバイト 5

7:0 送信バッファ データバイト 4

凡例 : 網掛けのビットは「0」に設定します。

Note: CAN 送信メッセージはデバイス RAM に格納され、対応する SET/CLR/INV レジスタはありません。

SID<10:0>

bit 10-0 SID<10:0>: 標準識別子

DS61154C_JP - p.34-56 © 2013 Microchip Technology Inc.

Page 57: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

図 34-12: CMSGEID のフォーマット

図 34-13: CMSGDATA0 のフォーマット

図 34-14: CMSGDATA1 のフォーマット

— SRR IDE EID<17:0> RTR RB1 — RB0 DLC<3:0>

bit 31-30 未実装 : 「0」として読み出し

bit 29 SRR: 代替リモート要求ビット標準メッセージ フォーマットの場合 (IDE = 0),、このビットはドントケアです。拡張メッセージ フォーマットの場合 (IDE = 1)、このビットは常にセットします。

bit 28 IDE: 拡張識別子ビット1 = メッセージは拡張識別子を送信する0 = メッセージは標準識別子を送信する

bit 27-10 EID<17:0>: 拡張識別子ビット

bit 9 RTR: リモート送信要求ビット1 = メッセージはリモート送信要求である0 = メッセージはリモート送信要求ではない

bit 8 RB1: 予約済みビット 1CAN 仕様 2.0B に従い、ユーザ アプリケーションはこのビットを「0」に設定する必要があります。

bit 7-5 未実装 : 「0」として読み出し

bit 4 RB0: 予約済みビット 0CAN 仕様 2.0B に従い、ユーザ アプリケーションはこのビットを「0」に設定する必要があります。

bit 3-0 DLC<3:0>: データ長コードビット1xxx = 8 バイトのデータを送信する0111 = 7 バイトのデータを送信する•

0001 = 1 バイトのデータを送信する0000 = 0 バイトのデータを送信する

Note: このレジスタは CAN モジュール外のシステムメモリ内にあります。

DATA3<7:0> DATA2<7:0> DATA1<7:0> DATA0<7:0>

bit 31-24 DATA3<7:0>: データバイト 3bit 23-16 DATA2<7:0>: データバイト 2bit 15-8 DATA1<7:0>: データバイト 1bit 7-0 DATA0<7:0>: データバイト 0

Note: このレジスタは CAN モジュール外のシステムメモリ内にあります。

DATA7<7:0> DATA6<7:0> DATA5<7:0> DATA4<7:0>

bit 31-24 DATA7<7:0>: データバイト 7bit 23-16 DATA6<7:0>: データバイト 6bit 15-8 DATA5<7:0>: データバイト 5bit 7-0 DATA4<7:0>: データバイト 4

Note: このレジスタは CAN モジュール外のシステムメモリ内にあります。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-57

Page 58: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

例 34-6 に、メモリ内に CAN メッセージ バッファを実装するためのサンプルコードのデータ構 造を示します。例 34-7 に、この構造を使った例を示します。

例 34-6: メモリ内の CAN メッセージ バッファの実装

/* This code snippet shows an example of data structure to implement a CAN *//* message buffer. */

/* Define the sub-components of the data structure as specified in 表 34-2 */

/* Create a CMSGSID data type. */typedefstruct {

unsigned SID:11;unsigned :21;

}txcmsgsid;

/* Create a CMSGEID data type. */typedef struct {

unsigned DLC:4;unsigned RB0:1;unsigned :3;unsigned RB1:1;unsigned RTR:1;unsigned EID:18;unsigned IDE:1;unsigned SRR:1;unsigned :2;

}txcmsgeid;

/* Create a CMSGDATA0 data type. */typedef struct{

unsigned Byte0:8;unsigned Byte1:8;unsigned Byte2:8;unsigned Byte3:8;

}txcmsgdata0;

/* Create a CMSGDATA1 data type. */typedefstruct{

unsigned Byte4:8;unsigned Byte5:8;unsigned Byte6:8;unsigned Byte7:8;

}txcmsgdata1;

/* This is the main data structure. */

typedef union uCANTxMessageBuffer {

struct{

txcmsgsid CMSGSID;txcmsgeid CMSGEID;txcmsgdata0 CMSGDATA0;txcmsgdata0 CMSGDATA1;

};int messageWord[4];

}CANTxMessageBuffer;

DS61154C_JP - p.34-58 © 2013 Microchip Technology Inc.

Page 59: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

例 34-7: データ構造の使用例

34.7.2 メッセージの送信要求

表 34-15 に、CAN モジュールの送信プロセスを示します。ユーザ アプリケーションは FIFO を 送信用に設定する必要があります。メッセージの送信と優先度は CiFIFOCONn レジスタ ( レジスタ 34-20 参照 ) で制御します。続いて CAN モジュールは準備状況と優先度に基づいて次に送信するメッセージを選択し、送信に向けて処理します。

図 34-15: CAN メッセージの送信

メッセージが FIFO に書き込まれ送信の準備が整ったら、ユーザ アプリケーションは TXREQ ビット (CiFIFOCONn<3>)をセットして送信を開始できます。このビットをセットすると、FIFOの内容がメッセージの優先度に従って送信の待ち行列に入れられ、CAN モジュールは FIFO 内の全てのメッセージを送信します。全てのメッセージの送信が完了すると、TXREQ ビット(CiFIFOCONn<3>) はクリアされます。ユーザ アプリケーションは全ての送信 FIFO に書き込む 事ができ、これら全ての FIFO に対して TXREQ ビット (CiFIFOCONn<3>) をセットできます。または、1 つの送信 FIFO に書き込み、これに対応する TXREQ ビット (CiFIFOCONn<3>) をセットして、その処理中に次の FIFO に書き込む事もできます。

メッセージの送信中、追加のメッセージを FIFO に書き込む事ができます。ユーザ アプリケー ションは FIFO ヘッドポインタを取得するために CiFIFOUAn レジスタを使い、このアドレスにメッセージを格納する必要があります。追加されたメッセージは送信待ち行列に入れられます。

Note: ユーザ アプリケーションでは、メッセージを FIFO に読み込むごとに (UINC ビット (CiFIFOCONn<13>) をセット後 )、TXREQ ビット (CiFIFOCONn<3>) をセットする事を推奨します。

/* Example usage of data structure shown in 例 34-6. This example sets *//* up a message buffer in FIFO1 */

CANTxMessageBuffer * buffer;

buffer = (CANTxMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));

/* Clear the message buffer. */buffer->messageWord[0] = 0;buffer->messageWord[1] = 0;buffer->messageWord[2] = 0;buffer->messageWord[3] = 0;

buffer->CMSGSID.SID = 0x100;/* Message SID */buffer->CMSGEID.DLC = 0x2;/* Data Length is 2 */buffer->CMSGDATA0.Byte0 = 0xAA;/* Byte 0 Data */buffer->CMSGDATA0.Byte1 = 0xbb;/* Byte 1 Data */

Message Buffer 31

Message Buffer 1

Message Buffer 0

Message Buffer 31

Message Buffer 1

Message Buffer 0

Message Buffer 31

Message Buffer 1

Message Buffer 0

FIFO0 FIFO1 FIFO31

Message Queue and Priority Control

Message Assembly Buffer

CiFOFOCON0 CiFOFOCON1 CiFOFOCON31

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-59

Page 60: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

ユーザ アプリケーションでは、送信 FIFO にメッセージを書き込む前に、メッセージが FIFO に収まるか ( 送信 FIFO がフルでないか ) を確認する必要があります。それには、CAN FIFO 割 り込みレジスタ (CiFIFOINTn<10>) の TxNFULLIF ビットを確認します。フル状態の FIFO にメッセージを書き込むと、未送信のメッセージが上書きされる可能性があります。

CAN メッセージの送信は以下の手順で行います。

1. 必要な数の FIFO を送信用に設定する。

2. 必要に応じて、各 FIFO の優先度を設定する。

3. 表 34-2 に示したフォーマットに従い送信メッセージを作成する。

4. TxNFULLIF ビット (CiFIFOINTn <10>) がクリアの場合、FIFO はフルである。その場合、 ステップ 7 に進む。

5. CiFIFOUAn レジスタを読み出し、そのアドレスにメッセージを格納する。

6. UINC ビット (CiFIFOCONn<13>) をセットする。

7. TXREQ ビット (CiFIFOCONn<3>) をセットする。

8. 必要な数の FIFO でメッセージの回数分、ステップ 3 ~ 6 を繰り返す。

9. FIFO の状態の監視には送信 FIFO 割り込みを使う。

例 34-8 に、CAN1 モジュールで 4 つのメッセージを送信する場合の手順を示します。メッセージ0 と 1 は標準識別子 (SID) の CAN メッセージです。メッセージ 2 と 3 は EID メッセージです。FIFO1 を使い、その長さは 3 です。

例 34-8: 標準 ID と拡張 ID メッセージの送信

/* This code example illustrates how to transmit standard and extended *//* ID messages with the PIC32 CAN module. */

/* The code example uses CAN1, FIFO0. FIFO0 size is 4 */

/* Four CAN message have to be transmitted. *//* Msg 0: SID - 0x100 Data - 0x12BC1245 *//* Msg 1: SID - 0x102 Data - 0x12BC124512BC1245 *//* Msg 2: SID - 0x100 EID - 0xC000 Data - 0x12BC1245 *//* Msg 3: SID - 0x102 EID - 0xC000 Data - 0x12BC124512BC1245 */

/* Pointer to CAN Message Buffer */CANTxMessageBuffer * transmitMessage;

/* This array is the CAN FIFO and message buffers. FIF0 has 4 message *//* buffers. All other buffers are default size. */

unsigned int CANFIFO[16];

/* Place CAN module in configuration mode */

C1CONbits.REQOP = 4;while(C1CONbits.OPMOD != 4);

/* Initialize the C1FIFOBA with the start address of the CAN FIFO message *//* buffer area. */

C1FIFOBA = KVA_TO_PA(CANFIFO);

/* Set FIFO0 size to 3 messages. All other FIFOs at default size. *//* Configure FIFO0 for transmit.*/

C1FIFOCON0bits.FSIZE = 2C1FIFOCON0SET = 0x00000080; /* Set the TXEN bit - Transmit FIFO */

DS61154C_JP - p.34-60 © 2013 Microchip Technology Inc.

Page 61: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

例 34-8: 標準 ID と拡張 ID メッセージの送信 ( 続き )/* Place the CAN module in Normal mode. */

C1CONbits.REQOP = 0;while(C1CONbits.OPMOD != 0);

/* Get the address of the message buffer to write to. Load the buffer and *//* then set the UINC bit. Set the TXREQ bit next to send the message. */

/* Message 0 SID - 0x100 Data - 0x12BC1245*/

transmitMessage = (CANTxMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));transmitMessage->CMSGSID.SID = 0x100; /* CMSGSID */transmitMessage->CMSGEID.IDE = 0;transmitMessage->CMSGEID.DLC = 0x4;transmitMessage->messageWord[2] = 0x12BC1245; /* CMSGDAT0 */C1FIFOCON1SET = 0x00002000; /* Set the UINC bit */C1FIFOCON1SET = 0x00000008; /* Set the TXREQ bit */

/* Message 1 SID - 0x102 Data - 0x12BC124512BC1245 */

transmitMessage = (CANTxMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));transmitMessage->CMSGSID.SID = 0x102; /* CMSGSID */transmitMessage->CMSGEID.IDE = 0;transmitMessage->CMSGEID.DLC = 0x8;transmitMessage->messageWord[2] = 0x12BC1245; /* CMSGDAT0 */transmitMessage->messageWord[3] = 0x12BC1245; /* CMSGDAT1 */C1FIFOCON1SET = 0x00002000; /* Set the UINC bit */C1FIFOCON1SET = 0x00000008; /* Set the TXREQ bit *//* Message 2 SID - 0x100 EID - 0xC000 Data - 0x12BC1245*/

transmitMessage = (CANTxMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));transmitMessage->CMSGSID.SID = 0x100; /* CMSGSID */transmitMessage->CMSGEID.SID = 0xC000; /* CMSGEID */transmitMessage->CMSGEID.IDE = 1;transmitMessage->CMSGEID.DLC = 0x4;transmitMessage->messageWord[2] = 0x12BC1245; /* CMSGDAT0 */C1FIFOCON1SET = 0x00002000; /* Set the UINC bit */C1FIFOCON1SET = 0x00000008; /* Set the TXREQ bit */

/* Message 3 SID - 0x102 EID - 0xC000 Data - 0x12BC124512BC1245*/

transmitMessage = (CANTxMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));transmitMessage->CMSGSID.SID = 0x102; /* CMSGSID */transmitMessage->CMSGEID.SID = 0xC000; /* CMSGEID */transmitMessage->CMSGEID.IDE = 1;transmitMessage->CMSGEID.DLC = 0x8;transmitMessage->messageWord[2] = 0x12BC1245; /* CMSGDAT0 */transmitMessage->messageWord[3] = 0x12BC1245; /* CMSGDAT1 */C1FIFOCON1SET = 0x00002000; /* Set the UINC bit */C1FIFOCON1SET = 0x00000008; /* Set the TXREQ bit */

}

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-61

Page 62: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.7.3 送信メッセージの優先度

CAN モジュールを使うと、ユーザ アプリケーションが送信メッセージ バッファの優先度を制 御できます。メッセージの SOF を送信する前に、CAN モジュールは送信準備が整った全てのバッファの優先度を比較します。優先度が高い送信メッセージ バッファから送信されます。例 えば、送信 FIFO0 の優先度が送信 FIFO1 よりも高い場合、FIFO0 のメッセージが先に送信されます。FIFO の優先度が、他の FIFO の処理中に変更された場合、CAN モジュールは現在のメッセージ送信が完了した後に、全ての FIFO の優先度を再評価します。すなわち、FIFO 優先度の変更は即時反映されます。

優先度は、CAN FIFO 制御レジスタ (CiFIFOCONn<1:0>) のメッセージ送信優先度 (TXPR<1:0>) ビットによって設定します。TXPR<1:0> ビット (CiFIFOCONn<1:0>) では優先度を 4 段階に設定します。以下の選択が可能です。

• 11 = この FIFO の優先度を 高位とする

• 10 = この FIFO の優先度を中高位とする

• 01 = この FIFO の優先度を中低位とする

• 00 = この FIFO の優先度を 低位とする

優先度が同じ場合、自然順序が高位である FIFO が優先されます。自然順序は以下の通りです。

• FIFO0 = 低位

• FIFO1 = より高位

• FIFO31 = 高位

34.7.4 待ち行列内メッセージの送信中止

TXREQ ビット (CiFIFOCONn<3>) をクリアすると、待ち行列内のメッセージ送信を中止できます。TXREQ ビット (CiFIFOCONn<3>) がクリアされると、CAN モジュールは送信の中止を試みます。

送信を中止できた場合、ハードウェアが TXABAT ビット (CiFIFOCONn<6>) をセットします。TXREQ は、メッセージが中止または正常に送信されるまでセットされたままです。

メッセージが正常に送信されると、FIFO ポインタは通常通り更新されます。メッセージが適切に中止された場合、FIFO ポインタは変化しません。必要に応じて、内部インデックス(CFIFOCI) を使うと、どのメッセージが送信済みであるか調べられます。

FRESET ビット (CiFIFOCONn<14>) をセットすると、FIFO ポインタをリセットして保留中のメッセージを全消去できます。その後で FIFO を再度有効化し、送信メッセージを書き込む事ができます。

DS61154C_JP - p.34-62 © 2013 Microchip Technology Inc.

Page 63: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.7.5 リモート送信要求

34.7.2「メッセージの送信要求」で説明したように、CAN バスシステムには、あるノードが別のノードからのデータを要求する方法があります。要求元のノードは RTR ビットをセットしたメッセージを送信します。このメッセージにはデータが一切なく、フィルタ一致をトリガするアドレスだけが含まれます。

RTR に応答するように設定されたフィルタは、送信用に設定された FIFO をポイントします。RTREN = 1に設定して、その FIFO がリモート送信要求へ返信できるようにする事も必要です。

RTR の処理には CPU は不要です。送信 FIFO が正しく設定されており、フィルタが一致し、そのフィルタが FIFO をポイントしていれば、バッファは送信待ち行列に入ります。FIFO は、以下のように設定しておく必要があります。

1. TXEN ビット (CiFIFOCONn<7>) を「1」にセットして FIFO を送信モードに設定する。

2. フィルタを有効にして、一致させるメッセージの識別子を書き込む。

3. そのフィルタに対するバッファポインタ レジスタは、送信バッファをポイントする ( フィ ルタは通常、受信 FIFO をポイントするが、この場合は送信 FIFO をポイントする )。

4. RTR を有効にするために、RTREN ビット (CiFIFOCONn<2>) を「1」にセットする。

5. FIFO には、あらかじめ送信メッセージを少なくとも 1 つ書き込んでおく。

RTR メッセージを受信し、それが適切に設定された送信バッファをポイントするフィルタに一致した場合、TXREQ ビット (CiFIFOCONn<3>) がセットされます。続いて、FIFO 内のメッセージ バッファが優先度に従って送信されます。リモート送信要求の発生時に送信バッファに メッセージが用意されていない場合は FIFO オーバーフローとして扱われ、CAN FIFO 割り込 みレジスタ (CiFIFOINTn<3>) の受信 FIFO オーバーフロー割り込みフラグ (RXOVFLIF) ビットがセットされます。例 34-9 に、リモートノードにデータを要求する手順を示します。例 34-10に、RTR に応答できるようにノードを設定する手順を示します。

例 34-9: リモート送信要求/* This code snippet shows an example of a Remote Transmit Request. The *//* node in this case will request a transmission from an application (or *//* node) with an SID of 0x100. */

CANMessageBuffer * rtrMessage;rtrMessage = (CANMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));

/* Clear the message. */rtrMessage->messageWord[0] = 0x0;rtrMessage->messageWord[1] = 0x0;rtrMessage->messageWord[2] = 0x0;rtrMessage->messageWord[3] = 0x0;

rtrMessage->CMSGSID.SID = 0x100;rtrMessage->CMSGEID.IDE = 0;rtrMessage->CMSGEID.RTR = 1; rtrMessage->CMSGEID.DLC = 0;C1FIFOCON1SET = 0x00002000; /* Set the UINC bit *//* The Remote Transmit Request message (rtrMessage) is now ready to be sent.*/

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-63

Page 64: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

例 34-10: リモート送信要求に対する応答/* This code example shows how to configure the CAN1 module to respond *//* to a remote transmit request. */

/* In this case, FIFO1 is configured to respond to the a remote request *//* on SID = 0x100. */

/* Allocate CAN FIFO memory. */unsigned int CANFIFO[140];

/* This is the pointer to the reply message. */CANMessageBuffer * rtrReply;

/* Place CAN Module in configuration mode.*/

C1CONbits.REQOP = 4;while(C1CONbits.OPMOD != 4);

/* Configure FIFO1 for transmit operation, 4 message buffers and enable *//* Auto Remote Transmit. */

C1FIFOCON1SET = 0x00000080; /* Set the TXEN bit */C1FIFOCON1SET = 0x00000004; /* Enable RTR */C1FIFOCON1bits.FSIZE = 4;

/* Configure a filter to accept a message with SID = 0x100. Refer to *//* 34.8「CANメッセージのフィルタ処理」 for more details on configuring *//* filters. In this case, Filter 0 and Mask0 are used. */

C1FLTCON0bits.FSEL0 = 1; /* Point to FIF01 */C1FLTCON0bits.MSEL0 = 0; /* Select Mask 0 */

C1RXF0bits.SID = 0x100; /* Configure Filter 0. */C1RXF0bits.EXID = 0;

C1RXM0bits.SID = 0x1FF; /* Configure Mask 0. */C1RXM0bits.MIDE = 1;

C1FLTCON0SET = 0x00000080; /* Enable the filter. */

/* Assign FIFO memory to CAN module */C1FIFOBA = KVA_TO_PA(CANFIFO);

/* Place CAN Module in normal mode.*/

C1CONbits.REQOP = 0;while(C1CONbits.OPMOD != 0);

/* Form the remote reply message. */

rtrReply = (CANMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));rtrReply->messageWord[0] = 0;rtrReply->messageWord[1] = 0;rtrReply->messageWord[2] = 0;rtrReply->messageWord[3] = 0;

rtrReply->CMSGSID.SID = 0x100; /* CMSGSID */rtrReply->CMSGEID.IDE = 0;rtrReply->CMSGEID.DLC = 0x4;rtrReply->messageWord[2] = 0x12BC1245; /* CMSGDAT0 */

C1FIFOCON1bits.UINC = 1;

/* FIFO is now ready to respond to RTR. */

DS61154C_JP - p.34-64 © 2013 Microchip Technology Inc.

Page 65: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.7.6 メッセージ送信 FIFO の動作例

CAN1 モジュールの 2 つの FIFO、FIFO0 と FIFO1 を使うユーザ アプリケーションの例を考えます。 FIFO0 には、CAN メッセージ受信用に設定された 4 つのメッセージ バッファがあります。FIFO1 は、7つのメッセージ バッファを備え、メッセージ送信用に設定されています。FIFO2~FIFO31 は既定値状態のままです。CAN メッセージ バッファは物理アドレス 0x00000100 から開始し ます。この値は、C1FIFOBA レジスタに書き込まれます。図 34-16 に、この設定を示します。

図 34-16: この FIFO 動作例に対応する FIFO 設定

FIFO1 の開始アドレスは、CAN メッセージ バッファのベースアドレス (0x00000100) と、FIFO0 のバイトサイズ (4 メッセージ バッファ * 16 = 0x40) から求められます。FIFO1 の物理開始ア ドレスは 0x00000140 です。以下のセクションでは送信 FIFO1 に注目します。

図 34-17 に、CAN1 モジュールの FIFO1 がエンプティで、メッセージが書き込まれていない場合を示します。送信 FIFO 非フル割り込みフラグ (TXNFULLIF)、送信 FIFO ハーフエンプティ割り込みフラグ (TXHALFIF)、送信 FIFO エンプティ割り込みフラグ (TXEMPTYIF) がセットされます。

図 34-17: FIFO1 - 開始時

FIFO NumberMessage Buffer Start Address

Message Buffer

FIFO0(Full Receive

Message)

0x00000100 MB0

0x00000110 MB1

0x00000120 MB2

0x00000130 MB3

FIFO1(Transmit FIFO)

0x00000140 MB0

0x00000150 MB1

0x00000160 MB2

0x00000170 MB3

0x00000180 MB4

0x00000190 MB5

0x000001A0 MB6

FIFO2 0x000001B0 MB0

FIFO4 0x000001C0 MB0

•••

•••

•••

FIFO31 0x00000380 MB0

A

B

C

C1FIFOCON0.TXEN = 1C1FIFOCON0.FSIZE = 3

C1FIFOCON1.TXEN = 1C1FIFOCON1.SIZE = 6

FIFO2 - FIFO31 are not configured

CAN1FIFO ConfigurationC1FIFOBA = 0x00000100

A

B

C

MB2

MB1

MB0

MB6

MB5

MB4

MB3

C1FIFOBA = 0x00000100C1FIFOUA1 = 0x00000140

TXNFULLIF - 1TXHALFIF - 1TXEMPTYIF - 1TXREQ - 0

C1FIFOCI1 = 0x00000000

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-65

Page 66: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

図 34-18 に、 初のメッセージが読み込まれた状態の FIFO1 を示します。FIFO1 の 初のメッセージ バッファ (MB) である MB0 にデータが格納されている事に注意してください。ユーザ アプリケーションが UINC ビット (C1FIFOCON1<13>) をセットし、これによって FIFO ヘッド(C1FIFOUA1) が前進し、次のエンプティ状態のメッセージ バッファ MB1 をポイントします。 FIFO がエンプティでないため TXEMPTYIF フラグはクリアされます。ユーザ アプリケーショ ンは、この時点で TXREQ ビット (C1FIFOCON1<3>) をセットし、送信を要求しています。

図 34-18: FIFO1 - 初の書き込み

図 34-19 に、 初のメッセージを MB0 から送信した後の FIFO1 の状態を示します。TXREQがクリアされ、TXEMPTYIF が再度セットされます。CAN モジュール メッセージ インデック ス レジスタ (C1FIFOCI1) が、現在アドレス 0x00000150 にある 2 番目のメッセージ バッファ MB1 をポイントしている事に注意してください。

図 34-19: FIFO1 - 初のメッセージ送信後

図 34-20 に、MB1 ~ MB6 にさらに 6 つのメッセージを読み込んだ後の FIFO の状態を示します。ユーザ アプリケーションは、メッセージを書き込む前に、書き込み先となる次のメッセージ バッファのアドレスを位置を取得するために、C1FIFOUA1 を読み出し済みです。TXHALFIFフラグがクリアされ、ユーザ アプリケーションはまだデータの送信を要求していません (TXREQ = 0)。

図 34-20: FIFO1 -7 番目の書き込みによって FIFO がフルになろうとしている状態

MB2

MB1

MB0/MSG0

MB6

MB5

MB4

MB3

C1FIFOBA = 0x00000100C1FIFOUA1 = 0x00000150

TXNFULLIF - 1TXHALFIF - 1TXEMPTYIF - 0TXREQ - 1

C1FIFOCI1 = 0x00000000

MB2

MB1

MB0

MB6

MB5

MB4

MB3

C1FIFOBA = 0x00000100C1FIFOUA1 = 0x00000150

TXNFULLIF - 1TXHALFIF - 1TXEMPTYIF - 1TXREQ - 0

C1FIFOCI1 = 0x00000001

MB2/MSG2

MB1/MSG1

MB0

MB6/MSG6

MB5/MSG5

MB4/MSG4

MB3/MSG3

C1FIFOBA = 0x00000100C1FIFOUA1 = 0x00000140

TXNFULLIF - 1TXHALFIF - 0TXEMPTYIF - 0TXREQ - 0

C1FIFOCI1 = 0x00000001

DS61154C_JP - p.34-66 © 2013 Microchip Technology Inc.

Page 67: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

図34-21に、8番目のメッセージがMB0に読み込まれた後のFIFOの状態を示します。TXNFULLIFと TXHALFIF の両方のフラグがクリアされます。現在の FIFO ヘッドは MB1 をポイントしています。FIFO はフル状態です。ユーザ アプリケーションはメッセージ送信も要求しました (TXREQ = 1)。

図 34-21: FIFO1 - 8 番目の書き込みによるバッファのフル状態

図 34-22 に、再度エンプティ状態に戻った FIFO を示します。CAN モジュールは FIFO 内の 7 つのメッセージを全て送信しました。TXEMPTYIF が再度セットされ、TXREQ がハードウェアによってクリアされました。この段階で、C1FOCI1 は完全にラップアラウンドし、再度 MB1をポイントしています。

図 34-22: FIFO1 - 全て送信済み

MB2/MSG2

MB1/MSG1

MB0/MSG7

MB6/MSG6

MB5/MSG5

MB4/MSG4

MB3/MSG3

C1FIFOBA = 0x00000100C1FIFOUA1 = 0x00000150

TXNFULLIF - 0TXHALFIF - 0TXEMPTYIF - 0TXREQ - 1

C1FIFOCI1 = 0x00000001

MB2

MB1

MB0

MB6

MB5

MB4

MB3

C1FIFOBA = 0x00000100C1FIFOUA1 = 0x00000150

TXNFULLIF - 1TXHALFIF - 1TXEMPTYIF - 1TXREQ - 0

C1FIFOCI1 = 0x00000001

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-67

Page 68: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.8 CAN メッセージのフィルタ処理

CAN は、ブロードキャスト タイプのネットワークです。1 つのノードが送信したメッセージ は、ネットワーク内の全てのノードが受信します。個々の CAN ノードには、自分に必要なメッセージを受信するフィルタ処理のメカニズムが必要です。この処理は、CAN メッセージ アク セプタンス フィルタとマスクレジスタで行います。フィルタ処理は、CAN メッセージの ID フィールドに対して実行されます。

PIC32 の CAN モジュールは、32 個のアクセプタンス フィルタと 4 つのマスクレジスタを実装 しています。ユーザ アプリケーションは、特定のメッセージ識別子に一致するフィルタを設定 する事で、受信メッセージ フィルタを構成します。

各フィルタは、CAN フィルタ制御レジスタ (CiFLTCONn) で制御します。このレジスタは、各フィルタに対する以下のビットを格納します。

• FLTENn(n = 0 ~ 31) - フィルタを有効化 / 無効化するフィルタ イネーブルビット

• MSELn<1:0> (n = 0 ~ 31) - フィルタ比較にどのマスクを適用するかを定義するマスク選択 ビット

• FSELn<4:0> (n = 0 ~ 31) - ID がフィルタに一致したメッセージの格納先 FIFO を定義する バッファポインタ

CAN モジュールが受信したメッセージの識別子を、フィルタ内の対応するビットと比較します。識別子がフィルタに一致したメッセージは、CAN フィルタ制御レジスタ (CiFLTCONn) の FIFO選択 (FSELn<4:0>) ビットがポイントする FIFO に格納されます。

アクセプタンス マスクは、識別子内の特定のビットを無視するために使います。無視するよう に設定されたビットは、フィルタ内のビットと比較されません。例えば、識別子 0、1、2、3のメッセージを全て受信したい場合、識別子の下位 2 ビットをマスクすれば可能です。使用可能なマスクレジスタは 4 つあります。フィルタは、4 つのマスクの内の 1 つに関連付ける事ができます。

図 34-23 に、CAN メッセージのフィルタ処理を図解します。メッセージの受信後、CAN モジュールは全てのフィルタを巡回します。各フィルタを選択する際、MSELn<1:0> ビットでマスクも選択します。メッセージ アセンブリ バッファ内のメッセージをフィルタと比較します (XOR)。 フィルタ処理から除外する必要がある全てのビットは選択したマスクによって無視されます。全ての条件が一致すると ID 一致が発生し、CAN モジュールは MAB の内容を FSELn<4:0> ビット (CiFLTCONn<4:0>) がポイントする適切な FIFO に移動します。

図 34-23: CAN メッセージのフィルタ処理

図 34-23 に示した例の受信メッセージ ID は 01234567 です。これに も近いフィルタは ID が01234566 のフィルタ 1 です。これら 2 つは 下位ビット (LSb) を除いて完全に一致している事に注意してください。この違いがあっても、選択したマスク ( マスク 2) がメッセージの LSb を無視するように設定されているため、2 つは一致していると見なされます。 フィルタ 2 の FSELnビットは2に設定されているため、CANモジュールはメッセージをFIFO2に格納します。

RXF31 Filter = 2A2B3FD

RXF1 Filter = 01234566

RXF0 Filter = 01234565

MASK3 = 00000000

MASK2 = FFFFFFFE

MASK1 = FFFF0FFF

MASK0 = FFFFFFFF

MSEL=1

MSEL=2

MSEL=0

Current Filter = 01234566MSEL

Message Assembly Buffer

Current Mask = FFFFFFFE

ID Match = 1

CAN FSM

Filter Select = 1 (MAB) = 01234567

FSEL31 = 9

FSEL1 = 2

FSEL0 = 10

DS61154C_JP - p.34-68 © 2013 Microchip Technology Inc.

Page 69: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.8.1 フィルタの有効化と変更

フィルタは CiFLTCONn レジスタのフィルタ イネーブル (FLTENn) ビットによって ON/OFF で きます。クリアで OFF、セットで ON です。フィルタの変更は、CAN モジュールがコンフィグレーション モード (OPMOD<2:0> = 100)、通常動作モード (OPMOD<2:0> = 000)、ディセー ブル モード (OPMOD<2:0> = 001) の時に可能です。

受信メッセージの処理中、CAN モジュールはフィルタの無効化を保留します。フィルタ処理が完了するまで、FLTENn ビットはセットされたままです。フィルタ処理中にこのフィルタに一致するメッセージを受信した場合、そのメッセージはフィルタがポイントするバッファに書き込まれます。フィルタはメッセージの処理完了後に無効化されます。

ユーザ アプリケーションはフィルタを変更する前に FLETNn ビットをポーリングして、フィル タの無効化が完了している事を確認する必要があります。フィルタが有効な間、フィルタレジスタへの書き込みは阻止されます。

34.8.2 拡張識別子と標準識別子

CAN メッセージは、11 ビットの SID または 29 ビットの EID を持ちます。CAN アクセプタンス フィルタマスク n レジスタ (CiRXFn) の SID<10:0> ビットと EID<17:0> ビットは、目的と するメッセージの SID または SID と EID に一致するように設定する必要があります。拡張識別子イネーブル (EXID) ビット (CiRXFn<19>) をセットすると、フィルタは EID を持つメッセージと一致します。EXID ビット (CiRXFn<19>) をクリアすると、フィルタは SID を持つメッセージと一致します。マスク識別子受信モード (MIDE) ビット (CiRXMn<19>) をクリアすると、上記のメッセージタイプは無視され、フィルタに一致する両方のメッセージタイプが受け入れられます。

34.8.3 アクセプタンス マスク

CAN モジュールには 4 つの専用マスクレジスタ、マスクレジスタ 0、1、2、3 があります。全てのフィルタは、以下の 4 つのマスクのどれか 1 つを選択できます。

• マスクレジスタ 0• マスクレジスタ 1• マスクレジスタ 2• マスクレジスタ 3

アクセプタンス フィルタに使うマスクは、該当する CiFLTCONn レジスタ内の、そのフィルタ に対応する MSELm<1:0> ビットによって選択します。マスクレジスタは、そのマスクを使っているフィルタが有効な時は変更できません。その場合、マスクを変更する前にフィルタを無効にする必要があります。あるフィルタにマスクを適用したくない場合、マスクビットを 1 に設定します。これによって、フィルタ処理実行時に全てのフィルタビットを考慮に入れた動作をします。表 34-3 に、CAN メッセージの IDE ビット、EXID ビット (CiRXFn<19>)、MIDE ビット(CiRXMn<19>) の各種組み合わせに対する真理値表を示します。

Note: CiRXMn レジスタは、CAN モジュールがコンフィグレーション モードの場合のみ 変更できます。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-69

Page 70: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.8.4 バッファポインタ

アクセプタンス フィルタの制御レジスタには FSELn<4:0> ビット (CiFLTCONn<4:0>) が関連 付けられています。これは、対応するフィルタのアドレスポインタとして機能します。識別子が入力され一致が発生すると、そのフィルタに対応する FSELn の出力が有効となり、受信 FIFOメモリをポイントするアドレスポインタにラッチされます。メッセージは MAB 内で組み立てられた後、選択された FIFO に書き込まれます。メッセージに一致したフィルタのアドレスは、受信バッファ内のフィルタ一致番号 (FILHIT<4:0>) ビット (CiVEC<12:8>) に書き込まれます。

バッファポインタを使うという事は、全てのフィルタが全ての FIFO をポイントでき、全てのFIFO は複数のフィルタからポイントできる事を意味します。この特性を利用する方法として、次のような例が考えられます。優先度が低いメッセージは全てを 1 つの大きな FIFO に格納し、低頻度で処理します。高優先度のメッセージは別の FIFO に格納し、メッセージが格納されるたびに処理します。

34.8.5 同一 ID のメッセージの処理

CAN モジュールはメッセージのフィルタ処理とマスク処理を使えますが、1 つのメッセージが複数のフィルタに一致する場合があります。複数のフィルタが受信メッセージに一致し、それらのフィルタがそれぞれ異なる受信バッファレジスタをポイントしている場合、そのうち 1 つの受信バッファレジスタにだけ書き込まれます。書き込み先となる受信バッファは、フィルタ番号とバッファの使用可否状況によって決まります。番号が小さいフィルタの方が優先されます。例えば、フィルタ 0 は常にフィルタ 1 よりも優先されます。 フィルタ 0 がポイントする受信バッ ファレジスタがフルの場合、一致したフィルタに対応する FIFO の中から次に使用可能なものに書き込まれます。

図 34-24 に、複数のフィルタ一致時の優先度付けの例を示します。MAB 内のメッセージはフィルタ 1、2、4、7 に一致します。フィルタ 1 が自然順序優先度が も高いものの、それに関連付けられた FIFO はフルです。フィルタ 2 も同様です。フィルタ 4 が次に優先度が高く、そのFIFO には空きがあります。従って、メッセージは FIFO4 に格納されます。

表 34-3: 標準 / 拡張メッセージの受信真理値表

メッセージIDE

ビット

フィルタEXIDビット

マスクMIDEビット

説明メッセージ受け入れ

0 0 1標準メッセージ、フィルタは標準のみを指定、SID 一致 あり

標準メッセージ、フィルタは標準のみを指定、SID 不一致 なし

1 1 1拡張メッセージ、フィルタは拡張のみを指定、SID と EID 一致 あり

拡張メッセージ、フィルタは拡張のみを指定、SID または EID のどちらかが不一致

なし

1 0 1 拡張メッセージ、フィルタは標準のみを指定 なし

0 1 1 標準メッセージ、フィルタは拡張のみを指定 なし

0 x 0標準メッセージ、フィルタはタイプ無視を指定、SID 一致 あり

標準メッセージ、フィルタはタイプ無視を指定、SID 不一致 なし

1 x 0拡張メッセージ、フィルタはタイプ無視を指定、SID と EID 一致 あり

拡張メッセージ、フィルタはタイプ無視を指定、SID まは EID のどちらかが不一致

なし

凡例 : x = ドントケア

DS61154C_JP - p.34-70 © 2013 Microchip Technology Inc.

Page 71: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

図 34-24: 複数のフィルタ一致時の優先順位付け

34.8.6 フィルタの設定

SID CAN メッセージのフィルタは以下の手順で設定します。

1. 必要な CAN メッセージの SID で SID<10:0> ビット (CiRXFn<0:0>) (n は目的とするフィルタ ) を更新する。

2. EXID ビット (CiRXFn<19>) をクリアする。これにより、このフィルタは SID メッセージにのみ一致する。

3. フィルタに対するマスクを作成する。CiRXMn レジスタに適切な値を書き込む。SID メッセージにのみ一致するように MIDE ビット (CiRXMn<19>) をセットする。

4. 選択したフィルタを制御する CiFLTCONn レジスタを特定する。受信 FIFO をポイントするように FSELn<4:0> ビット (CiFLTCONn<4:0>) の値を設定する。ステップ 3 で設定したマスクを使うように MSELn ビットを設定する。

5. CiFLTCONn レジスタ内の FLTENn ビットをセットしてフィルタを有効にする。

例 34-11 に、SID 用に CAN モジュール メッセージ アクセプタンス フィルタを設定するサンプ ルコードを示します。

例 34-11: SID CAN メッセージに一致するフィルタの設定

Message = 3A8E924MAB

Filter 7 ID = 3AxE924 FSEL = 7

Filter 6 ID = 9902B37 FSEL = 6

Filter 5 ID = 62C74E9 FSEL = 5

Filter 4 ID = 3A8Ex24 FSEL = 4

Filter 3 ID = 05092B3 FSEL = 3

Filter 2 ID = 3A8E9x4 FSEL = 2

Filter 1 ID = 3A8E92x FSEL = 1

Filter 0 ID = 23D34A8 FSEL = 0

MATCH = 1

MATCH = 0

MATCH = 0

MATCH = 1(1)

MATCH = 0

MATCH = 1

MATCH = 1

MATCH = 0

FULL = 0

FULL = 0

FULL = 0

FULL = 0(1)

FULL = 0

FULL = 1

FULL = 1

FULL = 0

FIFO7

FIFO6

FIFO5

FIFO4

FIFO3

FIFO2

FIFO1

FIFO0

SELECTED FSEL = 4

X(2)

X(2)

Note 1: CAN モジュールが一致しているか判断する。

2: フィルタ値はマスクされる。

3A8Ex24

/* This code example shows how to configure a filter to match a Standard *//* Identifier (SID) CAN message. */

/* In this example, Filter 3 is set up to accept messages with a SID range *//* of 0x100 to 103. Accepted messages will be stored in FIFO5. Mask 1 is *//* used to implement the filter address range. */

C1FLTCON0bits.FSEL3 = 5; /* Store messages in FIFO5 */C1FLTCON0bits.MSEL3 = 1; /* Use Mask 1 */

C1RXF3bits.SID = 0x100; /* Filter 3 SID */C1RXF3bits.EXID = 0; /* Filter only SID messages */

C1RXM1bits.SID = 0x7FC; /* Ignore last 2 bits in comparison */C1RXM1bits.MIDE = 1; /* Match only message types. */

C1FLTCON0bits.FLTEN3 = 1; /* Enable the filter */

/* Filter is now configured. */

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-71

Page 72: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

EID CAN メッセージのフィルタは以下の手順に従って設定します。

1. 必要な CAN メッセージの SID によって SID<10:0> ビット (CiRXFn<31:21>) (n は目的と するフィルタ ) を更新する。必要な CAN メッセージの EID によって EID<17:0> ビット(CiRXFn<17:0>) を更新する。

2. EXID ビット (CiRXFn<19>) レジスタをセットする。これにより、このフィルタは EID メッセージにのみ一致する。

3. フィルタに対するマスクを作成する。CiRXMn レジスタに適切な値を書き込む。EID メッセージにのみ一致するように MIDE ビット (CiRXMn<19>) をセットする。

4. 選択したフィルタを制御する CiFLTCONn レジスタを特定する。受信 FIFO をポイントするように FSELn<4:0> ビット (CiFLTCONn<4:0>) の値を設定する。ステップ 3 で設定したマスクを使うように MSELn ビットを設定する。

5. CiFLTCONn レジスタ内の FLTENn ビットをセットしてフィルタを有効にする。

例 34-12 に、EID 用に CAN モジュール メッセージ アクセプタンス フィルタを設定するサンプ ルコードを示します。

例 34-12: EID CAN メッセージに一致するフィルタの設定

/* This code example shows how to configure a filter to match an *//* Extended Identifier CAN message. */

/* In this example, Filter 3 is set up to accept messages with SID = 0x53 *//* and EID = 0x1C498. Accepted message will be stored in FIFO5. Mask 1 is *//* used. */

C1FLTCON0bits.FSEL3 = 5; /* Store messages in FIFO5 */C1FLTCON0bits.MSEL3 = 1; /* Use Mask 1 */

C1RXF3bits.SID = 0x100; /* Filter 3 SID */C1RXF3bits.EID = 0x1C498; /* Filter 3 EID */ C1RXF3bits.EXID = 1; /* Filter only SID messages */

C1RXM1bits.SID = 0x7FF; /* Consider all bits in */C1RXM1bits.EID = 0x3FFFF; /* in the filter comparison. */C1RXM1bits.MIDE = 1; /* Match only message types. */

C1FLTCON0bits.FLTEN3 = 1; /* Enable the filter */

/* Filter is now configured. */

DS61154C_JP - p.34-72 © 2013 Microchip Technology Inc.

Page 73: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.8.7 DeviceNet™ のフィルタ処理

DeviceNet フィルタ処理機能は CAN 仕様 2.0A に基づきます。この機能を使うと、SID に加えて、データフィールドの 大 18 ビットをメッセージ アクセプタンス フィルタの EID と比較で きます。

DeviceNet 機能は、CAN 制御レジスタ 2 (CiCON<4:0>) の DeviceNet フィルタビット番号 (DNCNT<4:0>) 制御ビットで有効化または無効化します。DNCNT フィールドで指定する値によって、メッセージ アクセプタンス フィルタの EID ビットとの比較に使うデータビット数が 決まります。DNCNT<4:0> ビット (CiCON<4:0>) がクリアされている場合、DeviceNet 機能は無効です。

メッセージが受け入れられるには、11 ビットの SID はメッセージ アクセプタンス フィルタの SID<10:0> ビットに一致する必要があり、メッセージの 初の「n」データビットはメッセージ アクセプタンス フィルタ内の EID<17:0> ビットに一致する必要があります。例えば、図 34-25 で示すように、受信メッセージデータ ペイロードの 初の 18 データビットはメッセー ジ アクセプタンス フィルタの対応する EID ビット (CiRXFn<17:0>) と比較されます。受信メッ セージの IDE ビットは「0」である必要があります。

図 34-25: DeviceNet™ フィルタ処理を使った CAN 動作

SID10 SID9

SOF

IDENTIFIER11 Bits

EOF7 Bits 3 Bits

SID0

Accept/Reject Message

IFSDATA BYTE 0 DATA BYTE 1 DATA BYTE 2

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

Data Byte 0 Data Byte 1 Data Byte 2MESSAGE SID<10:0>

SID10 SID9 SID0 EID0 EID1 EID7 EID8 EID9 EID15 EID16 EID17

STANDARD MESSAGE DATA FRAME

MESSAGE ACCEPTANCE FILTER

SID<10:0>

MESSAGE ACCEPTANCE FILTER

EID<0:17>

Note: ここに示した EID ビットに対する DeviceNet™ フィルタ処理の設定は、DNCNT<4:0> = 10010です。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-73

Page 74: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.8.7.1 フィルタの比較

表 34-4 に、DNCNT<4:0> 制御ビット (CiCON<4:0>) で設定されるフィルタの比較を示します。例えば、DNCNT<4:0> = 00011 の場合、11 ビットの SID が SID アクセプタンス フィルタ (SID<10:0>) に一致し、データバイト 0 の bit 7、6、5 が EID フィルタ (EID<0:2>) に一致する メッセージのみが受け入れられます。

34.8.7.2 特殊なケース

メッセージに含まれるデータビットが DeviceNet フィルタ設定が要求するビット数より少ないという特殊なケースがあります。

• Case 1 - DNCNT<4:0> が 18 を超えている場合、つまりユーザ アプリケーションが EID ビッ トの合計数を上回るビットを選択している場合、フィルタ比較はデータの 18 番目のビット ( データバイト 2 の bit 6) で終了します。SID と 18 個のデータビット全てが一致するとメッ セージは受け入れられます。

• Case 2 - DNCNT<4:0> が 16 を超え、受信メッセージのデータ長コード (DLC) が 2 (2 つの データバイトのペイロードを示す ) の場合、フィルタ比較はデータの 16 番目のビット ( データ バイト 1 の bit 0) で終了します。SID と 16 個のデータビット全てが一致するとメッセージは 受け入れられます。

• Case 3 - DNCNT<4:0> が 8 を超え、受信メッセージの DLC = 1 (1 つのデータバイトのペイ ロードを示す ) の場合、フィルタ比較はデータの 8 番目のビット ( データバイト 0 の bit 0) で 終了します。SID と 8 個のデータビット全てが一致するとメッセージは受け入れられます。

• Case 4 - DNCNT<4:0> が 0 を超え、受信メッセージの DLC = 0 ( データペイロードがない事 を示す ) の場合、フィルタ比較は SID で終了します。SID が一致するとメッセージは受け入れられます。

表 34-4: DeviceNet フィルタビットの設定

DeviceNet™フィルタの設定 (DNCNT<4:0>)

比較される受信メッセージのデータビット ( バイト番号 < ビット >)

アクセプタンス フィルタで使う

EID ビット

00000 比較なし 比較なし

00001 データバイト 0<7> EID<0>

00010 データバイト 0<7:6> EID<1:0>

00011 データバイト 0<7:5> EID<2:0>

00100 データバイト 0<7:4> EID<3:0>

00101 データバイト 0<7:3> EID<4:0>

00110 データバイト 0<7:2> EID<5:0>

00111 データバイト 0<7:1> EID<6:0>

01000 データバイト 0<7:0> EID<7:0>

01001 データバイト 0<7:0> とデータバイト 1<7> EID<8:0>

01010 データバイト 0<7:0> とデータバイト 1<7:6> EID<9:0>

01011 データバイト 0<7:0> とデータバイト 1<7:5> EID<10:0>

01100 データバイト 0<7:0> とデータバイト 1<7:4> EID<11:0>

01101 データバイト 0<7:0> とデータバイト 1<7:3> EID<12:0>

01110 データバイト 0<7:0> とデータバイト 1<7:2> EID<13:0>

01111 データバイト 0<7:0> とデータバイト 1<7:1> EID<14:0>

10000 データバイト 0<7:0> とデータバイト 1<7:0> EID<15:0>

10001 バイト 0<7:0> とバイト 1<7:0> とバイト 2<7> EID<16:0>

10010 バイト 0<7:0> とバイト 1<7:0> とバイト 2<7:6> EID<17:0>

10011~ 11111 無効な選択 無効な選択

DS61154C_JP - p.34-74 © 2013 Microchip Technology Inc.

Page 75: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.9 CAN メッセージの受信

CAN モジュールは CAN バス上のメッセージを常時監視します。メッセージを受信すると、メッセージ識別子と現在設定されているフィルタ / マスクの組み合わせを比較します。一致した場合、CAN モジュールはそのメッセージを FSELn<4:0> ビット (CiFLTCONn<4:0>) がポイントする FIFO に格納します。メッセージの受信と FIFO への格納が完了すると、以下のビットが更新されます。

• CANモジュール メッセージ インデックス レジスタ(CiFIFOCIn<4:0>)のCFIFOCI<4:0>ビット

• CiFIFOINTn レジスタの受信 FIFO オーバーフロー割り込みフラグ (RXOVFLIF)、受信 FIFOフル割り込みフラグ (RXFULLIF)、受信 FIFO 非エンプティ割り込みフラグ (RXNEMPTYIF)、受信 FIFO ハーフフル割り込みフラグ (RXHALFIF)

• CAN FIFOステータス レジスタ (CiFSTAT<31:0>)のFIFO割り込み保留フラグ (FIFOIPn<31:0>) ビット

• ICODE<6:0> ビット (CiVEC<6:0>) と FILHIT<4:0> ビット (CiVEC<12:8>)

割り込みが有効な場合、割り込みを生成します。

受け入れられた CAN メッセージは、表 34-5 に示すフォーマットでメッセージ バッファに格納 されます。CAN モジュールは、図 34-26 ~図 34-29 に示すフォーマット設定を使います。

Note: メッセージを受信するには、ユーザ アプリケーションでメッセージ アクセプタン ス フィルタとマスクレジスタをそれぞれ少なくとも 1 つは有効にする必要があり ます。

表 34-5: RAMに格納される際の受信メッセージのフォーマット -CiCON.CANCAP = 1、CFIFOCON.DONLY = 0

ワード名Bit

31/2315/7Bit

30/22/14/6Bit

29/21/13/5Bit

28/20/12/4Bit

27/19/11/3Bit

26/18/10/2Bit

25/17/9/1Bit

24/16/8/0

CMSGSID 31:24 CMSGTS<15:8>

23:16 CMSGTS<7:0>

15:8 FILHIT<4:0> SID<10:8>

7:0 SID<7:0>

CMSGEID 31:24 -- -- SRR IDE EID<17:14>

23:16 EID<13:6>

15:8 EID<5:0> RTR RB1

7:0 -- -- --- RB0 DLC<3:0>

CMSGDATA0 31:24 受信バッファ データバイト 3

23:16 受信バッファ データバイト 2

15:8 受信バッファ データバイト 1

7:0 受信バッファ データバイト 0

CMSGDATA1 31:24 受信バッファ データバイト 7

23:16 受信バッファ データバイト 6

15:8 受信バッファ データバイト 5

7:0 受信バッファ データバイト 4

凡例 : 網掛けのビットは「0」として読み出されます。

Note: CAN 受信メッセージはデバイス RAM に格納され、対応する SET/CLR/INV レジスタはありません。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-75

Page 76: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

図 34-26: CMSGSID のフォーマット

図 34-27: CMSGEID のフォーマット

CMSGTS<15:0> FILHIT<4:0> SID<10:0>

bit 31-16 CMSGTS<15:0>: CAN メッセージ タイムスタンプ ビットメッセージを正常に受信した場合の CANTMR の値です。CANCAP = 0 の場合、これらのビットは 「0」として読み出されます。

bit 15-11 FILHIT<4:0>: フィルタ一致コードビットこのバッファを書き込み先としてポイントしたフィルタの番号をエンコードします。11111 = メッセージはフィルタ 31 によって受け付けられた

00000 = メッセージはフィルタ 0 によって受け付けられた

bit 10-0 SID<10:0>: 受信メッセージの標準識別子

— SRR IDE EID<17:0> RTR RB1 — RB0 DLC<3:0>

bit 31-30 未実装 : 「0」として読み出し

bit 29 SRR: 代替リモート要求ビット標準メッセージ フレームの場合 (IDE = 0)、このビットはドントケアです。拡張メッセージ フレームの場合 (IDE = 1)、このビットは常に「1」です。

bit 28 IDE: 拡張識別子ビット1 = 受信メッセージは拡張識別子を持つ0 = 受信メッセージは標準識別子を持つ

bit 27-10 EID<17:0>: 拡張識別子ビット

bit 9 RTR: リモート送信要求ビット1 = メッセージの送信元はリモート送信を要求した0 = 通常メッセージを受信した

bit 8 RB1: 予約済みビット 1CAN 仕様 2.0B に従い、ユーザ アプリケーションはこのビットを「0に設定する必要があります。

bit 7-5 未実装 : 「0」として読み出し

bit 4 RB0: 予約済みビット 0CAN 仕様 2.0B に従い、ユーザ アプリケーションはこのビットを「0」に設定する必要があります。

bit 3-0 DLC<3:0>: データ長コードビット1xxx = 受信メッセージは 8 バイトのデータを含む0111 = 受信メッセージは 7 バイトのデータを含む•••

0001 = 受信メッセージは 1 バイトのデータを含む0000 = 受信メッセージは 0 バイトのデータを含む

Note: このレジスタは CAN モジュール外のシステムメモリ内にあります。

DS61154C_JP - p.34-76 © 2013 Microchip Technology Inc.

Page 77: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

図 34-28: CMSGDATA0 のフォーマット

図 34-29: CMSGDATA1 のフォーマット

DATA3<7:0> DATA2<7:0> DATA1<7:0> DATA0<7:0>

bit 31-24 DATA3<7:0>: データバイト 3

bit 23-16 DATA2<7:0>: データバイト 2

bit 15-8 DATA1<7:0>: データバイト 1

bit 7-0 DATA0<7:0>: データバイト 0

Note: このレジスタは CAN モジュール外のシステムメモリ内にあります。

DATA7<7:0> DATA6<7:0> DATA5<7:0> DATA4<7:0>

bit 31-24 DATA7<7:0>: データバイト 7

bit 23-16 DATA6<7:0>: データバイト 6

bit 15-8 DATA5<7:0>: データバイト 5

bit 7-0 DATA4<7:0>: データバイト 4

Note: このレジスタは CAN モジュール外のシステムメモリ内にあります。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-77

Page 78: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

例 34-13 のコードは、CAN 全受信メッセージ バッファを実装するためのデータ構造の例を示 しています。例 34-14 に、この構造を使った例を示します。

例 34-13: メモリ内の CAN 全受信メッセージ バッファの実装

例 34-14: データ構造の使用例

/* This code snippet shows an example of data structure to implement a CAN *//* full receive message buffer.*//* Define the sub-components of the data structure as specified in 表 34-5 *//* Create a CMSGSID data type. */typedef struct {

unsigned SID:11;unsigned FILHIT:5;unsigned CMSGTS:16;

}rxcmsgsid;

/* Create a CMSGEID data type. */typedef struct {

unsigned DLC:4;unsigned RB0:1;unsigned :3;unsigned RB1:1;unsigned RTR:1;unsigned EID:18;unsigned IDE:1;unsigned SRR:1;unsigned :2;

}rxcmsgeid;

/* Create a CMSGDATA0 data type. */typedef struct{

unsigned Byte0:8;unsigned Byte1:8;unsigned Byte2:8;unsigned Byte3:8;

}rxcmsgdata0;

/* Create a CMSGDATA1 data type. */typedef struct{

unsigned Byte4:8;unsigned Byte5:8;unsigned Byte6:8;unsigned Byte7:8;

}rxcmsgdata1;

/* This is the main data structure. */

typedef union uCANRxMessageBuffer {

struct{

rxcmsgsid CMSGSID;rxcmsgeid CMSGEID;rxcmsgdata0 CMSGDATA0;rxcmsgdata0 CMSGDATA1;

};int messageWord[4];

}CANRxMessageBuffer;

/* Example usage of code provided in Example 34-13. */

CANRxMessageBuffer * buffer;

/* When a message have been received and read, the individual fields of *//* the received message can be queried as such. */

buffer = (CANRxMessageBuffer *)(PA_TO_KVA1(C1FIFOUA1));

if(buffer->CMSGEID.DLC == 4){

/* If the length of the received message is 4 then do something. */}

DS61154C_JP - p.34-78 © 2013 Microchip Technology Inc.

Page 79: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.9.1 データのみ受信メッセージ

PIC32のCANモジュールには、受信メッセージのデータペイロード部分だけをメッセージ バッ ファに格納する、特殊な受信モードがあります。CAN モジュールは、識別子、予約済みビット、DLC ビットを破棄します。タイムスタンプ処理が有効な場合でも、タイムスタンプ値は格納されません。このモードを有効にするには、DONLY ビット (CiFIFOCONn<12>) をセットします。

CAN メッセージの DLC フィールドの値に関わらず、8 バイトのデータが格納される事に注意してください。未使用のバイトは 0x00 を格納します。このモードの使用例の 1 つとして、データが複数のメッセージにまたがるメッセージを連結する場合が考えられます。例えば、CAN バスを介して文字列を送信する場合です。

34.9.2 受信メッセージの処理

ユーザ アプリケーションはポーリングによる方法、または CAN モジュール割り込みによる方 法のどちらかによってメッセージ受信を監視できます。CAN モジュールは各種の受信 FIFO イベントに関する通知を提供します。ユーザ アプリケーションは、受信 FIFO がエンプティでな い場合、半分フルの場合、フルの場合に通知を受け取る事ができます。ユーザ アプリケーショ ンは、FIFO オーバーフローが発生していない事を確認するために、頻繁に受信 FIFO を読み出す必要があります。適用する手法 ( ポーリングまたは割り込み ) に関わらず、以下の手順に従う事で FIFO からメッセージを読み出せます。

1. CiFIFOUAn レジスタの値を読み出します。これによってユーザ アプリケーションが読み 出すべき受信メッセージ バッファへの 32 ビットの物理アドレスポインタが得られます。

2. メッセージタイプがデータのみ受信の場合、メッセージ バッファの2ワードを処理します。

3. メッセージタイプが全受信の場合、メッセージ バッファの 4 ワードを処理します。

4. メッセージ バッファの処理後、UINC ビット (CiFIFOCONn<13>) をセットします。

例 34-15 に、CAN メッセージをコピーするサンプルコードを示します。

例 34-15: 受信 FIFO のメッセージのコピー

表 34-6: RAM に格納される際のデータのみ受信メッセージのフォーマット

ワード名Bit

31/2315/7Bit

30/22/14/6Bit

29/21/13/5Bit

28/20/12/4Bit

27/19/11/3Bit

26/18/10/2Bit

25/17/9/1Bit

24/16/8/0

CMSG0DATA0 31:24 受信バッファ データバイト 3

23:16 受信バッファ データバイト 2

15:8 受信バッファ データバイト 1

7:0 受信バッファ データバイト 0

CMSG0DATA1 31:24 受信バッファ データバイト 7

23:16 受信バッファ データバイト 6

15:8 受信バッファ データバイト 5

7:0 受信バッファ データバイト 4

Note: 受信メッセージはデバイス RAM に格納され、対応する SET/CLR/INV レジスタはありません。

/* This code example shows how to process a message from a receive FIFO. *//* In this example CAN1 and FIF01 are used. */

CANRxMessageBuffer rxMessage;unsigned int * bufferToRead;

/* Check if there is a message available to read. */if(C1FIFOINT1bits.RXNEMPTYIF == 1){

/* Get the address of the buffer to read */bufferToRead = PA_TO_KVA1(C1FIFOUA1);

/* This is an example process (Copying the buffer). The application *//* could process this buffer in place. */

bufferToRead[0] = rxMessage->messageWord[0];bufferToRead[1] = rxMessage->messageWord[1];bufferToRead[2] = rxMessage->messageWord[2];bufferToRead[3] = rxMessage->messageWord[3];

/* Update the message buffer pointer. */C1FIFOCON1bits.UINC = 1;

}

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-79

Page 80: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.9.3 受信 FIFO の動作例

CAN1 モジュールの FIFO0 を受信メッセージ FIFO に設定しているユーザ アプリケーションを 想定します。図 34-30 に、 初のメッセージが到達して FIFO に格納される前の FIFO の状態を示します。CAN FIFO ベースアドレス レジスタ (C1FIFOBA) は 0x00000100 に設定されてい ます。受信メッセージはデバイス RAM に格納されます ( 物理アドレス 0x00000100)。初期状態では、CiFIFOUA0 は FIFO の先頭をポイントしている事に注目してください。この例では、受信 FIFO オーバーフロー割り込みフラグ (RXOVFLIF)、受信 FIFO フル割り込みフラグ(RXFULLIF)、受信 FIFO ハーフフル割り込みフラグ (RXHALFIF)、受信 FIFO 非エンプティ割り込みフラグ (RXNEMPTYIF) を監視しています。この設定を図 34-30 に示します。

図 34-30: FIFO - 開始時

図 34-31 に、 初のメッセージを受信して FIFO に書き込んだ後の FIFO の状態を示します。FIFO 内の 1 番目のメッセージ バッファ (MB0) にデータが格納されているものの、CFIFOUA0 は依然として FIFO のベースアドレスをポイントしている事に注目してください。これは、ユーザがまだこの位置を読み出していないためです。CAN モジュール メッセージ インデックス レ ジスタ (C1FIFOCI0) がインクリメントされ、次の受信メッセージの格納先が MB1 である事を示している点に注目してください。FIFO がエンプティではない事を示す RXNEMPTYIF フラグがセットされています。

図 34-31: FIFO - 初の書き込み

図 34-32 に、CFIFOUA0 がまだ変更されていない状態で、さらに 5 つのメッセージ受信を完了した後の FIFO の状態を示します。4 番目のメッセージ受信後にバッファ ハーフフルフラグ (RXHALFIF) がセットされています。

図 34-32: FIFO - 6 番目の書き込み

MB2

MB1

MB0

MB6

MB5

MB4

MB3

C1FIFOBA = 0x00000100C1FIFOUA0 = 0x00000100

RXOVFLIF - 0RXFULLIF - 0RXHALFIF - 0RXNEMPTYIF - 0

C1FIFOCI0 = 0x00000000

MB2

MB1

MB0/MSG0

MB6

MB5

MB4

MB3

C1FIFOBA = 0x00000100C1FIFOUA0 = 0x00000100

RXOVFLIF - 0RXFULLIF - 0RXHALFIF - 0RXNEMPTYIF - 1

C1FIFOCI0 = 0x00000001

MB2/MSG2

MB1/MSG1

MB0/MSG0

MB6

MB5/MSG5

MB4/MGG4

MB3/MSG3

C1FIFOBA = 0x00000100C1FIFOUA0 = 0x00000100

RXOVFLIF - 0RXFULLIF - 0RXHALFIF - 1RXNEMPTYIF - 1

C1FIFOCI0 = 0x00000006

DS61154C_JP - p.34-80 © 2013 Microchip Technology Inc.

Page 81: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

図 34-33 に、 初のメッセージを MB0 から読み出した後の FIFO の状態を示します。ユーザアプリケーションはこのメッセージを読み出した後に、UINC ビット (CiFIFOCONn<13>) をセットする必要があります。これによって、CFIFOUA0 レジスタは 0x0000110 に変化します ( ユーザ アプリケーションが次に読み出すべきメッセージ バッファのアドレス )。

図 34-33: FIFO - 初の読み出し

図 34-34 に、7 番目のメッセージの受信後の FIFO の状態を示します。

図 34-34: FIFO - 7 番目の書き込みによって FIFO がフルになろうとしている状態

図 34-35 に、フル状態になった FIFO を示します。RXFULLIF フラグがセットされている事に注目してください。

図 34-35: FIFO - 8 番目の書き込みによる FIFO のフル状態

MB2/MSG2

MB1/MSG1

MB0

MB6

MB5/MSG5

MB4/MSG4

MB3/MSG3

C1FIFOBA = 0x00000100C1FIFOUA0 = 0x00000110

RXOVFLIF - 0RXFULLIF - 0RXHALFIF - 1RXNEMPTYIF - 1

C1FIFOCI0 = 0x00000006

MB2/MSG2

MB1/MSG1

MB0

MB6/MSG6

MB5/MSG5

MB4/MSG4

MB3/MSG3

C1FIFOBA = 0x00000100C1FIFOUA0 = 0x00000110

RXOVFLIF - 0RXFULLIF - 0RXHALFIF - 1RXNEMPTYIF - 1

C1FIFOCI0 = 0x00000000

MB2/MSG2

MB1/MSG1

MB0/MSG7

MB6/MSG6

MB5/MSG5

MB4/MSG4

MB3/MSG3

C1FIFOBA = 0x00000100C1FIFOUA0 = 0x00000110

RXOVFLIF - 0RXFULLIF - 1RXHALFIF - 1RXNEMPTYIF - 1

C1FIFOCI0 = 0x00000001

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-81

Page 82: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

図 34-36 に、FIFO がフルの状態でさらにメッセージを受信し、オーバーフローが発生した時の FIFO を示します。RXOVFLIF フラグがセットされ、CAN インデックス (CiCIFOCI) は変化せず、メッセージ (MSG8) が失われた事に注目してください。

図 34-36: FIFO - 9 番目の書き込みによる FIFO のオーバーフロー

MB2/MSG2

MB1/MSG1

MB0/MSG7

MB6/MSG6

MB5/MSG5

MB4/MSG4

MB3/MSG3

C1FIFOBA = 0x00000100C1FIFOUA0 = 0x00000110

RXOVFLIF - 1RXFULLIF - 1RXHALFIF - 1RXNEMPTYIF - 1

C1FIFOCI0 = 0x00000001

DS61154C_JP - p.34-82 © 2013 Microchip Technology Inc.

Page 83: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.10 ビットタイミング

式 34-1 に示す通り、公称ビットレートとは、CAN バス上で送信される 1 秒あたりのビット数です。

式 34-1: 公称ビットレートの計算

ビット時間は、オシレータのドリフトまたは伝搬遅延による位相シフトを補正するための 4 つの時間セグメントを含みます。これらの時間セグメントは重なる事はなく、時間単位 (TQ) で表されます。1 TQ は、オシレータ クロックから得られる固定の時間単位です。公称ビット時間 内の時間単位の総数は、8 ~ 25 TQ の間で設定する必要があります。

図 34-37 に、システムクロックから CAN ビット時間単位周波数 (FTQ) を得る方法と、各時間 セグメントの設定方法を示します。

図 34-37: CAN ビットタイミング

Nominal Bit Time 1 Nominal Bit Rate=公称ビット時間 = 1 ÷公称ビットレート

CAN Nominal Bit Time

Time Quanta

Time Segments Propagation Segment Phase Segment 1 Phase Segment 2Sync Seg1 TQ 1 TQ - 8 TQ 1 TQ - 8 TQ

Sample Point

BAUD RATE

PRESCALERFSYS

2

Prop Seg

Phase Seg1

Phase Seg2

Sync Seg

FTQ

Time Quanta

CiCFG<BRP>

CiCFG<PRSEG>

CiCFG<SEG1PH>

CiCFG<SEG2PH>

CiCFG<SJW>

1 TQ - 8 TQ

1:1

1:2

1:64

(TQ)

1 TQ - 8 TQ

1 TQ - 8 TQ

1 TQ

8 TQ - 25 TQ

1 TQ - 8 TQ

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-83

Page 84: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.10.1 ビットセグメント

各ビット送信時間は、以下の 4 つの時間セグメントから構成されます。

• 同期セグメント - この時間セグメントはCANバスに接続されている各ノードを同期させます。 ビットエッジはこのセグメント内に収まる事が予測されます。CAN プロトコルに基づき、同期セグメントは 1 TQ である事を前提とします。

• 伝搬セグメント - この時間セグメントはバスラインまたはそのバスに接続された各種トラン シーバによって発生する時間遅延を補償します。

• 位相セグメント 1 - この時間セグメントはエッジでの位相シフトによって発生する誤差を補 償します。この時間セグメントは、位相シフトを補償するために再同期中に延長できます。

• 位相セグメント 2 - この時間セグメントはエッジでの位相シフトによって発生する誤差を補 償します。この時間セグメントは、位相シフトを補償するために再同期中に短縮できます。位相セグメント 2 の時間は、任意に設定する事も、位相セグメント 1 の時間によって指定する事もできます。

34.10.2 サンプルポイント

サンプルポイントとは、CAN ビット時間インターバル内に位置し、サンプリングを実行する ( バスの状態を読み出して解釈する ) ポイントです。サンプルポイントは、位相セグメント 1 と位相セグメント 2 の間に位置します。CAN baud レート コンフィグレーション レジスタ (CiCFG<14>) のサンプル CAN バスラインビット (SAM) の設定に応じて、サンプルポイントでは CAN バスを 1 回または 3 回サンプリングできます。

• CiCFG<14> = 1の場合、CAN バスはサンプルポイントで 3 回サンプリングされます (3 つの サンプルの多数決でビット値を決めます )。

• CiCFG<14> = 0の場合、CAN バスはサンプルポイントで 1 回だけサンプリングされます。

34.10.3 同期

同期にはハード同期と再同期の 2 つのタイプがあります。ハード同期は SOF で 1 回発生します。再同期はフレーム内で発生します。

• ハード同期 - 開始ビットのリセッシブからドミナントへの遷移で実行されます。ビット時間 はそのエッジから再開します。

• 再同期 - メッセージの同期セグメント内でビットエッジが発生しない場合に実行されます。 位相セグメントの 1 つを、信号内の位相誤差で決まる量に応じて短縮または延長します。大変化量は、SJW パラメータ (CiCFG<7:6>) で決まります。

位相セグメント 1 と位相セグメント 2 の長さは、送信ノードと受信ノードのオシレータ公差に応じて変更可能です。再同期は、送信ノードと受信ノードが別々のオシレータを使う事によって生じる可能性があるあらゆる位相シフトを補償します。

• ビット延長 - CAN 内の送信ノードのオシレータが受信ノードのオシレータよりも遅い場合、 ビット時間の位相セグメント 1 を延長する事により、次の立ち下がりエッジ、つまりサンプルポイントを遅らせる事ができます。

• ビット短縮 - CAN 内の送信ノードのオシレータが受信ノードのオシレータよりも速い場合、 ビット時間の位相セグメント 2 を短縮する事により、次の立ち下がりエッジ、つまり次のビットのサンプルポイントを早める事ができます。

• 同期ジャンプ幅 (SJW) - CAN baud レート コンフィグレーション レジスタ (CiCFG<7:6>) の SJW<1:0> ビットは、位相セグメント 1 と位相セグメント 2 の時間間隔に適用できる延長または短縮の量を制限する事によって、同期ジャンプ幅を決定します。このセグメントは、位相セグメント 2 の時間より長くする事はできません。同期ジャンプ幅は 1 ~ 4 TQ です。

DS61154C_JP - p.34-84 © 2013 Microchip Technology Inc.

Page 85: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.10.4 CAN ビット時間の計算

以下では、CAN モジュールのビットタイミングを設定するためにユーザ アプリケーションで 実行する手順を説明します。

34.10.4.1 ステップ 1: CAN ビット時間単位周波数 (FTQ) の計算

• CAN バスの baud レート (FBAUD) を選択します。

• システム要件に応じて、1 ビット時間内の時間単位の数を選択します。式 34-2 に、FTQ

の計算式を示します。

式 34-2: CAN ビット時間単位周波数 (FTQ)

34.10.4.2 ステップ 2: baud レート プリスケーラ (BRP<5:0> (CiCFG<5:0>)) の計算

式 34-3 に、baud レート プリスケーラの計算式を示します。

式 34-3: baud レート プリスケーラ

34.10.4.3 ステップ 3: 各ビット時間セグメントの選択

各ビット時間セグメントは、CiCFG レジスタを使って選択します。

ビット時間 = 同期セグメント + 伝搬セグメント + 位相セグメント 1 + 位相セグメント 2

例 34-16 に、FTQ を求める手順を示します。

例 34-16: CAN ビットタイミングの計算例

Note 1: 公称ビット時間内の時間単位の総数は、8 ~ 25 TQ の間で設定する必要があります。 従って、FTQ は、baud レート (FBAUD) の 8 ~ 25 倍です。

2: 正確なビット時間を得るために、FTQ は必ず FBAUD の整数倍にします。整数倍でない場合、オシレータ入力周波数または FBAUD の変更が必要です。

Note 1: ( 伝搬セグメント + 位相セグメント 1) の長さは、位相セグメント 2 の長さ以上で ある事が必要です。

2: 位相セグメント 2 は SJW より長い必要があります。

FTQ N FBAUD=

CiCFG<BRP> = (FSYS/(2 * FTQ)) – 1

ステップ 1: FTQ の計算

IFBAUD = 1 Mbps、時間単位の数「N」 = 10 の場合、FTQ = 10 MHz

ステップ 2: baud レート プリスケーラの計算 (PIC32 は 80 MHz で動作すると仮定します。 つまり FSYS = 80000000 です。)

CiCFG<BRP> = ( 80000000/(2 * FTQ) ) - 1 = 3

ステップ 3: 各ビット時間セグメントの選択

同期セグメント = 1 TQ ( 一定 )

システムの特性に基づき、伝播遅延が 3 TQ かつサンプルポイントが公称ビット時間の 70% 位置である場合 :

位相セグメント 2 = 公称ビット時間の 30% = 3 TQ

位相セグメント 1 = 10 TQ - (1 TQ + 3 TQ + 3 TQ) = 3 TQ

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-85

Page 86: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

例 34-17 に、CAN ビットのタイミングコードを設定するサンプルコードを示します。

例 34-17: 特定のビットレートを得るための CAN モジュールの設定/* This code example shows how to configure the CAN module to obtain a *//* specific bit rate implementing the configuration shown in 例 34-16. */

/* Fsys = System Clock Frequency = 80000000; *//* Fbaud = CAN bit rate = 1000000; *//* N = Time Quanta (Tq) per bit = 10; *//* Prop Segment = 3 Tq *//* Phase Seg 1 = 3 Tq *//* Phase Seg 2 = 3 Tq *//* Sync Jump Width = 2 Tq */

/* Ensure the CAN module is in configuration mode.*/

C1CONbits.REQOP = 4while(C1CONbits.OPMOD != 4);

C1CFGbits.SEG2PHTS = 1; /* Phase seg 2 is freely programmable */C1CFGbits.SEG2PH = 2; /* Phase seg 2 is 3 Tq. */C1CFGbits.SEG1PH = 2; /* Phase seg 1 is 3 Tq. */C1CFGbits.PRSEG = 2; /* Propagation seg 2 is 3 Tq. */C1CFGbits.SAM = 1; /* Sample bit 3 times. */C1CFGbits.SJW = 2; /* Sync jump width is 2 Tq */C1CFGbits.BRP = 3; /* BRP value as calculated in 例 34-11 */

/* CAN bit rate configuration complete. */

DS61154C_JP - p.34-86 © 2013 Microchip Technology Inc.

Page 87: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.11 CAN のエラー管理

34.11.1 CAN バスエラー

CAN 仕様 2.0B では、以下のエラーを検出する 5 種類の方法を定義しています。

• ビットエラー

• 肯定応答エラー

• フォームエラー

• スタッフィング エラー

• CRC エラー

ビットエラーと肯定応答エラーはビットレベルで発生し、その他の 3 つのエラーはメッセージレベルで発生します。

34.11.1.1 ビットエラー

バス上でビットを送信中のノードはバスの状態も監視します。監視中のビット値と送信したビット値が異なる場合、ビットエラーが検出されます。例外は、アービトレーション フィール ドのスタッフビット ストリーム中または ACK スロット中にリセッシブビットを送信する場合 です。この場合、ドミナントビットを検出しても、ビットエラーは発生しません。パッシブエラー フレームを送信中のトランスミッタは、ドミナントビットを検出しても、これをビットエ ラーとして解釈しません。

34.11.1.2 肯定応答エラー

メッセージの肯定応答フィールドにおいて、トランスミッタは、リセッシブビットとして送信した肯定応答スロットにドミナントビットが含まれているかどうかを監視します。含まれていない場合、フレームを正しく受信したノードが存在しない事を意味します。肯定応答エラーが発生した事を意味し、そのメッセージを繰り返す必要があります。この場合、エラーフレームは生成されません。

34.11.1.3 フォームエラー

定型のビットフィールド (EOF、インターフレーム スペース、肯定応答デリミタ、CRC デリミタ ) が不正なビットを含んでいると、フォームエラーが検出されます。レシーバの場合、EOF の終ビットにおけるドミナントビットはフォームエラーとして扱われません。

34.11.1.4 スタッフィング エラー

ビット スタッフィング方式でコーディングする必要があるメッセージ フィールド内で同じ ビットレベルが 6 回連続した場合、6 番目のビットのビット時間でスタッフィング エラーが検 出されます。

34.11.1.5 CRC エラー

メッセージを送信するノードは、送信メッセージに対応する CRC を計算して送信します。バス上の全てのレシーバは、トランスミッタと同じ CRC 計算を実行します。計算結果と受信メッセージから得られた CRC 値が一致しない場合、CRC エラーが検出されます。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-87

Page 88: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.11.2 障害隔離

バス上の全ての CAN コントローラは、各メッセージ内でエラーを検出しようと試みます。エラーを検出したノードはエラーフレームを送信し、その結果バストラフィックが破壊されます。そのエラーをまだ検出していない他のノードは、エラーフレームによってエラーを検出し、適切に処理 ( メッセージを破棄 ) します。

CAN モジュールは、以下の 2 つのエラーカウンタを保持します。

• 送信エラーカウンタ (TERRCNT) - CiTREC<15:8>

• 受信エラーカウンタ (RERRCNT) - CiTREC<7:0>

これらのカウンタは、複数の規則に従ってインクリメントまたはデクリメントします。障害を検出したトランスミッタは、リッスン中のノードが受信エラーカウンタをインクリメントするよりも早期に送信エラーカウンタをインクリメントします。これは、障害が発生しているのはトランスミッタである可能性が高いためです。

ノードはエラーアクティブ モードで開始します。2 つあるエラーカウンタのどちらかの値が 127 以上になると、ノードはエラーパッシブと呼ばれる状態に移行します。送信エラーカウンタの値が 255 を超えると、ノードはバス OFF 状態に移行します。

• エラーアクティブのノードがエラーを検出すると、アクティブエラー フレームを送信します。

• エラーパッシブのノードがエラーを検出すると、パッシブエラー フレームを送信します。

• バス OFF 状態のノードは、バス上に何も送信しません。

さらに、図 34-38 に示すように、CAN モジュールはノードがエラーパッシブ状態に移行する前に ( 送信エラーカウンタの値が 96 以上になった場合 ) ユーザ アプリケーションに警告するエ ラー警告機能を採用しています。

図 34-38: エラーモード

34.11.2.1 エラーパッシブ状態でのトランスミッタ

トランスミッタ エラーパッシブ (TXBP) ビット (CiTREC<20>) は、送信エラーカウンタが 128 以上になるとセットされ、エラーパッシブ状態に移行した時点でエラー割り込み CERRIF ビット(CiINT<12>) を生成します。送信エラーパッシブ フラグは、送信エラーカウンタが 128 未満に なると、ハードウェアによって自動的にクリアされます。

Note: エラーカウンタは CAN 仕様 2.0B に従って変更されます。

Bus

Off

Error

Active

Error

Passive

RERRCNT > 127 orTERRCNT > 127

RERRCNT < 127 orRERRCNT < 127

TERRCNT > 255

128 occurrences of11 consecutive“recessive” bits

Reset

DS61154C_JP - p.34-88 © 2013 Microchip Technology Inc.

Page 89: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.11.2.2 エラーパッシブ状態でのレシーバ

レシーバ エラーパッシブ (RXBP) ビット (CiTREC<19>) は、受信エラーカウンタが 128 以上に なるとセットされ、エラーパッシブ状態に移行した時点でエラー割り込み CERRIF ビット(CiINT<12>) を生成します。受信エラーパッシブ フラグは、受信エラーカウンタが 128 未満に なると、ハードウェアによって自動的にクリアされます。

34.11.2.3 バス OFF 状態でのトランスミッタ

トランスミッタ バス OFF(TXBO) ビット (CiTREC<21>) は、送信エラーカウンタが 256 以上に なるとセットされ、エラー割り込み CERRIF ビット (CiINT<12>) を生成します。

34.11.2.4 エラー警告状態でのトランスミッタ

トランスミッタ エラー警告 (TXWARN) ビット (CiTREC<18>) は、送信エラーカウンタが 96 以 上になるとセットされ、エラー警告状態に移行した時点でエラー割り込み CERRIF ビット(CiINT<12>) を生成します。送信エラー警告フラグは、送信エラーカウンタが 96 未満になると、ハードウェアによって自動的にクリアされます。

34.11.2.5 エラー警告状態でのレシーバ

レシーバエラー警告 (RXWARN) ビット (CiTREC<17>) は、受信エラーカウンタが 96 以上になるとセットされ、エラー警告状態に移行した時点でエラー割り込みCERRIFビット(CiINT<12>)を生成します。受信エラー警告フラグは、受信エラーカウンタが 96 未満になると、ハードウェアによって自動的にクリアされます。

さらにエラー状態警告フラグ (EWARN) ビット (CiTREC<16>) があり、エラーカウンタの少なくとも 1 つがエラー警告限界の 96 以上になるとセットされます。EWARN は、両方のエラーカウンタがエラー警告限界を下回るとリセットされます。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-89

Page 90: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.12 CAN 割り込み

PIC32 の CAN モジュールの割り込みは 3 つの層に分類できます。下層の割り込みは上層に伝搬し、そこで 1 つの割り込みに多重化されます。従って、第 1 層の割り込みは第 2 層の複数の割り込みを多重化したものです。 第 2層の割り込みの中には第3層の複数の割り込みを多重化 したものもあります ( 図 34-39 参照 )。

図 34-39: 割り込みの多重化

CAN モジュールは第 1 層において、CANx 割り込みと呼ばれる CPU に対する割り込みを 1 つ生成します。この割り込みは、第 2 層の割り込みによって発生します。CANx 割り込みは、PIC32 の割り込みコントローラによって有効化または無効化できます。PIC32 における CPU割り込みの有効化と設定の詳細は、『セクション 08. 割り込み』(DS61108) を参照してください。

第 2 層と第 3 層の割り込みには、それぞれに割り込みイネーブル (IE) ビットと割り込みステータスフラグ (IF)ビットが関連付けられています。割り込みイベントが発生すると、CANモジュールは IF ビットをセットします。ユーザ アプリケーションが IE ビットをセットした場合、イベ ントは次の割り込み層に伝搬します。ユーザ アプリケーションが CAN モジュール イベントを 認識するには、IF ビットをポーリングするか、割り込みを有効にします。

ICODE<6:0> ビット (CiVEC<6:0>) は 新の割り込みに対するコードを格納します。これらのビットをジャンプテーブルと組み合わせると、効率的に割り込みを処理できます。

34.12.1 第 2 層割り込み

CAN モジュールは第 2 層において次の 9 つの割り込みを提供します。

• 送信 FIFO 割り込み (TBIF)• 受信 FIFO 割り込み (RBIF)• CAN タイムスタンプ タイマ ロールオーバー割り込み (CTMRIF)• CAN 動作モード変化割り込み (MODIF)• 受信 FIFO オーバーフロー割り込み (RBOVIF)• CAN システムエラー割り込み (SERRIF)• CAN バスエラー割り込み (CERRIF)• CAN 復帰割り込み (WAKIF)• 無効 CAN メッセージ割り込み (IVRIF)

上記のうち、無効メッセージ受信 (IVRIF)、復帰 (WAKIF)、CAN タイマ (CTMRIF)、CAN モード変化 (MODIF)割り込みの要因は1つです。FIFO(TBIF/RBIF)、FIFOオーバーフロー(RBOVIF)、CAN バスエラー (CERRIF)、システムエラー (SERRIF) 割り込みの要因は複数です。

RXEMPTYIF

RXHALFIF

RXFULLIF

FIFO0FIFO1FIFO31

FIFO0FIFO1FIFO31

TXEMPTYIF

TXHALFIF

TXNFULLIF

RBIF

RBOVIF

TBIF

WAKIF

CTMRIF

IVRIF

SERRIFCERRIF

MODIF

Third Layer Interrupts Second Layer Interrupts First Layer Interrupt

CAN Interrupt to CPU

RXEMPTYIE

RXHALFIE

RXFULLIE

TXEMPTYIE

TXHALFIE

TXNFULLIE

RXOVLIERXOVLIF

FIFO31

RXOVFFIFO1FIFO0

CiFSTAT Register

CiRXOVF Register

All of these Interrupts sources have corresponding enable bits

(not shown here for clarity)

DS61154C_JP - p.34-90 © 2013 Microchip Technology Inc.

Page 91: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.12.1.1 無効メッセージ受信割り込み (IVRIF)

無効メッセージ受信割り込み (IVRIF)は、直近の送信メッセージまたは受信メッセージでエラーが発生した時に生成されます。発生したエラーの内容は、ユーザ アプリケーションからは知る 事ができません。この割り込みをクリアするには、フラグビットをクリアする必要があります。

34.12.1.2 復帰割り込み (WAKIF)

復帰割り込み (WAKIF) は、CAN モジュールがスリープ中に CAN バス アクティビティが検出さ れた時に生成されます。この割り込みをクリアするには、フラグをクリアする必要があります。

34.12.1.3 CAN バスエラー割り込み (CERRIF)

CAN バスエラー割り込み (CERRIF) は、CAN バス上にエラーが存在すると生成されます。このビットは、CAN モジュールの現在のエラー状態に変化が生じるたびにセットされます。エラー状態は CiTREC レジスタによって監視します。この割り込みをクリアするには、フラグビットをクリアする必要があります。CERRIF ビットは、CAN 送信 / 受信エラーカウンタ レジスタ (CiTREC)内の送信エラーカウンタ (TERRCNT<7:0>)ビットまたは受信エラーカウンタ ビット (RERRCNT<7:0>) がしきい値を超えるごとにセットされます。例えば、TERRCNT ビット(CiTREC<7:0>) が 95 から 96 に変化すると、CERRIF がセットされます。このビットはクリアすると、たとえ TERRCNT ビット (CiTREC<7:0>) が 96 より大きいままでもクリアされた状態を保ちます。再びセットされるのは、TERRCNT ビット (CiTREC<7:0>) が 96 を下回り、再度95 よりも大きくなった時、または TERRCNT ビット (CiTREC<7:0>) が 127 を上回った時です。

34.12.1.4 システムエラー割り込み (SERRIF)

システムエラー割り込み (SERRIF) は、2 種類のシステムエラー ( アドレッシング エラー、帯域 幅エラー ) によって生成されます。これらのエラーはどちらも致命的であり、CAN モジュールは停止します。エラーが発生した場合、ユーザは CANBUSY ビット (CiCON<11>) をポーリングして CAN モジュールが停止するまで待機する必要があります。CAN モジュールが停止した後、ON ビット (CiCON<15>) をクリアすると SERRIF をクリアできます。

34.12.1.5 アドレッシング エラー

アドレッシング エラーは2つの要因によって発生します。両者のICODE値は同じです(ICODE = 100 0100)。

• 無効なベースアドレスで FIFO を設定するとアドレッシング エラーが発生します。よくある 原因は、FIFO が実装されていないアドレスをポイントした時です。

• アドレッシング エラーはメッセージの書き込み先が不正な場合にも発生します。例えば、直 接書き込む事のできないプログラム フラッシュに受信メッセージを書き込もうとした場合 です。

34.12.1.6 バス帯域幅エラー

バス帯域幅エラーは、次の CAN メッセージが到達する前に、CAN モジュールがシステムメモリに受信 CAN メッセージを書き込めない時に発生します。この条件は、ICODE = 100 0101 で表示されます。これは、CAN モジュールよりも優先度の高い他の PIC32 システムバス イニ シエータがシステムバスを長時間にわたって占有し、CAN モジュールが受信 CAN メッセージを格納するのを妨げた場合に発生します。対応するFIFO割り込みレジスタ内のオーバーフロービットがセットされます。

Note: システムエラー割り込み (SERRIF) を発生させたエラー条件は、CAN モジュールをOFF に (ON ビット (CiCON<15>) をクリア )する事によってのみ解消できます。CAN 割り込みレジスタ (CiINT<12>) のシステムエラー割り込みフラグ (SERRIF)ビットをクリアしても、このエラー条件はクリアされません。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-91

Page 92: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.12.1.7 受信 FIFO オーバーラン割り込み (RBOVIF)

受信 FIFO オーバーラン割り込みは、CAN モジュールがメッセージを受信したものの、指定された受信 FIFO がフル状態の場合に発生します。CAN モジュールは、当該受信 FIFO に対応する CiFIFOINTn レジスタの RXOVFLIF フラグをセットします。この状態は、CAN FIFO 割り込 みレジスタ (CiFIFOINTn<19>) の受信 FIFO オーバーフロー割り込みイネーブル (RXOVFLIE)ビットがセットされている場合、CAN 受信 FIFO オーバーフロー ステータス レジスタ (CiRXOVF) にも反映されます。

CAN 割り込みレジスタ (CiINT<11>) の RBOVIF ビットは、CiRXOVF レジスタ全ビットの OR演算結果です。RBOVIF ビット (CiINT<11>) と CAN 受信 FIFO オーバーフロー ステータス レ ジスタ (CiRXOVF<31:0>) の RXOVIFn ビットは直接クリアできません。これらをクリアするには、対応する RXOVFLIF ビット (CiFIFOINTn<3:0>) をクリアする必要があります。

34.12.1.8 CAN モード変化割り込み (MODIF)

CANモード変化割り込み(MODIF)は、CANモジュールの動作モードの変化を示すOPMOD<2:0>ビット (CiCON<23:21>) の変化によって発生します。ICODE<6:0> ビット (CiVEC<6:0>) は、モード変化条件を表示します。この割り込みをクリアするには、フラグビットをクリアする必要があります。

34.12.1.9 CAN タイムスタンプ タイマ割り込み (CTMRIF)

CAN タイムスタンプ タイマ割り込み (CMTRIF) は、CAN タイムスタンプ タイマがオーバーフ ローした時に発生します。ICODE<6:0> ビット (CiVEC<6:0>) は、タイムスタンプ タイマのオー バーフローを表示します。この割り込みをクリアするには、フラグビットをクリアする必要があります。

34.12.1.10CAN 送信 FIFO 割り込み (TBIF)

CAN 送信 FIFO 割り込み (TBIF) は、送信 FIFO の状態が変化した時に発生します。この割り込みには、以下に示す複数の第 3 層割り込み要因があります。

• 送信 FIFO 非フル割り込み (TXNFULLIF)

• 送信 FIFO ハーフフル割り込み (TXHALFIF)

• 送信 FIFO エンプティ割り込み (TXEMPTYIF)

TBIF 割り込みは、アプリケーションからはクリアできません。割り込みの発生要因が全て解消されるとクリアされます。

34.12.1.11CAN 受信 FIFO 割り込み (RBIF)

CAN 受信 FIFO 割り込み (RBIF) は、受信 FIFO の状態が変化した時に発生します。この割り込みには、以下に示す複数の第 3 層割り込み要因があります。

• 受信 FIFO フル割り込み (RXFULLIF)

• 受信 FIFO ハーフフル割り込み (RXHALFIF)

• 受信 FIFO 非エンプティ割り込み (RXNEMPTYIF)

RBIF 割り込みは、ユーザ アプリケーションからはクリアできません。割り込みの発生要因が 全て解消されるとクリアされます。

34.12.2 第 3 層割り込み

CAN モジュールには以下の第 3 層割り込みがあります。

• 送信 FIFO 非フル割り込み (TXNFULLIF)

• 送信 FIFO 非ハーフフル割り込み (TXNHALFIF)

• 送信 FIFO 非エンプティ割り込み (TXNEMPTYIF)

• 受信 FIFO フル割り込み (RXFULLIF)

• 受信 FIFO ハーフフル割り込み (RXHALFIF)

• 受信 FIFO エンプティ割り込み (RXEMPTYIF)

• 受信 FIFO オーバーフロー割り込み (RXOVLIF)

これらの割り込みは、送信および受信 FIFO の現状を反映します。

DS61154C_JP - p.34-92 © 2013 Microchip Technology Inc.

Page 93: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.12.3 割り込みの永続性

CAN モジュールは、メッセージ FIFO の動作状態を示す割り込みを提供します。これらの割り込みは、割り込みを発生させた条件が解消されるまでクリアされないという点で永続的です。割り込みフラグをユーザ アプリケーションで直接クリアする事はできません。例えば、受信 FIFO 非エンプティ割り込み (RXNEMPTYIF) は、受信 FIFO にメッセージが存在しつづける限り、セットされたままです。以下の CAN 割り込みは永続的です。

• 送信 FIFO(TBIF) 割り込み (CiINT<0>)• 受信 FIFO(RBIF) 割り込み (CiINT<1>)• FIFO ステータス (FIFOIPx) 割り込み (CiFSTAT<31:0>)• 送信 FIFO 非フル (TXNFULLIF) 割り込み (CiFIFOINTn<10>)• 送信 FIFO ハーフフル (TXHALFIF) 割り込み (CiFIFOINTn<9>)• 送信 FIFO 非エンプティ (TXNEMPTYIF) 割り込み (CiFIFOINTn<8>)• 受信 FIFO フル (RXFULLIF) 割り込み (CiFIFOINTn<10>)• 受信 FIFO ハーフフル (RXHALFIF) 割り込み (CiFIFOINTn<9>)• 受信 FIFO 非エンプティ (RXNEMPTYIF) 割り込み (CiFIFOINTn<8>)

受信 FIFO オーバーフロー (RXOVFLIF) 割り込み (CiFIFOINTn<11>) は永続性がなくユーザがクリアできます。

34.12.4 CAN FIFO ステータス レジスタ (CiFSTAT)

CAN FIFO ステータス レジスタ (CiFSTAT) は表示レジスタです。CAN FIFO ステータス レジス タ (CiFSTAT<31:0>) の FIFOIPn ビットは、対応する CiFIFOINTn レジスタで割り込みが有効化されている場合、以下の割り込み条件のどれかが発生するとセットされます。

• 送信 FIFO 非フル (TXNFULLIF) 割り込み (CiFIFOINTn<10>) • 送信 FIFO ハーフフル (TXHALFIF) 割り込み (CiFIFOINTn<9>)• 送信 FIFO 非エンプティ (TXNEMPTYIF) 割り込み (CiFIFOINTn<8>)• 受信 FIFO フル (RXFULLIF) 割り込み (CiFIFOINTn<10>)• 受信 FIFO ハーフフル (RXHALFIF) 割り込み (CiFIFOINTn<9>)• 受信 FIFO 非エンプティ (RXNEMPTYIF) 割り込み (CiFIFOINTn<8>)

FIFOIPn ビット自体は割り込み要因ではありません。ICODE<6:0> ビット (CiVEC<6:0>) は、セットされた FIFOIPn ビットの値を反映します。

34.12.5 CAN 受信 FIFO オーバーフロー レジスタ (CiRXOVF)

CAN 受信 FIFO オーバーフロー レジスタ (CiRXOVF<31:0>) の RXOVFn ビットは、受信 FIFO のオーバーフローが発生し、かつ受信 FIFO オーバーフロー割り込みイネーブル (RXOVFLIE)ビット (CiFIFOINTn<19>) がセットされている場合、セットされます。RXOVFn ビットは、RBOVIF (CiINT<11>) 割り込みの生成要因となる割り込みです。CiRXOVF レジスタのビットは 直接クリアできず、RXOVFLIF ビット (CiFIFOINTn<3>) をクリアする事でクリアできます。

34.12.6 割り込みコード (ICODE) ビット

ICODE<6:0> ビット (CiVEC<6:0>) は、CAN モジュールで保留中の 高位の割り込みを示します。ICODE の値が大きいほど、保留中の割り込みの自然順序優先度は高いです。ICODE イベントは永続的です。より高い自然順序優先度の割り込みが発生し、ICODE レジスタのより低い優先度をマスクした場合、より低い優先度は、より高い優先度の割り込みがクリアされた時点で再び表示されます。

例えば、以下のアプリケーションの場合を考えます。

• FIFO0 によって、ICODE<6:0> = 000 0000の割り込みが発生します。

• バッファ5 でも割り込みを生成するイベントが発生し、ICODE を「000 0101」に設定します。

• ユーザが CAN 割り込みハンドラに移行し、バッファ 5 を処理して割り込みをクリアします。

• この時点で ICODE<6:0> の値は「000 0000」に変化し、バッファ 0 に割り込みが保留中で ある事を示します。これにより、割り込み処理ルーチン (ISR) からリターンする前にこれを処理できます。

34.12.7 CAN フィルタ一致 (FILHIT) ビット

CAN 割り込みコードレジスタ (CiVEC<12:8>) の CAN フィルタ一致 (FILHIT<4:0>) ビットには、直近に受信メッセージに一致したフィルタ値が格納されます。ICODE<6:0>ビット(CiVEC<6:0>)とは異なり、FILHIT<4:0> ビット (CiVEC<12:8>) には履歴がなく、メッセージを受信した時にのみ更新されます。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-93

Page 94: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.13 CAN 受信メッセージのタイムスタンプ処理

CAN モジュールは、メッセージを受信した時点の時刻値を提供できます。このタイムスタンプは、CAN 制御レジスタ (CiCON<20>) の CAN 受信メッセージ タイムスタンプ タイマ キャプ チャ イネーブル (CANCAP) ビットがセットされている場合、受信メッセージと共に格納され ます。CANモジュールは、受信メッセージ バッファのCMSGSIDフィールド(CMSGSID<31:16>) の CMSGTS ビットにタイムスタンプを書き込みます。CAN モジュールは、有効なフレームを受信するたびに、CAN タイマレジスタ (CiTMR<31:16>) の CAN タイムスタンプ タイマ (CANTS<15:0>) ビットの値をキャプチャし、タイムスタンプを取得します。CAN 仕様 2.0B は「EOF フィールドの送信が正常に完了する前にエラーが発生しなければフレームは有効である」と定義しているため、CANTS<15:0> ビット (CiTMR<31:16>) の値は EOF の直後にキャプチャされます。

CAN モジュールは自身が送受信したものを含めて全てのメッセージにタイムスタンプを付加します。CAN タイマレジスタ (CiTMR<15:0>) の CAN タイムスタンプ タイマ プリスケーラ (CANSTPRE<15:0>) ビットを使うと、CAN タイムスタンプの時間間隔をシステムクロック数を単位として設定できます。

DS61154C_JP - p.34-94 © 2013 Microchip Technology Inc.

Page 95: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.14 省電力モード

34.14.1 スリープ

ユーザ アプリケーションは、CPU がスリープに移行する際に、CAN モジュールが非アクティ ブである事を確認する必要があります。これに違反したために生じる致命的な結果から CANバスシステムを保護するために、CAN モジュールはスリープ中に TXCAN ピンをリセッシブ状態に駆動します。CPU をスリープに移行させる前に、CAN モジュールをディセーブル モードに 移行させる事を推奨します。

34.14.2 アイドル

CPU がアイドルに移行し、CAN制御レジスタ (CiCON<13>) のStop-in-Idle モード (SIDLE)ビットが「1」の場合、CAN モジュールは OFF になります。CPU がアイドルに移行し、かつ SIDLEビット (CiCON<13>) がセットされている場合、ユーザ アプリケーションは CAN モジュールが 非アクティブである事を確認する必要があります。これに違反したために生じる致命的な結果からCANバスシステムを保護するために、CANモジュールはCPUがアイドル中でSIDLEビット (CiCON<13>) がセットされている場合、CiTX ピンをリセッシブ状態に駆動します。

34.14.3 復帰機能

CAN モジュールはスリープ中に CAN 受信 (CiRX) ピンのアクティビティを監視します。CANモジュールがスリープするのは以下の場合です。

• デバイスがスリープ中

• デバイスがアイドル中で SIDLE ビット (CiCON<13>) がセットされている

CAN 割り込みレジスタ (CiINT<30>) のバス復帰アクティビティ割り込みイネーブル (WAKIE)ビットがセットされている場合、このモード中にバス アクティビティが検出されると、CAN モジュールは割り込みを生成します。

ディセーブル モードまたはスリープ / アイドル中に、CiRX ラインにローパスフィルタ機能を 適用するように CAN モジュールを設定できます。この機能は、CAN バスラインに発生したグリッチによってCANモジュールが復帰するのを防ぐために使えます。CANコンフィグレーション レジスタ (CiCFG<22>) の CAN バスライン フィルタ イネーブル (WAKFIL) ビットによって、 CAN モジュールのスリープ中にフィルタを有効にするか無効にするかを設定できます。

CANモジュールは割り込みを生成しますが、CANモジュール自体の状態はこの割り込みによって影響されない事に注意します。

以下に、PIC32 のスリープと復帰割り込み機能を使うための推奨手順を示します。

1. バス アクティビティ機能による復帰を有効にするためにWAKIEビット(CiINT<30>)をセッ トする。

2. デバイスをスリープに移行させる前に、CAN 動作モードをディセーブルに切り換え、CANモジュールがディセーブル モードに移行するのを待つ。

3. PIC32 をスリープに移行させる。

4. スリープ中に CAN バスにアクティビティが発生すると、PIC32 はスリープから復帰する。CAN CPU 割り込みが有効な場合、CPU は CAN ISR を実行します。

ISR の中では、CAN 割り込みレジスタ (CiINT<14>) の CAN バス アクティビティ復帰割り込み フラグ (WAKIF) ビットがセットされているかどうかを確認し、CAN 動作モードを通常に切り換えます。切り換えが完了すると、CAN モジュールはメッセージを受信できます (WAKIF ビット (CiINT<14>) をクリア )。デバイスを復帰させた CAN メッセージは失われる事に注意します。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-95

Page 96: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

34.15 関連アプリケーション ノート

本書に関連するアプリケーション ノートの一覧を以下に記載します。一部のアプリケーション ノートは PIC32 ファミリ向けではありません。ただし概念は共通しており、変更が必要であったり制限事項が存在するものの利用が可能です。コントローラ エリア ネットワーク (CAN) モ ジュールに関連する 新のアプリケーション ノートは以下の通りです。

タイトル アプリケーション ノート番号

Ethernet Theory of Operation AN1120

Note: PIC32 ファミリに関するこの他のアプリケーション ノートとサンプルコードは、 Microchip 社のウェブサイト (www.microchip.com) をご覧ください。

DS61154C_JP - p.34-96 © 2013 Microchip Technology Inc.

Page 97: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

セクション 34. コントローラ エリア ネットワーク (CAN) コントローラ

エリア

ネットワーク

(CA

N)

34

34.16 改訂履歴

リビジョン A (2009 年 7 月 )

本書の初版です。

リビジョン B (2011 年 9 月 )

このリビジョンでの変更内容は以下の通りです。

• 例 :

- 例 34-16 の CiCFG1 を CiCFG に更新しました。

- 例 34-17 を更新しました。

• 図 :

- 図 34-17 ~図 34-22 の以下ラベルを更新しました。

• CFIFOBA を C1FIFOBA に更新しました。

• CFIFOUA を C1FIFOUA1 に更新しました。

• CFIFOCI を C1FIFOCI1 に更新しました。

- 図 34-30 ~図 34-36 の以下ラベルを更新しました。

• CFIFOBA を C1FIFOBA に更新しました。

• CFIFOUA を C1FIFOUA0 に更新しました。

• CFIFOCI を C1FIFOCI1 に更新しました。

• Note:

- 補足文書に関する情報を記載した Note を 34.1「はじめに」の前に追加しました。

- 34.5.2「通常動作モード」に Note を追加しました。

• レジスタ :

- レジスタ34-1のレジスタタイトルをCiCON: CANモジュール制御レジスタに更新しました。

- 正しいビット番号を表示するようにレジスタ 34-11 を更新しました。

- レジスタ 34-20 のビット条件において、FRESET と UINC ビットを S/HC-0 に、TXABAT、TXLARB、TXERR ビットを R-0 に更新しました。

• セクション :

- 34.7.2「メッセージの送信要求」に、送信 FIFO が受信メッセージを格納できるかどうかの確認に関する段落を追加しました。

- 34.7.4「待ち行列内メッセージの送信中止」の全ての TXABT を TXABAT に更新しました。

- 34.9.3「受信 FIFO の動作例」の全ての CiFIFOUA を CiFIFOUA0 に更新しました。

• 表 :

- 表 34-4 の EID ビットを更新しました。

• 文書全体で以下を更新しました。

- 全ての PIC32MX を PIC32 に更新しました。

- 全てのシステム RAM をデバイス RAM に更新しました。

- 全ての TXPRI を TXPR に更新しました。

- 全ての CMSG0SID を CMSGSID に更新しました。

• 表現と体裁の変更等、本書全体の細部を修正しました。

リビジョン C (2012 年 5 月 )

このリビジョンでの変更内容は以下の通りです。

• CAN コントローラ レジスタのまとめ ( 表 34-1 参照 ) に Note を追加、「アドレス オフセット」 の列を削除しました。

• 該当する全てのレジスタ表の Note を更新しました ( レジスタ 34-1 ~レジスタ 34-23 参照 )。

• 文章および体裁の変更等、本書全体の細部を修正しました。

© 2013 Microchip Technology Inc. DS61154C_JP - p.34-97

Page 98: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

PIC32 ファミリ リファレンス マニュアル

NOTE:

DS61154C_JP - p.34-98 © 2013 Microchip Technology Inc.

Page 99: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

Microchip 社製デバイスのコード保護機能に関して以下の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に

流通している同種製品の中でも も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解では、こうした手法

は Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知

的所有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱いているお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保

護機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社の

コード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著作

物に不正なアクセスを受けた場合、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利があります。

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。生命維持装置あるいは生命安全用途に

Microchip 社の製品を使用する事は全て購入者のリスクとし、

また購入者はこれによって発生したあらゆる損害、クレーム、

訴訟、費用に関して、Microchip 社は擁護され、免責され、損

害を受けない事に同意するものとします。暗黙的あるいは明

示的を問わず、Microchip 社が知的財産権を保有しているライ

センスは一切譲渡されません。

2013 Microchip Technology Inc.

商標

Microchip 社の名称とロゴ、Microchipロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、米

国およびその他の国におけるMicrochip Technology Incorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、 MTP、SEEVAL、Embedded Control Solutions Company は、

米国におけるMicrochip Technology Incorporatedの登録商標

です。

Silicon Storage Technology は、他の国における Microchip Technology Inc. の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、

FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、 Mindi、MiWi、MPASM、MPF、MPLAB Certified ロゴ、MPLIB、 MPLINK、mTouch、Omniscient Code Generation、PICC、

PICC-18、PICDEM、PICDEM.net、PICkit、PICtail、REAL ICE、 rfLAB、Select Mode、SQl、Serial Quad I/O、Total Endurance、 TSHARC、UniWinDriver、WiperLock、ZENA および Z-Scaleは、米国およびその他の Microchip Technology Incorporated の商標です。

SQTP は、米国における Microchip Technology Incorporated のサービスマークです。

GestIC および ULPP は、Microchip Technology Inc. の子会社

である Microchip Technology Germany II GmbH & Co. & KG 社

の他の国における登録商標です。

その他、本書に記載されている商標は各社に帰属します。

© 2013, Microchip Technology Incorporated, All Rights Reserved.

ISBN: 978-1-62077-306-2

DS61154C_JP - p.34-99

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham ( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

Page 100: セクション 34. コントローラ エリア ネットワーク …ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdfFrame Interframe Space 9/19/2006 - 9/26/2006 IDE is Dominant

DS61154C_JP - p.34-100 2013 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel: 480-792-7200 Fax: 480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel: 678-957-9614 Fax: 678-957-1455

オースティン、TXTel: 512-257-3370

ボストンWestborough, MATel: 774-760-0087 Fax: 774-760-0088

シカゴItasca, ILTel: 630-285-0071 Fax: 630-285-0075

クリーブランドIndependence, OHTel: 216-447-0464Fax: 216-447-0643

ダラスAddison, TXTel: 972-818-7423 Fax: 972-818-2924

デトロイトNovi, MI Tel: 248-848-4000

ヒューストン、TXTel: 281-894-5983

インディアナポリスNoblesville, INTel: 317-773-8323Fax: 317-773-5453

ロサンゼルスMission Viejo, CATel: 949-462-9523 Fax: 949-462-9608

ニューヨーク、NY Tel: 631-435-6000

サンノゼ、CATel: 408-735-9110

カナダ - トロント

Tel: 905-673-0699 Fax: 905-673-6509

アジア / 太平洋アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel: 852-2401-1200Fax: 852-2401-3431

オーストラリア - シドニー

Tel: 61-2-9868-6733Fax: 61-2-9868-6755

中国 - 北京

Tel: 86-10-8569-7000Fax: 86-10-8528-2104

中国 - 成都

Tel: 86-28-8665-5511Fax: 86-28-8665-7889

中国 - 重慶

Tel: 86-23-8980-9588Fax: 86-23-8980-9500

中国 - 杭州

Tel: 86-571-2819-3187Fax: 86-571-2819-3189

中国 - 香港 SARTel: 852-2943-5100 Fax: 852-2401-3431

中国 - 南京

Tel: 86-25-8473-2460Fax: 86-25-8473-2470

中国 - 青島

Tel: 86-532-8502-7355Fax: 86-532-8502-7205

中国 - 上海

Tel: 86-21-5407-5533Fax: 86-21-5407-5066

中国 - 瀋陽

Tel: 86-24-2334-2829Fax: 86-24-2334-2393

中国 - 深圳

Tel: 86-755-8864-2200 Fax: 86-755-8203-1760

中国 - 武漢

Tel: 86-27-5980-5300Fax: 86-27-5980-5118

中国 - 西安

Tel: 86-29-8833-7252Fax: 86-29-8833-7256

中国 - 厦門

Tel: 86-592-2388138 Fax: 86-592-2388130

中国 - 珠海

Tel: 86-756-3210040 Fax: 86-756-3210049

アジア / 太平洋インド - バンガロール

Tel: 91-80-3090-4444 Fax: 91-80-3090-4123

インド - ニューデリー

Tel: 91-11-4160-8631Fax: 91-11-4160-8632

インド - プネ

Tel: 91-20-3019-1500

日本 - 大阪

Tel: 81-6-6152-7160Fax: 81-6-6152-9310

日本 - 東京

Tel: 81-3-6880-3770 Fax: 81-3-6880-3771

韓国 - 大邱

Tel: 82-53-744-4301Fax: 82-53-744-4302

韓国 - ソウル

Tel: 82-2-554-7200Fax: 82-2-558-5932 または

82-2-558-5934

マレーシア - クアラルンプール

Tel: 60-3-6201-9857Fax: 60-3-6201-9859

マレーシア - ペナン

Tel: 60-4-227-8870Fax: 60-4-227-4068

フィリピン - マニラ

Tel: 63-2-634-9065Fax: 63-2-634-9069

シンガポールTel: 65-6334-8870Fax: 65-6334-8850

台湾 - 新竹

Tel: 886-3-5778-366Fax: 886-3-5770-955

台湾 - 高雄

Tel: 886-7-213-7830

台湾 - 台北

Tel: 886-2-2508-8600 Fax: 886-2-2508-0102

タイ - バンコク

Tel: 66-2-694-1351Fax: 66-2-694-1350

ヨーロッパオーストリア - ヴェルス

Tel: 43-7242-2244-39Fax: 43-7242-2244-393

デンマーク - コペンハーゲン

Tel: 45-4450-2828 Fax: 45-4485-2829

フランス - パリ

Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79

ドイツ - デュッセルドルフ

Tel: 49-2129-3766400

ドイツ - ミュンヘン

Tel: 49-89-627-144-0 Fax: 49-89-627-144-44

ドイツ - プフォルツハイム

Tel: 49-7231-424750

イタリア - ミラノ Tel: 39-0331-742611 Fax: 39-0331-466781

イタリア - ヴェニス

Tel: 39-049-7625286

オランダ - ドリューネン

Tel: 31-416-690399 Fax: 31-416-690340

ポーランド - ワルシャワ

Tel: 48-22-3325737

スペイン - マドリッド

Tel: 34-91-708-08-90Fax: 34-91-708-08-91

スウェーデン - ストックホルム

Tel: 46-8-5090-4654

イギリス - ウォーキンガム

Tel: 44-118-921-5800Fax: 44-118-921-5820

各国の営業所とサービス

10/28/13