//Designs/Tools/I2C-PIC-USB/PrjInfo.txt |
---|
0,0 → 1,13 |
[InfoShortDescription.en] |
Simple IR reflexive sensor. |
[InfoShortDescription.cs] |
Jednoduche reflexivni cidlo. |
[InfoLongDescription.en] |
[InfoLongDescription.cs] |
Čidlo obsahuje pouze reflexní optron s odporovým trimrem a slouží k rozlišování tmavého a světlého povrchu. Dá se použít jak pro detekci čáry pro čárového robota tak i pro snímání otáčení pohonných kol. |
[End] |
//Designs/Tools/I2C-PIC-USB/SW/PIC18F4550/main.c |
---|
0,0 → 1,174 |
#include "main.h" |
#define USB_CON_SENSE_PIN PIN_D4 |
#include <pic18_usb.h> |
#include "usbconfig.h" |
#include <usb.h> |
#include <usb.c> |
/* commands from USB, must e.g. match command ids in kernel driver */ |
#define CMD_ECHO 0 |
#define CMD_GET_FUNC 1 |
#define CMD_SET_DELAY 2 |
#define CMD_GET_STATUS 3 |
#define CMD_I2C_IO 4 |
#define CMD_I2C_BEGIN 1 // flag fo I2C_IO |
#define CMD_I2C_END 2 // flag fo I2C_IO |
/* linux kernel flags */ |
#define I2C_M_TEN 0x10 /* we have a ten bit chip address */ |
#define I2C_M_RD 0x01 |
#define I2C_M_NOSTART 0x4000 |
#define I2C_M_REV_DIR_ADDR 0x2000 |
#define I2C_M_IGNORE_NAK 0x1000 |
#define I2C_M_NO_RD_ACK 0x0800 |
/* To determine what functionality is present */ |
#define I2C_FUNC_I2C 0x00000001 |
#define I2C_FUNC_10BIT_ADDR 0x00000002 |
#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */ |
#define I2C_FUNC_SMBUS_HWPEC_CALC 0x00000008 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_READ_WORD_DATA_PEC 0x00000800 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA_PEC 0x00001000 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_PROC_CALL_PEC 0x00002000 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL_PEC 0x00004000 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_QUICK 0x00010000 |
#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 |
#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000 |
#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000 |
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000 |
#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000 |
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000 |
#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000 |
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000 |
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000 |
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */ |
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */ |
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 0x10000000 /* I2C-like block xfer */ |
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 0x20000000 /* w/ 2-byte reg. addr. */ |
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA_PEC 0x40000000 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC 0x80000000 /* SMBus 2.0 */ |
#define I2C_FUNC_SMBUS_BYTE I2C_FUNC_SMBUS_READ_BYTE | \ |
I2C_FUNC_SMBUS_WRITE_BYTE |
#define I2C_FUNC_SMBUS_BYTE_DATA I2C_FUNC_SMBUS_READ_BYTE_DATA | \ |
I2C_FUNC_SMBUS_WRITE_BYTE_DATA |
#define I2C_FUNC_SMBUS_WORD_DATA I2C_FUNC_SMBUS_READ_WORD_DATA | \ |
I2C_FUNC_SMBUS_WRITE_WORD_DATA |
#define I2C_FUNC_SMBUS_BLOCK_DATA I2C_FUNC_SMBUS_READ_BLOCK_DATA | \ |
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA |
#define I2C_FUNC_SMBUS_I2C_BLOCK I2C_FUNC_SMBUS_READ_I2C_BLOCK | \ |
I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
#define I2C_FUNC_SMBUS_EMUL I2C_FUNC_SMBUS_QUICK | \ |
I2C_FUNC_SMBUS_BYTE | \ |
I2C_FUNC_SMBUS_BYTE_DATA | \ |
I2C_FUNC_SMBUS_WORD_DATA | \ |
I2C_FUNC_SMBUS_PROC_CALL | \ |
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \ |
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC | \ |
I2C_FUNC_SMBUS_I2C_BLOCK |
/* ------------------------------------------------------------------------- */ |
#define DEFAULT_DELAY 10 // default 10us (100khz) |
static unsigned clock_delay = DEFAULT_DELAY; |
static unsigned clock_delay2 = DEFAULT_DELAY/2; |
static unsigned short expected; |
static unsigned char saved_cmd; |
unsigned int8 control_data[8]; |
struct i2c_cmd { |
unsigned char type; |
unsigned char cmd; |
unsigned short flags; |
unsigned short addr; |
unsigned short len; |
}; |
#define STATUS_IDLE 0 |
#define STATUS_ADDRESS_ACK 1 |
#define STATUS_ADDRESS_NAK 2 |
unsigned int8 status = STATUS_IDLE; |
void main() |
{ |
unsigned int8 replyBuf[4]; |
setup_adc_ports(NO_ANALOGS|VSS_VDD); |
setup_adc(ADC_CLOCK_DIV_2); |
setup_psp(PSP_DISABLED); |
setup_wdt(WDT_OFF); |
setup_timer_0(RTCC_INTERNAL); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_timer_3(T3_DISABLED|T3_DIV_BY_1); |
setup_ccp1(CCP_OFF); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
usb_init(); |
while (TRUE) { |
if (usb_enumerated()) |
{ |
usb_gets(0,control_data,8,100); |
switch(control_data[1]) |
{ |
case CMD_ECHO: // echo (for transfer reliability testing) |
replyBuf[0] = control_data[2]; |
replyBuf[1] = control_data[3]; |
usb_puts(0,replyBuf,2,50); |
break; |
case CMD_GET_FUNC: |
usb_puts(0,(I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL),32,50); |
break; |
case CMD_SET_DELAY: |
/* The delay function used delays 4 system ticks per cycle. */ |
/* This gives 1/3us at 12Mhz per cycle. The delay function is */ |
/* called twice per clock edge and thus four times per full cycle. */ |
/* Thus it is called one time per edge with the full delay */ |
/* value and one time with the half one. Resulting in */ |
/* 2 * n * 1/3 + 2 * 1/2 n * 1/3 = n us. */ |
clock_delay = *(unsigned short*)(control_data+2); |
if(!clock_delay) clock_delay = 1; |
clock_delay2 = clock_delay/2; |
if(!clock_delay2) clock_delay2 = 1; |
break; |
case CMD_I2C_IO: |
case CMD_I2C_IO + CMD_I2C_BEGIN: |
case CMD_I2C_IO + CMD_I2C_END: |
case CMD_I2C_IO + CMD_I2C_BEGIN + CMD_I2C_END: |
// these are only allowed as class transfers |
// return i2c_do((struct i2c_cmd*)data); |
break; |
case CMD_GET_STATUS: |
replyBuf[0] = status; |
usb_puts(0,replyBuf,1,50); |
break; |
default: |
// must not happen ... |
break; |
} |
delay_ms(10); |
} |
} |
} |
//Designs/Tools/I2C-PIC-USB/SW/PIC18F4550/main.h |
---|
0,0 → 1,36 |
#include <18F4550.h> |
#device adc=8 |
#FUSES NOWDT //No Watch Dog Timer |
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale |
#FUSES HSPLL //High Speed Crystal/Resonator with PLL enabled |
#FUSES NOPROTECT //Code not protected from reading |
#FUSES NOBROWNOUT //No brownout reset |
#FUSES BORV20 //Brownout reset at 2.0V |
#FUSES NOPUT //No Power Up Timer |
#FUSES NOCPD //No EE protection |
#FUSES STVREN //Stack full/underflow will cause reset |
#FUSES NODEBUG //No Debug mode for ICD |
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O |
#FUSES NOWRT //Program memory not write protected |
#FUSES NOWRTD //Data EEPROM not write protected |
#FUSES IESO //Internal External Switch Over mode enabled |
#FUSES FCMEN //Fail-safe clock monitor enabled |
#FUSES NOPBADEN //PORTB pins are configured as analog input channels on RESET |
#FUSES NOWRTC //configuration not registers write protected |
#FUSES NOWRTB //Boot block not write protected |
#FUSES NOEBTR //Memory not protected from table reads |
#FUSES NOEBTRB //Boot block not protected from table reads |
#FUSES NOCPB //No Boot Block code protection |
#FUSES MCLR //Master Clear pin enabled |
#FUSES LPT1OSC //Timer1 configured for low-power operation |
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode) |
#FUSES PLL5 //Divide By 12(48MHz oscillator input) |
#FUSES CPUDIV4 //System Clock by 4 |
#FUSES USBDIV //USB clock source comes from PLL divide by 2 |
#FUSES VREGEN //USB voltage regulator enabled |
#FUSES ICPRT //ICPRT enabled |
#use delay(clock=24000000) |
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_B7) |
//Designs/Tools/I2C-PIC-USB/SW/PIC18F4550/main.hex |
---|
0,0 → 1,320 |
:100000003BEF09F06896000C046ED8CF05F0E0CF06 |
:1000100006F00001E9CF0CF0EACF07F0E1CF08F0DD |
:10002000E2CF09F0D9CF0AF0DACF0BF0F3CF12F01C |
:10003000F4CF13F0FACF14F0F5CF15F0F6CF16F099 |
:10004000F7CF17F000C00EF001C00FF002C010F0A3 |
:1000500003C011F0A0AA30EF00F0A1BA5DEF06F0E6 |
:100060000EC000F00FC001F010C002F011C003F08C |
:100070000CC0E9FF07C0EAFF078E08C0E1FF09C016 |
:10008000E2FF0AC0D9FF0BC0DAFF12C0F3FF13C0B2 |
:10009000F4FF14C0FAFF15C0F5FF16C0F6FF17C035 |
:1000A000F7FF045006C0E0FF05C0D8FF1000F76A54 |
:1000B000BE0FF66E000EF7220900F5501200000385 |
:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF76ADD |
:1000D000DE0FF66E000EF7220900F550120000FF49 |
:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF76ABD |
:1000F000FE0FF66E000EF7220900F55012004000C8 |
:1001000008000000000000000000000000000000E7 |
:100110000000000000000000000000000000F76A7E |
:100120002E0FF66E010EF7220900F5501200400066 |
:1001300000000000000000000000000000000000BF |
:100140000000000000000000000000000000F76A4E |
:100150005E0FF66E010EF7220900F5501200050140 |
:100160000902A1010901A1000509190129031500CE |
:100170002501950375018102950175058101050130 |
:100180000930093109381581257F750895038106E5 |
:10019000C0C0F76AA20FF66E010EF7220900F550F3 |
:1001A00012000000F76AB40FF66E010EF722090084 |
:1001B000F55012003400F76AC60FF66E010EF722F2 |
:1001C0000900F550120009022200010100C03209A5 |
:1001D0000400000103010200092100010001223492 |
:1001E000000705810308000AF76AF80FF66E010E92 |
:1001F000F7220900F55012000100F76A0A0FF66EA7 |
:10020000020EF7220900F55012001200F76A1C0FC7 |
:10021000F66E020EF7220900F550120012011001CD |
:10022000FF000040030431C6050201020001F76A25 |
:100230003E0FF66E020EF7220900F5501200000480 |
:100240000C00F76A520FF66E020EF7220900F55005 |
:1002500012000403090408035500530054001C0352 |
:100260006900320063002D005000490043002D005A |
:10027000550053004200200020006D92699468A44C |
:1002800002D06894FCD769EF06F0400E0401016FBC |
:10029000040E036F100E026F880E006F046B040EC5 |
:1002A000076F500E066F0001000C70A002D0EDDF4A |
:1002B0007090689A72EF06F06A6A689278EF06F0BA |
:1002C000679166BF6781669F6651100803E2000E62 |
:1002D000016E17D067A10BD0036A6651E8DEFF08F4 |
:1002E00002E1000E01D0010E016E0BD00AD0036AAC |
:1002F0006651EDDEFF0802E1000E01D0010E016E35 |
:1003000000D0000C036A6551700FE96E0F0E0320D8 |
:10031000EA6EEF6A65C066F0D3DF015218E06551FE |
:10032000080DF350676BE96E040E6725EA6EEF6AFD |
:100330006551080DF350676B666F040E6627000E5B |
:10034000672366C0E9FF040E6725EA6EEF6A000CBA |
:10035000010E646F64510F0805E364C065F0D2DFDD |
:10036000642BF8D7000C5A6A5A520AE1036A5A50B1 |
:10037000240FE96E000E0320EA6EEF6A5A2AF4D7C2 |
:100380001B6A010E1C6E1A6A000C6A6A686A9F0E6C |
:100390006B6E3D0E696E6E6ADBDFE5DF160E706E0A |
:1003A00068A602D02FDEFCD76D986FDF030E1F6E9C |
:1003B0007EEF06F0698468986D8284EF06F0689C91 |
:1003C0008AEF06F05FC020F0000CFF0E206E000CDC |
:1003D0005D6A23522AE05D503F0827E31D50FC0F61 |
:1003E00017E2040F1FEF02F0036A2250E4DE5E6E94 |
:1003F0000FD0036A2250ABDE5E6E0AD0036A225031 |
:1004000020DF5E6E05D0036A225000DF5E6E00D0F2 |
:10041000222A23065D505D2A036A500FE96E040EFE |
:100420000320EA6E5EC0EFFFD4D7235204E15D5093 |
:10043000400801E01A6A5DC05FF0C4DF000CE824E8 |
:10044000F76AF736590FF66E040EF7220A00F550D8 |
:10045000FA6E0800F550F96EE803F203FC03060497 |
:10046000226A1D6A04011351010A000109E0030A0E |
:100470000CE0010A0DE0220A18E0030A2BE047D045 |
:10048000120E236E030E1D6E44D0220E236E41D039 |
:10049000020E1D6E036A040112510001C8DE226EB5 |
:1004A000036A2250CEDE236E34D0D8900401123578 |
:1004B000036A0001A2DE0900F5CF03F0226E223CA0 |
:1004C00001D006D0036A225076DE236E22D002D0FD |
:1004D0007CDF2BD0D89004011435036A000159DE6B |
:1004E0000900F5CF03F0226E223C01D00ED0010EA0 |
:1004F0001D6ED89004011435036A000153DE090013 |
:10050000F5CF03F0236E05D002D05FDF0ED05DDFA4 |
:100510000CD00401175305E12350165D02E216C406 |
:1005200023F0010E1A6E000153DF000C5C5204E14F |
:10053000040E1F6E0DDFB1D0050E1F6E040E5F6E30 |
:10054000900E5E6E010E5D6E5D500F08D8A0A5D0B6 |
:100550005DC065F0D7DE606B036A5D50B8DDFF08F3 |
:100560004DE0040E606FD8905D34036AD8DD090059 |
:10057000F5CF03F0616F03C062F05D50080DF350DA |
:10058000656B646F010E6425016E000E6521036EBC |
:1005900001C0E9FF040E0324EA6E61C0EFFF5D5065 |
:1005A000080DF350656B646F020E6425016E000E3A |
:1005B0006521036E01C0E9FF040E0324EA6E5FC0EB |
:1005C000ECFFED525EC0EFFFD8905D34036AA7DD0B |
:1005D0000900F5CF03F05E2603505F22880E636F9B |
:1005E00062B1638162B363835D50080DF350656B44 |
:1005F000E96E040E6525EA6E63C0EFFF036A5D5085 |
:1006000056DDFF0834E060835D50080DF350656BE4 |
:10061000646F040E6427000E6523020E6425016ECC |
:10062000000E6521036E01C0E9FF040E0324EA6E8B |
:100630005FC0ECFFED525EC0EFFFD8905D34036AFF |
:1006400056DD0900F5CF03F05E2603505F225D50B2 |
:10065000080DF350656B646F040E6427000E65236C |
:1006600064C0E9FF040E6525EA6E400EEF6E60512E |
:10067000060802E10E0E606F036A5D5018DD010886 |
:10068000D8A46089036A5D50700FE96E0F0E0320D5 |
:10069000EA6E60C0EFFF5D2A57D79AEF03F00401BE |
:1006A0001151000A00010DE0010A14E0020A1EE0E7 |
:1006B000060A27E0030A2CE00E0A2CE0010A30E0CB |
:1006C0003DD01CC050F40401516B020E5F6E00015E |
:1006D00079DE36D00401122D06D0010E1C165F6A99 |
:1006E000000170DE02D0000170DE2AD00401122D5C |
:1006F00005D01C825F6A000165DE02D0000165DE64 |
:100700001FD0020E1A6E12C421F05F6A5BDE18D091 |
:10071000A7DE16D01BC050F4010E5F6E53DE10D062 |
:1007200004011251010808E312C41BF012C45CF06A |
:100730000001FCD65F6A46DE000102D046DE00D032 |
:10074000ADEF04F01BC05CF004011151000A000180 |
:1007500007E00A0A0DE0010A28E00D0A38E039D066 |
:100760000401506B516B020E5F6E00012BDE33D023 |
:100770005C5219E0010E5C5C036A36DD016E040117 |
:10078000145DD8A002D000010ED0036A1451240FCA |
:10079000E96E000E0320EA6EEFCF50F4010E5F6E9B |
:1007A000000110DE01D011DE16D05C520EE0036AAB |
:1007B00004011451240FE96E000E0320EA6E12C4E6 |
:1007C000EFFF5F6A0001FEDD01D0FFDD04D048DEEF |
:1007D00002D0FBDD00D0ADEF04F05D905CBE5D802B |
:1007E0005C9E5DA011D05C50080DF3505F6A5E6E98 |
:1007F000040E5E26000E5F225EC0E9FF040E5F2439 |
:10080000EA6E880EEF6E09D05C50080DF3505F6AF7 |
:10081000E96E040E5F24EA6EEF6A6FEF04F05D90FC |
:100820005CBE5D805C9E5DA011D05C50080DF350F5 |
:100830005F6A5E6E040E5E26000E5F225EC0E9FFF8 |
:10084000040E5F24EA6E840EEF6E0AD05C50080D31 |
:10085000F3505F6AE96E040E5F24EA6E840EEF6E59 |
:1008600075EF04F05D905CBE5D805C9E5DA011D074 |
:100870005C50080DF350606B5F6E040E5F26000E37 |
:1008800060235FC0E9FF040E6025EA6EEFCF5EF0E3 |
:100890000AD05C50080DF350606BE96E040E6025C1 |
:1008A000EA6EEFCF5EF05EAE02D05EB402D0000E14 |
:1008B00001D0010E016E7FEF04F014C466F000DD7C |
:1008C000015229E004011151010A000105E0020A68 |
:1008D00009E0030A0DE01DD014C45CF07ED75F6A06 |
:1008E00071DD19D014C45CF09AD75F6A6BDD13D048 |
:1008F0000401506B516B14C45CF00001B3D701527A |
:1009000004E0010E0401506F0001020E5F6E5ADD1B |
:1009100002D05BDD00D0ADEF04F00401115100D036 |
:10092000000153DD00D0ADEF04F01A6A040110514C |
:100930007F0B000A000107E0010A07E0030A07E055 |
:10094000230A07E008D0ABD608D0FCD606D0B5D72E |
:1009500004D0E3D702D039DD00D0CCEF05F05C50F5 |
:10096000080DF350626BE96E040E6225EA6EEFCF5C |
:100970005EF05D50020806E15EAC02D05D6A02D016 |
:10098000010E5D6E5D50030813E1840E5E6E5C50D7 |
:10099000080DF350626B616F040E6127000E622335 |
:1009A00061C0E9FF040E6225EA6E840EEF6E07D087 |
:1009B0005D2C03D0C80E5E6E02D0880E5E6ED8909D |
:1009C0005C34036A8FEC00F00900F5CF03F05F6E32 |
:1009D00003C060F05C50080DF350626B616F010E54 |
:1009E0006125016E000E6221036E01C0E9FF040E55 |
:1009F0000324EA6E5FC0EFFF60B15E8060B35E8289 |
:100A00005C50080DF350626BE96E040E6225EA6ECD |
:100A10005EC0EFFF000C036A6151700FE96E0F0EAC |
:100A20000320EA6EEF5212E06151080DF350636B40 |
:100A3000626F040E6227000E632362C0E9FF040E9A |
:100A40006325EA6EEFCF62F062AF02D0000E01D0F4 |
:100A5000010E016E000C5CC061F0DDDF015262E04E |
:100A60005C50080DF350626B616F040E6127000E3D |
:100A70006223010E6125016E000E6221036E01C02A |
:100A8000E9FF040E0324EA6E5DC0EFFF5F50020829 |
:100A900017E15C50080DF350626B616F040E612723 |
:100AA000000E622361C0E9FF040E6225EA6EEFCFFB |
:100AB00060F060AD02D05F6A02D0010E5F6E13D0AD |
:100AC0005F50040810E15C50080DF350626BE96E52 |
:100AD000040E6225EA6EEFCF60F060AD03D0010E28 |
:100AE0005F6E01D05F6A5F2C03D0C80E606F02D0CA |
:100AF000880E606F5EB060815EB260835C50080DEE |
:100B0000F350626B616F040E6127000E622361C0B7 |
:100B1000E9FF040E6225EA6E60C0EFFF010E016E70 |
:100B200003D000D0000E016E000C5C5200E1000CFE |
:100B30005DC06EFF5D5203E0040E1F6E02D0020E18 |
:100B40001F6EA8EF05F01B6A1A6A21C05DF0F0D78E |
:100B5000B4EF05F05C5208E11A2C02D039DC04D065 |
:100B60001A50020801E1EFD7000C1E305A6E5A32BB |
:100B70005A321F0E5A161E5242E1040100513C0B1C |
:100B80005B6E430E00175B5034081EE10451800B6E |
:100B900001E0046B0001C9D66D98203C05D05C6A69 |
:100BA000030E5D6EDCDE0ED05C6A020E5D6ED7DE7B |
:100BB0002050FE0807E05C6A5E6A20C05DF0040E0B |
:100BC0005F6E49DF19D004015B50040816E15C6ACE |
:100BD0000001ABDF5C6A020E5D6EC1DE2050FE08D4 |
:100BE0000AE0203C01D007D05C6A5E6A20C05DF05C |
:100BF000010E5F6E30DF00D004015CD000011E509A |
:100C0000040814E1430E04010417FF0E206E5C6A11 |
:100C10000001A0DF203C01D008D05C6A5E6A20C0E1 |
:100C20005DF0020E5F6E17DF00D043D01EB41BD004 |
:100C30005A50080DF3505D6A016E040E5D24036E78 |
:100C40005A50080DF3505F6AE96E040E5F24EA6E95 |
:100C5000EF50430B03C0EAFF01C0E9FFEF6E5AC03B |
:100C60005CF063DF26D05A50080DF3505D6A5C6E6D |
:100C7000040E5C26000E5D225CC001F0040E5D24B3 |
:100C8000036E5A50080DF3505F6A5E6E040E5E26C6 |
:100C9000000E5F225EC0E9FF040E5F24EA6EEF5093 |
:100CA000430B03C0EAFF5CC0E9FFEF6E5AC05CF083 |
:100CB00051DF0401000194EF06F0A19A1F5201E1F7 |
:100CC00039D0685237E068A404D069A402D03DEF5F |
:100CD00001F06DA201D02ED068AA04D069AA02D07A |
:100CE00055EF01F068A204D069A202D05CEF01F0D8 |
:100CF00068A004D069A002D0C5EF01F068A804D0B4 |
:100D000069A802D0DAEF01F068AC04D069AC02D077 |
:100D1000DFEF01F0596A68A608D069A606D06CCF4B |
:100D20001EF002EC00F021D701D004D05950592A0E |
:100D30000308F1E230EF00F06D6A696A080E6F6E29 |
:100D400094503009946E1F6A196AF2BE198EF29E91 |
:100D5000B3EC01F019BEF28E000CEEDFDBEF06F013 |
:100D6000196AF2BE198EF29EB3EC01F019BEF28E32 |
:100D70006D6A140E6F6E696A6D86010E1F6EC7EF85 |
:100D800006F0958883A804D06DB601D0E9D703D0CA |
:100D90006DA601D0D1DF1F2C0BD06DBA09D0686AC7 |
:100DA000696AA08AC00EF212110E696E020E1F6EE1 |
:100DB000DCEF06F0D2D7E5D71F500208FCE173EF55 |
:100DC00009F01B50016E74EF09F0036A4750700F71 |
:100DD000E96E0F0E0320EA6EEF520DE04750080D4A |
:100DE000F350496A486EE96E040E4924EA6EEFCF6B |
:100DF00048F048AE02D0000E01D0010E016EBAEFED |
:100E000007F04C50080DF350576A566E020E5624E8 |
:100E1000016E000E5720036E01C0E9FF040E03248B |
:100E2000EA6EECCF03F0ED52EFCF51F003C052F079 |
:100E30004C50080DF350576A566E010E5624016E41 |
:100E4000000E5720036E01C0E9FF040E0324EA6E72 |
:100E5000EF50036A546E03C055F04C50080DF35028 |
:100E6000576AE96E040E5724EA6EEFCF53F053B081 |
:100E7000558053B255825550505C08E303E14F5002 |
:100E8000545C04E255C050F054C04FF04EC0EAFF2D |
:100E90004DC0E9FF52C0E2FF51C0E1FF50C002F077 |
:100EA0004FC001F0015202E0022A02D0025206E0D5 |
:100EB000E6CFEEFF012EFCD7022EFAD74FC001F08D |
:100EC00050C002F06FEF07F047C04CF049C04EF041 |
:100ED00048C04DF04BC050F04AC04FF092D702C00E |
:100EE0004BF001C04AF0196AF2BE198EF29E47C05B |
:100EF0005CF0020E5D6E33DD19BEF28E4AC001F069 |
:100F00004BC002F0C7EF07F0EA6A470EE96EEF50F8 |
:100F10000EE0070E016E006A002EFED7012EFBD7F1 |
:100F2000C70E006E002EFED70000EF2EF2D7000C89 |
:100F30003E6A3D6AD8903634036A8FEC00F00900AF |
:100F4000F5CF03F0436E03C044F044503A5C09E32C |
:100F500003E13950435C05E244C046F043C045F02C |
:100F600004D03AC046F039C045F0406A3F6A36C006 |
:100F700047F02BD701521DE036C047F038C049F08A |
:100F800037C048F046C04BF045C04AF09DD702C07C |
:100F900042F001C041F041503726425038224150C2 |
:100FA000395E42503A5A41503D2642503E220DD0C1 |
:100FB00006D03F2AD8B4402A010E476EA5DF3B5029 |
:100FC0003F5CD5E13C50405CD2E14350415C0CE1D8 |
:100FD0004450425C09E13B503F5C03E13C50405CC3 |
:100FE00003E039503A10B1E13DC001F03EC002F0DB |
:100FF00081EF09F0536A546A010E556EDA6AD96AB4 |
:10100000586A4B0E576EEA6A4F0EE96E58C0E2FFFF |
:1010100057C0E1FF55C056F0D890E550EE02F350AE |
:101020005322F4505422562EF7D753C0DEFF54C03B |
:1010300053F0546AD8B0542A572AD8B4582A552A9B |
:1010400055500508E0E1000C196AF2BE198EF29EB7 |
:1010500049C061F0E0DC19BEF28E015245E0495012 |
:10106000080DF350526A516E040E5126000E5222A2 |
:10107000020E5124016E000E5220036E01C0E9FFE2 |
:10108000040E0324EA6EECCF03F0ED52EFCF4FF0E5 |
:1010900003C050F050C0EAFF4FC0E9FF4BC0E2FF71 |
:1010A0004AC0E1FF4DC002F04CC001F0015202E025 |
:1010B000022A02D0025206E0E6CFEEFF012EFCD754 |
:1010C000022EFAD7196AF2BE198EF29E49C05CF060 |
:1010D0004DC05EF04CC05DF04EC05FF0BCDC19BE90 |
:1010E000F28E015003D000D0000E016E000C3D6A5C |
:1010F0003C6AD8903634036A77EC00F00900F5CFEB |
:1011000003F0416E03C042F03D503A5CD8A069D074 |
:1011100003E139503C5C65E24A6A496A486A3BC06F |
:1011200047F04AC04EF049C04DF048C04CF03BC0BB |
:101130004BF0526A516A030E506EE80E4F6E5ADF42 |
:1011400003C046F002C045F001C044F000C043F0C7 |
:101150003C50395C476E3D503A58486E4250485CAE |
:1011600009E303E14750415C05E242C040F041C061 |
:101170003FF006D03C50395C3F6E3D503A58406ECF |
:101180003C503724476E3D503820486E36C049F0F9 |
:101190004B6E47C04AF040C04DF03FC04CF0020ECD |
:1011A0004E6E52DF3E9001B03E803EB00BD000D07C |
:1011B00000D000D0FF0E4326D8A04426D8A0452654 |
:1011C000D8A046263EB008D04352DAE14452D8E1D6 |
:1011D0004552D6E14652D4E141503C2642503D2290 |
:1011E00093D739503C5C42E13A503D5C3FE14A6A5A |
:1011F000496A486A3BC047F04AC04EF049C04DF0CA |
:1012000048C04CF03BC04BF0526A516A030E506E1E |
:10121000E80E4F6EEFDE03C046F002C045F001C09D |
:1012200044F000C043F036C049F04B6A4A6A4D6A48 |
:101230004C6A020E4E6E08DF3E9001B03E803EB01A |
:101240000BD000D000D000D0FF0E4326D8A04426FB |
:10125000D8A04526D8A046263EB008D04352E3E1A8 |
:101260004452E1E14552DFE14652DDE1000E3EB07D |
:10127000010E016E000CF86AD09E078EEA6AE96AD8 |
:101280001F6A236A0A0E256E050E266E316AC1504A |
:10129000C00B0F09C16E070EB46E2790286AC150AB |
:1012A000C00B0F09C16EC090C092C094C09EC28096 |
:1012B0009698D190800ED56ECD6A000ECA6E000E43 |
:1012C000CB6EB16A9484BD6AB76AB66A070EB46E13 |
:1012D0009250926E130E006E002EFED700D0B450C6 |
:1012E000A19CB56A67D56DD501525CE0366A386A53 |
:1012F000290E376E3A6A080E396E3C6A640E3B6EF0 |
:1013000017D62A500FE0010A1CE0030A25E0060A5E |
:1013100037E0010A35E0030A33E0010A31E0040A4C |
:1013200030E03CD02BC032F02CC033F0366A386A43 |
:10133000320E376E3A6A020E396E320E3B6ED7DECF |
:101340002ED0366A386A010E376E3A6A200E396E30 |
:10135000320E3B6ECCDE23D0376A2B0EE96E37C0DF |
:10136000EAFF256AEFB0252A255202E1010E256E1B |
:10137000D8902530266E265202E1010E266E0FD03F |
:101380000ED031C032F0366A386A320E376E3A6AA1 |
:10139000010E396E320E3B6EAADE01D000D00A0E6D |
:0813A000476EB2DDA0D7030087 |
:020000040030CA |
:0E0000003CCE390E0085A1000FC00FE00F406E |
:00000001FF |
;PIC18F4550 |
;CRC=6CBE CREATED="29-IX-13 00:37" |
//Designs/Tools/I2C-PIC-USB/SW/PIC18F4550/main.pjt |
---|
0,0 → 1,30 |
[PROJECT] |
Target=Z:\home\kaklik\svnMLAB\Designs\Tools\I2C-PIC-USB\SW\PIC18F4550\main.hex |
Development_Mode= |
Processor_Text=PIC18F4550 |
ToolSuite=CCS |
Processor=0x4550 |
[Z:\home\kaklik\svnMLAB\Designs\Tools\I2C-PIC-USB\SW\PIC18F4550\main] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=Z:\home\kaklik\svnMLAB\Designs\Tools\I2C-PIC-USB\SW\PIC18F4550\main.c |
[Windows] |
0=0000 %S 0 0 796 451 3 0 |
[Units] |
Link=0 |
Count=1 |
1=Z:\home\kaklik\svnMLAB\Designs\Tools\I2C-PIC-USB\SW\PIC18F4550\main |
[Opened Files] |
1=main.c |
2= |
3=C:\Program Files (x86)\PICC\devices\18F4550.h |
4=C:\Program Files (x86)\PICC\drivers\pic18_usb.h |
5=C:\Program Files (x86)\PICC\drivers\usb_hw_layer.h |
6=usbconfig.h |
7=C:\Program Files (x86)\PICC\drivers\usb.h |
8= |
//Designs/Tools/I2C-PIC-USB/SW/PIC18F4550/usbconfig.h |
---|
0,0 → 1,293 |
/////////////////////////////////////////////////////////////////////////// |
/// usbconfig.h //// |
//// //// |
//// An example set of device / configuration descriptors. //// |
//// This set works exclusively with ex_usb_mouse.c example. //// |
//// //// |
/////////////////////////////////////////////////////////////////////////// |
//// //// |
//// Version History: //// |
//// //// |
//// March 5th, 2009: //// |
//// Cleanup for Wizard. //// |
//// PIC24 Initial release. //// |
//// //// |
//// June 20th, 2005: //// |
//// Initial 18Fxx5x release //// |
//// //// |
//// March 21st, 2005: //// |
//// EP 0x81 now uses USB_EP1_TX_SIZE to define max packet size, to //// |
//// make it easier for dynamically changed code. //// |
//// EP 0x81 will now use 1ms polling interval if using a full speed //// |
//// device. //// |
//// //// |
//// June 24th, 2002: Cleanup //// |
//// //// |
/////////////////////////////////////////////////////////////////////////// |
//// (C) Copyright 1996,2005 Custom Computer Services //// |
//// This source code may only be used by licensed users of the CCS //// |
//// C compiler. This source code may only be distributed to other //// |
//// licensed users of the CCS C compiler. No other use, //// |
//// reproduction or distribution is permitted without written //// |
//// permission. Derivative programs created using this software //// |
//// in object code form are not restricted in any way. //// |
/////////////////////////////////////////////////////////////////////////// |
#IFNDEF __USB_DESCRIPTORS__ |
#DEFINE __USB_DESCRIPTORS__ |
///////// config options, although it's best to leave alone for this demo ///// |
#define USB_CONFIG_PID 0xc631 |
#define USB_CONFIG_VID 0x0403 |
#define USB_CONFIG_BUS_POWER 100 //100mA (range is 0..500) |
#define USB_CONFIG_VERSION 0x0205 //01.00 //range is 00.00 to 99.99 |
//////// end config /////////////////////////////////////////////////////////// |
#DEFINE USB_HID_DEVICE TRUE //Tells the CCS PIC USB firmware |
//to include HID handling code. |
//turn on EP1 for IN interrupt transfers. (IN = PIC -> PC) |
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT |
#define USB_EP1_TX_SIZE 8 //max packet size of this endpoint |
#include <usb.h> |
////////////////////////////////////////////////////////////////// |
/// |
/// HID Report. Tells HID driver how to handle and deal with |
/// received data. HID Reports can be extremely complex, |
/// see HID specifcation for help on writing your own. |
/// |
/// This examples configures HID driver to take received data |
/// as mouse x, y and button data. |
/// |
////////////////////////////////////////////////////////////////// |
const char USB_CLASS_SPECIFIC_DESC[] = |
{ |
0x05, 0x01, // usage page (generic desktop Choose the usage page "mouse" is on |
0x09, 0x02, // usage (mouse) Device is a mouse |
0xA1, 0x01, // collection (application) This collection encompasses the report format |
0x09, 0x01, // usage (pointer) Choose the key code usage page |
0xA1, 0x00, // collection (physical) Physical collection |
0x05, 0x09, // usage page (buttons) Choose the button usage page |
0x19, 0x01, // usage minimum (1) There are three buttons |
0x29, 0x03, // usage maximum (3) |
0x15, 0x00, // logical minimum (0) Each button is represented by one bit |
0x25, 0x01, // logical maximum (1) |
0x95, 0x03, // report count (3) Three reports, one bit each |
0x75, 0x01, // report size (1) |
0x81, 0x02, // input (data, variable, absolute) Defined bits above are data bits |
0x95, 0x01, // report count (1) One report, five bits in length |
0x75, 0x05, // report size (5) |
0x81, 0x01, // input (constant) Bit stuff to fill byte |
0x05, 0x01, // usage page (generic desktop) Choose the usage pare X and Y are on |
0x09, 0x30, // usage (X) X direction of pointer |
0x09, 0x31, // usage (Y) Y direction of pointer |
0x09, 0x38 // usage (wheel) |
0x15, 0x81, // logical minimum (-127) Range of report data is -127 to 127 |
0x25, 0x7F, // logical maximum (127) |
0x75, 0x08, // report size (8) Two reports, eight bits each |
0x95, 0x03, // report count (3) |
0x81, 0x06, // input (data, variable, absolute) Defined bits above are data bits |
0xC0, // end collection End physical collection |
0xC0 // end collection End application collection |
}; |
//if a class has an extra descriptor not part of the config descriptor, |
// this lookup table defines where to look for it in the const |
// USB_CLASS_SPECIFIC_DESC[] array. |
//first element is the config number (if your device has more than one config) |
//second element is which interface number |
//set element to 0xFFFF if this config/interface combo doesn't exist |
const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP[USB_NUM_CONFIGURATIONS][1] = |
{ |
//config 1 |
//interface 0 |
0 |
}; |
//if a class has an extra descriptor not part of the config descriptor, |
// this lookup table defines the size of that descriptor. |
//first element is the config number (if your device has more than one config) |
//second element is which interface number |
//set element to 0xFFFF if this config/interface combo doesn't exist |
const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[USB_NUM_CONFIGURATIONS][1] = |
{ |
//config 1 |
//interface 0 |
sizeof(USB_CLASS_SPECIFIC_DESC) |
}; |
////////////////////////////////////////////////////////////////// |
/// |
/// start config descriptor |
/// right now we only support one configuration descriptor. |
/// the config, interface, class, and endpoint goes into this array. |
/// |
////////////////////////////////////////////////////////////////// |
#DEFINE USB_TOTAL_CONFIG_LEN 34 //config+interface+class+endpoint |
const char USB_CONFIG_DESC[] = { |
//IN ORDER TO COMPLY WITH WINDOWS HOSTS, THE ORDER OF THIS ARRAY MUST BE: |
// config(s) |
// interface(s) |
// class(es) |
// endpoint(s) |
//config_descriptor for config index 1 |
USB_DESC_CONFIG_LEN, //length of descriptor size ==1 |
USB_DESC_CONFIG_TYPE, //constant CONFIGURATION (CONFIGURATION 0x02) ==2 |
USB_TOTAL_CONFIG_LEN,0, //size of all data returned for this config ==3,4 |
1, //number of interfaces this device supports ==5 |
0x01, //identifier for this configuration. (IF we had more than one configurations) ==6 |
0x00, //index of string descriptor for this configuration ==7 |
#if USB_CONFIG_BUS_POWER |
0xC0, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1 ==8 |
#else |
0x80, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1 ==8 |
#endif |
USB_CONFIG_BUS_POWER/2, //maximum bus power required (maximum milliamperes/2) (0x32 = 100mA) ==9 |
//interface descriptor 1 |
USB_DESC_INTERFACE_LEN, //length of descriptor =10 |
USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04) =11 |
0x00, //number defining this interface (IF we had more than one interface) ==12 |
0x00, //alternate setting ==13 |
1, //number of endpoints, except 0 ==14 |
0x03, //class code, 03 = HID ==15 |
0x01, //subclass code //boot ==16 |
0x02, //protocol code ==17 |
0x00, //index of string descriptor for interface ==18 |
//class descriptor 1 (HID) |
USB_DESC_CLASS_LEN, //length of descriptor ==19 |
USB_DESC_CLASS_TYPE, //dscriptor type (0x21 == HID) ==20 |
0x00,0x01, //hid class release number (1.0) (try 1.10) ==21,22 |
0x00, //localized country code (0 = none) ==23 |
0x01, //number of hid class descrptors that follow (1) ==24 |
0x22, //report descriptor type (0x22 == HID) ==25 |
USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[0][0], 0x00, //length of report descriptor ==26,27 |
//endpoint descriptor |
USB_DESC_ENDPOINT_LEN, //length of descriptor ==28 |
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05) ==29 |
0x81, //endpoint number and direction (0x81 = EP1 IN) ==30 |
USB_ENDPOINT_TYPE_INTERRUPT, //transfer type supported (0x03 is interrupt) ==31 |
USB_EP1_TX_SIZE,0x00, //maximum packet size supported ==32,33 |
10 //polling interval, in ms. (cant be smaller than 10 for slow speed devices) ==34 |
}; |
//****** BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ******** |
//since we can't make pointers to constants in certain pic16s, this is an offset table to find |
// a specific descriptor in the above table. |
//NOTE: DO TO A LIMITATION OF THE CCS CODE, ALL HID INTERFACES MUST START AT 0 AND BE SEQUENTIAL |
// FOR EXAMPLE, IF YOU HAVE 2 HID INTERFACES THEY MUST BE INTERFACE 0 AND INTERFACE 1 |
#define USB_NUM_HID_INTERFACES 1 |
//the maximum number of interfaces seen on any config |
//for example, if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2 |
#define USB_MAX_NUM_INTERFACES 1 |
//define how many interfaces there are per config. [0] is the first config, etc. |
const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1}; |
//define where to find class descriptors |
//first dimension is the config number |
//second dimension specifies which interface |
//last dimension specifies which class in this interface to get, but most will only have 1 class per interface |
//if a class descriptor is not valid, set the value to 0xFFFF |
const int16 USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_NUM_HID_INTERFACES][1]= |
{ |
//config 1 |
//interface 0 |
//class 1 |
18 |
}; |
#if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN) |
#error USB_TOTAL_CONFIG_LEN not defined correctly |
#endif |
////////////////////////////////////////////////////////////////// |
/// |
/// start device descriptors |
/// |
////////////////////////////////////////////////////////////////// |
const char USB_DEVICE_DESC[] = { |
//starts of with device configuration. only one possible |
USB_DESC_DEVICE_LEN, //the length of this report ==1 |
0x01, //the constant DEVICE (DEVICE 0x01) ==2 |
0x10,0x01, //usb version in bcd (pic167xx is 1.1) ==3,4 |
0xff, //class code ==5 |
0x00, //subclass code ==6 |
0x00, //protocol code ==7 |
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==8 |
USB_CONFIG_VID & 0xFF, ((USB_CONFIG_VID >> 8) & 0xFF), //vendor id ==9, 10 |
USB_CONFIG_PID & 0xFF, ((USB_CONFIG_PID >> 8) & 0xFF), //product id, don't use 0xffff ==11, 12 |
USB_CONFIG_VERSION & 0xFF, ((USB_CONFIG_VERSION >> 8) & 0xFF), //device release number ==13,14 |
0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below) ==15 |
0x02, //index of string descriptor of the product ==16 |
0x00, //index of string descriptor of serial number ==17 |
USB_NUM_CONFIGURATIONS //number of possible configurations ==18 |
}; |
#if (sizeof(USB_DEVICE_DESC) != USB_DESC_DEVICE_LEN) |
#error USB_DESC_DEVICE_LEN not defined correctly |
#endif |
////////////////////////////////////////////////////////////////// |
/// |
/// start string descriptors |
/// String 0 is a special language string, and must be defined. People in U.S.A. can leave this alone. |
/// |
////////////////////////////////////////////////////////////////// |
//the offset of the starting location of each string. offset[0] is the start of string 0, offset[1] is the start of string 1, etc. |
const char USB_STRING_DESC_OFFSET[]={0,4,12}; |
//number of strings you have, including string 0. |
#define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET) |
// Here is where the "CCS" Manufacturer string and "CCS USB Mouse" are stored. |
// Strings are saved as unicode. |
char const USB_STRING_DESC[]={ |
//string 0 |
4, //length of string index |
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) |
0x09,0x04, //Microsoft Defined for US-English |
//string 1 |
8, //length of string index |
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) |
'U',0, |
'S',0, |
'T',0, |
//string 2 |
28, //length of string index |
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) |
'i',0, |
'2',0, |
'c',0, |
'-',0, |
'P',0, |
'I',0, |
'C',0, |
'-',0, |
'U',0, |
'S',0, |
'B',0, |
' ',0, |
' ',0 |
}; |