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 vUART1Task( 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 InitUart1(void)
\r
27 /* Initialize UART asynchronous mode */
\r
28 BGR1 = configCLKP1_CLOCK_HZ / 9600; /* 9600 Baud @ CLKP1 - 56 MHz */
\r
30 SCR1 = 0x17; /* 8N1 */
\r
31 SMR1 = 0x0d; /* enable SOT3, Reset, normal mode */
\r
32 SSR1 = 0x02; /* LSB first, enable receive interrupts */
\r
34 PIER08_IE5 = 1; /* enable input */
\r
35 DDR08_D5 = 0; /* switch P08_5 to input */
\r
36 DDR08_D6 = 1; /* switch P08_6 to output */
\r
39 void Putch1(char ch) /* sends a char */
\r
41 while (SSR1_TDRE == 0); /* wait for transmit buffer empty */
\r
42 TDR1 = ch; /* put ch into buffer */
\r
45 char Getch1(void) /* waits for and returns incomming char */
\r
47 volatile unsigned ch;
\r
49 while(SSR1_RDRF == 0); /* wait for data received */
\r
50 if (SSR1_ORE) /* overrun error */
\r
52 ch = RDR1; /* reset error flags */
\r
56 return (RDR1); /* return char */
\r
59 void Puts1(const char *Name1) /* Puts a String to UART */
\r
61 volatile portSHORT i,len;
\r
62 len = strlen(Name1);
\r
64 for (i=0; i<strlen(Name1); i++) /* go through string */
\r
68 Putch1(Name1[i]); /* send it out */
\r
72 void Puthex1(unsigned long n, unsigned char digits)
\r
74 unsigned portCHAR digit=0,div=0,i;
\r
76 div=(4*(digits-1)); /* init shift divisor */
\r
77 for (i=0;i<digits;i++)
\r
79 digit = ((n >> div)&0xF); /* get hex-digit value */
\r
80 Putch1(digit + ((digit < 0xA) ? '0' : 'A' - 0xA));
\r
81 div-=4; /* next digit shift */
\r
85 void Putdec1(unsigned long x, int digits)
\r
88 portCHAR buf[10],sign=1;
\r
90 if (digits < 0) { /* should be print of zero? */
\r
94 buf[digits]='\0'; /* end sign of string */
\r
96 for (i=digits; i>0; i--) {
\r
97 buf[i-1] = ASCII[x % 10];
\r
103 for (i=0; buf[i]=='0'; i++) { /* no print of zero */
\r
109 Puts1(buf); /* send string */
\r
112 void vTraceListTasks( unsigned portBASE_TYPE uxPriority )
\r
114 portENTER_CRITICAL();
\r
116 portENTER_CRITICAL();
\r
117 xTaskCreate( vUART1Task , ( signed portCHAR * ) "UART1", ( unsigned portSHORT ) 2048, ( void * ) NULL, uxPriority, &UART_TaskHandle );
\r
120 static void vUART1Task( void *pvParameters )
\r
122 portCHAR tasklist_buff[512];
\r
123 portCHAR trace_buff[512];
\r
124 unsigned portLONG trace_len;
\r
125 signed portLONG i, j, l=0;
\r
127 unsigned portCHAR ch;
\r
129 ( void ) pvParameters;
\r
131 Puts1("\n -------------MB96348 FreeRTOS DEMO Task List and Trace Utility----------- \n");
\r
135 Puts1("\n\rPress any of the following keys for the corresponding functionality: ");
\r
137 Puts1("\n\r1: To call vTaskList() and display current task status ");
\r
139 Puts1("\n\r2: To call vTaskStartTrace() and to display trace results once the trace ends");
\r
143 vTaskSuspend(NULL);
\r
150 vTaskList( ( signed char * ) tasklist_buff );
\r
151 Puts1("\n\rThe current task list is as follows....");
\r
152 Puts1("\n\r----------------------------------------------");
\r
153 Puts1("\n\rName State Priority Stack Number");
\r
154 Puts1("\n\r----------------------------------------------");
\r
155 Puts1(tasklist_buff);
\r
156 Puts1("\r----------------------------------------------");
\r
160 vTaskStartTrace(( signed char * ) trace_buff, 512);
\r
161 Puts1("\n\rThe trace started!!");
\r
162 vTaskDelay( ( portTickType ) 500);
\r
163 trace_len = ulTaskEndTrace();
\r
164 Puts1("\n\rThe trace ended!!");
\r
165 Puts1("\n\rThe trace is as follows....");
\r
166 Puts1("\n\r--------------------------------------------------------");
\r
167 Puts1("\n\r Tick | Task Number | Tick | Task Number |");
\r
168 Puts1("\n\r--------------------------------------------------------\n\r");
\r
170 for( i = 0 ; i < trace_len ; i+=4 )
\r
172 for( j = i+3 ; j >= i ; j-- )
\r
174 Puthex1(trace_buff[j],2);
\r
184 Puts1("\r--------------------------------------------------------");
\r
194 __interrupt void UART1_RxISR ( void )
\r
197 vTaskResume( UART_TaskHandle );
\r