Section 36. Programmable Cyclic Redundancy Check (CRC)

Similar documents
スライド 1

39733a.fm

PIC24F Family Reference Manual Section 9 WDT

スライド 1

dsPIC33/PIC24 Family Reference Manual, 32-Bit Programmable Cyclic Redundancy Check (CRC)

Microsoft PowerPoint - 7.Arithmetic.ppt

ソフトウェア基礎技術研修

39734a_JP.fm

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

TFTP serverの実装

計算機アーキテクチャ

スライド 1

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

スライド 1

MW100 Modbusプロトコルによるデータ通信の設定について

Microsoft Word - FCTT_CS_Mod( )Jver1.doc

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

アナログ・接点変換器

Microsoft PowerPoint - chapter6_2012.ppt [互換モード]

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

Section 33. Audio Digital-to-Analog Converter (DAC)

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

AN-1077: ADXL345 Quick Start Guide

PowerPoint プレゼンテーション

dsPIC33E FRM - Section #. Title

スライド 1

Microsoft Word - dg_sataahciip_refdesign_jp.doc

Using VectorCAST/C++ with Test Driven Development

問 2. タイミングチャート以下に示す VHDL コードで記述されている回路に関するタイミングチャートを完成させよ ) レジスタの動作 use IEEE.std_logic_64.all; entity RegN is generic (N : integer := 8 port ( CLK, EN

スライド 1

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

IrDA型赤外線タグ仕様

Microsoft PowerPoint - 01-VerilogSetup-2019.pptx

Microsoft Word - 3new.doc

スライド 1

Nios II - PIO を使用した I2C-Bus (2ワイヤ)マスタの実装

目次 1 本アプリケーションノートの目的 送信手順 基本的な送信方法 キャリアセンスなし送信 キャリアセンスあり送信 ACK 期待送信 フレームメモリへのデータの設定 INFO

スライド 1

Microsoft PowerPoint - LogicCircuits09note.ppt [互換モード]

RL78/G13 制限事項について

Cyclone III デバイス・ファミリの メモリ・ブロック

ヤマハDante機器と他社AES67機器の接続ガイド

Microsoft PowerPoint - 3.3タイミング制御.pptx

Xilinx XAPP645 Virtex-II Pro デバイス アプリケーション ノート『シングル エラー訂正およびダブル エラー 検出』

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx

(Microsoft Word - \216\346\220\340SiTCP-VME-Master\(Rev26\).doc)

内容 1. APX-3302 の特長 APX-3312 から APX-3302 へ変更するためには 差分詳細 ハードウェア ハードウェア性能および仕様 ソフトウェア仕様および制限 Ini ファイルの設

10-vm1.ppt

目次 1 I2Cとは 13 結線写真 2 センサの多くがI2Cに対応 14 WHO_AM_I 3 マイコンでのI2C通信例 15 I2C読込みプログラム 4 とは 16 I2C読込みスクリプト概要① 5 タイミングパラメータ 17 I2C読込みスクリプト概要② 6 書込み 18 センサ読込みプログラ

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

PowerPoint プレゼンテーション

Microsoft PowerPoint - OS04.pptx

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

Microsoft PowerPoint - LogicCircuits11note.ppt [互換モード]

(Microsoft Word - JE000250_\203\312TURTLE-RWModbusTCP\220\332\221\261\220\340\226\276\217\221\(4\224\305\).doc)

PIC24F Reference Manual Sect.23

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

Microsoft PowerPoint - chapter6_2013.ppt [互換モード]

スライド 1

MODBUS ユーザーズマニュアル 페이지 1 / 23

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

コンピュータ工学Ⅰ

データ収集用 NIM/CAMAC モジュールマニュアル 2006/5/23 目次 クレート コントローラ CC/ NIM ADC 1821 (Seiko EG&G)...3 ADC インターフェイス U デッドタイム

DUSx200 シリーズコントローラ I2C インターフェース仕様書

Notes and Points for TMPR454 Flash memory

Microsoft Word - PCI-X_PCIeバスのデータ転送-ver1.0.docx

PowerPoint プレゼンテーション

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

Microsoft PowerPoint - Sol7 [Compatibility Mode]

PIC24F Family Reference Manual Section 8 Interrupts

JavaプログラミングⅠ

スライド 1

コンピュータ工学Ⅰ

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

Microsoft PowerPoint - kougi7.ppt

CMOS リニアイメージセンサ用駆動回路 C CMOS リニアイメージセンサ S 等用 C は当社製 CMOSリニアイメージセンサ S 等用に開発された駆動回路です USB 2.0インターフェースを用いて C と PCを接続

SiTCP ユーティリティユーザガイド 2014 年 6 月 18 日 0.73 版 Bee Beans Technologies 1

020204.入出力制御割込解説

Section 15. Input Capture

1. ボードの複数台制御 コンフィグ ROM から FPGA が起動できる場合を想定しています FPGA 回路には 特定のレジスタアドレスにプリセットしたデータが必要です 製品出荷時のサンプル FPGA 回路では レジスタ No.3 を 8bit 幅に設定し FPGA 外部の 4bit ディップスイ

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

04-process_thread_2.ppt

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

ワゴ・新製品インフォメーション

Java講座

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

C プログラミング 1( 再 ) 第 5 回 講義では C プログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ

はじめに 商業登記電子認証ソフトは, 商業登記に基づく電子認証制度に係る会社 法人の代表者等の電子証明書を取得するために使用する専用ソフトウェアで, 法務省が提供するものです 商業登記電子認証ソフトを用いることにより, 電子証明書の発行申請に必要となるファイルの作成及び電子証明書の取得 ( ダウンロ

Microsoft Word - SUA007

【注意事項】RX Driver Package、 RXファミリ RTC モジュール Firmware Integration Technology

Microsoft PowerPoint - Lec ppt [互換モード]

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ

PowerPoint Template

Sharpdesk V3.5インストレーションガイド:プロダクトキー編

PLCシリアル通信 MODBUS通信 データ送信/受信プログラム例

Transcription:

36 注意 : この日本語版文書は参考資料としてご利用ください 最新情報は必ずオリジナルの英語版をご参照願います セクション 36. プログラマブル巡回冗長検査 () プログラマブル ハイライト 本セクションには以下の主要項目を記載しています 36.1 はじめに... 36-2 36.2 モジュールの概要... 36-3 36.3 レジスタ... 36-3 36.4 エンジン... 36-6 36.5 制御ロジック... 36-8 36.6 プログラマブル モジュールの利点... 36-14 36.7 モジュールの適用... 36-14 36.8 省電力モード時の動作... 36-18 36.9 レジスタマップ... 36-19 36.10 関連アプリケーションノート... 36-20 36.11 改訂履歴... 36-21 2009 Microchip Technology Inc. DS70298B_JP - p. 36-1

dspic33f ファミリリファレンスマニュアル 36.1 はじめに dspic33f のプログラマブル巡回冗長検査 () モジュールは ソフトウェアによるコンフィグレーションが可能な チェックサムジェネレータです チェックサムとは 複数バイトを格納した個々のメッセージまたはデータブロックに関連付けられる固有の数値です 通信用のデータパケットにせよメモリに保存されたデータブロックにせよ チェックサム等の情報は それらのデータを処理する前の検証に役立ちます 最も単純な方法として メッセージ内のデータバイトを全て加算する事によってチェックサムを計算できます しかし バイト単位で反転したり並び順を入れ換えたりしてメッセージが改変された場合 このような方法では誤りを検出できません また この方法ではメッセージの任意位置にヌルバイトが追加された場合も検出できません はこのような単純な方法に比べると複雑ですが 信頼性の高い誤り検出アルゴリズムを提供します アルゴリズムはメッセージをバイナリビットストリームとして扱い これを決められたバイナリ値で除算した時の余りをチェックサムとみなします 通常の除算と同様に 計算も反復処理です ただし これらの演算は mod2 によるモジュロ演算で行われるという点で異なります 例えば 除算は XOR 演算 ( すなわちキャリーなしの減算 ) に置き換えられます アルゴリズムは 全ての計算に多項式の項を使用します 除数 被除数 余りのバイナリ値の各桁は 多項式の各項の係数に割り当てられます 例えば 値 19h (11001) は式 36-1 のように表現されます 式 36-1: (1 x 4 ) + (1 x 3 ) + (0 x 2 ) + (0 x 1 ) + (1 x 0 ) 従って x 4 + x 3 + x 0 計算では まず適当な除数を選択します この除数は生成多項式と呼ばれます 生成多項式によって の誤り検出能力が決まるため アプリケーションに合わせて適切な長さと項を持つ生成多項式を選択する必要があります 多くのアプリケーションで広く用いられている標準的な多項式もいくつか存在します しかし本書では 特定の多項式の誤り検出能力については説明しません 演算は反復処理であるため ソフトウェアで処理するとかなりの CPU 処理能力を消費します dspic33f が内蔵する ハードウェアモジュールは ソフトウェアによるコンフィグレーションが可能であり 最小限のソフトウェアオーバーヘッドで高速に チェックサムを計算できます プログラマブル モジュールの主な特長を以下に挙げます ビット長を設定可能な 生成多項式 ( 最大 16 ビット長 ) プログラマブルな 生成多項式 割り込み出力 8 段 x 16 ビットまたは 16 段 x 8 ビットのデータ入力用 FIFO DS70298B_JP - p. 36-2 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 36.2 モジュールの概要 図 36-1: dspic33f のプログラマブル モジュールは 2 つの論理ブロック ( 制御ロジックと エンジン ) で構成されます 制御ロジックはレジスタインターフェイス FIFO 割り込みジェネレータ エンジンインターフェイスを備えます エンジンは カリキュレータを備え これは XOR 機能を備えたシリアルシフタを使用して実装されます モジュールの概略ブロック図を図 36-1 に示します プログラマブル ジェネレータの概略ブロック図 プログラマブル Control Logic Engine Result Read Registers FIFO Interrupt Generator Result Write Serial Data Out Polynomial Length Polynomial Coefficients Shifter and XOR Shift Clock Engine Interface 36.3 レジスタ 以下では モジュールに関連するレジスタについて説明します これらのレジスタは特殊機能レジスタ (SFR) として dspic33f デバイスのデータ RAM 空間に割り当てられます CON: 制御レジスタ XOR: XOR レジスタ DAT: データ入力レジスタ WDAT: シフト書き込みレジスタ CON レジスタ ( レジスタ 36-1 参照 ) は モジュール用レジスタの中で主要となる制御 / ステータスレジスタです XOR レジスタ ( レジスタ 36-2 参照 ) では 多項式に使用する項を選択する事によって生成多項式を定義します DAT および WDAT レジスタは それぞれデータ入力用および結果出力用のバッファです 2009 Microchip Technology Inc. DS70298B_JP - p. 36-3

dspic33f ファミリリファレンスマニュアル レジスタ 36-1: CON: 制御レジスタ U-0 U-0 R/W-0 R-0 R-0 R-0 R-0 R-0 CSIDL VWORD<4:0> bit 15 bit 8 R-0 R-1 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 FUL MPT GO PLEN<3:0> bit 7 bit 0 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット 0 として読み出し -n = POR 時の値 1 = ビットをセット 0 = ビットをクリア x = ビットは未知 bit 15-14 bit 13 bit 12-8 bit 7 bit 6 bit 5 bit 4 bit 3-0 未実装 : 0 として読み出し CSIDL: アイドルモード時 停止ビット 1 = デバイスがアイドルモードに移行した時にモジュールの動作を停止する 0 = アイドルモード中もモジュールの動作を継続する VWORD<4:0>: FIFO ポインタ値ビット FIFO 内の有効なワード数またはバイト数を示します PLEN<3:0> が 8 以上であれば最大数は 8 PLEN<3:0> が 7 以下であれば最大数は 16 です FUL: FIFO フルビット 1 = FIFO はフルである 0 = FIFO はフルではない MPT: FIFO エンプティビット 1 = FIFO はエンプティである 0 = FIFO はエンプティではない 未実装 : 0 として読み出し GO: 開始ビット 1 = シリアルシフトを開始する 0 = FIFO がエンプティになった後に シリアルシフトを停止する PLEN<3:0>: 多項式長ビット生成多項式の長さ = PLEN<3:0> 値 + 1 DS70298B_JP - p. 36-4 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 レジスタ 36-2: XOR: XOR レジスタ R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 X<15:8> bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 X<7:1> bit 7 bit 0 プログラマブル 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット 0 として読み出し -n = POR 時の値 1 = ビットをセット 0 = ビットをクリア x = ビットは未知 bit 15-1 bit 0 X<15:1>: 多項式項 n の XOR イネーブルビット 1 = n 次項 (x n 項 ) を多項式に含める (XOR 演算を有効にする ) 0 = x n 項を多項式に含めない 未実装 : 0 として読み出し 2009 Microchip Technology Inc. DS70298B_JP - p. 36-5

dspic33f ファミリリファレンスマニュアル 36.4 エンジン 36.4.1 エンジンの概要 エンジンは マルチプレクサの設定によってフィードフォワード / フィードバック位置を設定可能なシリアルシフト式 カリキュレータです 汎用 カリキュレータの接続図を図 36-2 に示します アルゴリズムは バイナリ除算のかわりに XOR 論理演算を使用する事により 計算処理を単純化します 生成多項式の係数の設定には XOR<15:1> ビットを使用します いずれかのビットに 1 を書き込むと 多項式の対応する項の XOR 演算が有効化されます 多項式の長さの設定には 制御レジスタ (CON<3:0>) の多項式長 (PLEN<3:0>) ビットを使用します PLEN<3:0> の値が示す多項式の長さに基づいてマルチプレクサを切り換え フィードバックを始めるタップ位置を指定します 計算の結果は 読み出しバスを介してホールドレジスタを読み出す事によって取得できます 書き込みバスを介する シフトレジスタへの直接書き込みパスも用意されています CPU は シフトレジスタ書き込み (WDAT) レジスタを介してこのパスにアクセスします 図 36-2: 汎用 カリキュレータの詳細 PLEN<3:0> 0 1 2 15 Shift Register Hold X1 Hold X2 Hold X3 X15 Hold Dout XOR Out In Bit 0 0 1 Out In Bit 1 0 1 Out In Bit 2 0 1 0 1 Out In Bit 15 clk clk clk clk Read Bus Write Bus DS70298B_JP - p. 36-6 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 36.4.2 エンジンのソフトウェアコンフィグレーション エンジンは 必要とされる生成多項式に基づいてソフトウェアで正しく設定する必要があります 生成多項式はビット数 n の 16 進数で表現されます この数の最上位ビット (MSb) は x n 項 最下位ビット (LSb) は x 1 項の係数に対応します 最上位ビット (MSb) は常に 1 であるとみなされます x 0 項の係数は常に 1 であるとみなされるため 省略されています これら 2 つの項以外の x n-1 ~ x 1 項の係数を XOR レジスタで設定する必要があります ここでは式 36-2 に示す 多項式を例として取り上げます 式 36-2: プログラマブル x 16 + x 12 + x 5 + 1 多項式の長さは多項式の最高次数によって表されます 従って式 36-2 の多項式の長さは 16 ビットです 各項の係数は 0 または 1 に設定されます この多項式を ジェネレータにプログラミングするには PLEN ビット (CON<3:0>) と XOR<15:1> を表 36-1 のように設定する必要があります 表 36-1: のセットアップ例 レジスタ名 ビット名 ビット値 CON PLEN<3:0> 0Fh XOR X<15:1> 1020h この多項式の長さは 16 (PLEN<3:0> + 1) です 上記の多項式を設定するために 表 36-1 では X<15:1> の第 12 ビットと第 5 ビットが 1 にセットされています ( 値 1020h) Bit 0 は常に XOR 演算されます また 16 ビット多項式の場合 第 16 ビットも必ず XOR 演算されます このため bit 0 と bit 16 に対応する XOR ビットは存在しません 上記の多項式用に設定された ジェネレータの接続図を図 36-3 に示します 図 36-3: 多項式 (x 16 + x 12 + x 5 + 1) 用に設定された ジェネレータ XOR SDO D Bit 0 Q D Bit 4 Q D Bit 5 Q D Bit 12 Q D Bit 15 Q clk clk clk clk clk Read Bus Write Bus Note: XOR レジスタの x 0 項に対応するビットの値は無視され この項の係数は常に 1 であるとみなされます 従って CRXOR レジスタの最下位ビット (LSb) が 0 であっても 1 であっても ( 例 : 1020h であっても 1021h であっても ) 計算の結果には影響しません 2009 Microchip Technology Inc. DS70298B_JP - p. 36-7

dspic33f ファミリリファレンスマニュアル 36.5 制御ロジック 36.5.1 FIFO FIFO は物理的には 8 段 x 16 ビット幅のストレージエレメントです FIFO 関連のロジックは VWORD (VWORD<4:0> または CON<12:8>) と呼ばれる 5 ビットカウンタを備えます VWORD<4:0> ビットの値は FIFO に新たに書き込まれたデータエレメントの数を示します PLEN<3:0> が 8 以上の場合 FIFO は 8 段 x 16 ビット幅のアレイとして機能します それ以外の場合 FIFO は 16 段 x 8 ビット幅のアレイとして機能します 計算を開始する前に CPU は データ (DAT) レジスタを介して FIFO にデータを書き込む必要があります データは 必ず DAT レジスタに書き込む必要があります DAT レジスタを読み出す事はできません 読み出しても常にゼロが返されます FIFO への書き込みにおける最小データ単位は 1 バイトです PLEN<3:0> が 7 以下である場合 VWORD の値は FIFO に 1 バイトを書き込むたびに 1 つインクリメントし 1 ワードを書き込むたびに 2 つインクリメントします PLEN<3:0> が 8 以上である場合 VWORD の値は FIFO に 1 ワードを書き込むたびに 1 つインクリメントします この場合 DAT レジスタに 1 バイトだけを書き込んでも VWORD の値はインクリメントしません VWORD の値は DAT レジスタに 2 バイト (1 ワード ) が書き込まれた時にだけインクリメントします VWORD レジスタの値が 8 (8 段 x 16 ビット FIFO の場合 ) または 16 (16 段 x 8 ビット FIFO の場合 ) に達すると FIFO フル (FUL) ビットがセットされ FIFO がフルである事が示されます アプリケーションは 新たな値を DAT レジスタに書き込む際に FIFO がフルではない事を確認する必要があります データのブロックを処理する場合 正しい チェックサム結果を生成するために アプリケーションはデータブロックの最終ワードを レジスタから確実にシフトアウトさせる必要があります このために データブロックの最終ワードを DAT レジスタに書き込んだ後に 0x0000 を DAT レジスタに書き込む必要があります 加えて アプリケーションは このワードを DAT レジスタに書き込む際に FIFO がフルではない (FUL = 0) 事を確認する必要があります 36.5.2 エンジンインターフェイス 36.5.2.1 FIFO から カリキュレータへのインターフェイス FIFO から カリキュレータへのシリアルシフトを開始するには 開始 (GO) ビットをセット (CON<4> = 1) する必要があります GO ビットが 1 かつ VWORD の値が 1 以上の場合にのみ シリアルシフタは MSb を先頭に エンジンへのデータシフトを開始します シフト開始前に FUL ビットがセットされていた場合 このビットは VWORD が 1 つデクリメントした時にクリアされます FIFO の 1 段を カリキュレータへ完全にシフトし終えると VWORD が 1 つデクリメントします シリアルシフタは VWORD がゼロになるまでシフトを続け VWORD がゼロになると FIFO エンプティ (MPT) ビットをセットして FIFO がエンプティである事を示します シフトクロック周波数は dspic33f 命令クロック周波数の 2 倍です 従ってこのハードウェアシフト処理はソフトウェアシフタよりも高速です アプリケーションは シフト実行中に FIFO に書き込む事ができます エンジンへ連続的にデータを転送するために FIFO に十分な数のワードまたはバイトを事前に書き込んでおく事を推奨します このように FIFO を準備した後に アプリケーションは GO ビットを 1 にセットして シフトを開始できます シフト開始後に VWORD または FUL ビットを監視する必要があります FUL ビットがクリア状態または VWORD の値が 8 または 16 未満であれば FIFO に追加のワードを書き込む事ができます DAT レジスタに書き込んだ後 少なくとも 1 命令サイクルが経過しないと VWORD の値を読み出す事はできません FIFOに書き込み済みのワードを全てシフトアウトしてFIFOをエンプティにするには GO ビットを 1 にセットし MPT ビットがセットされるまで シフタを動作させる必要があります シフタが動作を開始した後に GO ビットをクリアしても データのシフトは停止しません GO ビットを 0 にクリアした場合 FIFO がエンプティになった後に シフタが停止します その後 GO ビットを再セットするまで FIFO にデー DS70298B_JP - p. 36-8 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 タを書き込んでもそのデータはシフトアウトされません GO ビットをセットしたままにすると シフタは停止する事なくシフトアウトし続けます この場合 FIFO にデータを書き込むと即座にそのデータが処理されます Note: PLEN<3:0> が 8 以上の場合 アプリケーションソフトウェアで GO ビットをセットする前に FIFO に整数個のワード ( 偶数個のバイト ) を書き込む必要があります FIFO に奇数個のバイトを書き込んだ後に GO ビットをセットすると 最後の 1 バイトはシフトアウトされず MPT ビットは常時 0 となって FIFO がエンプティではない事を示し続けます プログラマブル 36.5.2.2 FIFO からシフトされるデータのビット数 シフトされるデータのビット数は 選択した多項式の長さによって決まります 例えば PLEN<3:0> = 5 の場合 生成多項式の長さ ( すなわち 1 データのサイズ ) は 6 ビット (PLEN<3:0> + 1) です CPU はバイト単位で書き込む事しかできませんが FIFO は 1 バイトの一部だけをシフトアウトします この例の場合 第 6 ビット ( このデータの MSb) を先頭に 1 バイト中の 6 ビットだけをシフトアウトします 各バイトの上位 2 ビットはドントケアビットです 従って 計算の実行に要するシフトクロックサイクル数は [(PLEN<3:0> + 1) VWORD] です 同様に 12 ビット多項式を選択した場合 1 ワード中の第 12 ビット ( このデータの MSb) を先頭に 12 ビットだけをシフトアウトします 従って各ワードの上位 4 ビットは無視されます Note: n ビット多項式を使用する 計算には整数個の n ビットデータを使用します 例えば 16 ビット多項式の場合 計算には整数個のワードを使用します 36.5.2.3 結果 CPU が WDAT レジスタを読み出すと 結果が 読み出しバスを介してシフトレジスタから直接読み出されます 結果は 全てのデータが処理されて IF (IFS4<3>) ビットがセットされた後に読み出す必要があります FIFO がエンプティになる前に次のデータが モジュールに供給されない場合 データ処理シーケンスの途中で IF フラグがセットされる可能性がある事に注意が必要です 書き込みバスを介する シフトレジスタへの直接書き込みパスも用意されています CPU は WDAT レジスタを介して このパスにアクセスします これにより シフト処理を開始する前に WDAT レジスタに必要な値を書き込む事ができます Note: CPU が WDAT レジスタを介してシフトレジスタに直接書き込む時 GO ビットは 0 である事が必要です 36.5.3 割り込み動作 FIFO から エンジンへのデータのシリアルシフトは GO ビットがセットされ かつ VWORD<4:0> ビットがゼロより大きい時に開始されます シフト処理中に MPT ビットが 0 ( 非エンプティ ) から 1 ( エンプティ ) に変化するか VWORD<4:0> ビットがゼロに変化すると IF 割り込みフラグがセットされます IE ビットがセット ( 割り込みが有効化 ) されていれば IF ビットがセットされた時に割り込みが生成されます この場合 割り込みルーチンから WDAT レジスタを読み出す事ができます 結果は 全てのデータワードが処理された後に読み出す必要があります 次の 動作要求に備えて GO (CON<4>) ビットをクリアする事ができます モジュールに関連する割り込みレジスタの詳細は 36.9 レジスタマップ に記載した表 36-2 を参照してください 割り込みと割り込み優先度の設定に関する詳細は セクション 32. 割り込み ( パート III) (DS70214) を参照してください Note: FUL ビットがセットされている時に新たなデータを DAT レジスタに書き込むと VWORD ポインタが 0 に戻ってロールオーバーします しかしこの条件では 割り込みフラグ (IF) はセットされません FUL ビットはリセットされ FIFO に書き込まれていたデータは失われ DAT に新たに書き込んだデータが FIFO の先頭位置に書き込まれます FIFO の残りの位置はエンプティとなり それらの位置には新たなデータを書き込む事ができます 2009 Microchip Technology Inc. DS70298B_JP - p. 36-9

dspic33f ファミリリファレンスマニュアル 36.5.4 モジュールの動作例 以下では 長さ 16 (PLEN<3:0> = 0xF) の 生成多項式 ( 式 36-3) を使用する モジュールのコンフィグレーションを例として取り上げます XOR レジスタは この多項式に対応する値 (0x0800E) を格納します PLEN の値に従って 16 ビットが シフトレジスタを通してシフトされるため FIFO は 16 ビット x 8 段 FIFO として機能します 式 36-3: 生成多項式 x 16 + x 15 + x 3 + x 2 + x 1 + 1 以下では プロセスごとに図を示しながら モジュールの動作を解説します 1. モジュールは 16 ビット 生成多項式用に設定されています MPT ビットの値が 1 であるため FIFO はエンプティです 図 36-4: モジュール (PLEN = 0xF) CON CSIDL VWORD<4:0> FUL MPT GO PLEN<3:0> 0 00000 0 1 0 1111 Data 0022...10243645 DAT FIFO Write Bus Shifter XOR X<15:1> XOR Read Bus 1000000000001110 WDAT DS70298B_JP - p. 36-10 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 図 36-5: 2. アプリケーションが DAT レジスタへのデータ書き込みを開始します VWORD ビットがインクリメントし DAT レジスタに書き込まれたワードの数を示します MPT ビットがクリアされ FIFO はエンプティではない事を示します DAT レジスタへのデータ書き込み CON CSIDL VWORD<4:0> FUL MPT GO PLEN<3:0> 0 00001 0 0 0 1111 プログラマブル Data 0022...10243645 DAT FIFO Write Bus Shifter XOR X<15:1> XOR Read Bus 1000000000001110 WDAT 3. 8 ワードが FIFO に書き込まれた時に VWORD が 0x8 として読み出され FUL ビットがセットされます この時点で モジュールは 8 ワードのデータブロックを処理できる状態となりました 図 36-6: FIFO がフル CON CSIDL VWORD<4:0> FUL MPT GO PLEN<3:0> 0 01000 1 0 0 1111 DAT FIFO Write Bus Shifter XOR X<15:1> XOR Read Bus 1000000000001110 WDAT 2009 Microchip Technology Inc. DS70298B_JP - p. 36-11

dspic33f ファミリリファレンスマニュアル 4. アプリケーションが GO ビットをセットし シフトレジスタを通してワードのシフトを開始するように モジュールに指示します 図 36-7: アプリケーションが GO ビットをセットする CON CSIDL VWORD<4:0> FUL MPT GO PLEN<3:0> 0 01000 1 0 1 1111 DAT FIFO Write Bus Shifter XOR X<15:1> XOR Read Bus 1000000000001110 WDAT 5. シフトレジスタが FIFO からのワードのシフトを開始します 処理されたワード数に応じて VWORD ビットがデクリメントします モジュールが FIFO から シフトレジスタへのデータ転送を開始すると FUL ビットがクリアされます 図 36-8: モジュールが FIFO からのデータを処理する CON CSIDL VWORD<4:0> FUL MPT GO PLEN<3:0> 0 00111 0 0 0 1111 DAT FIFO Write Bus Shifter XOR X<15:1> XOR Read Bus 1000000000001110 WDAT DS70298B_JP - p. 36-12 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 図 36-9: 処理が終了する 6. モジュールが 8 ワードのデータ処理を完了し 割り込みを生成します 次いで チェックサム結果を WDAT レジスタに保存します 最後に MPT ビットが FIFO がエンプティである事を示します CON CSIDL VWORD<4:0> FUL MPT GO PLEN<3:0> 0 00000 0 1 0 1111 プログラマブル DAT FIFO Write Bus Shifter XOR X<15:1> Read Bus XOR 1000000000001110 Interrupt to CPU WDAT 2009 Microchip Technology Inc. DS70298B_JP - p. 36-13

dspic33f ファミリリファレンスマニュアル 36.6 プログラマブル モジュールの利点 アルゴリズムは簡単にソフトウェアに組み込めます しかしシフト ビット検査 XOR 演算等の基本要件を実装するには かなりの CPU 処理能力が必要です さらに 計算は対話型処理であるため データ転送命令による追加のソフトウェアオーバーヘッドがデバイスの MIPS 要件にとって重荷となります dspic33f の エンジンは CPU に負荷をかけずに チェックサムを計算します これはソフトウェアで実装するよりも大幅に高速です シフトクロックは dspic33f の命令クロックより 2 倍高速であるため 計算には 1 ビットあたり 1/2 命令サイクルしか要しません 例えば 128 ビット (16 ビット x8) の長さを持つメッセージの チェックサムを計算する場合 ハードウェアエンジンは 64 命令サイクルしか必要としません 同じ計算をソフトウェアで実行すると 最適化されたコードを使用したとしても 1000 命令サイクル以上が必要です 36.7 モジュールの適用 は 複数のバイトまたはワードを格納したメッセージのデジタル通信に 信頼性の高い誤り検査アルゴリズムを提供します 計算後にチェックサムを付加したメッセージが送信されます 受信者は 受信したメッセージのチェックサムを計算する事によってデータの完全性を検証します 36.7.1 計算のバリエーション dspic33f の モジュールは MSb を先頭にデータをシフトアウトします この方式は XMODEM プロトコルでも採用されているように広く一般的に用いられる方式です しかし 例えば CCITT プロトコルの 計算のように LSb を先頭にシフトアウトする場合もあります この方式では メッセージ多項式を dspic33f の ハードウェアモジュールに供給する前にソフトウェアでビットを反転する必要があるため ソフトウェアオーバーヘッドがかなり増加します 本書では個々の 計算バリエーションについて説明しませんが dspic33f のプログラマブル モジュールを使用する事により 最小限のソフトウェアオーバーヘッドで各種の バリエーションを実装できます 多項式の長さと項の選択はアプリケーションによって異なります 各種の標準的な実装では 多項式の長さとして通常 5 7 8 10 12 16 を使用します dspic33f の モジュールには 各種の多項式長さと計算式を設定できます n ビットの多項式を選択した場合 通常は n 個のゼロをメッセージストリームに付加しますが この処理にもバリエーションが存在します 次のセクションに記載した 計算の推奨手順では n ビット多項式のメッセージストリームに n 個のゼロを付加します ユーザは ゼロまたはゼロ以外の任意の値を選択してメッセージストリームに付加できます アプリケーションの要求に応じて ユーザはどのような値でも自由に付加する事ができます 36.7.2 8 ビット多項式 8 ビット多項式を使用する 計算の推奨手順は以下の通りです 1. PLEN<3:0> ビット (CON<3:0>) に 07h を書き込む 2. XOR に値 ( 例 : 31h) を書き込む 3. WDAT に値を書き込む : 0000h ( 新たな計算を開始する場合 ) または それまでに計算した中間結果 ( メッセージストリームの一部の結果 ) IF (IFS4<3>) ビットをクリアし IE (IEC4<3>) ビットをセットして 割り込みを有効化する 4. FUL ビットがセットされておらず かつメッセージストリームの全部のデータバイトをまだ FIFO に書き込んでいない場合 1 データバイトを DAT レジスタに書き込む 5. FUL ビットがセットされておらず かつメッセージストリームの全部のデータバイトを既に FIFO に書き込んだ場合 1 バイト ( 値 00h) を DAT レジスタ書き込み を使用するアプリケーションでソフトウェアフラグ ( 例 : FINAL_CALCULATION) をセットする 6. FUL ビットまたはソフトウェアフラグ (FINAL_CALCULATION) がセットされている場合 GO ビットをセットして を開始する DS70298B_JP - p. 36-14 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 7. FINAL_CALCULATION フラグがセットされている場合 割り込みで WDAT レジスタを読み出し GO ビットをクリアする 8. 中間結果である場合 ( 計算を実行したが FINAL_CALCULATION フラグがセットされていない場合 ) その中間結果を次の計算処理に引き渡す 36.7.3 5 ビットまたは 7 ビット多項式 5 ビットまたは 7 ビット多項式の場合 モジュールはバイトの下位 5 ビットまたは下位 7 ビットに基づいてチェックサムを計算します 5 ビットデータの場合 バイトの下位 5 ビットに 5 ビットデータを格納し 上位 3 ビットに 0 を書き込む事ができます 7 ビットデータの場合 バイトの下位 7 ビットに 7 ビットデータを格納し 最上位ビットに 0 を書き込む事ができます 詳細は 36.5.2.1 FIFO から カリキュレータへのインターフェイス を参照してください 上記のようにメッセージストリームからバイトデータを形成した後に 36.7.2 8 ビット多項式 に記載した手順を適用する事ができます 多項式長 (PLEN<3:0>) には 5 ビット多項式の場合 04h 7 ビット多項式の場合 06h を設定します XOR レジスタで適当な 5 ビットまたは 7 ビット多項式を設定する事ができます プログラマブル 36.7.4 16 ビット多項式 16 ビット多項式を使用する 計算の推奨手順は以下の通りです 1. PLEN<3:0> ビット (CON<3:0>) に 0Fh を書き込む 2. XOR に値 ( 例 : 8005h) を書き込む 3. WDAT に値を書き込む : 0000h ( 新たな計算を開始する場合 ) または それまでに計算した中間結果 ( メッセージストリームの一部の結果 ) 4. FUL ビットがセットされておらず かつメッセージストリームの全部のデータワードをまだ FIFO に書き込んでいない場合 1 データワードを DAT レジスタに書き込む 5. FUL ビットがセットされておらず かつメッセージストリームの全部のデータワードを既に FIFO に書き込んだ場合 1 ワード ( 値 0000h) を DAT レジスタに書き込み を使用するアプリケーションでソフトウェアフラグ ( 例 : FINAL_CALCULATION) をセットする 6. FUL ビットまたはソフトウェアフラグ (FINAL_CALCULATION) がセットされている場合 GO ビットをセットして を開始する 7. MPT がセットされた時に GO ビットをクリアし WDAT レジスタから結果バイトを読み出す 8. 中間結果である場合 ( 計算を実行したが FINAL_CALCULATION フラグがセットされていない場合 ) その中間結果を次の計算処理に引き渡す Note: 多項式の長さが 16 ビットである場合 モジュールは FIFO に整数個の 16 ビットデータが格納されているものとみなします 16 ビット多項式では単純にワード書き込みできます しかし 16 ビット多項式にバイト書き込み動作を使用するアプリケーションも存在します ( 例 : UART 送受信 ) そのようなアプリケーションでは バイトが奇数個であればダミーバイトを追加する必要があります 一方 メッセージストリームが偶数個のバイトを格納している場合 ダミーバイトを追加すべきではありません このような場合 上記の 16 ビット多項式用の手順を下記のように修正する必要があります 1. PLEN<3:0> ビット (CON<3:0>) に 0Fh を書き込む 2. XOR に値 ( 例 : 8005h) を書き込む 3. WDAT に値を書き込む : 0000h ( 新たな計算を開始する場合 ) または それまでに計算した中間結果 ( メッセージストリームの一部の結果 ) 4. FUL ビットがセットされておらず かつメッセージストリームの全部のデータバイトをまだ FIFO に書き込んでいない場合 1 データバイトを DAT レジスタに書き込み カウンタをインクリメントして FIFO に書き込んだバイト数を正しく示す 2009 Microchip Technology Inc. DS70298B_JP - p. 36-15

dspic33f ファミリリファレンスマニュアル 5. FUL ビットがセットされておらず かつメッセージストリームの全部のデータバイトを既に FIFO に書き込んだ結果 FIFO 内のデータバイト数が奇数であった場合 ダミーバイト ( 値 00h) を DAT レジスタに書き込み ソフトウェアアプリケーションでソフトウェアフラグ ( 例 : FINAL_CALCULATION) をセットする 6. FUL ビットがセットされておらず かつメッセージストリームの全部のデータバイトを既に FIFO に書き込んだ結果 FIFO 内のデータバイト数が偶数であった場合 ソフトウェアフラグ (MESSAGE_OVER) をセットする 7. FUL ビットがセットされておらず かつ MESSAGE_OVER フラグがセットされている場合 1 ワード ( 値 0000h) を DAT に書き込み ソフトウェアフラグ ( 例 : FINAL_CALCULATION) をセットする 8. FUL ビットまたは FINAL_CALCULATION フラグがセットされている場合 GO ビットをセットして を開始する 9. MPT がセットされた時に GO ビットをクリアし WDAT レジスタから結果バイトを読み出す 10. 中間結果である場合 ( 計算を実行したが FINAL_CALCULATION フラグがセットされていない場合 ) その中間結果を次の計算処理に引き渡す 36.7.4.1 サンプルコード 例 36-1 に 16 ビット多項式を使用して 8 ワードのデータブロックを処理するように モジュールを設定するアプリケーションコードの例を示します このアプリケーションコードは IF フラグをポーリングするか あるいは ISR を作成および使用して モジュールの処理完了を検出します このサンプルコードでは FIFO よりも大きなサイズのデータブロックを処理します FIFO がフルではない時にデータを FIFO に書き込みます FIFO がフルになると GO ビットを一度セットしてからクリアします GO ビットをクリアする事により FIFO を再びフルにする事ができます これにより 無用な割り込みの生成を回避できます このプロセスは シフトレジスタが FIFO からのデータワードを処理中である時も実行されます データブロックの最終ワードを FIFO に書き込んだ後に値 0x0000 を書き込む事によって 最終ワードを シフトレジスタからシフトアウトさせます フラグ (datadone) は 全てのデータワードの処理が完了した事を示します このフラグを ISR 内でチェックする事により 入力データシーケンス全体の最終的な 結果を取得します DS70298B_JP - p. 36-16 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 例 36-1: サンプルコード int src[20]; int i; CONbits.PLEN = 0x0F; /* 16 bit */ XOR= 0x1020; /* -CCITT (XMODEM) */ IFS4bits.IF = 0; /* Clear the Interrupt Flag */ IEC4bits.IE = 1; /* Enable the Interrupt */ for(i = 0; i < 20; i ++) { DAT=Src[i]; /* Load the FIFO */ if(conbits.ful == 1) { CONbits.GO = 1; /* If FIFO is full then start the */ CONbits.GO = 0; /* serial register */ } while(conbits.ful == 1); /* Wait till FIFO is not full before */ /*writing next data */ } CONbits.GO = 1; /*Enable the serial shift register */ DAT = 0x0000; /* and write 0x0000 to shift out the */ datadone = 1; /* last result.set the datadone flag */ while(1); } プログラマブル void attribute (( interrupt,no_auto_psv)) _Interrupt(void) { IFS4bits.IF = 0; if(datadone == 1) { } } CONbits.GO = 0; /* Stop the serial register */ Result = WDAT; /* read the result */ 36.7.5 10 ビットまたは 12 ビット多項式 10 ビットまたは 12 ビット多項式の場合 モジュールはワードの下位 10 ビットまたは下位 12 ビットを使用してチェックサムを計算します 10 ビットデータの場合 ワードの上位 6 ビットにゼロを書き込む事ができます 12 ビットデータの場合 ワードの上位 4 ビットにゼロを書き込む事ができます 詳細は 36.5.2.1 FIFO から カリキュレータへのインターフェイス を参照してください 上記のように 10 ビットまたは 12 ビットデータと ドントケア ビットでワードデータを形成した後に 36.7.4 16 ビット多項式 に記載した手順を適用できます PLEN<3:0> ビットには 10 ビット多項式の場合 09h 12 ビット多項式の場合 0Bh を設定します 設定した長さに応じた適当な生成多項式を XOR レジスタで設定する事ができます 2009 Microchip Technology Inc. DS70298B_JP - p. 36-17

dspic33f ファミリリファレンスマニュアル 36.8 省電力モード時の動作 36.8.1 スリープモード時 モジュールの動作中にデバイスがスリープモードに移行すると モジュールはクロック動作が再開するまで現在の状態で一時停止します 36.8.2 アイドルモード時 アイドルモード時も モジュールを完全に動作させるには アイドルモードに移行する前に CSIDL ビットをクリアする必要があります CSIDL = 1 の場合 アイドルモード時のモジュールの挙動はスリープモード時と同じです モジュールクロックが利用できなくても 保留中の割り込みイベントは継承されます DS70298B_JP - p. 36-18 2009 Microchip Technology Inc.

2009 Microchip Technology Inc. DS70298B_JP - p. 36-19 36.9 レジスタマップ dspic33f プログラマブル巡回冗長検査 () モジュールに関連する特殊機能レジスタ (SFR) の要約を表 36-2 に示します 表 36-2: プログラマブル モジュール関連の特殊機能レジスタ (1) SFR 名 Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 全リセット CON CSIDL VWORD<4:0> FUL MPT GO PLEN<3:0> 0040 XOR X<15:1> 0000 DAT データ入力レジスタ 0000 WDAT シフト書き込みレジスタ 0000 凡例 : = 未実装 0 として読み出し. 網掛けしたビットはプログラマブル モジュールの動作には使用しません Note 1: 各メモリマップの詳細はデバイスのデータシートを参照してください セクション 36. プログラマブル巡回冗長検査 () プログラマブル 36

dspic33f ファミリリファレンスマニュアル 36.10 関連アプリケーションノート 本セクションに関連するアプリケーションノートの一覧を下に記載します 一部のアプリケーションノートは dspic33f 製品ファミリ向けではありません ただし概念は共通しており 変更が必要であったり制限事項が存在するものの利用が可能です プログラマブル巡回冗長検査 () モジュールに関連する最新のアプリケーションノートは下記の通りです タイトル現在 関連するアプリケーションノートはありません アプリケーションノート番号 N/A Note: dspic33f ファミリ関連のアプリケーションノートとサンプルコードはマイクロチップ社のウェブサイト (www.microchip.com) でご覧頂けます DS70298B_JP - p. 36-20 2009 Microchip Technology Inc.

セクション 36. プログラマブル巡回冗長検査 () 36 36.11 改訂履歴 リビジョン A (2007 年 10 月 ) 本書の初版 リビジョン B (2009 年 9 月 ) このリビジョンでの変更内容は以下の通りです 例 : - サンプルコード ( 例 36-1) を更新 レジスタ : - CON: 制御レジスタ ( レジスタ 36-1 参照 ) の bit 4 の説明を更新 セクション : - 36.5.2.3 結果 を更新 - 36.5.2.1 FIFO から カリキュレータへのインターフェイス を更新 - 36.5.3 割り込み動作 を更新 - 36.7.2 8 ビット多項式 内の手順を更新 - 36.7.4.1 サンプルコード を更新 上記に加えて 表現および体裁の変更等 本書全体の細部を修正 プログラマブル ISBN: 978-1-61341-041-7 2009 Microchip Technology Inc. DS70298B_JP - p. 36-21

dspic33f ファミリリファレンスマニュアル NOTE: DS70298B_JP - p. 36-22 2009 Microchip Technology Inc.