aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal
diff options
context:
space:
mode:
authorRocco Marco Guglielmi <roccomarco.guglielmi@gmail.com>2017-08-11 18:45:50 +0000
committerRocco Marco Guglielmi <roccomarco.guglielmi@gmail.com>2017-08-11 18:45:50 +0000
commit58e167350f007cfdc33bbb67e8042ffd9dee4297 (patch)
treeae5a2756481d5600c31d99ee2a4681c91a2bb5bc /os/hal
parente2f3acbc5cebf1dc2d7ad0a299acc222e8305afe (diff)
downloadChibiOS-58e167350f007cfdc33bbb67e8042ffd9dee4297.tar.gz
ChibiOS-58e167350f007cfdc33bbb67e8042ffd9dee4297.tar.bz2
ChibiOS-58e167350f007cfdc33bbb67e8042ffd9dee4297.zip
Added PIT implementation for ATSAMA5D2 (Still incomplete)
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10404 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal')
-rw-r--r--os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.c38
-rw-r--r--os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.h12
2 files changed, 50 insertions, 0 deletions
diff --git a/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.c b/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.c
index cc1b46250..14e82a31d 100644
--- a/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.c
+++ b/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.c
@@ -28,6 +28,11 @@
/* Driver local definitions. */
/*===========================================================================*/
+/**
+ * @brief Periodic Interrupt Timer frequency.
+ */
+#define SAMA_PIT (SAMA_MCK / 16)
+
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -48,6 +53,25 @@
/* Driver interrupt handlers. */
/*===========================================================================*/
+#if (OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC) || defined(__DOXYGEN__)
+/**
+ * @brief System Timer vector.
+ * @details This interrupt is used for system tick in periodic mode.
+ *
+ * @isr
+ */
+OSAL_IRQ_HANDLER(PIT_Handler) {
+
+ OSAL_IRQ_PROLOGUE();
+
+ osalSysLockFromISR();
+ osalOsTimerHandlerI();
+ osalSysUnlockFromISR();
+
+ OSAL_IRQ_EPILOGUE();
+}
+#endif /* OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC */
+
/*===========================================================================*/
/* Driver exported functions. */
/*===========================================================================*/
@@ -58,6 +82,20 @@
* @notapi
*/
void st_lld_init(void) {
+
+#if (OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC)
+ /* Enabling PIT.*/
+ pmcEnablePIT();
+
+ PIT->PIT_MR = PIT_MR_PIV((SAMA_PIT / OSAL_ST_FREQUENCY) - 1);
+ PIT->PIT_MR |= PIT_MR_PITEN | PIT_MR_PITIEN;
+
+
+ /* IRQ enabled.*/
+ aicSetSourcePriority(ID_PIT, SAMA_ST_IRQ_PRIORITY);
+ aicSetSourceHandler(ID_PIT, PIT_Handler);
+ aicEnableInt(ID_PIT);
+#endif /* OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC */
}
/** @} */
diff --git a/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.h b/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.h
index 055433614..328d929ed 100644
--- a/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.h
+++ b/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.h
@@ -37,6 +37,18 @@
/* Driver pre-compile time settings. */
/*===========================================================================*/
+/**
+ * @name Configuration options
+ * @{
+ */
+/**
+ * @brief SysTick timer IRQ priority.
+ */
+#if !defined(SAMA_ST_IRQ_PRIORITY) || defined(__DOXYGEN__)
+#define SAMA_ST_IRQ_PRIORITY 7
+#endif
+/** @} */
+
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/