]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Changed systick API. Made some test-cases arch independent
authormahi <devnull@localhost>
Sun, 18 Jul 2010 07:35:06 +0000 (09:35 +0200)
committermahi <devnull@localhost>
Sun, 18 Jul 2010 07:35:06 +0000 (09:35 +0200)
arch/arm/arm_cm3/kernel/sys_tick.c
arch/hc1x/hcs12d/kernel/sys_tick.c
arch/ppc/mpc55xx/drivers/sys_tick.c
include/Os.h
system/EcuM/EcuM.c
system/kernel/isr.c
system/kernel/testsystem/test_02_resource.c
system/kernel/testsystem/test_framework.h

index 3b122427e3fbcdd948e8e2d3d6ed9d0fb9826b88..794c05dea45d24096dfa23255408c1a564be2c6e 100644 (file)
@@ -66,7 +66,7 @@ void Os_SysTickStart(uint32_t period_ticks) {
  * @return
  */\r
 \r
-uint32_t Os_SysTickGetTimeElapsed( void )\r
+uint32_t Os_SysTickGetValue( void )\r
 {\r
        return (SysTick->VAL);\r
 }\r
index b1c237aa5aeaa3ad4ddf1771819c5411bdf86db8..043289874478dadfc636aa11e15bd5054b5a9925 100644 (file)
@@ -69,7 +69,7 @@ void Os_SysTickStart(uint32_t period_ticks) {
  */\r
 
 /** @req OS383 */\r
-uint32_t Os_SysTickGetTimeElapsed( void )\r
+uint32_t Os_SysTickGetValue( void )\r
 {
 #if 0\r
        uint32_t timer = get_spr(SPR_DECAR) - get_spr(SPR_DEC);\r
index 9d2bb1331309b134b26ce8d09a6d8eb8d50d0a9e..611e049ee9da07da71ccaccc83a37fd08d8ae16d 100644 (file)
@@ -65,8 +65,18 @@ void Os_SysTickStart(uint32_t period_ticks) {
  */\r
 
 /** @req OS383 */\r
-uint32_t Os_SysTickGetTimeElapsed( void )\r
+TickType Os_SysTickGetValue( void )\r
 {\r
        uint32_t timer = get_spr(SPR_DECAR) - get_spr(SPR_DEC);\r
        return (timer);\r
-}\r
+}
+
+TickType Os_SysTickGetElapsedValue( uint32_t preValue ) {
+       uint32_t curr;
+       uint32_t max;
+
+       curr = get_spr(SPR_DEC);
+       max  = get_spr(SPR_DECAR);
+       return Os_CounterDiff((max - curr),preValue,max);
+}
+\r
index b714805e4e94b36275f30c29fd1933f445e06ff8..e1f482232c3d548a0a981d32841efdbf845eb339 100644 (file)
@@ -262,13 +262,7 @@ typedef struct OsDriver_s {
        int     OsGptChannelRef;\r
 } OsDriver;\r
 \r
-/*-------------------------------------------------------------------\r
- * Free running timer\r
- *-----------------------------------------------------------------*/
-typedef const uint32 OsTickType;
-void Os_SysTickInit( void );\r
-void Os_SysTickStart(uint32_t period_ticks);\r
-uint32_t Os_SysTickGetTimeElapsed( void );\r
+\r
 \r
 /*-------------------------------------------------------------------\r
  * Counters\r
@@ -281,6 +275,16 @@ typedef TickType *TickRefType;
 StatusType IncrementCounter( CounterType );\r
 StatusType GetCounterValue( CounterType, TickRefType );\r
 StatusType GetElapsedCounterValue( CounterType, TickRefType val, TickRefType elapsed_val);\r
+
+
+/*-------------------------------------------------------------------
+ * System timer
+ *-----------------------------------------------------------------*/
+typedef const uint32 OsTickType;
+void Os_SysTickInit( void );
+void Os_SysTickStart(TickType period_ticks);
+TickType Os_SysTickGetValue( void );
+TickType Os_SysTickGetElapsedValue( TickType preValue );
 \r
 /*-------------------------------------------------------------------\r
  * Schedule Tables\r
index c2c0374c19d880db557bab4037697c6d3dd54f6e..eae5f0c8487262e56c13f89e4385738cbb91372f 100644 (file)
@@ -95,7 +95,7 @@ void EcuM_StartupTwo()
 \r
 #if    (ECUM_INCLUDE_NVRAM_MGR == STD_ON)\r
        // Start timer to wait for NVM job to complete\r
-       timer = Os_SysTickGetTimeElapsed();\r
+       timer = Os_SysTickGetValue();\r
 #endif\r
 \r
        // Prepare the system to startup RTE\r
@@ -105,7 +105,7 @@ void EcuM_StartupTwo()
 \r
 #if    (ECUM_INCLUDE_NVRAM_MGR == STD_ON)\r
        // Wait for the NVM job to terminate\r
-       while(Os_SysTickGetTimeElapsed()-timer < internal_data.config.EcuMNvramReadAllTimeout)\r
+       while(Os_SysTickGetValue()-timer < internal_data.config.EcuMNvramReadAllTimeout)\r
        {\r
                //TODO\r
        }\r
index 5cf717c04107cb0c3f7deda73467e3f1133fecfc..1575ef85feff47840aa491dd5ed5f50ab711229f 100644 (file)
@@ -65,6 +65,14 @@ extern TaskType Os_AddTask( OsPcbType *pcb );
 
 static uint8 stackTop = 0x42;
 
+/**
+ * Creates an ISR dynamically
+ * @param entry
+ * @param prio
+ * @param name
+ *
+ * @return The PID of the ISR created
+ */
 TaskType Os_Arc_CreateIsr( void (*entry)(void ), uint8_t prio, const char *name )
 {
        OsPcbType *pcb = os_alloc_new_pcb();
index d4aa38f5e9aa0e804a7c69177866f2aabe8e4192..c9b08d664a83ef654841a02e8621f63afb0dcd26 100644 (file)
@@ -81,7 +81,6 @@ void etask_sup_l_02(void) {
                        test_nr = 10;\r
                        break;\r
                case 10:\r
-#if defined(CFG_PPC)\r
                        /* Test RES_SCHEDULER.\r
                         * Since GetResource(RES_SCHEDULER) only locks the\r
                         * scheduler (interrupts are still working) we the interrupt\r
@@ -93,15 +92,15 @@ void etask_sup_l_02(void) {
                        isrTask = Os_Arc_CreateIsr( isr2, 4/*prio*/,"soft_0");\r
 \r
 \r
-                       Irq_AttachIsr2(isrTask,NULL,INTC_SSCIR0_CLR0);\r
+                       Irq_AttachIsr2(isrTask,NULL,IRQ_SOFTINT_0);\r
                        /* Create an ISR1 */\r
-                       Irq_AttachIsr1(isr1,NULL,INTC_SSCIR0_CLR1,6);\r
+                       Irq_AttachIsr1(isr1,NULL,IRQ_SOFTINT_1,6);\r
 \r
                        GetTaskID(&task);\r
                        TEST_ASSERT( task == TASK_ID_etask_sup_l );\r
                        /* Lock the scheduler */\r
                        rv = GetResource(RES_SCHEDULER);\r
-                       Irq_GenerateSoftInt( INTC_SSCIR0_CLR0 );\r
+                       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
 \r
                        GetTaskID(&task);\r
 \r
@@ -115,7 +114,6 @@ void etask_sup_l_02(void) {
 \r
 //                     TEST_ASSERT( taskRunCnt == 1 );\r
                        // TODO:\r
-#endif\r
 \r
                        test_nr = 100;\r
                        break;\r
index 94f2913b3a9d76f248e515b1012dbe1447af8ee6..fac7b0f4e03703ec3e3dfec41eb810bd4bfb47dc 100644 (file)
@@ -81,7 +81,16 @@ typedef void (*test_func_t)( void );
 extern int test_suite;
 extern int test_nr;
 
-
+/* TODO: Move to a better place */
+#if defined(CFG_MPC55XX)
+/* On INTC first 8 interrupt are softtriggered */
+#define IRQ_SOFTINT_0          INTC_SSCIR0_CLR0
+#define IRQ_SOFTINT_1          INTC_SSCIR0_CLR1
+#elif defined(CFG_ARM_CM3)
+/* Cortex-M3 can softtrigger any interrupt. Use external here. */
+#define IRQ_SOFTINT_0          EXTI0_IRQn
+#define IRQ_SOFTINT_1          EXTI1_IRQn
+#endif
 
 #if 1
 #define SECTION_SUP