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関数、割り込みハンドラはライブラリをほぼそのまま使っていることが判ると思います。
”USB通信”なんて言うと、ちょっとハードルが高そうに思いますが、Basic Demoのエコー・バックさえ動けば
しめたもの!
是非、お試し下さい。
膨大なライブラリなので、始めてインストールした方は”どこから手を付けたら良いのか”戸惑うことと思います。
親族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のエコー・バックさえ動けば
しめたもの!
是非、お試し下さい。
|
|
|
2012-03-05 16:32
nice!(0)
コメント(0)
トラックバック(0)
コメント 0