2222 Modified 28 September 2010 by Mark Sproul
2323*/
2424
25- #define ARDUINO_MAIN
2625#include "wiring_private.h"
2726#include "pins_arduino.h"
2827
3534 */
3635typedef unsigned char * uc_p ;
3736
38- /* timer capture/compare mode register to control PWM mode */
37+ extern const uc_p ccmrx [NUM_TIMERS ];
38+ extern const uc_p ccerx [NUM_TIMERS ];
39+ extern const unsigned char DISABLE_TIMER_OUTP_MASK [NUM_TIMERS ];
40+ void turnOffPWM (uint8_t timer );
41+
42+
43+ /**
44+ * timer capture/compare mode register to control PWM mode
45+ */
3946const uc_p ccmrx [NUM_TIMERS ]= {
4047#ifdef NEED_TIMER_11_12
4148 TIM1 -> CCMR1 , /* for TIMER11 */
@@ -110,6 +117,9 @@ const unsigned char DISABLE_TIMER_OUTP_MASK[NUM_TIMERS]={
110117};
111118
112119
120+ /**
121+ * set the input or output mode of a pin
122+ */
113123/* arduino-style pinMode
114124void pinMode(uint8_t pin, uint8_t mode)
115125{
@@ -225,7 +235,11 @@ void pinMode(uint8_t pin, uint8_t mode)
225235 *
226236 * SDCC is really, really not good in optimizing its code.
227237 */
228- static void turnOffPWM (uint8_t timer )
238+
239+ /**
240+ * handle the PWM pins
241+ */
242+ void turnOffPWM (uint8_t timer )
229243{
230244 // Output compare mode = 000: Frozen - The comparison between the output
231245 // compare register TIM1_CCR1 and the counter register TIM1_CNT has no
@@ -237,6 +251,9 @@ static void turnOffPWM(uint8_t timer)
237251}
238252
239253
254+ /**
255+ * set an output value for a pin
256+ */
240257void digitalWrite (uint8_t pin , uint8_t val )
241258{
242259 uint8_t timer = digitalPinToTimer (pin );
@@ -263,6 +280,9 @@ void digitalWrite(uint8_t pin, uint8_t val)
263280 END_CRITICAL
264281}
265282
283+ /**
284+ * read a pin value
285+ */
266286int digitalRead (uint8_t pin )
267287{
268288 uint8_t timer = digitalPinToTimer (pin );
0 commit comments