ãã®èšäºã§ã¯ãUSBã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠã³ã³ãã¥ãŒã¿ãŒãšMKã®æ¥ç¶ãæŽçããæ¹æ³ãšãSilabsãéçºè ã«ãšã£ãŠã·ã³ãã«ã«ããæ¹æ³ã説æããŸãã
ãã¹ããšããŠãUSBããŒããŠã§ã¢ããµããŒãããF32xã·ãªãŒãºãã€ã¯ãã³ã³ãããŒã©ãŒãåããC8051F320DKããŒããšãKeilã®uVision4éçºç°å¢ããããã䜿çšããŸãã
USBéä¿¡ã®å®è£ ã«åããŠæãå§ããåã«ããããã³ã«ã®ããã€ãã®åºæ¬çãªåŽé¢ã決å®ããå¿ èŠããããŸãïŒããã€ã¹ãããããžå ã§å ããäœçœ®ïŒãã¹ããŸãã¯ã¹ã¬ãŒãããã€ã¹ïŒãšãã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠéä¿¡ãããæ å ±ã®ç¹æ§ã決å®ããŸãã
USBã¢ãŒããã¯ãã£ã§ã¯ã4ã€ã®åºæ¬çãªããŒã¿è»¢éãå¯èœã§ãã
- ã³ã³ãããŒã«è»¢é -æ¥ç¶äžã«ããã€ã¹ãæ§æããæäœäžã«ããã€ã¹ãå¶åŸ¡ããããã«äœ¿çšãããŸãã ãã®ãããã³ã«ã¯ãä¿èšŒãããããŒã¿é ä¿¡ãæäŸããŸãã
- 倧éããŒã¿è»¢éãšã¯ãé ä¿¡ããã³è»¢éã¬ãŒããé ããã矩åã®ãªã転éã§ãã ã¢ã¬ã€è»¢éã¯ãä»ã®ã¿ã€ãã®äŒéãã解æŸãããŠããã¹åž¯åå¹ å šäœãå æã§ããŸãã ãããã®éä¿¡ã®åªå é äœã¯æãäœãããã¹ã«å€§ããªè² è·ãããããšäžæåæ¢ããŸãã ä¿èšŒãããé ä¿¡-å¶çºçãªãšã©ãŒãçºçããå Žåãç¹°ãè¿ããå®è¡ãããŸãã é å転éã¯ãããªã³ã¿ãŒãã¹ãã£ããŒãã¹ãã¬ãŒãžããã€ã¹ãªã©ãšã®ããŒã¿äº€æã«é©ããŠããŸãã
- å²ã蟌ã¿è»¢é -æ¬è³ªçã«èªçºçãªçã転éã§ãããããã€ã¹ãå¿
èŠãšããããããã£ãããšãµãŒãã¹ãæäŸããå¿
èŠããããŸãã
ãµãŒãã¹æéå¶éã¯ã10ã255ããªç§ã®ç¯å²ã§èšå®ãããŸãã
äœããã«ã¹ããŒãã§ã¯1ã255ããªç§ããã€ã¹ããŒãã§ã¯125ÎŒsã泚æå¯èœã§ãã ã©ã³ãã 亀æãšã©ãŒã®å Žåãåè©Šè¡ãå®è¡ãããŸãã å²ã蟌ã¿ã¯ãããšãã°ãããŒããŒãããæåãå ¥åãããšãããŸãã¯ããŠã¹ã®åãã«é¢ããã¡ãã»ãŒãžãéä¿¡ãããšãã«äœ¿çšãããŸãã - ã¢ã€ãœã¯ããã¹è»¢é-ãªã¢ã«ã¿ã€ã ã®é£ç¶éä¿¡ãä¿èšŒãããé ä¿¡é 延æéã§ãã¹åž¯åå¹ ã®äºåã«åæãããéšåãå æããŸãã ãããã䜿çšãããšã1.023 MB / sïŒãŸãã¯0.5 MB / sã§2ã€ïŒã®åž¯åãæã€ãã£ãã«ããã«ã¹ããŒãã§ç·šæã§ããå©çšå¯èœãªåž¯åã®70ïŒ ãå æããŸãïŒæ®ãã¯å®¹éã®å°ãªããã£ãã«ã§åããããšãã§ããŸãïŒã é«éã§ããšã³ããã€ã³ãã¯æ倧24 MB / sïŒ192 Mb / sïŒã®ãã£ãã«ãåä¿¡ã§ããŸãã ãšã©ãŒãæ€åºãããå Žåãã¢ã€ãœã¯ããã¹ããŒã¿ã¯ç¹°ãè¿ãããŸãã-ç¡å¹ãªãã±ããã¯ç¡èŠãããŸãã ãããªã«ã¡ã©ãããžã¿ã«ãªãŒãã£ãªããã€ã¹ïŒUSBã¹ããŒã«ãŒããã€ã¯ïŒããªãŒãã£ãªããã³ãããªããŒã¿ãåçããã³èšé²ããããã€ã¹ïŒCDããã³DVDïŒã®ã¹ããªãŒãã³ã°ããã€ã¹ã«ã¯ãã¢ã€ãœã¯ããã¹è»¢éãå¿ èŠã§ãã
MKãã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããå Žåãã³ã³ãããŒã©ãŒã¯æããã«ã¹ã¬ãŒãã«ãªããŸãã
ãžã§ã€ã¹ãã£ãã¯ã®ãããªUSBäºæHIDããã€ã¹ã®äœæ
æãäžè¬çã§ç°¡åã«å®è£ ã§ããUSBããã€ã¹ã®ã¿ã€ãã¯ãHIDïŒHuman Interface DevicesïŒã§ãã ãã®ãããªããã€ã¹ã®æšæºã§ããã䜿çšãããäŒéã®ã¿ã€ãã¯äžæã§ãã ãã®ã¯ã©ã¹ã®å žåçãªä»£è¡šè ã¯ãUSBããŒããŒããããŠã¹ããžã§ã€ã¹ãã£ãã¯ãã¢ãã¿ãŒèšå®ããã«ãããŒã³ãŒããªãŒããŒãã«ãŒããªãŒããŒãªã©ã§ãã
HIDããã€ã¹ã®å©ç¹ã¯æ¬¡ã®ãšããã§ãã
- å®è£ ã®å®¹æãã
- ã³ã³ãã¯ããªã³ãŒã;
- WindowsãµããŒãïŒè¿œå ã®ãã©ã€ããŒã¯äžèŠïŒã
ãã®ãããæãåçŽãªãžã§ã€ã¹ãã£ãã¯ãããã¥ã¬ãŒã¿ãŒãå®è£ ããŸãã ããšãã°ãã¬ã¬ãŒãžã§åéããæŠéãã¡ãŒïŒïŒïŒçšã«2ã€ïŒãŸãã¯ãã以äžïŒã®ãã¿ã³ãä»ããã¹ãããã«ã¹ãã£ãã¯ãå¿ èŠã§ãã C8051F320DKãã¢ããŒãã«ã¯ã1ã€ã®å¯å€æµæåšãš2ã€ã®ãã¿ã³ããããŸã-æäœã§ãååã§ãã
Silabovtsyã¯ãHIDã€ã³ã¿ãŒãã§ãŒã¹ãåããUSBããŠã¹ããšãã¥ã¬ãŒãããããã€ã¯ãã³ã³ãããŒã©ãŒãã¡ãŒã ãŠã§ã¢ã®äŸãæäŸããŸãã ãã®äŸã¯ãã»ãšãã©ã®ãã¥ãŒãã³ã€ã³ã¿ã©ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ãŒã¹ãè¿ éãã€ç°¡åã«å®è£ ããã®ã«ååã§ãã çµæãšããŠãåºç€ãšãªãäŸã§ã¯ã以äžãåŠçããå¿ èŠããããŸãã
- HIDããã€ã¹èšè¿°åã®æ§æ
- ããŒã¿è»¢éæé ;
- HIDããã€ã¹åèšè¿°åã
ããã€ã¹èšè¿°åã§å§ãŸã
èšè¿°åã¯æ¬¡ã®åœ¢åŒã§å¿ èŠã§ãã
code const hid_report_descriptor HIDREPORTDESC =
{
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x02, // USAGE_PAGE (Simulation Controls)
0x09, 0xbb, // USAGE (Throttle)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x02, // USAGE_MAXIMUM (Button 2)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x55, 0x00, // UNIT_EXPONENT (0)
0x65, 0x00, // UNIT (None)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
}
次ã«ãäœãèµ·ãã£ãŠããã®ãã詳现ã«åæããŸãã å°æ¥ã®ããã€ã¹ã説æããäžã§æãéèŠãªéšåã¯ãããŒã¿åã§ãã ã·ãã¥ã¬ãŒã·ã§ã³ã³ã³ãããŒã« ïŒ ã³ã³ãããŒã«ã®ã·ãã¥ã¬ãŒã·ã§ã³ïŒã»ã¯ã·ã§ã³ãèšè¿°ããå¿ èŠããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ã ã¹ãããã« ïŒã¹ãããã«ã¹ãã£ãã¯ïŒã®ã¿ããããŸãã
- ã¹ãããã«ãæ©èœããå€ã®ç¯å²ã¯LOGICAL_MINIMUMïŒ0ïŒããã³LOGICAL_MAXIMUMïŒ255ïŒã§ãã
- ãã®ç¯å²ã®ãµã€ãºïŒ1ãã€ãïŒãèšå®ããŸã-REPORT_SIZEïŒ8ïŒããã³
- ãã®ã¿ã€ãã®ã³ã³ãããŒã«ã®æ°ã¯REPORT_COUNTïŒ1ïŒã§ãã
ãã¿ã³ã®å Žåãåæ§ã®ã¹ããŒãªãŒïŒUSAGE_PAGEïŒ Button ïŒïŒïŒ
- å€ã®ç¯å²ã¯LOGICAL_MINIMUMïŒ0ïŒããã³LOGICAL_MAXIMUMïŒ1ïŒã§ãã
- ç¯å²ãµã€ãºïŒ1ãããïŒ-REPORT_SIZEïŒ1ïŒ;
- ãã¿ã³ã®æ°ã¯è€æ°ãããããããã§ã¯ãã€ãé·ãã£ãŒã«ãã䜿çšããå¿ èŠããããŸããããã¯REPORT_COUNTïŒ8ïŒãæå³ããŸãã
ããã¯ãã¹ãŠãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«å¿ èŠã§ããããã§ãèšè¿°åã埩å·åããŒãšããŠäœ¿çšããŠãã³ã³ãããŒã©ãŒããåä¿¡ãã2ãã€ããåŠçããæ¹æ³ãããããŸãã
ã¯ãããŸãã.hã«ã¯ãhid_report_descriptor宣èšã®çŽåã«æ¬¡ã®ãããªè¡ããããŸãã
#define HID_REPORT_DESCRIPTOR_SIZE 0x002C
#define HID_REPORT_DESCRIPTOR_SIZE_LE 0x2C00 //LITTLE ENDIAN
ããã§éèŠãªã®ã¯ãèšè¿°åèªäœã®ã³ã³ãã€ã«åŸã«èšè¿°åã®ãµã€ãºãèšå®ããããšã§ãããã³ã³ãããŒã©ãŒãã³ã³ãã¥ãŒã¿ãŒã«ãã£ãŠèªèãããããã«æå®ããå¿ èŠããããŸãã
èšè¿°åãã³ã³ãã€ã«ããã¿ã¹ã¯ãç°¡çŽ åããããã«ã www.usb.org ïŒ HID Descriptor Tool ïŒã«ããããã°ã©ã ã䜿çšã§ããŸãã ããã°ã©ã ã«ã¯ãã¿ã¹ã¯ã«åãããŠèª¿æŽããããç¬èªã®HIDããã€ã¹ãäœæãããã§ããHIDããã€ã¹ã®æ§æäŸãå«ãŸããŠããŸãã
ããã§ãžã§ã€ã¹ãã£ãã¯ã®èª¬æã¯çµäºã§ããPCã«è»¢éããããŒã¿ãæºåããå¿ èŠããããŸãã
ããŒã¿è»¢éæé
äŸã«ã¯æ¬¡ã®ã³ãŒãããããŸãã
void IN_Report(void){
IN_PACKET[0] = VECTOR;
IN_PACKET[1] = BUTTONS;
// point IN_BUFFER pointer to data packet and set
// IN_BUFFER length to transmit correct report size
IN_BUFFER.Ptr = IN_PACKET;
IN_BUFFER.Length = 2;
}
ãã®æé ã§ã¯ãéä¿¡ãããã±ãããã³ã³ãã€ã«ããããªãããŒãã€ã³ã¿ãŒãä»ããŠéä¿¡ããŸãïŒå®éã¯ããã€ã³ã¿ãŒã®æ§é ãšãã®é·ãã§ãïŒã äž»ãªããšã¯ãã³ã¡ã³ããæ瀺ããããã«ãããã±ãŒãžãæ éã«æ§æããããšã§ããããããã°ãåå ããã«ãã¹ãŠãããã±ãŒãžã§è¡ãããŸãã
次ã«ãVECTORå€æ°ãšBUTTONSå€æ°ãååŸããæ¹æ³ãšå Žæã«ã€ããŠèª¬æããŸãïŒäž¡æ¹ãšãããµã€ãºããã€ãåäœã®unsigned charåã§ãïŒã
ã°ããŒãã«å€æ°VECTORã¯ãADCããã®å²ã蟌ã¿ã®çºçäžã«ADCããå€ãå²ãåœãŠãããŸãã
void ADC_Conver_ISR(void) interrupt 10
{
AD0INT = 0;
//
if( VECTOR != ADC0H)
LED = 1;
else
LED = 0;
VECTOR = ADC0H;
}
åæ§ã«ãã°ããŒãã«å€æ°BUTTONSã¯ããã¿ã³ã®æŒäžã«å¿ããŠå€ãå€æŽããŸãã ãã¿ã³ã¯ã¿ã€ããŒããã®å²ã蟌ã¿ã«ãã£ãŠããŒãªã³ã°ãããŸãã å人ã®å¥œã¿ã«å¿ããŠã¿ã€ããŒãèšå®ããŸãã
void Timer2_ISR (void) interrupt 5
{
P2 &= ~Led_2;
if ((P2 & Sw1)==0) // #1
{
// pressed
BUTTONS = BUTTONS | (1<<0);
LED2 = 1;
}
else
{
// not pressed
BUTTONS = BUTTONS & 0xFE;
}
if ((P2 & Sw2)==0) // #2
{
// pressed
BUTTONS = BUTTONS | (1<<1);
LED2 = 1;
}
else
{
// not pressed
BUTTONS = BUTTONS & 0xFD;
}
TF2H = 0; // Timer2
}
HIDããã€ã¹èšè¿°å
æåŸã«ãæååããŒã¿ã調æŽããŠãããã€ã¹ã«åžæã®ååãä»ããŸãïŒãã®äŸã§ã¯ããJOYSTICK-HABRãïŒã
æååèšè¿°åString2Descãæ¢ããŠããŸããæžãæããŸã
#define STR2LEN sizeof ("JOYSTICK-HABR") * 2
code const unsigned char String2Desc [STR2LEN] =
{
STR2LEN, 0x03,
'J', 0,
'O', 0,
'Y', 0,
'S', 0,
'T', 0,
'I', 0,
'C', 0,
'K', 0,
'-', 0,
'H', 0,
'A', 0,
'B', 0,
'R', 0,
};
HIDããã€ã¹ã®èå¥
ãããžã§ã¯ããã³ã³ãã€ã«ãããã€ã¯ãã³ã³ãããŒã©ãŒãããã°ã©ãã³ã°ããããããã€ã¹ãUSBããŒãã«æ¥ç¶ã§ããŸãã ãã¹ãã¯ãããã€ã¹ãHIDã¯ã©ã¹ã«å±ããŠãããšå€æããããã€ã¹ã®å¶åŸ¡ãé©åãªãã©ã€ããŒã«è»¢éããŸãã

Windowsã§ã[ã³ã³ãããŒã«ããã«]-> [ã²ãŒã ããã€ã¹]ã«ç§»åããä¹å®¢ã確èªããŸãã ããããã£ãèŠãŠãæ©èœã確èªããŸãã

äœéäŒéé床ã¯ãããã€ã¹ã®HIDããŒãžã§ã³ã®äž»ãªå¶éã§ãã ãã®ãããªäº€æã®çµç¹ã§å¯èœãªæ倧ããŒã¿è»¢éé床ã¯64 Kbpsã§ãã ãã®ãããªã€ã³ãžã±ãŒã¿ã¯ãUSBãã¹ã®æ倧é床ã®12 Mbpsãšæ¯èŒããŠãç¹å®ã®USBå®è£ ã®éžæã«é¢ããŠã¯HIDãã¯ãããžãŒã®ãã€ãã¹ã®ããã«èŠããŸãã ãã ããå€ãã®éä¿¡ã¿ã¹ã¯ã§ã¯ãæå®ãããé床ã§ååã§ãããç¹æ®ãªããŒã«ãšããŠã®HIDã¢ãŒããã¯ãã£ã¯ãããŒã¿äº€æãæŽçããæ¹æ³ã®äžã§æ£åœãªäœçœ®ãå ããŠããŸãã
äžè¬çã«ãHIDããã€ã¹ã¯ãã»ãŒãã¹ãŠã®USB察å¿MKã«ç°¡åã«å®è£ ã§ããŸãã ååãšããŠãéçºè ã®1ã€ã®å®äŸã§ååã§ãããå¿ èŠãªæ©èœãååŸã§ãããã®ã調æŽããŸãã
Silabs USBXpressããŒã«ã䜿çšããŠæ¬æ ŒçãªUSBããã€ã¹ãäœæãã
ããããMKã§ããã€ã¹ãæäœããããã«ãããã³ã«ã䜿çšããå¿ èŠããããšããããŸããã åæã«ã倧éã®ããŒã¿ãé«éã§è»¢éããã©ãããããã§ãã¹ãŠãå®è¡ããããšæããŸããããã§ã¯å€ãã®USBããããåäžã®COMã§ã¯ãªããããªãã®ããã€ã¹ã§ãããããããã¯ã¹ãã倧ãããªãããããäžã®USB-UARTããŒãã«åœ«å»ããå¿ èŠããããŸãFT232RLã¯æ¹æ³ããããŸããã
ãã®æãSilabsã®ã¹ã¿ããã¯ã誰ããç掻ã楜ã«ãããæªæ¥ãžã®éãã瀺ãããšã決ããŸãããç¬èªã®fireãšãã¡ãŒã ãŠã§ã¢ãæžãããšã«ã€ããŠã¯æ¯ãæãããšã¯ãããŸããã
USBXpresséçºãããã¯ãMKããã³ãã¹ãïŒPCïŒåãã®å®å šãªãœãªã¥ãŒã·ã§ã³ã§ãããäž¡æ¹ã®é«ã¬ãã«APIã䜿çšããŠUSBãããã³ã«ã§ç°¡åã«æäœã§ããŸãã USBãããã³ã«èªäœãŸãã¯ãã©ã€ããŒäœæã«é¢ããç¹å¥ãªç¥èã¯å¿ èŠãããŸããã ãã®ãããã¬ã€ãã«ã·ã©ãã¢äººãæžããŠãã ããã

Programmer's Guidãšããã°ãå æããããŒãžã¯ããã30ããŒãžã§ãéåžžã«ã·ã³ãã«ã§ç解ããããã§ãã ç§ã¯å人çã«ãã®äŸã奜ãã§ã¯ãããŸãããéåžžã«æ²ãã£ãå ŽæãããèŠãããŸããPCã®ããã°ã©ã ã¯äžè¬ã«èŠãªãæ¹ãããã§ãã
USBXpress DKã¯ãC8051F32xãC8051F34xã©ã€ã³ãã€ã¯ãã³ã³ãããŒã©ãŒãããã³CP210xïŒUSB-to-UARTããªããžã³ã³ãããŒã©ãŒïŒçšã«æäŸãããŠããŸãã USBXpressã©ã€ãã©ãªã«ã¯ãäžäœã¬ãã«ã®ã©ã€ãã©ãªãPCçšã®USBãã©ã€ããããã³äžäœã¬ãã«ã§ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®DLLã©ã€ãã©ãªãå«ãŸããŠããŸãã ãããŠããã¡ãããããã¥ã¡ã³ããšäŸã®ã»ããã
ã©ã€ãã©ãªã¯ãBULKã¢ãŒãã§ã®ã¿ããŒã¿è»¢éãå®è£ ããŸãã ã©ã€ãã©ãªã®ãã¹ãŠã®æ©èœã䜿çšãããšããããã®å®è£ ã«å¿ èŠãªã®ã¯ããã€ã¯ãã³ã³ãããŒã©ã®3 Kãã€ãã®ãã©ãã·ã¥ã¡ã¢ãªã®ã¿ã§ãã
ãã¡ãŒã ãŠã§ã¢
HIDã®åã®äŸãšæ©èœã䌌ãŠãããå€ããå°ãªããåçŽã§ç解å¯èœãªäŸã調ã¹ãŠã¿ãŸãããã PCã¢ããªã±ãŒã·ã§ã³ã«ã¯å ¥ããŸãããMKã®ãã¡ãŒã ãŠã§ã¢ãå®æãããåŸããã¹ãŠãæ確ã«ãªããŸãã
ãããã£ãŠãTestPanelã®äŸã®æ¬è³ªã¯ããã€ã¯ãã³ã³ãããŒã©ãŒããADCïŒããã³ã·ã§ã¡ãŒã¿ãŒïŒãšçµã¿èŸŒã¿ã®æž©åºŠèšïŒ Temperature ïŒã®èªã¿åãå€ãåãåãããã¿ã³ïŒ Switch1Stateããã³Switch2State ïŒãæŒãããšã§ãLEDïŒ Led1ããã³Led2 ïŒãèªåã§ç¹æ» ã§ããããšã§ãã
次ã«ãå¿ èŠãªæ®µéãšèæ ®ãã¹ãããªã±ãŒããªå ŽæïŒ
- USBèšè¿°åã®äœæã
- ããã€ã¹ãšUSBãªã³ããŒãã®åæåã
- çä¿¡ããŒã¿ã®åŠçãšçºä¿¡ãã±ããã®çæã
- å²ã蟌ã¿åŠçã
ãã ããæåã«ããããžã§ã¯ããäœæãããšãã«ãUSB_API.h ããããŒãã¡ã€ã«ãšUSBX_F320_1.libã©ã€ãã©ãªèªäœãå«ããããšãå¿ããªãã§ãã ããã
USBèšè¿°åã®äœæ
å·§åŠã«åœ¢åŒåãããæ§é ãæã€HIDãšã¯ç°ãªãããã¹ãŠãã·ã³ãã«ã§ã
code const UINT USB_VID = 0x10C4;
code const UINT USB_PID = 0xEA61;
code const BYTE USB_MfrStr[] = {0x1A,0x03,'S',0,'i',0,'l',0,'a,0,'b,0,'s,0};
code const BYTE USB_ProductStr[] = {0x10,0x03,'U',0,'S',0,'B',0,'X',0,'_',0,'A',0,'P',0};
code const BYTE USB_SerialStr[] = {0x0A,0x03,'H',0,'A',0,'B',0,'R',0};
code const BYTE USB_MaxPower = 15;
code const BYTE USB_PwAttributes = 0x80;
code const UINT USB_bcdDevice = 0x0100;
VIDãPIDãããã³ååã䜿çšãããšããã¹ãŠãæ確ã§ããããšã«å ããŠãMaxPowerãã©ã¡ãŒã¿ãŒïŒæ倧é»æµ= _MaxPower * 2ïŒãPwAttributes-ãã¹ãã®ãªã¢ãŒããŠã§ã€ã¯ã¢ããã«é¢äžãããã©ã¡ãŒã¿ãŒãããã³bcdDevice-ããã€ã¹ã®ãªãªãŒã¹çªå·ã§æ倧é»æµãèšå®ã§ããŸãã
ããã€ã¹ãšUSBãªã³ããŒãã®åæåã®ãã¥ã¢ã³ã¹
ããã§ãMKãç²ããããšãªãããŒã¿ãéåä¿¡ããã¡ã€ã³é¢æ°èªäœãéå§ããŸãã
void main(void)
{
PCA0MD &= ~0x40; // Disable Watchdog timer
USB_Clock_Start(); // Init USB clock *before* calling USB_Init
USB_Init(USB_VID,USB_PID,USB_MfrStr,USB_ProductStr,USB_SerialStr,USB_MaxPower,USB_PwAttributes,USB_bcdDevice);
Initialize();
USB_Int_Enable();
...
ããã§ã解説ãå¿ èŠãšããããã«ããŸããåæåã®åã«USBã®ã¯ããã¯ãåæåããŠãããMKã®æ®ãã®éå§æäœãå®è¡ããå¿ èŠããããŸã-InitializeïŒïŒ; -ããŒããã¿ã€ããŒãADCãæ§æããŸãã 次ã«ãUSBå²ã蟌ã¿ãæå¹ã«ããŸãã
çä¿¡ããŒã¿ã®åŠçãšçºä¿¡ãã±ããã®çæ
ããã§æãéèŠãªããšã«è¡ããŸã
//... main
while (1)
{
if (Out_Packet[0] == 1) Led1 = 1;
else Led1 = 0;
if (Out_Packet[1] == 1) Led2 = 1;
else Led2 = 0;
In_Packet[0] = Switch1State;
In_Packet[1] = Switch2State;
In_Packet[2] = Potentiometer;
In_Packet[3] = Temperature;
}
// main
}
Out_Packet-ãã¹ãããåä¿¡ãããã±ããã
In_Packet-ãã¹ãã«éä¿¡ããããã±ããã
æ¬è³ªã¯æ確ã§ãMKã¯éä¿¡ããããã±ãããåžžã«æŽæ°ããåä¿¡ãããã±ããã®ã¹ããŒã¿ã¹ãèªã¿åããŸãã
å²ã蟌ã¿åŠç
éä¿¡ããããã±ããããå€ãååŸããå Žæã«ã€ããŠ2ã¯ãŒãã§èª¬æããŸãã HIDã®äŸã®ããã«ããã¿ã³ã®ç¶æ ã¯ã¿ã€ããŒããã®å²ã蟌ã¿ã«ãã£ãŠååŸãããADCãšæž©åºŠèšã®å€ã¯ADCããã®å²ã蟌ã¿ã«ãã£ãŠååŸãããŸãã
ããã«åŸ®åŠãªãã€ã³ãããããŸã-ADCã®åæåäžã«ãã¿ã€ããŒããªãŒããŒãããŒãããããšã§å€ãå€æãããããã«èšå®ãïŒãã¿ã³ã«äœ¿çšãããã®ãšåãïŒãå€æãå®äºãããšADCèªäœããã®å²ã蟌ã¿ãçºçããŸãã ãããŠãããã§ã¯ãããã·ãŒãžã£ã®æåŸã§ã³ã³ããŒã¿å€ãååŸããããšã«å ããŠãAPIé¢æ°ãåŒã³åºããŸã
Block_WriteïŒIn_Packetã8ïŒ
åéãããããŒã¿ãã³ã³ãã¥ãŒã¿ãŒã«éä¿¡ããŸãã
ã³ã³ãã¥ãŒã¿ãŒããã®ã³ãã³ãã®åä¿¡ã¯ãUSBããã®å²ã蟌ã¿ãåŠçããæé ã§çºçããŸãã
void USB_API_TEST_ISR(void) interrupt 16
{
BYTE INTVAL = Get_Interrupt_Source();
if (INTVAL & RX_COMPLETE)
{
Block_Read(Out_Packet, 8);
}
if (INTVAL & DEV_SUSPEND)
{
Suspend_Device();
}
if (INTVAL & DEV_CONFIGURED)
{
Initialize();
}
}
ãã®ç¬éã«ã€ããŠã¯ãProgrammer's Guidã§è©³ãã説æããŠããŸãã äžçªäžã®è¡ã¯ãGet_Interrupt_SourceïŒïŒAPIé¢æ°ãåŒã³åºãããå²ã蟌ã¿APIã®åå ã®ã³ãŒããè¿ããšããããšã§ãã 次ã«ãã³ãŒããåæãããå¿ èŠãªã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã
PCããã°ã©ã
ã³ã³ãã¥ãŒã¿ãŒçšã®ããã°ã©ã ãå解ããŸããã Silabovitesã¯Visual Basicããã³Cã®äŸãæäŸããŸãããããœãŒã¹ãèŠãããšãªããéçºç°å¢ã§ã©ã€ãã©ãªãæ¥ç¶ããè€éãªæ©èœã«é¢ããããŒãžã2ã3åèªãã¹ãã§ã¯ãããŸããã
ãããã£ãŠãäŸããæ¢ã«ã³ã³ãã€ã«ãããããã°ã©ã ã䜿çšããŸãã
ãã®ãããMKçšã«ãããžã§ã¯ããã³ã³ãã€ã«ããUSBXpressçšã®ãŠãããŒãµã«ãã©ã€ããŒã瞫補ããŠã€ã³ã¹ããŒã«ãããããã°ããŒããæ¥ç¶ããŸãã ã·ã¹ãã ã¯æ°ããããã€ã¹ãæ€åºãããã®ãã©ã€ããŒãã€ã³ã¹ããŒã«ããŸãã
ã€ã³ã¹ããŒã«åŸã«ãWindowsããã€ã¹ãããŒãžã£ãŒã§äœãè¡ãããŠããããèŠãŠã¿ãŸãããã

次ã«ãããã°ã©ã ãå®è¡ããŸãã

圌女ã¯ããã€ã¹ãæ£ããèŠã€ããããšãããããŸãã

ããã§ããã¿ã³ãçªãããã€ãªãŒããç¹æ» ããããMKã®æãæããã枩床ãã©ã®ããã«äžæãããã確èªã§ããããã«ãªããŸããã
ãããã«
äžè¬ã«ãUSBXpressã©ã€ãã©ãªã䜿çšããŠUSBããã€ã¹ãäœæããããšã¯ãHIDã¢ãŒããã¯ãã£ã䜿çšãããããé«éã§ééçãªããã»ã¹ã§ããããšãå€æããŸããã ãããŠãé床ã¯ééããªãé«ããªããŸãã æãèãç¹ã¯ãã©ã€ãã©ãªãéããããŠããããšã§ãããBULKããŒã¿è»¢éã¢ãŒãã®ã¿ãå©çšå¯èœã§ããããšã«å ããŠããã®ãœãªã¥ãŒã·ã§ã³ãã©ãã»ã©ä¿¡é Œã§ããããç¥ãããšã¯äžå¯èœã§ãã
䜿çšãããŠããæçšãªãœãŒã¹ïŒ
- Guk M.ãPCããŒããŠã§ã¢ã€ã³ã¿ãŒãã§ã€ã¹ã çŸç§äºå ž -ãµã³ã¯ãããã«ãã«ã¯ïŒããŒã¿ãŒã2002幎-528ç§
- ã¯ãªãªã³A.I. USBã€ã³ã¿ãŒãã§ã€ã¹ãåããSilicon Labsãã€ã¯ãã³ã³ãããŒã©ãŒã é»åéšåãã¬ãžã³No. 5ã2007
- PICã³ã³ãããŒã©ãŒã§ã®USBã€ã³ã¿ãŒãã§ã€ã¹ã®å®çšå
- SiUSBXpress Linuxãã©ã€ããŒ