Skip to content

Commit 8ab4033

Browse files
committed
add ch559 support
1 parent 36d05a5 commit 8ab4033

13 files changed

Lines changed: 2549 additions & 31 deletions

File tree

ch55xduino/ch55x/boards.txt

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,50 @@ ch551.upload.speed=1
9494

9595
##############################################################
9696

97-
ch549.name=CH549 Board
97+
ch559.name=CH559 Board
98+
ch559.upload.tool=vnproch55x_usb
99+
ch559.upload.protocol=ch55x2_3_1
100+
#CH559 has 60K flash
101+
ch559.upload.maximum_size=61440
102+
ch559.build.mcu=mcs51
103+
ch559.menu.clock.24internal=24 MHz (internal)
104+
ch559.menu.clock.24internal.build.f_cpu=24000000L
105+
ch559.menu.clock.16external=16 MHz (internal)
106+
ch559.menu.clock.16external.build.f_cpu=16000000L
107+
ch559.menu.clock.56internal=56 MHz (internal)
108+
ch559.menu.clock.56internal.build.f_cpu=56000000L
109+
ch559.build.board=ch55x
110+
ch559.build.core=ch55xduino
111+
ch559.build.variant=ch559
112+
ch559.build.mcu=CH559
113+
114+
ch559.upload.use_1200bps_touch=true
115+
ch559.upload.wait_for_upload_port=false
116+
117+
## USB Memory Settings
118+
## ----------------------------------------------
119+
ch559.menu.usb_settings.usbcdc=Default CDC
120+
ch559.menu.usb_settings.usbcdc.upload.maximum_data_size=5996
121+
ch559.menu.usb_settings.usbcdc.upload.xdata_location=148
122+
ch559.menu.usb_settings.usbcdc.build.extra_flags=--model-small -DEP0_ADDR=0 -DEP1_ADDR=10 -DEP2_ADDR=20
123+
## ----
124+
ch559.menu.usb_settings.user148=USER CODE w/ 148B USB ram
125+
ch559.menu.usb_settings.user148.upload.maximum_data_size=5996
126+
ch559.menu.usb_settings.user148.upload.xdata_location=148
127+
ch559.menu.usb_settings.user148.build.extra_flags=--model-small -DUSER_USB_RAM=148
128+
## ----
129+
ch559.menu.usb_settings.user0=USER CODE w/ 0B USB ram
130+
ch559.menu.usb_settings.user0.upload.maximum_data_size=6144
131+
ch559.menu.usb_settings.user0.upload.xdata_location=0
132+
ch559.menu.usb_settings.user0.build.extra_flags=--model-small -DUSER_USB_RAM=0
133+
134+
# meaningless variables just to keep the makefile happy
135+
136+
ch559.upload.speed=1
137+
138+
##############################################################
139+
140+
ch549.name=CH549 (experimental)
98141
ch549.upload.protocol=ch55x2_3_1
99142
ch549.upload.maximum_size=61439
100143
ch549.build.mcu=mcs51

ch55xduino/ch55x/cores/ch55xduino/Arduino.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,11 @@ void init(void);
169169
void pinMode(uint8_t pin, __xdata uint8_t mode);
170170
void digitalWrite(uint8_t pin, __xdata uint8_t val);
171171
uint8_t digitalRead(uint8_t pin);
172+
#if defined(CH559)
173+
uint16_t analogRead(uint8_t pin);
174+
#else
172175
uint8_t analogRead(uint8_t pin);
176+
#endif
173177
void analogWrite(uint8_t pin, __xdata uint16_t val);
174178

175179
uint32_t millis(void);

ch55xduino/ch55x/cores/ch55xduino/USBCDC.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,21 @@ void setControlLineStateHandler(){
5959
delayMicroseconds(50000);
6060

6161
__asm__ ("lcall #0x3800"); //Jump to bootloader code
62+
63+
while(1);
64+
#elif defined(CH559) && (BOOT_LOAD_ADDR == 0xF400)
65+
USB_CTRL = 0;
66+
EA = 0; //Disabling all interrupts is required.
67+
delayMicroseconds(50000);
68+
delayMicroseconds(50000);
69+
70+
__asm__ ("lcall #0xF400"); //Jump to bootloader code
71+
72+
while(1);
6273
#elif BOOT_LOAD_ADDR == 0xF400
6374
//todo: not working well, CH549 doesn't support direct jump
6475
#endif
6576

66-
while(1);
6777
}
6878

6979
}

ch55xduino/ch55x/cores/ch55xduino/USBhandler.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,13 @@ void USBDeviceCfg()
479479
// UDEV_CTRL |= bUD_LOW_SPEED; //Run for 1.5M
480480
USB_CTRL &= ~bUC_LOW_SPEED;
481481
UDEV_CTRL &= ~bUD_LOW_SPEED; //Select full speed 12M mode, default mode
482+
483+
#if defined(CH551) || defined(CH552) || defined(CH549)
482484
UDEV_CTRL = bUD_PD_DIS; // Disable DP/DM pull-down resistor
485+
#endif
486+
#if defined(CH559)
487+
UDEV_CTRL = bUD_DP_PD_DIS; // Disable DP/DM pull-down resistor
488+
#endif
483489
UDEV_CTRL |= bUD_PORT_EN; //Enable physical port
484490
}
485491

@@ -495,13 +501,24 @@ void USBDeviceIntCfg()
495501

496502
void USBDeviceEndPointCfg()
497503
{
504+
#if defined(CH559)
505+
//CH559 use differend endianness for these registers
506+
UEP0_DMA_H = ((uint16_t)Ep0Buffer >> 8); //Endpoint 0 data transfer address
507+
UEP0_DMA_L = ((uint16_t)Ep0Buffer >> 0); //Endpoint 0 data transfer address
508+
UEP1_DMA_H = ((uint16_t)Ep1Buffer >> 8); //Endpoint 1 data transfer address
509+
UEP1_DMA_L = ((uint16_t)Ep1Buffer >> 0); //Endpoint 1 data transfer address
510+
UEP2_DMA_H = ((uint16_t)Ep2Buffer >> 8); //Endpoint 2 data transfer address
511+
UEP2_DMA_L = ((uint16_t)Ep2Buffer >> 0); //Endpoint 2 data transfer address
512+
#else
513+
UEP0_DMA = (uint16_t) Ep0Buffer; //Endpoint 0 data transfer address
498514
UEP1_DMA = (uint16_t) Ep1Buffer; //Endpoint 1 data transfer address
499515
UEP2_DMA = (uint16_t) Ep2Buffer; //Endpoint 2 data transfer address
516+
#endif
517+
500518
UEP2_3_MOD = 0x0C; //Endpoint2 double buffer
501519
UEP1_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK; //Endpoint 1 automatically flips the sync flag, and IN transaction returns NAK
502520
UEP2_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK; //Endpoint 2 automatically flips the sync flag, IN transaction returns NAK, OUT returns ACK
503521

504-
UEP0_DMA = (uint16_t) Ep0Buffer; //Endpoint 0 data transfer address
505522
UEP4_1_MOD = 0X40; //endpoint1 TX enable
506523
UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; //Manual flip, OUT transaction returns ACK, IN transaction returns NAK
507524
}

0 commit comments

Comments
 (0)