Add very basic serial CLI to the Zynq demo - needs a lot of tidy up yet!

pull/4/head
Richard Barry 11 years ago
parent 51ea2639a9
commit d310ac4552

@ -32,6 +32,7 @@
</option>
<option id="xilinx.gnu.compiler.dircategory.includes.1516519458" name="Include Paths" superClass="xilinx.gnu.compiler.dircategory.includes" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS-Plus-CLI}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Standard_Demo_Tasks/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/ARM_CA9}&quot;"/>

@ -24,6 +24,11 @@
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
<linkedResources>
<link>
<name>src/FreeRTOS-Plus-CLI</name>
<type>2</type>
<locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Source/FreeRTOS-Plus-CLI</locationURI>
</link>
<link>
<name>src/FreeRTOS_Source</name>
<type>2</type>
@ -34,6 +39,11 @@
<type>2</type>
<locationURI>FREERTOS_ROOT/FreeRTOS/Demo/Common</locationURI>
</link>
<link>
<name>src/UARTCommandConsole.c</name>
<type>1</type>
<locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/UARTCommandConsole.c</locationURI>
</link>
</linkedResources>
<filteredResources>
<filter>

@ -128,6 +128,8 @@ void vApplicationIdleHook( void );
void vApplicationStackOverflowHook( xTaskHandle pxTask, char *pcTaskName );
void vApplicationTickHook( void );
XScuGic xInterruptController;
/*-----------------------------------------------------------*/
int main( void )
@ -155,7 +157,6 @@ static void prvSetupHardware( void )
{
BaseType_t xStatus;
XScuGic_Config *pxGICConfig;
XScuGic xInterruptController;
/* Ensure no interrupts execute while the scheduler is in an inconsistent
state. Interrupts are automatically enabled when the scheduler is

@ -228,6 +228,11 @@ extern void vRegTest2Implementation( void );
extern void vRegisterSampleCLICommands( void );
extern void vRegisterFileSystemCLICommands( void );
/*
* The task that manages the FreeRTOS+CLI input and output.
*/
extern void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );
/*-----------------------------------------------------------*/
/* The following two variables are used to communicate the status of the
@ -240,10 +245,6 @@ volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;
void main_full( void )
{
/* The baud rate setting here has no effect, hence it is set to 0 to
make that obvious. */
// xSerialPortInitMinimal( 0, mainUART_QUEUE_LENGTHS );
/* Start all the other standard demo/test tasks. The have not particular
functionality, but do demonstrate how to use the FreeRTOS API and test the
kernel port. */
@ -260,7 +261,7 @@ void main_full( void )
/* Start the tasks that implements the command console on the UART, as
described above. */
// vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );
vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );
/* Register the standard CLI commands. */
// vRegisterSampleCLICommands();
@ -294,7 +295,7 @@ void main_full( void )
for( ;; );
}
/*-----------------------------------------------------------*/
#error Fails when the tick hook is used
static void prvCheckTask( void *pvParameters )
{
portTickType xDelayPeriod = mainNO_ERROR_CHECK_TASK_PERIOD;

@ -77,6 +77,7 @@
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "comtest2.h"
@ -84,30 +85,99 @@
/* Demo application includes. */
#include "serial.h"
/* Xilinx includes. */
#include "xuartps.h"
#include "xscugic.h"
#include "xil_exception.h"
/*-----------------------------------------------------------*/
static XUartPs xUARTInstance;
extern XScuGic xInterruptController;
/*-----------------------------------------------------------*/
static void prvISRHandler( void *pvUnused, uint32_t ulEvent, uint32_t ulUnused2 );
/*
* See the serial2.h header file.
*/
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
xComPortHandle xSerialPortInitMinimal( uint32_t ulWantedBaud, UBaseType_t uxQueueLength )
{
return NULL;
BaseType_t xStatus;
XUartPs_Config *pxConfig;
/* Look up the UART configuration then initialise the dirver. */
pxConfig = XUartPs_LookupConfig( XPAR_XUARTPS_0_DEVICE_ID );
configASSERT( pxConfig );
xStatus = XUartPs_CfgInitialize( &xUARTInstance, pxConfig, pxConfig->BaseAddress );
configASSERT( xStatus == XST_SUCCESS );
XUartPs_SetBaudRate( &xUARTInstance, ulWantedBaud );
XUartPs_SetOperMode( &xUARTInstance, XUARTPS_OPER_MODE_NORMAL );
return 0;
}
/*-----------------------------------------------------------*/
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime )
BaseType_t xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime )
{
return 0;
TickType_t xTimeOnEntering;
const TickType_t xDelay = 10UL / portTICK_PERIOD_MS;
BaseType_t xReturn = 0;
xTimeOnEntering = xTaskGetTickCount();
do
{
/* Only wanting to receive one key press at a time. */
if( XUartPs_Recv( &xUARTInstance, pcRxedChar, sizeof( pcRxedChar ) ) != 0 )
{
xReturn = 1;
break;
}
else
{
vTaskDelay( xDelay );
}
} while( ( xTaskGetTickCount() - xTimeOnEntering ) <= xBlockTime );
return xReturn;
}
/*-----------------------------------------------------------*/
void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )
{
static const xTxDelay = 10UL / portTICK_PERIOD_MS;
uint32_t ulBytesSent = 0UL;
( void ) pxPort;
while( ulBytesSent < usStringLength )
{
ulBytesSent += XUartPs_Send( &xUARTInstance, pcString + ulBytesSent, usStringLength - ulBytesSent );
while( XUartPs_IsSending( &xUARTInstance ) )
{
vTaskDelay( xTxDelay );
}
}
}
/*-----------------------------------------------------------*/
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, portTickType xBlockTime )
{
static const xTxDelay = 10UL / portTICK_PERIOD_MS;
XUartPs_Send( &xUARTInstance, &cOutChar, sizeof( cOutChar ) );
while( XUartPs_IsSending( &xUARTInstance ) )
{
vTaskDelay( xTxDelay );
}
return 0;
}
/*-----------------------------------------------------------*/

Loading…
Cancel
Save