summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authordanicampora <danicampora@gmail.com>2015-03-11 21:49:50 +0100
committerdanicampora <danicampora@gmail.com>2015-03-11 22:09:52 +0100
commitb761ed21035b2cfd5f7704f4d04f4df1e2452967 (patch)
tree6d44e1086e1f92d513a0e8bfe4604f6e0da5ef68
parentdb0580d0a5cb8caa0b3f3a0e86879ddb1a9260ff (diff)
downloadmicropython-b761ed21035b2cfd5f7704f4d04f4df1e2452967.tar.gz
micropython-b761ed21035b2cfd5f7704f4d04f4df1e2452967.zip
cc3200: Register ADC and I2C with the sleep module.
-rw-r--r--cc3200/mods/pybadc.c23
-rw-r--r--cc3200/mods/pybi2c.c14
-rw-r--r--cc3200/mods/pybi2c.h6
-rw-r--r--cc3200/mods/pybrtc.h5
-rw-r--r--cc3200/mods/pybuart.h4
5 files changed, 38 insertions, 14 deletions
diff --git a/cc3200/mods/pybadc.c b/cc3200/mods/pybadc.c
index fb2ae16b4a..2494648b46 100644
--- a/cc3200/mods/pybadc.c
+++ b/cc3200/mods/pybadc.c
@@ -47,6 +47,7 @@
#include "adc.h"
#include "pybadc.h"
#include "pybpin.h"
+#include "pybsleep.h"
#include "pins.h"
#include "mpexception.h"
@@ -70,6 +71,16 @@ typedef struct _pyb_obj_adc_t {
} pyb_obj_adc_t;
+STATIC void pybadc_init (pyb_obj_adc_t *self) {
+ // enable the ADC channel
+ MAP_ADCChannelEnable(ADC_BASE, self->channel);
+ // enable and configure the timer
+ MAP_ADCTimerConfig(ADC_BASE, (1 << 17) - 1);
+ MAP_ADCTimerEnable(ADC_BASE);
+ // enable the ADC peripheral
+ MAP_ADCEnable(ADC_BASE);
+}
+
/******************************************************************************/
/* Micro Python bindings : adc object */
@@ -120,13 +131,11 @@ STATIC mp_obj_t adc_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw,
// configure the pin in analog mode
pin_config ((pin_obj_t *)pin, PIN_MODE_0, GPIO_DIR_MODE_IN, PYBPIN_ANALOG_TYPE, PIN_STRENGTH_2MA);
- // enable the ADC channel
- MAP_ADCChannelEnable(ADC_BASE, channel);
- // enable and configure the timer
- MAP_ADCTimerConfig(ADC_BASE, (1 << 17) - 1);
- MAP_ADCTimerEnable(ADC_BASE);
- // enable the ADC peripheral
- MAP_ADCEnable(ADC_BASE);
+ // initialize it
+ pybadc_init (self);
+
+ // register it with the sleep module
+ pybsleep_add ((const mp_obj_t)self, (WakeUpCB_t)pybadc_init);
return self;
}
diff --git a/cc3200/mods/pybi2c.c b/cc3200/mods/pybi2c.c
index 00b6e17e0a..5a2e548207 100644
--- a/cc3200/mods/pybi2c.c
+++ b/cc3200/mods/pybi2c.c
@@ -42,6 +42,7 @@
#include "i2c.h"
#include "pybi2c.h"
#include "mpexception.h"
+#include "pybsleep.h"
/// \moduleref pyb
/// \class I2C - a two-wire serial protocol
@@ -119,19 +120,19 @@ typedef struct _pyb_i2c_obj_t {
}
/******************************************************************************
- DEFINE PUBLIC FUNCTIONS
+ DEFINE PRIVATE FUNCTIONS
******************************************************************************/
// only master mode is available for the moment
-void i2c_init (uint mode, uint slvaddr, uint baudrate) {
+STATIC void i2c_init (pyb_i2c_obj_t *self) {
// Enable the I2C Peripheral
MAP_PRCMPeripheralClkEnable(PRCM_I2CA0, PRCM_RUN_MODE_CLK | PRCM_SLP_MODE_CLK);
MAP_PRCMPeripheralReset(PRCM_I2CA0);
// Configure I2C module with the specified baudrate
- MAP_I2CMasterInitExpClk(I2CA0_BASE, baudrate);
+ MAP_I2CMasterInitExpClk(I2CA0_BASE, self->baudrate);
}
-void i2c_deinit(void) {
+STATIC void i2c_deinit(void) {
MAP_I2CMasterDisable(I2CA0_BASE);
MAP_PRCMPeripheralClkDisable(PRCM_I2CA0, PRCM_RUN_MODE_CLK | PRCM_SLP_MODE_CLK);
}
@@ -299,7 +300,10 @@ STATIC mp_obj_t pyb_i2c_init_helper(pyb_i2c_obj_t *self_in, mp_uint_t n_args, co
}
// init the I2C bus
- i2c_init(self->mode, self->slvaddr, self->baudrate);
+ i2c_init(self);
+
+ // register it with the sleep module
+ pybsleep_add ((const mp_obj_t)self, (WakeUpCB_t)i2c_init);
return mp_const_none;
}
diff --git a/cc3200/mods/pybi2c.h b/cc3200/mods/pybi2c.h
index 5f2acaca07..7adffb2d99 100644
--- a/cc3200/mods/pybi2c.h
+++ b/cc3200/mods/pybi2c.h
@@ -25,7 +25,9 @@
* THE SOFTWARE.
*/
+#ifndef PYBI2C_H_
+#define PYBI2C_H_
+
extern const mp_obj_type_t pyb_i2c_type;
-void i2c_init (uint mode, uint slvaddr, uint baudrate);
-void i2c_deinit(void);
+#endif // PYBI2C_H_
diff --git a/cc3200/mods/pybrtc.h b/cc3200/mods/pybrtc.h
index abe38cc380..5f1ff654d7 100644
--- a/cc3200/mods/pybrtc.h
+++ b/cc3200/mods/pybrtc.h
@@ -25,9 +25,14 @@
* THE SOFTWARE.
*/
+#ifndef PYBRTC_H_
+#define PYBRTC_H_
+
#define RTC_U16MS_CYCLES(msec) ((msec * 1024) / 1000)
#define RTC_CYCLES_U16MS(cycles) ((cycles * 1000) / 1024)
extern const mp_obj_type_t pyb_rtc_type;
void pybrtc_init(void);
+
+#endif // PYBRTC_H_
diff --git a/cc3200/mods/pybuart.h b/cc3200/mods/pybuart.h
index e628b2903b..44660aabe4 100644
--- a/cc3200/mods/pybuart.h
+++ b/cc3200/mods/pybuart.h
@@ -25,6 +25,9 @@
* THE SOFTWARE.
*/
+#ifndef PYBUART_H_
+#define PYBUART_H_
+
typedef enum {
PYB_UART_NONE = -1,
PYB_UART_0 = 0,
@@ -43,3 +46,4 @@ bool uart_tx_char(pyb_uart_obj_t *self, int c);
bool uart_tx_strn(pyb_uart_obj_t *uart_obj, const char *str, uint len);
void uart_tx_strn_cooked(pyb_uart_obj_t *uart_obj, const char *str, uint len);
+#endif // PYBUART_H_