Skip to content

Commit 568427d

Browse files
author
nulllab
committed
porting sdcc build system
1 parent 9786837 commit 568427d

19 files changed

+1358
-146
lines changed

boards.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
menu.cpu=Processor
22
menu.clock_source=Clock source(MHz)
33
menu.cpu_speed=CPU Frequency(MHz)
4-
menu.mode=Mode
4+
menu.mode=Memory Model
55
menu.intlib=Link libs
66
menu.floatlib=float lib
77
menu.userlib=user lib
@@ -17,12 +17,22 @@ stc89c52_duino.upload.maximum_idata_size=256
1717
stc89c52_duino.upload.maximum_xdata_size=8192
1818

1919
stc89c52_duino.build.core=STC89
20+
stc89c52_duino.build.extlib=-llibint -lliblong
2021
stc89c52_duino.build.variant=STC89
2122
stc89c52_duino.build.board=stc89c52_duino
2223
stc89c52_duino.build.mcu=STC89C52RC
2324
stc89c52_duino.build.clock_source=16M
2425
stc89c52_duino.build.f_cpu=16000000L
2526

27+
stc89c52_duino.menu.mode.large=large
28+
stc89c52_duino.menu.mode.large.build.stdlib=large
29+
stc89c52_duino.menu.mode.small=small
30+
stc89c52_duino.menu.mode.small.build.stdlib=small
31+
stc89c52_duino.menu.mode.medium=medium
32+
stc89c52_duino.menu.mode.medium.build.stdlib=medium
33+
stc89c52_duino.menu.mode.huge=huge
34+
stc89c52_duino.menu.mode.huge.build.stdlib=huge
35+
2636
########################## STC8F ####################################
2737
stc8.name=STC8A/G/H/F
2838

cores/STC89/Arduino.h

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,23 @@
1717
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1818
1919
Modified 2 February 2018 for MSC51 by huaweiwx
20+
Modified 2 February 2018 for stc89c52 by nulllab-jun
2021
*/
2122

2223
#ifndef Arduino_h
2324
#define Arduino_h
2425

2526
#include <stdio.h>
2627
#include <stdlib.h>
28+
#include <stdbool.h>
29+
#include <stdint.h>
2730
#include <string.h>
2831
#include <math.h>
29-
#include "utils/compatible.h"
30-
#include "xmacro.h"
31-
#include "mcu.h"
32+
//#include "utils/compatible.h"
33+
//#include "xmacro.h"
34+
#include "bsp/STC89C5xRC.h"
35+
#include <compiler.h>
3236
#include "pins_arduino.h"
33-
#include "bsp/bsp.h"
3437

3538
// FIXME: workarounds for missing features or unimplemented functions
3639
// cancel out the PROGMEM attribute - used only for atmel CPUs
@@ -103,8 +106,8 @@ void yield(void);
103106
#define degrees(rad) ((rad)*RAD_TO_DEG)
104107
#define sq(x) ((x)*(x))
105108

106-
#define interrupts() sei()
107-
#define noInterrupts() cli()
109+
#define interrupts() EA = 1
110+
#define noInterrupts() EA = 0
108111

109112
#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
110113
#define clockCyclesPerMillisecond() ( F_CPU / 1000L )
@@ -158,9 +161,6 @@ void yield(void);
158161
#define END_CRITICAL
159162
*/
160163

161-
162-
163-
164164
// #define bit(b) (1UL << (b)) sdcc bit is __bit keywords
165165

166166
//typedef bool boolean;
@@ -175,19 +175,19 @@ void serialEvent(void); // weak
175175

176176
#include "wiring_digital.h"
177177

178-
int analogRead(uint8_t pin);
179-
void analogReference(uint8_t mode);
180-
void analogWrite(uint8_t pin, int val);
178+
int analogRead(uint8_t);
179+
void analogReference(uint8_t);
180+
void analogWrite(uint8_t, int);
181181

182182
#include "wiring.h"
183183

184-
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
185-
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout);
184+
unsigned long pulseIn(uint8_t, uint8_t, unsigned long);
185+
unsigned long pulseInLong(uint8_t, uint8_t, unsigned long);
186186

187-
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
188-
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
187+
//void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
188+
//uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
189189

190-
void attachInterrupt(uint8_t, void (*)(void), int mode);
190+
void attachInterrupt(uint8_t, void (*)(void), int);
191191
void detachInterrupt(uint8_t);
192192

193193
void setup(void);
@@ -216,6 +216,11 @@ void loop(void);
216216

217217
#define NOT_A_PIN 0xff
218218
#define NOT_A_PORT 0xff
219+
#define ARDUINO_PINMASK 0x08
220+
#define ARDUINO_PORTMASK 0x80
221+
#define NOT_A_PORTPIN(x) ((x)&(ARDUINO_PORTMASK|ARDUINO_PINMASK))
222+
#define IS_A_PIN(x) !NOT_A_PORTPIN(x)
223+
219224

220225
#define NOT_AN_INTERRUPT -1
221226

cores/STC89/HardwareSerial.c

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,14 @@
2525
Modified 15 December 2016 by Michael Mayer
2626
2727
Modified 2 February 2018 for mcs51 by huaweiwx
28+
Review 2021 for stc89c52rc by nulllab-jun
2829
*/
2930

3031
#include "Arduino.h"
31-
32+
#include "bsp/STC89C5xRC.h"
33+
#include "bsp/mcu.h"
34+
#include "bsp/compatible.h"
35+
#define MENU_SERIAL 1
3236

3337
// private data //////////////////////////////////////////////////////////////
3438

@@ -52,9 +56,19 @@ typedef struct {
5256
} RINGBUF_TypeDef;
5357
#endif
5458

55-
extern void uart_init0(unsigned long baud);
59+
/*如果uart工作于模式0或模式2,此时可以不占用定时器*/
60+
void uart_init0(unsigned long baud)
61+
{
62+
SCON = 0x50; //8-bit variable UART
63+
TMOD = 0x20; //Set Timer1 as 8-bit auto reload mode
64+
TH1 = TL1 = -(F_CPU/12/32/baud); //Set auto-reload vaule
65+
TR1 = 1; //Timer1 start run
66+
ES = 1; //Enable UART interrupt
67+
EA = 1; //Open master interrupt switch
68+
}
69+
//extern void uart_init0(unsigned long baud);
5670

57-
static XDATA(RINGBUF_TypeDef,rxBuf);// = { { 0 }, 0, 0};
71+
static XDATA(RINGBUF_TypeDef, rxBuf);// = { { 0 }, 0, 0};
5872
static bool initialized; //=0 internal status. Returned on HardwareSerial()
5973

6074
// private functions ////////////////////////////////////////////////////////
@@ -83,7 +97,7 @@ static void storeChar(uint8_t c, RINGBUF_TypeDef *buf)
8397

8498
#if (MENU_SERIAL == 1)
8599
#define InitialUARTx(x) \
86-
attachInterrupt(UART_IRQn,UART_IRQHandler,0); \
100+
attachInterrupt(UART_IRQn, UART_IRQHandler, 0); \
87101
uart_init0(x)
88102

89103

@@ -146,7 +160,7 @@ void HardwareSerial_end(void)
146160

147161
int HardwareSerial_available(void)
148162
{
149-
unsigned int rtn;
163+
unsigned int rtn;
150164
noInterrupts();
151165
rtn = (rxBuf.size + rxBuf.head - rxBuf.tail) % rxBuf.size;
152166
interrupts();
@@ -155,7 +169,7 @@ int HardwareSerial_available(void)
155169

156170
int HardwareSerial_peek(void)
157171
{
158-
int rtn;
172+
int rtn;
159173
noInterrupts();
160174
if (rxBuf.head == rxBuf.tail) {
161175
rtn = -1;
@@ -168,7 +182,7 @@ int HardwareSerial_peek(void)
168182

169183
int HardwareSerial_read(void)
170184
{
171-
int rtn;
185+
int rtn;
172186
noInterrupts();
173187
if (rxBuf.head == rxBuf.tail) {
174188
rtn = -1;

cores/STC89/WInterrupts.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
// for stc89
22

33
#include "Arduino.h"
4-
5-
4+
#include <compiler.h>
5+
#include "bsp/compatible.h"
66
#define INTERRUPT_NUMS 6
77

8-
XDATA(voidFuncPtr,callback[INTERRUPT_NUMS]) = {NULL};
8+
typedef void (*voidFuncPtr)(void);
9+
10+
XDATA(voidFuncPtr, callback[INTERRUPT_NUMS]) = {NULL};
911

10-
#define INTERRUPT_ISR(a,b) INTERRUPT(a,b){if (callback[b]) callback[b]();}
12+
#define INTERRUPT_ISR(a,b) INTERRUPT(a,b){if (callback[b]) callback[b]();}
1113

1214
INTERRUPT_ISR(int0_isr, 0)
1315
INTERRUPT_ISR(timer0_isr, 1)
@@ -18,15 +20,15 @@ INTERRUPT_ISR(timer2_isr, 5)
1820

1921
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)
2022
{
21-
if(interruptNum < INTERRUPT_NUMS) {
22-
(void)mode; /*UNUSED*/
23+
if (interruptNum < INTERRUPT_NUMS) {
24+
(void)mode; /*UNUSED*/
2325
callback[interruptNum] = userFunc;
2426
}
2527
}
2628

2729
void detachInterrupt(uint8_t interruptNum)
2830
{
29-
if(interruptNum < INTERRUPT_NUMS) {
31+
if (interruptNum < INTERRUPT_NUMS) {
3032
callback[interruptNum] = NULL;
3133
}
3234
}

0 commit comments

Comments
 (0)