SSブログ

USB通信機能の組み込み [電子工作]

USB_Controlerは制御装置(パソコン)からUSB経由で操作コマンドを受け取り、パルス・コントローラに制御コマンドをシリアル送信するPIC18F2550を使ったモジュールです。そのUSB通信機能はMicrochip_Solution_Library(これです)に手を加えて組み込みました。

膨大なライブラリなので、始めてインストールした方は”どこから手を付けたら良いのか”戸惑うことと思います。
親族SNS管理人が利用したのはこれ(↓)です。
Microchip_Solution_Library_v2011_12_05\USB\Device - CDC - Basic Demo\Firmware\main.c

多くのデバイスに対応するため、ifdefでソースを切り替えていて複雑に見えますが、関係無い所を外すとプログラムの構造は比較的単純です。(USB Device - CDC - Basic Demo - C18 - Low Pin Count USB Development Kit.mcpを開いてPIC18F14K50でコンパイルすると判りやすい)

USB_ControlerのUSB通信制御関連のソースはこんな感じです。main関数、ProcessIO関数、割り込みハンドラはライブラリをほぼそのまま使っていることが判ると思います。
void main(void)
{
   InitializeSystem();
   while(1)
   {
     if(USB_BUS_SENSE && (USBGetDeviceState() == DETACHED_STATE))
     {
       USBDeviceAttach();
     }
     ProcessIO();
   }
}

void ProcessIO(void)
{
    BYTE numBytesRead;
    BYTE numBytesWrite;

    if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;

    if(USBUSARTIsTxTrfReady())
    {
      numBytesRead = getsUSBUSART(USB_In_Buffer,64);
      if(numBytesRead != 0)
      {
        numBytesWrite = host_comm_main(numBytesRead,USB_In_Buffer, USB_Out_Buffer);
        if( numBytesWrite != 0 )
        {
          putUSBUSART(USB_Out_Buffer,numBytesWrite);
        }
      }
    }
    CDCTxService();
}

void InterruptServiceLow(void)
{
  if( PIR2bits.USBIF == 1 )
  {
  USBDeviceTasks();
  }
}


”USB通信”なんて言うと、ちょっとハードルが高そうに思いますが、Basic Demoのエコー・バックさえ動けば
しめたもの!
是非、お試し下さい。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。