Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
M
micropython
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
card10
micropython
Commits
f70630c5
Commit
f70630c5
authored
11 years ago
by
Dave Hylands
Browse files
Options
Downloads
Patches
Plain Diff
Fix i2c and spi to compile for Netduino Plus 2
parent
53775026
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
+2
-0
2 additions, 0 deletions
stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
stmhal/i2c.c
+12
-9
12 additions, 9 deletions
stmhal/i2c.c
stmhal/spi.c
+21
-18
21 additions, 18 deletions
stmhal/spi.c
with
35 additions
and
27 deletions
stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
+
2
−
0
View file @
f70630c5
...
@@ -17,6 +17,8 @@
...
@@ -17,6 +17,8 @@
#define MICROPY_HW_ENABLE_TIMER (1)
#define MICROPY_HW_ENABLE_TIMER (1)
#define MICROPY_HW_ENABLE_SERVO (1)
#define MICROPY_HW_ENABLE_SERVO (1)
#define MICROPY_HW_ENABLE_DAC (0)
#define MICROPY_HW_ENABLE_DAC (0)
#define MICROPU_HW_ENABLE_I2C1 (0)
#define MICROPU_HW_ENABLE_SPI1 (0)
// USRSW is pulled low. Pressing the button makes the input go high.
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_B11)
#define MICROPY_HW_USRSW_PIN (pin_B11)
...
...
This diff is collapsed.
Click to expand it.
stmhal/i2c.c
+
12
−
9
View file @
f70630c5
...
@@ -13,6 +13,10 @@
...
@@ -13,6 +13,10 @@
#include
"genhdr/pins.h"
#include
"genhdr/pins.h"
#include
"i2c.h"
#include
"i2c.h"
#if !defined(MICROPU_HW_ENABLE_I2C1)
#define MICROPY_HW_ENABLE_I2C1 (1)
#endif
I2C_HandleTypeDef
I2CHandle1
=
{.
Instance
=
NULL
};
I2C_HandleTypeDef
I2CHandle1
=
{.
Instance
=
NULL
};
I2C_HandleTypeDef
I2CHandle2
=
{.
Instance
=
NULL
};
I2C_HandleTypeDef
I2CHandle2
=
{.
Instance
=
NULL
};
...
@@ -32,6 +36,7 @@ void i2c_init(I2C_HandleTypeDef *i2c) {
...
@@ -32,6 +36,7 @@ void i2c_init(I2C_HandleTypeDef *i2c) {
GPIO_InitStructure
.
Pull
=
GPIO_NOPULL
;
// have external pull-up resistors on both lines
GPIO_InitStructure
.
Pull
=
GPIO_NOPULL
;
// have external pull-up resistors on both lines
const
pin_obj_t
*
pins
[
2
];
const
pin_obj_t
*
pins
[
2
];
#if MICROPY_HW_ENABLE_I2C1
if
(
i2c
==
&
I2CHandle1
)
{
if
(
i2c
==
&
I2CHandle1
)
{
// X-skin: X9=PB6=SCL, X10=PB7=SDA
// X-skin: X9=PB6=SCL, X10=PB7=SDA
pins
[
0
]
=
&
pin_B6
;
pins
[
0
]
=
&
pin_B6
;
...
@@ -39,7 +44,9 @@ void i2c_init(I2C_HandleTypeDef *i2c) {
...
@@ -39,7 +44,9 @@ void i2c_init(I2C_HandleTypeDef *i2c) {
GPIO_InitStructure
.
Alternate
=
GPIO_AF4_I2C1
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF4_I2C1
;
// enable the I2C clock
// enable the I2C clock
__I2C1_CLK_ENABLE
();
__I2C1_CLK_ENABLE
();
}
else
{
}
else
#endif
if
(
i2c
==
&
I2CHandle2
)
{
// Y-skin: Y9=PB10=SCL, Y10=PB11=SDA
// Y-skin: Y9=PB10=SCL, Y10=PB11=SDA
pins
[
0
]
=
&
pin_B10
;
pins
[
0
]
=
&
pin_B10
;
pins
[
1
]
=
&
pin_B11
;
pins
[
1
]
=
&
pin_B11
;
...
@@ -54,13 +61,6 @@ void i2c_init(I2C_HandleTypeDef *i2c) {
...
@@ -54,13 +61,6 @@ void i2c_init(I2C_HandleTypeDef *i2c) {
HAL_GPIO_Init
(
pins
[
i
]
->
gpio
,
&
GPIO_InitStructure
);
HAL_GPIO_Init
(
pins
[
i
]
->
gpio
,
&
GPIO_InitStructure
);
}
}
// enable the I2C clock
if
(
i2c
==
&
I2CHandle1
)
{
__I2C1_CLK_ENABLE
();
}
else
{
__I2C2_CLK_ENABLE
();
}
// init the I2C device
// init the I2C device
i2c
->
Init
.
AddressingMode
=
I2C_ADDRESSINGMODE_7BIT
;
i2c
->
Init
.
AddressingMode
=
I2C_ADDRESSINGMODE_7BIT
;
i2c
->
Init
.
ClockSpeed
=
400000
;
i2c
->
Init
.
ClockSpeed
=
400000
;
...
@@ -88,7 +88,10 @@ typedef struct _pyb_i2c_obj_t {
...
@@ -88,7 +88,10 @@ typedef struct _pyb_i2c_obj_t {
I2C_HandleTypeDef
*
i2c
;
I2C_HandleTypeDef
*
i2c
;
}
pyb_i2c_obj_t
;
}
pyb_i2c_obj_t
;
STATIC
const
pyb_i2c_obj_t
pyb_i2c_obj
[
PYB_NUM_I2C
]
=
{{{
&
pyb_i2c_type
},
&
I2CHandle1
},
{{
&
pyb_i2c_type
},
&
I2CHandle2
}};
STATIC
const
pyb_i2c_obj_t
pyb_i2c_obj
[
PYB_NUM_I2C
]
=
{
{{
&
pyb_i2c_type
},
&
I2CHandle1
},
{{
&
pyb_i2c_type
},
&
I2CHandle2
}
};
STATIC
mp_obj_t
pyb_i2c_make_new
(
mp_obj_t
type_in
,
uint
n_args
,
uint
n_kw
,
const
mp_obj_t
*
args
)
{
STATIC
mp_obj_t
pyb_i2c_make_new
(
mp_obj_t
type_in
,
uint
n_args
,
uint
n_kw
,
const
mp_obj_t
*
args
)
{
// check arguments
// check arguments
...
...
This diff is collapsed.
Click to expand it.
stmhal/spi.c
+
21
−
18
View file @
f70630c5
...
@@ -13,11 +13,13 @@
...
@@ -13,11 +13,13 @@
#include
"genhdr/pins.h"
#include
"genhdr/pins.h"
#include
"spi.h"
#include
"spi.h"
#if !defined(MICROPU_HW_ENABLE_SPI1)
#define MICROPY_HW_ENABLE_SPI1 (1)
#endif
SPI_HandleTypeDef
SPIHandle1
=
{.
Instance
=
NULL
};
SPI_HandleTypeDef
SPIHandle1
=
{.
Instance
=
NULL
};
SPI_HandleTypeDef
SPIHandle2
=
{.
Instance
=
NULL
};
SPI_HandleTypeDef
SPIHandle2
=
{.
Instance
=
NULL
};
#if MICROPY_HW_ENABLE_SPI3
SPI_HandleTypeDef
SPIHandle3
=
{.
Instance
=
NULL
};
SPI_HandleTypeDef
SPIHandle3
=
{.
Instance
=
NULL
};
#endif
void
spi_init0
(
void
)
{
void
spi_init0
(
void
)
{
// reset the SPI handles
// reset the SPI handles
...
@@ -25,10 +27,8 @@ void spi_init0(void) {
...
@@ -25,10 +27,8 @@ void spi_init0(void) {
SPIHandle1
.
Instance
=
SPI1
;
SPIHandle1
.
Instance
=
SPI1
;
memset
(
&
SPIHandle2
,
0
,
sizeof
(
SPI_HandleTypeDef
));
memset
(
&
SPIHandle2
,
0
,
sizeof
(
SPI_HandleTypeDef
));
SPIHandle2
.
Instance
=
SPI2
;
SPIHandle2
.
Instance
=
SPI2
;
#if MICROPY_HW_ENABLE_SPI3
memset
(
&
SPIHandle3
,
0
,
sizeof
(
SPI_HandleTypeDef
));
memset
(
&
SPIHandle3
,
0
,
sizeof
(
SPI_HandleTypeDef
));
SPIHandle3
.
Instance
=
SPI3
;
SPIHandle3
.
Instance
=
SPI3
;
#endif
}
}
// TODO allow to take a list of pins to use
// TODO allow to take a list of pins to use
...
@@ -40,6 +40,7 @@ void spi_init(SPI_HandleTypeDef *spi) {
...
@@ -40,6 +40,7 @@ void spi_init(SPI_HandleTypeDef *spi) {
GPIO_InitStructure
.
Pull
=
GPIO_PULLUP
;
// ST examples use PULLUP
GPIO_InitStructure
.
Pull
=
GPIO_PULLUP
;
// ST examples use PULLUP
const
pin_obj_t
*
pins
[
4
];
const
pin_obj_t
*
pins
[
4
];
#if MICROPY_HW_ENABLE_SPI1
if
(
spi
->
Instance
==
SPI1
)
{
if
(
spi
->
Instance
==
SPI1
)
{
// X-skin: X5=PA4=SPI1_NSS, X6=PA5=SPI1_SCK, X7=PA6=SPI1_MISO, X8=PA7=SPI1_MOSI
// X-skin: X5=PA4=SPI1_NSS, X6=PA5=SPI1_SCK, X7=PA6=SPI1_MISO, X8=PA7=SPI1_MOSI
pins
[
0
]
=
&
pin_A4
;
pins
[
0
]
=
&
pin_A4
;
...
@@ -47,25 +48,28 @@ void spi_init(SPI_HandleTypeDef *spi) {
...
@@ -47,25 +48,28 @@ void spi_init(SPI_HandleTypeDef *spi) {
pins
[
2
]
=
&
pin_A6
;
pins
[
2
]
=
&
pin_A6
;
pins
[
3
]
=
&
pin_A7
;
pins
[
3
]
=
&
pin_A7
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF5_SPI1
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF5_SPI1
;
}
else
if
(
spi
->
Instance
==
SPI2
)
{
}
else
#endif
if
(
spi
->
Instance
==
SPI2
)
{
// Y-skin: Y5=PB12=SPI2_NSS, Y6=PB13=SPI2_SCK, Y7=PB14=SPI2_MISO, Y8=PB15=SPI2_MOSI
// Y-skin: Y5=PB12=SPI2_NSS, Y6=PB13=SPI2_SCK, Y7=PB14=SPI2_MISO, Y8=PB15=SPI2_MOSI
pins
[
0
]
=
&
pin_B12
;
pins
[
0
]
=
&
pin_B12
;
pins
[
1
]
=
&
pin_B13
;
pins
[
1
]
=
&
pin_B13
;
pins
[
2
]
=
&
pin_B14
;
pins
[
2
]
=
&
pin_B14
;
pins
[
3
]
=
&
pin_B15
;
pins
[
3
]
=
&
pin_B15
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF5_SPI2
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF5_SPI2
;
}
else
#if MICROPY_HW_ENABLE_SPI3
#if MICROPY_HW_ENABLE_SPI3
}
else
if
(
spi
->
Instance
==
SPI3
)
{
if
(
spi
->
Instance
==
SPI3
)
{
pins
[
0
]
=
&
pin_A4
;
pins
[
0
]
=
&
pin_A4
;
pins
[
1
]
=
&
pin_B3
;
pins
[
1
]
=
&
pin_B3
;
pins
[
2
]
=
&
pin_B4
;
pins
[
2
]
=
&
pin_B4
;
pins
[
3
]
=
&
pin_B5
;
pins
[
3
]
=
&
pin_B5
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF6_SPI3
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF6_SPI3
;
}
else
#endif
#endif
}
else
{
{
// SPI does not exist for this board
// SPI does not exist for this board
printf
(
"HardwareError: invalid SPI
\n
"
);
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_ValueError
,
"SPI bus does not exist"
));
return
;
}
}
for
(
uint
i
=
0
;
i
<
4
;
i
++
)
{
for
(
uint
i
=
0
;
i
<
4
;
i
++
)
{
...
@@ -78,10 +82,8 @@ void spi_init(SPI_HandleTypeDef *spi) {
...
@@ -78,10 +82,8 @@ void spi_init(SPI_HandleTypeDef *spi) {
__SPI1_CLK_ENABLE
();
__SPI1_CLK_ENABLE
();
}
else
if
(
spi
->
Instance
==
SPI2
)
{
}
else
if
(
spi
->
Instance
==
SPI2
)
{
__SPI2_CLK_ENABLE
();
__SPI2_CLK_ENABLE
();
#if MICROPY_HW_ENABLE_SPI3
}
else
if
(
spi
->
Instance
==
SPI3
)
{
}
else
{
__SPI3_CLK_ENABLE
();
__SPI3_CLK_ENABLE
();
#endif
}
}
// init the I2C device
// init the I2C device
...
@@ -100,24 +102,25 @@ void spi_deinit(SPI_HandleTypeDef *spi) {
...
@@ -100,24 +102,25 @@ void spi_deinit(SPI_HandleTypeDef *spi) {
__SPI1_CLK_DISABLE
();
__SPI1_CLK_DISABLE
();
}
else
if
(
spi
->
Instance
==
SPI2
)
{
}
else
if
(
spi
->
Instance
==
SPI2
)
{
__SPI2_CLK_DISABLE
();
__SPI2_CLK_DISABLE
();
#if MICROPY_HW_ENABLE_SPI3
}
else
if
(
spi
->
Instance
==
SPI3
)
{
}
else
{
__SPI3_CLK_DISABLE
();
__SPI3_CLK_DISABLE
();
#endif
}
}
}
}
/******************************************************************************/
/******************************************************************************/
/* Micro Python bindings */
/* Micro Python bindings */
#define PYB_
SPI_NUM
(2)
#define PYB_
NUM_SPI
(2)
typedef
struct
_pyb_spi_obj_t
{
typedef
struct
_pyb_spi_obj_t
{
mp_obj_base_t
base
;
mp_obj_base_t
base
;
SPI_HandleTypeDef
*
spi
;
SPI_HandleTypeDef
*
spi
;
}
pyb_spi_obj_t
;
}
pyb_spi_obj_t
;
STATIC
const
pyb_spi_obj_t
pyb_spi_obj
[
PYB_SPI_NUM
]
=
{{{
&
pyb_spi_type
},
&
SPIHandle1
},
{{
&
pyb_spi_type
},
&
SPIHandle2
}};
STATIC
const
pyb_spi_obj_t
pyb_spi_obj
[
PYB_NUM_SPI
]
=
{
{{
&
pyb_spi_type
},
&
SPIHandle1
},
{{
&
pyb_spi_type
},
&
SPIHandle2
}
};
STATIC
void
pyb_spi_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
STATIC
void
pyb_spi_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
pyb_spi_obj_t
*
self
=
self_in
;
pyb_spi_obj_t
*
self
=
self_in
;
...
@@ -220,7 +223,7 @@ STATIC mp_obj_t pyb_spi_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const
...
@@ -220,7 +223,7 @@ STATIC mp_obj_t pyb_spi_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const
machine_int_t
spi_id
=
mp_obj_get_int
(
args
[
0
])
-
1
;
machine_int_t
spi_id
=
mp_obj_get_int
(
args
[
0
])
-
1
;
// check SPI number
// check SPI number
if
(
!
(
0
<=
spi_id
&&
spi_id
<
PYB_
SPI_NUM
))
{
if
(
!
(
0
<=
spi_id
&&
spi_id
<
PYB_
NUM_SPI
))
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_ValueError
,
"SPI bus %d does not exist"
,
spi_id
+
1
));
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_ValueError
,
"SPI bus %d does not exist"
,
spi_id
+
1
));
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment