Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
R
RIOT
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
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cm-projects
RIOT
Commits
b75479c4
Commit
b75479c4
authored
7 years ago
by
Martine Lenders
Committed by
GitHub
7 years ago
Browse files
Options
Downloads
Plain Diff
Merge pull request #6332 from ant9000/saml21_i2c_support
SAM L21 i2c support
parents
c20f30dc
7913d192
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
boards/saml21-xpro/Makefile.features
+1
-0
1 addition, 0 deletions
boards/saml21-xpro/Makefile.features
boards/saml21-xpro/include/periph_conf.h
+17
-1
17 additions, 1 deletion
boards/saml21-xpro/include/periph_conf.h
cpu/sam0_common/periph/i2c.c
+19
-0
19 additions, 0 deletions
cpu/sam0_common/periph/i2c.c
with
37 additions
and
1 deletion
boards/saml21-xpro/Makefile.features
+
1
−
0
View file @
b75479c4
...
@@ -3,6 +3,7 @@ FEATURES_PROVIDED += periph_adc
...
@@ -3,6 +3,7 @@ FEATURES_PROVIDED += periph_adc
FEATURES_PROVIDED
+=
periph_cpuid
FEATURES_PROVIDED
+=
periph_cpuid
FEATURES_PROVIDED
+=
periph_flashpage
FEATURES_PROVIDED
+=
periph_flashpage
FEATURES_PROVIDED
+=
periph_gpio
FEATURES_PROVIDED
+=
periph_gpio
FEATURES_PROVIDED
+=
periph_i2c
FEATURES_PROVIDED
+=
periph_rtc
FEATURES_PROVIDED
+=
periph_rtc
FEATURES_PROVIDED
+=
periph_rtt
FEATURES_PROVIDED
+=
periph_rtt
FEATURES_PROVIDED
+=
periph_spi
FEATURES_PROVIDED
+=
periph_spi
...
...
This diff is collapsed.
Click to expand it.
boards/saml21-xpro/include/periph_conf.h
+
17
−
1
View file @
b75479c4
...
@@ -96,7 +96,23 @@ static const spi_conf_t spi_config[] = {
...
@@ -96,7 +96,23 @@ static const spi_conf_t spi_config[] = {
* @name I2C configuration
* @name I2C configuration
* @{
* @{
*/
*/
#define I2C_NUMOF (0)
#define I2C_NUMOF (1U)
#define I2C_0_EN 1
#define I2C_1_EN 0
#define I2C_2_EN 0
#define I2C_3_EN 0
#define I2C_IRQ_PRIO 1
#define I2C_0_DEV SERCOM2->I2CM
#define I2C_0_IRQ SERCOM2_IRQn
#define I2C_0_ISR isr_sercom2
/* I2C 0 GCLK */
#define I2C_0_GCLK_ID SERCOM2_GCLK_ID_CORE
#define I2C_0_GCLK_ID_SLOW SERCOM2_GCLK_ID_SLOW
/* I2C 0 pin configuration */
#define I2C_0_SDA GPIO_PIN(PA, 8)
#define I2C_0_SCL GPIO_PIN(PA, 9)
#define I2C_0_MUX GPIO_MUX_D
/** @} */
/** @} */
/**
/**
...
...
This diff is collapsed.
Click to expand it.
cpu/sam0_common/periph/i2c.c
+
19
−
0
View file @
b75479c4
...
@@ -40,6 +40,10 @@
...
@@ -40,6 +40,10 @@
#define BUSSTATE_OWNER SERCOM_I2CM_STATUS_BUSSTATE(2)
#define BUSSTATE_OWNER SERCOM_I2CM_STATUS_BUSSTATE(2)
#define BUSSTATE_BUSY SERCOM_I2CM_STATUS_BUSSTATE(3)
#define BUSSTATE_BUSY SERCOM_I2CM_STATUS_BUSSTATE(3)
#if CPU_FAM_SAML21
#define SERCOM_I2CM_CTRLA_MODE_I2C_MASTER SERCOM_I2CM_CTRLA_MODE(5)
#endif
/* static function definitions */
/* static function definitions */
static
void
_i2c_poweron
(
SercomI2cm
*
sercom
);
static
void
_i2c_poweron
(
SercomI2cm
*
sercom
);
static
void
_i2c_poweroff
(
SercomI2cm
*
sercom
);
static
void
_i2c_poweroff
(
SercomI2cm
*
sercom
);
...
@@ -106,9 +110,23 @@ int i2c_init_master(i2c_t dev, i2c_speed_t speed)
...
@@ -106,9 +110,23 @@ int i2c_init_master(i2c_t dev, i2c_speed_t speed)
while
(
I2CSercom
->
SYNCBUSY
.
reg
&
SERCOM_I2CM_SYNCBUSY_MASK
)
{}
while
(
I2CSercom
->
SYNCBUSY
.
reg
&
SERCOM_I2CM_SYNCBUSY_MASK
)
{}
/* Turn on power manager for sercom */
/* Turn on power manager for sercom */
#if CPU_FAM_SAML21
/* OK for SERCOM0-4 */
MCLK
->
APBCMASK
.
reg
|=
(
MCLK_APBCMASK_SERCOM0
<<
(
sercom_gclk_id
-
SERCOM0_GCLK_ID_CORE
));
#else
PM
->
APBCMASK
.
reg
|=
(
PM_APBCMASK_SERCOM0
<<
(
sercom_gclk_id
-
GCLK_CLKCTRL_ID_SERCOM0_CORE_Val
));
PM
->
APBCMASK
.
reg
|=
(
PM_APBCMASK_SERCOM0
<<
(
sercom_gclk_id
-
GCLK_CLKCTRL_ID_SERCOM0_CORE_Val
));
#endif
/* I2C using CLK GEN 0 */
/* I2C using CLK GEN 0 */
#if CPU_FAM_SAML21
GCLK
->
PCHCTRL
[
sercom_gclk_id
].
reg
=
(
GCLK_PCHCTRL_CHEN
|
GCLK_PCHCTRL_GEN_GCLK0
);
while
(
GCLK
->
SYNCBUSY
.
bit
.
GENCTRL
)
{}
GCLK
->
PCHCTRL
[
sercom_gclk_id_slow
].
reg
=
(
GCLK_PCHCTRL_CHEN
|
GCLK_PCHCTRL_GEN_GCLK0
);
while
(
GCLK
->
SYNCBUSY
.
bit
.
GENCTRL
)
{}
#else
GCLK
->
CLKCTRL
.
reg
=
(
GCLK_CLKCTRL_CLKEN
|
GCLK
->
CLKCTRL
.
reg
=
(
GCLK_CLKCTRL_CLKEN
|
GCLK_CLKCTRL_GEN_GCLK0
|
GCLK_CLKCTRL_GEN_GCLK0
|
GCLK_CLKCTRL_ID
(
sercom_gclk_id
));
GCLK_CLKCTRL_ID
(
sercom_gclk_id
));
...
@@ -118,6 +136,7 @@ int i2c_init_master(i2c_t dev, i2c_speed_t speed)
...
@@ -118,6 +136,7 @@ int i2c_init_master(i2c_t dev, i2c_speed_t speed)
GCLK_CLKCTRL_GEN_GCLK0
|
GCLK_CLKCTRL_GEN_GCLK0
|
GCLK_CLKCTRL_ID
(
sercom_gclk_id_slow
));
GCLK_CLKCTRL_ID
(
sercom_gclk_id_slow
));
while
(
GCLK
->
STATUS
.
bit
.
SYNCBUSY
)
{}
while
(
GCLK
->
STATUS
.
bit
.
SYNCBUSY
)
{}
#endif
/* Check if module is enabled. */
/* Check if module is enabled. */
...
...
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