FC2カウンター FPGAの部屋 AXI IIC のお勉強2
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

AXI IIC のお勉強2

 ・Transmit FIFO (TX_FIFO)(C_BASEADDR + 0x108、すべてRead/Write、Reset Valueは[31:8]が0、[7:0]がIndeterminate)
  ・[31:10]bit - Reserved.
  ・[9] - Stop : Stop. ここに1を書くとストップ・シーケンスを生成する。
  ・[8] - Start : Start. ここに1を書くとMSMS (CR[2]) = 0 の時はスタート・シーケンスを生成して、MSMS = 1の時はリピート・スタート・シーケンスを生成する。
 ・[7:0] - AXI IIC Transmit Data. Start = 1の時に、0ビット目が0だとWriteアドレス、0ビット目が1だとReadアドレスとなる。Readアドレスの次にStop = 1として、ここにReadするバイト数を書くと受信する。

 ・Receive FIFO (RX_FIFO)(C_BASEADDR + 0x10C、[7:0]はRead、[7:0]のReset ValueはIndeterminate)
  ・[31:8]bit - Reserved
  ・[7:0] - Read : IIC Receive Data.

 ・Transmit FIFO Occupancy Register (TX_FIFO_OCY)(C_BASEADDR + 0x114、[3:0]はRead、[3:0]のReset Valueは0)
  ・[31:4]bit - Reserved
  ・[3:0] - Occupancy Value : [3]がMSB、値が”1001”だったら10個のデータがFIFOに入っている。つまり読んだバイナリ値+1。

 ・Receive FIFO Occupancy Register (RX_FIFO_OCY)(C_BASEADDR + 0x118、[3:0]はRead、[3:0]のReset Valueは0)
  ・[31:4]bit - Reserved
  ・[3:0] - Occupancy Value : [3]がMSB、値が”1001”だったら10個のデータがFIFOに入っている。つまり読んだバイナリ値+1。

・MT9D111のレジスタ設定例
 ・AXI IICの初期化
  Control Register (C_BASEADDR + 0x100) : 0x0002 をWrite(Transmit FIFO Reset. )
  Control Register (C_BASEADDR + 0x100) : 0x0001 をWrite(AXI IIC Enable.)

 ・Write(R0x09:0 に 0x1234 をWriteする)
  Status Register (C_BASEADDR + 0x104)をReadして、TX_FIFO_Empty [7] が1、Bus Busy [2] が0になるのを待つ(TX_FIFO_Emptyは、必ずしも待たなくても良いかもしれない)
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x1BA をWrite(MT9D111の Write アドレス, Start bit=1 )
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x09 をWrite(R0x09:0)
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x12 をWrite
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x234 をWrite( Stop bit = 1 )

 ・Read(R0x9:0 をReadすると 0x1234 が返る)
  Status Register (C_BASEADDR + 0x104)をReadして、TX_FIFO_Empty [7] が1、Bus Busy [2] が0になるのを待つ(TX_FIFO_Emptyは、必ずしも待たなくても良いかもしれない)
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x1BA をWrite(MT9D111の Write アドレス, Start bit=1 )
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x09 をWrite(R0x09:0)
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x1BB をWrite(MT9D111の Read アドレス, Start bit=1 )
  AXI IIC Transmit FIFO (C_BASEADDR + 0x108) : 0x202 をWrite([7:0]にReadするバイト数をセット、Stop bit=1 )
  Status Register (C_BASEADDR + 0x104)をReadして、RX_FIFO_Empty [6] が0になるのを待つ。
  Receive FIFO Occupancy Register (C_BASEADDR + 0x118)の[3:0] が 0x0001 になるのを待つ。(2バイト受信できた)
  Receive FIFO (C_BASEADDR + 0x10C)を読む。0x12 が読めるはず。
  Receive FIFO (C_BASEADDR + 0x10C)を読む。0x34 が読めるはず。
  1. 2012年12月22日 07:01 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/2340-6274e45d
この記事にトラックバックする(FC2ブログユーザー)