рд╕рд┐рд▓рд┐рдХреЙрди рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдУрдВ рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдпреВрдПрд╕рдмреА-рдЙрдкрдХрд░рдгреЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп

рд╕рд┐рд▓рд┐рдХреЙрди рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдУрдВ рдХреЗ рдЙрдкрдХрд░рдг рд╢реМрдХрд┐рдпрд╛ рд╣рд▓рдХреЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╡реЗ рдПрдЯрд▓рдо рдЬреИрд╕реЗ рдлреНрд▓реИрдЧрд╢рд┐рдк рд╕реЗ рджреВрд░ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреЗ рдкрд╛рд╕ TQFP рдкреИрдХреЗрдЬ рдореЗрдВ рдореБрдЦреНрдп рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рджреЛрдиреЛрдВ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИрдВ рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдирд╢реНрд╡рд░ рдФрд░ рдпреВрдПрд╕рдмреА рдЯреВрд▓рд╕реНрдЯреАрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд┐рдЯ (рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣рдм рдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдереЗ ) рддрдХ рдХрд╛рдлреА рд╕реБрд▓рдн рд╣реИрдВред рдореИрдВрдиреЗ рдЦреБрдж рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рддрдХрдиреАрдХ рд╕реЗ рдЕрдкрдиреЗ рдкрд░рд┐рдЪрд┐рддреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рд╕рд┐рд▓рдмрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдХрд╛рдлреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдк рдпреВрдПрд╕рдмреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдордХреЗ рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд┐рд▓рд╛рдмреНрд╕ рдиреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо C8051F320DK рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрд░рдорд╢рдГ F32x рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде, USB рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реБрдП, рдФрд░ Keil рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг uVision4ред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк USB рд╕рдВрдЪрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЦреБрджрд╛рдИ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдкрд╣рд▓реБрдУрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдкреЛрд▓реЙрдЬреА (рдореЗрдЬрдмрд╛рди рдпрд╛ рджрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕) рдореЗрдВ рдХрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕ рдЪрд░рд┐рддреНрд░ рдореЗрдВ рд╣реЛрдЧреАред

USB рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЪрд╛рд░ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

рдПрдордХреЗ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рджрд╛рд╕ рд╣реЛрдЧрд╛ред

рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХреА рддрд░рд╣ USB рд╕рдВрдЧрдд HID рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдирд╛


USB рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдкреНрд░рдХрд╛рд░ HID (рдорд╛рдирд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕) рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░, рд░реБрдХрд╛рд╡рдЯ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐ USB рдХреАрдмреЛрд░реНрдб, рдЪреВрд╣реЗ, рдЬреЙрдпрд╕реНрдЯрд┐рдХ, рдореЙрдирд┐рдЯрд░ рд╕реЗрдЯрд┐рдВрдЧ рдкреИрдирд▓, рдмрд╛рд░рдХреЛрдб рд░реАрдбрд░, рдХрд╛рд░реНрдб рд░реАрдбрд░ рдЖрджрд┐ рд╣реИрдВред
HID рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ:

рддреЛ, рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдореИрдирд┐рдкреБрд▓реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдореБрдХрд╛рдмрд▓рд╛ рдлрд░ (!) рдХреЗ рд▓рд┐рдП рджреЛ (рдпрд╛ рдЕрдзрд┐рдХ) рдмрдЯрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдереНрд░реЛрдЯрд▓ рд╕реНрдЯрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рдо рдЧреИрд░реЗрдЬ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВред C8051F320DK рдбреЗрдореЛ рдмреЛрд░реНрдб рдореЗрдВ рдПрдХ рдЪрд░ рдЕрд╡рд░реЛрдзрдХ рдФрд░ 2 рдмрдЯрди рд╣реИрдВ - рдиреНрдпреВрдирддрдо рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрддред

рд╕рд┐рд▓рдмреЙрд╡реНрд╕реНрдХреА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ HID рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд╛рд▓рд╛ USB рдорд╛рдЙрд╕ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕рдмрд╕реЗ рдорд╛рдирд╡реАрдп рдмрд╛рддрдЪреАрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рддреНрд╡рд░рд┐рдд рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдВрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
  1. рдЫрд┐рдкрд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
  2. рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛;
  3. рдЫрд┐рдкрд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ред

рдбрд┐рд╡рд╛рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗ рд╢реБрд░реВ

рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
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
}

рдЕрдм рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдХрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдЕрдиреБрднрд╛рдЧ рд╕рд┐рдореБрд▓реЗрд╢рди рдирд┐рдпрдВрддреНрд░рдг ( рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЕрдиреБрдХрд░рдг) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдереНрд░реЙрдЯрд▓ (рдереНрд░реЛрдЯрд▓ рд╕реНрдЯрд┐рдХ) рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ:

рдмрдЯрди рдХреЗ рд╕рд╛рде, рдПрдХ рд╕рдорд╛рди рдХрд╣рд╛рдиреА (USAGE_PAGE ( рдмрдЯрди )):

рдпрд╣ рд╕рдм рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдм рдпрд╣ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ 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 рдЙрдкрдХрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкреАрд╕реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛

рд╣рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд╛рддреЗ рд╣реИрдВ:
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 рдХреЛ рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рдЕрд╡рд░реЛрдз рдХреА рдШрдЯрдирд╛ рдХреЗ рджреМрд░рд╛рди ADC рд╕реЗ рдорд╛рди рджрд┐рдП рдЧрдП рд╣реИрдВ:
void ADC_Conver_ISR(void) interrupt 10
{
AD0INT = 0;

//
if( VECTOR != ADC0H)
LED = 1;
else
LED = 0;

VECTOR = ADC0H;
}

рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдмрдЯрди рднреА рдЗрд╕реА рддрд░рд╣ рдмрдЯрди рдкреНрд░реЗрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореВрд▓реНрдп рдмрджрд▓рддрд╛ рд╣реИред рдмрдЯрди рдХреЛ рдЯрд╛рдЗрдорд░ рд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░рдХреЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░реЗрдВред
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
}


рдЫрд┐рдкрд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░

рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╡рд╣ рдирд╛рдо рд╣реЛ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, тАЬ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 рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЙрдЪрд┐рдд рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЫрд╡рд┐
рдЕрдм рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ, рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓-> тАЛтАЛрдЧреЗрдорд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкреИрд╕реЗрдВрдЬрд░ рдХреЛ рджреЗрдЦреЗрдВред рд╣рдо рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
рдЫрд╡рд┐
рдХрдо рд╕рдВрдЪрд░рдг рдХреА рдЧрддрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЫрд┐рдкрд╛рдИ-рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдореБрдЦреНрдп рд╕реАрдорд╛ рд╣реИред рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдРрд╕реЗ рд╕рдВрдЧрдарди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдбреЗрдЯрд╛ рдЕрдВрддрд░рдг рджрд░ 64 рдХреЗрдмреАрдкреАрдПрд╕ рд╣реИред рдпреВрдПрд╕рдмреА рдмрд╕ рдХреА рдкреВрд░реНрдг рдЧрддрд┐ рдХреЗ 12 рдПрдордмреАрдкреАрдПрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрдХреЗрддрдХ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдпреВрдПрд╕рдмреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪреБрдирдиреЗ рдХреА рдмрд╛рдд рдЖрдиреЗ рдкрд░, рдПрдЪрдЖрдИрдбреА рддрдХрдиреАрдХ рдХреЗ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рд╕рдВрдЪрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХреЗрддрд┐рдд рдЧрддрд┐ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд┐рдкрд╛рдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдкрдиреА рд╕рд╣реА рдЬрдЧрд╣ рд▓реЗрддреА рд╣реИред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, HID рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА USB- рд╕рдХреНрд╖рдо MK рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдЖрдк рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Silabs USBXpress рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреВрд░реНрдг USB рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдПрдВ


рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╡рд╣ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдордХреЗ рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рдореИрдВ рдЙрдЪреНрдЪ рдЧрддрд┐ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдпрд╣ рд╕рдм рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдХреЗ рд╕рд╛рде рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдпреВрдПрд╕рдмреА рд╣реИрдВ рдФрд░ рдПрдХ рднреА COM рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдорд╛рдЪрд┐рд╕ рд╕реЗ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЪрд┐рдк рдкрд░ рдпреВрдПрд╕рдмреА-рдпреВрдПрдЖрд░рдЯреА рдмреЛрд░реНрдб рдкрд░ рдореВрд░реНрддрд┐рдпрд╛рдВ FT232RL рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рддрдм рдерд╛ рдХрд┐ рд╕рд┐рд▓рдмрд╕ рдХреЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬрд▓рд╛рдК рд▓рдХрдбрд╝реА рдФрд░ рдлрд░реНрдорд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рджрд╛рдВрддреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдФрд░ "рднрд╡рд┐рд╖реНрдп рдХреА рд░рд╛рд╣" рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдпреВрдПрд╕рдмреАрдПрдХреНрд╕рдкреНрд░реЗрд╕ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ рдПрдордХреЗ рдФрд░ рд╣реЛрд╕реНрдЯ (рдкреАрд╕реА) рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреЛ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпреВрдПрд╕рдмреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрд╡рдпрдВ USB рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдпрд╛ рдбреНрд░рд╛рдЗрд╡рд░ рд▓реЗрдЦрди рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЬреНрдЮрд╛рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╕рд┐рд▓рдмрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рдЫрд╡рд┐
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧрд╛рдЗрдб рдХреА рдмрд╛рдд рдХрд░рдирд╛: рдХреЗрд╡рд▓ 30 рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдирд╛, рдпрд╣ рдмреЗрд╣рдж рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ, рдмрд╣реБрдд рдХреБрдЯрд┐рд▓ рд╕реНрдерд╛рди рдЕрдХреНрд╕рд░ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдкреАрд╕реА рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдорддреМрд░ рдкрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдмреЗрд╣рдж рднрдпрд╛рдирдХ рд╣реЛрддреЗ рд╣реИрдВред
USBXpress DK C8051F32x, C8051F34x рд▓рд╛рдЗрди рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдФрд░ CP210x (USB-to-UART рдмреНрд░рд┐рдЬ рдХрдВрдЯреНрд░реЛрд▓рд░) рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред USBXpress рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА, PC рдХреЗ рд▓рд┐рдП USB рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдКрдкрд░реА рд╕реНрддрд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DLL-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗрд╡рд▓ BULK рдореЛрдб рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдХреЗрд╡рд▓ 3 Kbytes Flash рдореЗрдореЛрд░реА рд▓рдЧреЗрдЧреАред

рдлрд░реНрдорд╡реЗрдпрд░

рдЖрдЗрдП рд╣рдо HID рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рдорд╛рди рдПрдХ рдпрд╛ рдХрдо рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рд╣рдо рдкреАрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдордХреЗ рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ, TestPanel рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рд╛рд░: рд╣рдо рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдПрдбреАрд╕реА (рдкреЛрдЯреЗрдВрд╢рд┐рдпреЛрдореАрдЯрд░) рдФрд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдерд░реНрдорд╛рдореАрдЯрд░ ( рддрд╛рдкрдорд╛рди ) рдХреА рд░реАрдбрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдмрдЯрди ( Switch1State рдФрд░ Switch2State ) рджрдмрд╛рдиреЗ рд╕реЗ, рдФрд░ рд╣рдо рдЦреБрдж рдПрд▓ рдИ рдбреА ( LED1 рдФрд░ LED2 ) рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдЪрд░рдгреЛрдВ рдФрд░ рдирд╛рдЬреБрдХ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
  1. рдПрдХ рдпреВрдПрд╕рдмреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд▓рд┐рдЦрдирд╛;
  2. рдмреЛрд░реНрдб рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдпреВрдПрд╕рдмреА рдХрд╛ рдкреНрд░рд╛рд░рдВрдн;
  3. рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдкреИрдХреЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛;
  4. рдмрд╛рдзрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗред

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, USB_API.h рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдФрд░ USBX_F320_1.lib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред

USB рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд▓рд┐рдЦрдирд╛

рдЕрдкрдиреЗ рдЪрддреБрд░рд╛рдИ рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЫрд┐рдкрд╛рдИ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ
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 * 2) рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрддрдо рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, PwAttributes - рд╣реЛрд╕реНрдЯ рдХреЗ рджреВрд░рд╕реНрде рд╡реЗрдХ-рдЕрдк рдФрд░ bcdDevice рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ - рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрдЦреНрдпрд╛ред

рдмреЛрд░реНрдб рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдпреВрдПрд╕рдмреА рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ

рдЕрдм рд╣рдо рдЦреБрдж рд╣реА рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдордХреЗ рдЕрдердХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдФрд░ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред
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 рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред

рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдкреИрдХреЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛

рдпрд╣рд╛рдБ рд╣рдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ
//... 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 - рдореЗрдЬрдмрд╛рди рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдПрдХ рдкреИрдХреЗрдЯ;
рд╕рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдПрдордХреЗ рд▓рдЧрд╛рддрд╛рд░ рднреЗрдЬреЗ рдЧрдП рдкреИрдХреЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред

рдмрд╛рдзрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ

рдЕрдм 2 рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдкреИрдХреЗрдЯ рд╕реЗ рдорд╛рди рдХрд╣рд╛рдБ рдорд┐рд▓рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ HID рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдЯрд╛рдЗрдорд░ рд╕реЗ рдЗрдВрдЯрд░рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ ADC рдФрд░ рдерд░реНрдорд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди ADC рд╕реЗ рдЗрдВрдЯрд░рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╣реИ - рдПрдбреАрд╕реА рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдорд╛рди рдЯрд╛рдЗрдорд░ (рдЬреЛ рд╣рдо рдмрдЯрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рдУрд╡рд░рдлреНрд▓реЛ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдПрдбреАрд╕реА рд╕реЗ рд╕реНрд╡рдпрдВ рд░реВрдкрд╛рдВрддрд░рдг рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд░реВрдкрд╛рдВрддрд░рдг рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрдирд╡рд░реНрдЯрд░ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ
рдмреНрд▓реЙрдХ_рд░рд╛рдЗрдЯ (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();
}
}

рдпрд╣ рдХреНрд╖рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд╣реИред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ Get_Interrupt_Source () API рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрд╡рд░реЛрдз API рдХреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИред

рдкреАрд╕реА рдХрд╛рд░реНрдпрдХреНрд░рдо

рдореИрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рд╕рд┐рд▓реЛрдмреЛрд╡рд┐рдЯреНрд╕ рдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдмреЗрд╕рд┐рдХ рдФрд░ рд╕реА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП, рд▓реЗрдХрд┐рди рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рднреА, рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдордХреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕реАрдм рдХрд░рддреЗ рд╣реИрдВ, рдпреВрдПрд╕рдмреАрдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо рдирдП рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рдмрд╛рдж рд╡рд┐рдВрдбреЛрдЬ рдбрд┐рд╡рд╛рдЗрд╕ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
рдЫрд╡рд┐
рдЕрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдПрдВ:
рдЫрд╡рд┐
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рдпрд╛ред
рдЫрд╡рд┐
рдпрд╣реА рд╣реИ, рдЕрдм рдЖрдк рдпрд╣рд╛рдВ рдмрдЯрди рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд╛рдпреЛрдб рдмреНрд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЧрд░реНрдо рдПрдордХреЗ рд╣рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддрд╛рдкрдорд╛рди рдХреИрд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, USBXpress рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ USB рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдирд╛ HID рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рдФрд░ рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдФрд░ рдЧрддрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧреАред рд╕рдмрд╕реЗ рдкрддрд▓рд╛ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдВрдж рд╣реИ, рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд┐рддрдирд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЗрд╡рд▓ BULK рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдореЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИред

рдкреНрд░рдпреБрдХреНрдд рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕реНрд░реЛрдд:

  1. рдЧреБрдХ рдПрдоред, рдкреАрд╕реА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлреЗрд╕ред рд╡рд┐рд╢реНрд╡рдХреЛрд╢ред - рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ: рдкреАрдЯрд░, 2002 ред-- 528 рдПрд╕ред
  2. рдХреБрд░рд┐рд▓рд┐рди рдП.рдЖрдИ. рдпреВрдПрд╕рдмреА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рд┐рд▓рд┐рдХреЙрди рд▓реИрдмреНрд╕ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ред рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдореИрдЧрдЬрд╝реАрди рдирдВрдмрд░ 5, 2007
  3. PIC рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ USB рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ
  4. SiUSBXpress рд▓рд┐рдирдХреНрд╕ рдбреНрд░рд╛рдЗрд╡рд░

Source: https://habr.com/ru/post/In116709/


All Articles