1 /* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. FUJITSU */
\r
2 /* MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR */
\r
3 /* ELIGIBILITY FOR ANY PURPOSES. */
\r
4 /* (C) Fujitsu Microelectronics Europe GmbH */
\r
5 /*------------------------------------------------------------------------
\r
8 -------------------------------------------------------------------------*/
\r
11 /*************************@INCLUDE_START************************/
\r
12 #include "mb96348hs.h"
\r
13 #include "FreeRTOS.h"
\r
17 static void vUART2Task( void *pvParameters );
\r
19 /**************************@INCLUDE_END*************************/
\r
20 /*********************@GLOBAL_VARIABLES_START*******************/
\r
21 const char ASCII[] = "0123456789ABCDEF";
\r
23 xTaskHandle UART_TaskHandle;
\r
25 void InitUart2(void)
\r
27 /* Initialize UART asynchronous mode */
\r
28 BGR2 = configCLKP1_CLOCK_HZ / 9600; /* 9600 Baud @ CLKP1 - 56 MHz */
\r
30 SCR2 = 0x17; /* 8N1 */
\r
31 SMR2 = 0x0d; /* enable SOT3, Reset, normal mode */
\r
32 SSR2 = 0x02; /* LSB first, enable receive interrupts */
\r
34 PIER05_IE0 = 1; /* enable input */
\r
35 DDR05_D0 = 0; /* switch P05_0 to input */
\r
36 DDR05_D1 = 1; /* switch P05_1 to output */
\r
40 void Putch2(char ch) /* sends a char */
\r
42 while (SSR2_TDRE == 0); /* wait for transmit buffer empty */
\r
43 TDR2 = ch; /* put ch into buffer */
\r
46 char Getch2(void) /* waits for and returns incomming char */
\r
48 volatile unsigned ch;
\r
50 while(SSR2_RDRF == 0); /* wait for data received */
\r
51 if (SSR2_ORE) /* overrun error */
\r
53 ch = RDR2; /* reset error flags */
\r
57 return (RDR2); /* return char */
\r
60 void Puts2(const char *Name2) /* Puts a String to UART */
\r
62 volatile portSHORT i,len;
\r
63 len = strlen(Name2);
\r
65 for (i=0; i<strlen(Name2); i++) /* go through string */
\r
69 Putch2(Name2[i]); /* send it out */
\r
73 void Puthex2(unsigned long n, unsigned char digits)
\r
75 unsigned portCHAR digit=0,div=0,i;
\r
77 div=(4*(digits-1)); /* init shift divisor */
\r
78 for (i=0;i<digits;i++)
\r
80 digit = ((n >> div)&0xF); /* get hex-digit value */
\r
81 Putch2(digit + ((digit < 0xA) ? '0' : 'A' - 0xA));
\r
82 div-=4; /* next digit shift */
\r
86 void Putdec2(unsigned long x, int digits)
\r
89 portCHAR buf[10],sign=1;
\r
91 if (digits < 0) { /* should be print of zero? */
\r
95 buf[digits]='\0'; /* end sign of string */
\r
97 for (i=digits; i>0; i--) {
\r
98 buf[i-1] = ASCII[x % 10];
\r
104 for (i=0; buf[i]=='0'; i++) { /* no print of zero */
\r
110 Puts2(buf); /* send string */
\r
113 void vTraceListTasks( unsigned portBASE_TYPE uxPriority )
\r
115 portENTER_CRITICAL();
\r
117 portENTER_CRITICAL();
\r
118 xTaskCreate( vUART2Task , ( signed portCHAR * ) "UART2", ( unsigned portSHORT ) 2048, ( void * ) NULL, uxPriority, &UART_TaskHandle );
\r
121 static void vUART2Task( void *pvParameters )
\r
123 portCHAR tasklist_buff[512];
\r
124 portCHAR trace_buff[512];
\r
125 unsigned portLONG trace_len;
\r
126 signed portLONG i, j, l=0;
\r
128 unsigned portCHAR ch;
\r
130 ( void ) pvParameters;
\r
132 Puts2("\n -------------MB96348 FreeRTOS DEMO Task List and Trace Utility----------- \n");
\r
136 Puts2("\n\rPress any of the following keys for the corresponding functionality: ");
\r
138 Puts2("\n\r1: To call vTaskList() and display current task status ");
\r
140 Puts2("\n\r2: To call vTaskStartTrace() and to display trace results once the trace ends");
\r
144 vTaskSuspend(NULL);
\r
151 vTaskList( ( signed char * ) tasklist_buff );
\r
152 Puts2("\n\rThe current task list is as follows....");
\r
153 Puts2("\n\r----------------------------------------------");
\r
154 Puts2("\n\rName State Priority Stack Number");
\r
155 Puts2("\n\r----------------------------------------------");
\r
156 Puts2(tasklist_buff);
\r
157 Puts2("\r----------------------------------------------");
\r
161 vTaskStartTrace(( signed char * ) trace_buff, 512);
\r
162 Puts2("\n\rThe trace started!!");
\r
163 vTaskDelay( ( portTickType ) 500);
\r
164 trace_len = ulTaskEndTrace();
\r
165 Puts2("\n\rThe trace ended!!");
\r
166 Puts2("\n\rThe trace is as follows....");
\r
167 Puts2("\n\r--------------------------------------------------------");
\r
168 Puts2("\n\r Tick | Task Number | Tick | Task Number |");
\r
169 Puts2("\n\r--------------------------------------------------------\n\r");
\r
171 for( i = 0 ; i < trace_len ; i+=4 )
\r
173 for( j = i+3 ; j >= i ; j-- )
\r
175 Puthex2(trace_buff[j],2);
\r
185 Puts2("\r--------------------------------------------------------");
\r
195 __interrupt void UART2_RxISR ( void )
\r
198 vTaskResume( UART_TaskHandle );
\r