Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
7c1c9af5
Commit
7c1c9af5
authored
Jul 01, 2015
by
Daniel Campora
Browse files
cc3200: Code clean-up on pybpin.
parent
4f8eeaed
Changes
2
Hide whitespace changes
Inline
Side-by-side
cc3200/mods/pybpin.c
View file @
7c1c9af5
...
...
@@ -92,15 +92,17 @@
/******************************************************************************
DECLARE PRIVATE FUNCTIONS
******************************************************************************/
STATIC
void
pin_obj_configure
(
const
pin_obj_t
*
self
);
STATIC
void
pin_get_hibernate_pin_and_idx
(
const
pin_obj_t
*
self
,
uint
*
wake_pin
,
uint
*
idx
);
STATIC
void
pin_extint_enable
(
mp_obj_t
self_in
);
STATIC
void
pin_extint_disable
(
mp_obj_t
self_in
);
STATIC
void
pin_verify_af
(
uint
af
);
STATIC
void
pin_extint_register
(
pin_obj_t
*
self
,
uint32_t
intmode
,
uint32_t
priority
);
STATIC
void
GPIOA0IntHandler
(
void
);
STATIC
void
GPIOA1IntHandler
(
void
);
STATIC
void
GPIOA2IntHandler
(
void
);
STATIC
void
GPIOA3IntHandler
(
void
);
STATIC
void
EXTI_Handler
(
uint
port
);
STATIC
void
pin_obj_configure
(
const
pin_obj_t
*
self
);
STATIC
void
pin_get_hibernate_pin_and_idx
(
const
pin_obj_t
*
self
,
uint
*
wake_pin
,
uint
*
idx
);
STATIC
void
pin_extint_enable
(
mp_obj_t
self_in
);
STATIC
void
pin_extint_disable
(
mp_obj_t
self_in
);
/******************************************************************************
DEFINE CONSTANTS
...
...
@@ -159,12 +161,6 @@ pin_obj_t *pin_find(mp_obj_t user_obj) {
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_ValueError
,
mpexception_value_invalid_arguments
));
}
void
pin_verify_af
(
uint
af
)
{
if
(
af
>
PIN_MODE_15
)
{
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_ValueError
,
mpexception_value_invalid_arguments
));
}
}
void
pin_config
(
pin_obj_t
*
self
,
uint
af
,
uint
mode
,
uint
type
,
uint
strength
)
{
// configure the pin in analog mode
self
->
af
=
af
,
self
->
mode
=
mode
,
self
->
type
=
type
,
self
->
strength
=
strength
;
...
...
@@ -175,37 +171,6 @@ void pin_config (pin_obj_t *self, uint af, uint mode, uint type, uint strength)
pybsleep_add
((
const
mp_obj_t
)
self
,
(
WakeUpCB_t
)
pin_obj_configure
);
}
void
pin_extint_register
(
pin_obj_t
*
self
,
uint32_t
intmode
,
uint32_t
priority
)
{
void
*
handler
;
uint32_t
intnum
;
// configure the interrupt type
MAP_GPIOIntTypeSet
(
self
->
port
,
self
->
bit
,
intmode
);
switch
(
self
->
port
)
{
case
GPIOA0_BASE
:
handler
=
GPIOA0IntHandler
;
intnum
=
INT_GPIOA0
;
break
;
case
GPIOA1_BASE
:
handler
=
GPIOA1IntHandler
;
intnum
=
INT_GPIOA1
;
break
;
case
GPIOA2_BASE
:
handler
=
GPIOA2IntHandler
;
intnum
=
INT_GPIOA2
;
break
;
case
GPIOA3_BASE
:
default:
handler
=
GPIOA3IntHandler
;
intnum
=
INT_GPIOA3
;
break
;
}
MAP_GPIOIntRegister
(
self
->
port
,
handler
);
// set the interrupt to the lowest priority, to make sure that
// no other ISRs will be preemted by this one
MAP_IntPrioritySet
(
intnum
,
priority
);
}
/******************************************************************************
DEFINE PRIVATE FUNCTIONS
******************************************************************************/
...
...
@@ -326,6 +291,77 @@ STATIC void pin_extint_disable (mp_obj_t self_in) {
MAP_GPIOIntDisable
(
self
->
port
,
self
->
bit
);
}
STATIC
void
pin_verify_af
(
uint
af
)
{
if
(
af
>
PIN_MODE_15
)
{
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_ValueError
,
mpexception_value_invalid_arguments
));
}
}
STATIC
void
pin_extint_register
(
pin_obj_t
*
self
,
uint32_t
intmode
,
uint32_t
priority
)
{
void
*
handler
;
uint32_t
intnum
;
// configure the interrupt type
MAP_GPIOIntTypeSet
(
self
->
port
,
self
->
bit
,
intmode
);
switch
(
self
->
port
)
{
case
GPIOA0_BASE
:
handler
=
GPIOA0IntHandler
;
intnum
=
INT_GPIOA0
;
break
;
case
GPIOA1_BASE
:
handler
=
GPIOA1IntHandler
;
intnum
=
INT_GPIOA1
;
break
;
case
GPIOA2_BASE
:
handler
=
GPIOA2IntHandler
;
intnum
=
INT_GPIOA2
;
break
;
case
GPIOA3_BASE
:
default:
handler
=
GPIOA3IntHandler
;
intnum
=
INT_GPIOA3
;
break
;
}
MAP_GPIOIntRegister
(
self
->
port
,
handler
);
// set the interrupt to the lowest priority, to make sure that
// no other ISRs will be preemted by this one
MAP_IntPrioritySet
(
intnum
,
priority
);
}
STATIC
void
GPIOA0IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA0_BASE
);
}
STATIC
void
GPIOA1IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA1_BASE
);
}
STATIC
void
GPIOA2IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA2_BASE
);
}
STATIC
void
GPIOA3IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA3_BASE
);
}
// common interrupt handler
STATIC
void
EXTI_Handler
(
uint
port
)
{
uint32_t
bits
=
MAP_GPIOIntStatus
(
port
,
true
);
MAP_GPIOIntClear
(
port
,
bits
);
// might be that we have more than one Pin interrupt pending
// therefore we must loop through all of the 8 possible bits
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
uint32_t
bit
=
(
1
<<
i
);
if
(
bit
&
bits
)
{
pin_obj_t
*
self
=
(
pin_obj_t
*
)
pin_find_pin_by_port_bit
(
&
pin_cpu_pins_locals_dict
,
port
,
bit
);
mp_obj_t
_callback
=
mpcallback_find
(
self
);
mpcallback_handler
(
_callback
);
}
}
}
/******************************************************************************/
// Micro Python bindings
...
...
@@ -747,36 +783,3 @@ STATIC const mp_cb_methods_t pin_cb_methods = {
.
disable
=
pin_extint_disable
,
};
STATIC
void
GPIOA0IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA0_BASE
);
}
STATIC
void
GPIOA1IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA1_BASE
);
}
STATIC
void
GPIOA2IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA2_BASE
);
}
STATIC
void
GPIOA3IntHandler
(
void
)
{
EXTI_Handler
(
GPIOA3_BASE
);
}
// common interrupt handler
STATIC
void
EXTI_Handler
(
uint
port
)
{
uint32_t
bits
=
MAP_GPIOIntStatus
(
port
,
true
);
MAP_GPIOIntClear
(
port
,
bits
);
// might be that we have more than one Pin interrupt pending
// therefore we must loop through all of the 8 possible bits
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
uint32_t
bit
=
(
1
<<
i
);
if
(
bit
&
bits
)
{
pin_obj_t
*
self
=
(
pin_obj_t
*
)
pin_find_pin_by_port_bit
(
&
pin_cpu_pins_locals_dict
,
port
,
bit
);
mp_obj_t
_callback
=
mpcallback_find
(
self
);
mpcallback_handler
(
_callback
);
}
}
}
cc3200/mods/pybpin.h
View file @
7c1c9af5
...
...
@@ -67,14 +67,9 @@ extern const mp_obj_type_t pin_cpu_pins_obj_type;
extern
const
mp_obj_dict_t
pin_cpu_pins_locals_dict
;
void
pin_init0
(
void
);
void
pin_verify_af
(
uint
af
);
void
pin_config
(
pin_obj_t
*
self
,
uint
af
,
uint
mode
,
uint
type
,
uint
strength
);
void
pin_extint_register
(
pin_obj_t
*
self
,
uint32_t
intmode
,
uint32_t
priority
);
pin_obj_t
*
pin_find
(
mp_obj_t
user_obj
);
pin_obj_t
*
pin_find_named_pin
(
const
mp_obj_dict_t
*
named_pins
,
mp_obj_t
name
);
pin_obj_t
*
pin_find_pin_by_port_bit
(
const
mp_obj_dict_t
*
named_pins
,
uint
port
,
uint
bit
);
uint32_t
pin_get_mode
(
const
pin_obj_t
*
self
);
uint32_t
pin_get_type
(
const
pin_obj_t
*
self
);
uint32_t
pin_get_strenght
(
const
pin_obj_t
*
self
);
#endif // PYBPIN_H_
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment