kopia lustrzana https://github.com/micropython/micropython
cc3200: Rename SD.config() to SD.config_pins().
rodzic
7102e51506
commit
18605b36dc
|
@ -49,10 +49,7 @@
|
||||||
|
|
||||||
#define PYBSD_FREQUENCY_HZ 15000000 // 15MHz
|
#define PYBSD_FREQUENCY_HZ 15000000 // 15MHz
|
||||||
|
|
||||||
static byte pybsd_pin_d0, pybsd_pin_clk, pybsd_pin_cmd;
|
|
||||||
static byte pybsd_af_d0, pybsd_af_clk, pybsd_af_cmd;
|
|
||||||
static const pin_obj_t *pybsd_pin_sd_detect;
|
static const pin_obj_t *pybsd_pin_sd_detect;
|
||||||
static bool pybsd_pin_config_set;
|
|
||||||
static bool pybsd_is_enabled;
|
static bool pybsd_is_enabled;
|
||||||
static bool pybsd_in_path;
|
static bool pybsd_in_path;
|
||||||
static FATFS *sd_fatfs;
|
static FATFS *sd_fatfs;
|
||||||
|
@ -63,20 +60,16 @@ void pybsd_init0 (void) {
|
||||||
ASSERT ((sd_fatfs = mem_Malloc(sizeof(FATFS))) != NULL);
|
ASSERT ((sd_fatfs = mem_Malloc(sizeof(FATFS))) != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool pybsd_is_present(void) {
|
bool pybsd_is_present(void) {
|
||||||
if (pybsd_pin_sd_detect) {
|
if (pybsd_pin_sd_detect) {
|
||||||
return pybsd_is_enabled && MAP_GPIOPinRead(pybsd_pin_sd_detect->port, pybsd_pin_sd_detect->bit);
|
return pybsd_is_enabled && MAP_GPIOPinRead(pybsd_pin_sd_detect->port, pybsd_pin_sd_detect->bit);
|
||||||
}
|
}
|
||||||
return true;
|
return pybsd_is_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
// Micro Python bindings
|
// Micro Python bindings
|
||||||
//
|
//
|
||||||
// Note: these function are a bit ad-hoc at the moment and are mainly intended
|
|
||||||
// for testing purposes. In the future SD should be a proper class with a
|
|
||||||
// consistent interface and methods to mount/unmount it.
|
|
||||||
|
|
||||||
/// \method sd_config([value])
|
/// \method sd_config([value])
|
||||||
/// Configure the pins used for the sd card.
|
/// Configure the pins used for the sd card.
|
||||||
|
@ -91,9 +84,12 @@ bool pybsd_is_present(void) {
|
||||||
///
|
///
|
||||||
/// pyb.SDcard.sd_config_pins (d0_pin, d0_af, clk_pin, clk_af, cmd_pin, cmd_af, card_detect_pin)
|
/// pyb.SDcard.sd_config_pins (d0_pin, d0_af, clk_pin, clk_af, cmd_pin, cmd_af, card_detect_pin)
|
||||||
///
|
///
|
||||||
STATIC mp_obj_t pybsd_config (mp_uint_t n_args, const mp_obj_t *args) {
|
STATIC mp_obj_t pybsd_config_pins (mp_uint_t n_args, const mp_obj_t *args) {
|
||||||
const pin_obj_t *pin = NULL;
|
byte pybsd_pin_d0, pybsd_pin_clk, pybsd_pin_cmd;
|
||||||
|
byte pybsd_af_d0, pybsd_af_clk, pybsd_af_cmd;
|
||||||
|
const pin_obj_t *pin;
|
||||||
|
|
||||||
|
// get all the arguments
|
||||||
pin = pin_find(args[1]);
|
pin = pin_find(args[1]);
|
||||||
pybsd_pin_d0 = pin->pin_num;
|
pybsd_pin_d0 = pin->pin_num;
|
||||||
pybsd_af_d0 = mp_obj_get_int(args[2]);
|
pybsd_af_d0 = mp_obj_get_int(args[2]);
|
||||||
|
@ -106,42 +102,32 @@ STATIC mp_obj_t pybsd_config (mp_uint_t n_args, const mp_obj_t *args) {
|
||||||
pybsd_pin_cmd = pin->pin_num;
|
pybsd_pin_cmd = pin->pin_num;
|
||||||
pybsd_af_cmd = mp_obj_get_int(args[6]);
|
pybsd_af_cmd = mp_obj_get_int(args[6]);
|
||||||
pin_verify_af (pybsd_af_cmd);
|
pin_verify_af (pybsd_af_cmd);
|
||||||
|
|
||||||
|
// configure the sdhost pins
|
||||||
|
MAP_PinTypeSDHost(pybsd_pin_d0, pybsd_af_d0);
|
||||||
|
MAP_PinTypeSDHost(pybsd_pin_clk, pybsd_af_clk);
|
||||||
|
MAP_PinTypeSDHost(pybsd_pin_cmd, pybsd_af_cmd);
|
||||||
|
MAP_PinDirModeSet(pybsd_pin_clk, PIN_DIR_MODE_OUT);
|
||||||
|
// configure the card detect pin if provided
|
||||||
if (n_args == 8) {
|
if (n_args == 8) {
|
||||||
pybsd_pin_sd_detect = pin_find(args[7]);
|
pybsd_pin_sd_detect = pin_find(args[7]);
|
||||||
|
pin_config(pybsd_pin_sd_detect, PIN_MODE_0, GPIO_DIR_MODE_IN, PIN_TYPE_STD_PU, PIN_STRENGTH_4MA);
|
||||||
}
|
}
|
||||||
pybsd_pin_config_set = true;
|
|
||||||
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pybsd_config_obj, 7, 8, pybsd_config);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pybsd_config_pins_obj, 7, 8, pybsd_config_pins);
|
||||||
|
|
||||||
STATIC mp_obj_t pybsd_enable(mp_obj_t self) {
|
STATIC mp_obj_t pybsd_enable(mp_obj_t self) {
|
||||||
if (pybsd_pin_config_set) {
|
// Enable SD peripheral clock
|
||||||
// Configure the D0 pin
|
MAP_PRCMPeripheralClkEnable(PRCM_SDHOST, PRCM_RUN_MODE_CLK | PRCM_SLP_MODE_CLK);
|
||||||
MAP_PinTypeSDHost(pybsd_pin_d0, pybsd_af_d0);
|
// Reset MMCHS
|
||||||
// Configure the CLK pin
|
MAP_PRCMPeripheralReset(PRCM_SDHOST);
|
||||||
MAP_PinTypeSDHost(pybsd_pin_clk, pybsd_af_clk);
|
// Initialize MMCHS
|
||||||
// Configure the CMD pin
|
MAP_SDHostInit(SDHOST_BASE);
|
||||||
MAP_PinTypeSDHost(pybsd_pin_cmd, pybsd_af_cmd);
|
// Configure the card clock
|
||||||
// Set the SD card clock as an output pin
|
MAP_SDHostSetExpClk(SDHOST_BASE, MAP_PRCMPeripheralClockGet(PRCM_SDHOST), PYBSD_FREQUENCY_HZ);
|
||||||
MAP_PinDirModeSet(pybsd_pin_clk, PIN_DIR_MODE_OUT);
|
|
||||||
// Enable SD peripheral clock
|
|
||||||
MAP_PRCMPeripheralClkEnable(PRCM_SDHOST, PRCM_RUN_MODE_CLK | PRCM_SLP_MODE_CLK);
|
|
||||||
// Reset MMCHS
|
|
||||||
MAP_PRCMPeripheralReset(PRCM_SDHOST);
|
|
||||||
// Initialize MMCHS
|
|
||||||
MAP_SDHostInit(SDHOST_BASE);
|
|
||||||
// Configure the card clock
|
|
||||||
MAP_SDHostSetExpClk(SDHOST_BASE, MAP_PRCMPeripheralClockGet(PRCM_SDHOST), PYBSD_FREQUENCY_HZ);
|
|
||||||
|
|
||||||
// Configure the card detect pin (if available)
|
|
||||||
if (pybsd_pin_sd_detect) {
|
|
||||||
pin_config(pybsd_pin_sd_detect, PIN_MODE_0, GPIO_DIR_MODE_IN, PIN_TYPE_STD_PU, PIN_STRENGTH_4MA);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_resource_not_avaliable));
|
|
||||||
}
|
|
||||||
pybsd_is_enabled = true;
|
pybsd_is_enabled = true;
|
||||||
|
|
||||||
// try to mount the sd card on /SD
|
// try to mount the sd card on /SD
|
||||||
|
@ -176,7 +162,7 @@ STATIC mp_obj_t pybsd_disable(mp_obj_t self) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pybsd_disable_obj, pybsd_disable);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pybsd_disable_obj, pybsd_disable);
|
||||||
|
|
||||||
STATIC const mp_map_elem_t pybsd_locals_dict_table[] = {
|
STATIC const mp_map_elem_t pybsd_locals_dict_table[] = {
|
||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_config), (mp_obj_t)&pybsd_config_obj },
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_config_pins), (mp_obj_t)&pybsd_config_pins_obj },
|
||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_enable), (mp_obj_t)&pybsd_enable_obj },
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_enable), (mp_obj_t)&pybsd_enable_obj },
|
||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_disable), (mp_obj_t)&pybsd_disable_obj },
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_disable), (mp_obj_t)&pybsd_disable_obj },
|
||||||
};
|
};
|
||||||
|
|
|
@ -162,7 +162,7 @@ Q(disable)
|
||||||
|
|
||||||
// for SD class
|
// for SD class
|
||||||
Q(SD)
|
Q(SD)
|
||||||
Q(config)
|
Q(config_pins)
|
||||||
Q(enable)
|
Q(enable)
|
||||||
Q(disable)
|
Q(disable)
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue