From: richardbarry Date: Tue, 21 Oct 2008 13:27:58 +0000 (+0000) Subject: Continue Coldfire MCF52221 CodeWarrior demo. X-Git-Tag: V5.1.2~187 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=c301f627211c61446c39465ab4455daed0777892;p=freertos Continue Coldfire MCF52221 CodeWarrior demo. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@509 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo.mcp b/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo.mcp index 837597994..16b26f2c0 100644 Binary files a/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo.mcp and b/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo.mcp differ diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/CWSettingsWindows.stg b/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/CWSettingsWindows.stg index 75b25711d..175e7ab04 100644 Binary files a/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/CWSettingsWindows.stg and b/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/CWSettingsWindows.stg differ diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/INTERNAL_FLASH/TargetDataWindows.tdt b/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/INTERNAL_FLASH/TargetDataWindows.tdt index 1b913d221..40b17e5f1 100644 Binary files a/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/INTERNAL_FLASH/TargetDataWindows.tdt and b/Demo/ColdFire_MCF52221_CodeWarrior/RTOSDemo_Data/INTERNAL_FLASH/TargetDataWindows.tdt differ diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/lcf/MCF52221_INTERNAL_FLASH.lcf b/Demo/ColdFire_MCF52221_CodeWarrior/lcf/MCF52221_INTERNAL_FLASH.lcf index 72d2c1e8e..2c6123baf 100644 --- a/Demo/ColdFire_MCF52221_CodeWarrior/lcf/MCF52221_INTERNAL_FLASH.lcf +++ b/Demo/ColdFire_MCF52221_CodeWarrior/lcf/MCF52221_INTERNAL_FLASH.lcf @@ -8,7 +8,7 @@ MEMORY { vectorrom (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400 cfmprotrom (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000020 code (RX) : ORIGIN = 0x00000500, LENGTH = 0x0001FB00 - userram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00003C00 + userram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00004000 } SECTIONS { diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/sources/FreeRTOSConfig.h b/Demo/ColdFire_MCF52221_CodeWarrior/sources/FreeRTOSConfig.h index 4480d1f14..91874cbfa 100644 --- a/Demo/ColdFire_MCF52221_CodeWarrior/sources/FreeRTOSConfig.h +++ b/Demo/ColdFire_MCF52221_CodeWarrior/sources/FreeRTOSConfig.h @@ -69,8 +69,8 @@ #define configUSE_TICK_HOOK 0 #define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 80000000 ) #define configTICK_RATE_HZ ( ( portTickType ) 100 ) -#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 140 ) -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 14 * 1024 ) ) +#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 100 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 15000 ) ) #define configMAX_TASK_NAME_LEN ( 12 ) #define configUSE_TRACE_FACILITY 1 #define configUSE_16_BIT_TICKS 0 diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/sources/exceptions.c b/Demo/ColdFire_MCF52221_CodeWarrior/sources/exceptions.c index 93cedda05..810058115 100644 --- a/Demo/ColdFire_MCF52221_CodeWarrior/sources/exceptions.c +++ b/Demo/ColdFire_MCF52221_CodeWarrior/sources/exceptions.c @@ -12,6 +12,7 @@ extern void vPIT0InterruptHandler( void ); +extern void vUART0InterruptHandler( void ); extern void vPortYieldISR( void ); extern void vFECISRHandler( void ); @@ -401,7 +402,7 @@ __declspec(vectortable) vectorTableEntryType _vect[256] = { /* Interrupt vecto asm_exception_handler, /* 74 (0x128) Device-specific interrupts */ asm_exception_handler, /* 75 (0x12C) Device-specific interrupts */ asm_exception_handler, /* 76 (0x130) Device-specific interrupts */ - asm_exception_handler, /* 77 (0x134) Device-specific interrupts */ + vUART0InterruptHandler, /* 77 (0x134) Device-specific interrupts */ asm_exception_handler, /* 78 (0x138) Device-specific interrupts */ asm_exception_handler, /* 79 (0x13C) Device-specific interrupts */ vPortYieldISR, /* 80 (0x140) Device-specific interrupts */ diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/sources/main.c b/Demo/ColdFire_MCF52221_CodeWarrior/sources/main.c index 0b4502ceb..9456f3caf 100644 --- a/Demo/ColdFire_MCF52221_CodeWarrior/sources/main.c +++ b/Demo/ColdFire_MCF52221_CodeWarrior/sources/main.c @@ -80,14 +80,12 @@ /* Demo app includes. */ #include "BlockQ.h" -#include "death.h" #include "crflash.h" #include "partest.h" #include "semtest.h" -#include "PollQ.h" #include "GenQTest.h" #include "QPeek.h" -#include "recmutex.h" +#include "comtest2.h" /*-----------------------------------------------------------*/ @@ -108,18 +106,21 @@ error have been detected. */ /* Task priorities. */ #define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 ) -#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 ) #define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) #define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 ) #define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 ) -#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 ) -#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY ) #define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY ) -#define mainWEB_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 ) /* Co-routines are used to flash the LEDs. */ #define mainNUM_FLASH_CO_ROUTINES ( 3 ) +/* The baud rate used by the comtest tasks. */ +#define mainBAUD_RATE ( 38400 ) + +/* There is no spare LED for the comtest tasks, so this is set to an invalid +number. */ +#define mainCOM_LED ( 4 ) + /* * Configure the hardware for the demo. */ @@ -131,6 +132,12 @@ static void prvSetupHardware( void ); */ static void prvCheckTask( void *pvParameters ); +/* + * Implement the 'Reg test' functionality as described at the top of this file. + */ +static void vRegTest1Task( void *pvParameters ); +static void vRegTest2Task( void *pvParameters ); + /*-----------------------------------------------------------*/ /* Counters used to detect errors within the reg test tasks. */ @@ -148,6 +155,7 @@ int main( void ) vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY ); vStartQueuePeekTasks(); vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY ); + vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainBAUD_RATE, mainCOM_LED ); /* For demo purposes use some co-routines to flash the LEDs. */ vStartFlashCoRoutines( mainNUM_FLASH_CO_ROUTINES ); @@ -155,6 +163,11 @@ int main( void ) /* Create the check task. */ xTaskCreate( prvCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL ); + + /* Start the reg test tasks - defined in this file. */ + xTaskCreate( vRegTest1Task, ( signed portCHAR * ) "Reg1", configMINIMAL_STACK_SIZE, ( void * ) &ulRegTest1Counter, tskIDLE_PRIORITY, NULL ); + xTaskCreate( vRegTest2Task, ( signed portCHAR * ) "Reg2", configMINIMAL_STACK_SIZE, ( void * ) &ulRegTest2Counter, tskIDLE_PRIORITY, NULL ); + /* Start the scheduler. */ vTaskStartScheduler(); @@ -168,8 +181,9 @@ int main( void ) static void prvCheckTask( void *pvParameters ) { -unsigned ulTicksToWait = mainNO_ERROR_PERIOD, ulError = 0, ulLastRegTest1Count = 0, ulLastRegTest2Count = 0; +unsigned portLONG ulTicksToWait = mainNO_ERROR_PERIOD, ulError = 0, ulLastRegTest1Count = 0, ulLastRegTest2Count = 0; portTickType xLastExecutionTime; +volatile unsigned portBASE_TYPE uxUnusedStack; ( void ) pvParameters; @@ -202,6 +216,24 @@ portTickType xLastExecutionTime; { ulError |= 0x20UL; } + + if( xAreComTestTasksStillRunning() != pdTRUE ) + { + ulError |= 0x40UL; + } + + if( ulLastRegTest1Count == ulRegTest1Counter ) + { + ulError |= 0x1000UL; + } + + if( ulLastRegTest2Count == ulRegTest2Counter ) + { + ulError |= 0x1000UL; + } + + ulLastRegTest1Count = ulRegTest1Counter; + ulLastRegTest2Count = ulRegTest2Counter; /* If an error has been found then increase our cycle rate, and in so doing increase the rate at which the check task LED toggles. */ @@ -212,6 +244,9 @@ portTickType xLastExecutionTime; /* Toggle the LED each itteration. */ vParTestToggleLED( mainCHECK_LED ); + + /* For demo only - how much unused stack does this task have? */ + uxUnusedStack = uxTaskGetStackHighWaterMark( NULL ); } } /*-----------------------------------------------------------*/ @@ -256,4 +291,165 @@ void exit( int n ) ( void ) n; for( ;; ) {} } +/*-----------------------------------------------------------*/ + +static void vRegTest1Task( void *pvParameters ) +{ + /* Sanity check - did we receive the parameter expected? */ + if( pvParameters != &ulRegTest1Counter ) + { + /* Change here so the check task can detect that an error occurred. */ + for( ;; ) + { + } + } + + /* Set all the registers to known values, then check that each retains its + expected value - as described at the top of this file. If an error is + found then the loop counter will no longer be incremented allowing the check + task to recognise the error. */ + asm volatile ( "reg_test_1_start: \n\t" + " moveq #1, d0 \n\t" + " moveq #2, d1 \n\t" + " moveq #3, d2 \n\t" + " moveq #4, d3 \n\t" + " moveq #5, d4 \n\t" + " moveq #6, d5 \n\t" + " moveq #7, d6 \n\t" + " moveq #8, d7 \n\t" + " move #9, a0 \n\t" + " move #10, a1 \n\t" + " move #11, a2 \n\t" + " move #12, a3 \n\t" + " move #13, a4 \n\t" + " move #14, a5 \n\t" + " move #15, a6 \n\t" + " \n\t" + " cmpi.l #1, d0 \n\t" + " bne reg_test_1_error \n\t" + " cmpi.l #2, d1 \n\t" + " bne reg_test_1_error \n\t" + " cmpi.l #3, d2 \n\t" + " bne reg_test_1_error \n\t" + " cmpi.l #4, d3 \n\t" + " bne reg_test_1_error \n\t" + " cmpi.l #5, d4 \n\t" + " bne reg_test_1_error \n\t" + " cmpi.l #6, d5 \n\t" + " bne reg_test_1_error \n\t" + " cmpi.l #7, d6 \n\t" + " bne reg_test_1_error \n\t" + " cmpi.l #8, d7 \n\t" + " bne reg_test_1_error \n\t" + " move a0, d0 \n\t" + " cmpi.l #9, d0 \n\t" + " bne reg_test_1_error \n\t" + " move a1, d0 \n\t" + " cmpi.l #10, d0 \n\t" + " bne reg_test_1_error \n\t" + " move a2, d0 \n\t" + " cmpi.l #11, d0 \n\t" + " bne reg_test_1_error \n\t" + " move a3, d0 \n\t" + " cmpi.l #12, d0 \n\t" + " bne reg_test_1_error \n\t" + " move a4, d0 \n\t" + " cmpi.l #13, d0 \n\t" + " bne reg_test_1_error \n\t" + " move a5, d0 \n\t" + " cmpi.l #14, d0 \n\t" + " bne reg_test_1_error \n\t" + " move a6, d0 \n\t" + " cmpi.l #15, d0 \n\t" + " bne reg_test_1_error \n\t" + " move ulRegTest1Counter, d0 \n\t" + " addq #1, d0 \n\t" + " move d0, ulRegTest1Counter \n\t" + " bra reg_test_1_start \n\t" + "reg_test_1_error: \n\t" + " bra reg_test_1_error \n\t" + ); +} +/*-----------------------------------------------------------*/ + +static void vRegTest2Task( void *pvParameters ) +{ + /* Sanity check - did we receive the parameter expected? */ + if( pvParameters != &ulRegTest2Counter ) + { + /* Change here so the check task can detect that an error occurred. */ + for( ;; ) + { + } + } + + /* Set all the registers to known values, then check that each retains its + expected value - as described at the top of this file. If an error is + found then the loop counter will no longer be incremented allowing the check + task to recognise the error. */ + asm volatile ( "reg_test_2_start: \n\t" + " moveq #10, d0 \n\t" + " moveq #20, d1 \n\t" + " moveq #30, d2 \n\t" + " moveq #40, d3 \n\t" + " moveq #50, d4 \n\t" + " moveq #60, d5 \n\t" + " moveq #70, d6 \n\t" + " moveq #80, d7 \n\t" + " move #90, a0 \n\t" + " move #100, a1 \n\t" + " move #110, a2 \n\t" + " move #120, a3 \n\t" + " move #130, a4 \n\t" + " move #140, a5 \n\t" + " move #150, a6 \n\t" + " \n\t" + " cmpi.l #10, d0 \n\t" + " bne reg_test_2_error \n\t" + " cmpi.l #20, d1 \n\t" + " bne reg_test_2_error \n\t" + " cmpi.l #30, d2 \n\t" + " bne reg_test_2_error \n\t" + " cmpi.l #40, d3 \n\t" + " bne reg_test_2_error \n\t" + " cmpi.l #50, d4 \n\t" + " bne reg_test_2_error \n\t" + " cmpi.l #60, d5 \n\t" + " bne reg_test_2_error \n\t" + " cmpi.l #70, d6 \n\t" + " bne reg_test_2_error \n\t" + " cmpi.l #80, d7 \n\t" + " bne reg_test_2_error \n\t" + " move a0, d0 \n\t" + " cmpi.l #90, d0 \n\t" + " bne reg_test_2_error \n\t" + " move a1, d0 \n\t" + " cmpi.l #100, d0 \n\t" + " bne reg_test_2_error \n\t" + " move a2, d0 \n\t" + " cmpi.l #110, d0 \n\t" + " bne reg_test_2_error \n\t" + " move a3, d0 \n\t" + " cmpi.l #120, d0 \n\t" + " bne reg_test_2_error \n\t" + " move a4, d0 \n\t" + " cmpi.l #130, d0 \n\t" + " bne reg_test_2_error \n\t" + " move a5, d0 \n\t" + " cmpi.l #140, d0 \n\t" + " bne reg_test_2_error \n\t" + " move a6, d0 \n\t" + " cmpi.l #150, d0 \n\t" + " bne reg_test_2_error \n\t" + " move ulRegTest1Counter, d0 \n\t" + " addq #1, d0 \n\t" + " move d0, ulRegTest2Counter \n\t" + " bra reg_test_2_start \n\t" + "reg_test_2_error: \n\t" + " bra reg_test_2_error \n\t" + ); +} +/*-----------------------------------------------------------*/ + + diff --git a/Demo/ColdFire_MCF52221_CodeWarrior/sources/startcf.c b/Demo/ColdFire_MCF52221_CodeWarrior/sources/startcf.c index dabac672d..df6c7e28f 100644 --- a/Demo/ColdFire_MCF52221_CodeWarrior/sources/startcf.c +++ b/Demo/ColdFire_MCF52221_CodeWarrior/sources/startcf.c @@ -188,7 +188,7 @@ asm void _startup(void) { /* disable interrupts */ move.w #0x2700,sr - + /* Pre-init SP, in case memory for stack is not valid it should be setup using MEMORY_INIT before __initialize_hardware is called */