Hallo,
wollte mir eine Virtuelle Com über USB machen ohne einen FTDI einsetzen
zu müssen und habe mir die CDC Beispielfunktion von Keil unter
Boards\Keil\MCB1700\RL\USB\Device\CDC umgeschrieben.
Senden geht ja mit der USBD_WriteEP funktion gans gut:
1 | NumByte = sprintf(buffer,"Hallo Welt!!!\r\n");
|
2 |
|
3 | while (1) {
|
4 |
|
5 | USBD_WriteEP ((U32)0x82,buffer, NumByte);
|
6 | delay_ms(500);
|
7 | };
|
Nur verstehe ich nicht wie ich ein Interrupt für das Empfangen bekomme!?
Laut Anleitung gibt es die Funktion void USBD_EndPointN(U32 event), also
habe ich in die usbd_LPC17xx.c datei folgende Funktion probiert:
1 | void USBD_EndPoint2(U32 event) {
|
2 |
|
3 | switch(event){
|
4 | case USBD_EVT_IN:
|
5 | usb_rs232_obj.rx_num = USBD_ReadEP ((U32)0x02, usb_rs232_obj.buffer);
|
6 | usb_rs232_obj.rx_set = 1;
|
7 | break;
|
8 | }
|
9 | }//void USBD_EndPoint2(U32 event)
|
Nur leider wird kein interrupt auf die Funktion ausgeführt.
Hat schonmal jemand eine Virtuelle Com mit Keil gemacht und kann mir
weiterhelfen?
Hier mal noch meine einstellungen von der usb_config.c:
1 | #define USBD_CDC_ENABLE 1
|
2 | #define USBD_CDC_EP_INTIN 1
|
3 | #define USBD_CDC_WMAXPACKETSIZE 16
|
4 | #define USBD_CDC_BINTERVAL 2
|
5 | #define USBD_CDC_HS_ENABLE 0
|
6 | #define USBD_CDC_HS_WMAXPACKETSIZE 16
|
7 | #define USBD_CDC_HS_BINTERVAL 2
|
8 | #define USBD_CDC_EP_BULKIN 2
|
9 | #define USBD_CDC_EP_BULKOUT 2
|
10 | #define USBD_CDC_WMAXPACKETSIZE1 512
|
11 | #define USBD_CDC_HS_ENABLE1 0
|
12 | #define USBD_CDC_HS_WMAXPACKETSIZE1 64
|
13 | #define USBD_CDC_HS_BINTERVAL1 0
|
14 | #define USBD_CDC_CIF_STRDESC L"USB_CDC"
|
15 | #define USBD_CDC_DIF_STRDESC L"USB_CDC1"
|
16 | #define USBD_CDC_BUFSIZE 64
|
17 | #define USBD_CDC_OUTBUFSIZE 128
|
Grüße,
Daniel