Beispiel #1
0
static void Callback(
	void *AppHandle,
	u32  Event,
	void *pArg)
{
	
	ADI_DEV_1D_BUFFER *pBuffer;			// pointer to the buffer that was processed
	
	// CASEOF (event type)
	switch (Event) {
		
		// CASE (buffer processed)
		case ADI_DEV_EVENT_BUFFER_PROCESSED:
		
			// identify which buffer is generating the callback
			// we're setup to only get callbacks on inbound buffers so we know this 
			// is an inbound buffer
			pBuffer = (ADI_DEV_1D_BUFFER *)pArg;

			if (pArg == &InboundBuffer)
			{ 

		    	InputBuffer[InputBufferhead] = InboundData;
				InputBufferhead = (InputBufferhead +1) % INBUFLEN;
			    
				if ((InputBufferhead +1) % INBUFLEN != InputBuffertail)
				
				// requeue the inbound buffer
				ezErrorCheck(adi_dev_Read(DriverHandle, ADI_DEV_1D, (ADI_DEV_BUFFER *)&InboundBuffer));
			}
			else if (pArg == &OutboundBuffer)
			{
			    sending_done = 1;
			}
			break;
			
		// CASE (an error)
		case ADI_UART_EVENT_BREAK_INTERRUPT:
			ezErrorCheck(ADI_UART_EVENT_BREAK_INTERRUPT);
			break;
		case ADI_UART_EVENT_FRAMING_ERROR:
			ezErrorCheck(ADI_UART_EVENT_FRAMING_ERROR);
			break;
		case ADI_UART_EVENT_PARITY_ERROR:
			ezErrorCheck(ADI_UART_EVENT_PARITY_ERROR);
			break;
		case ADI_UART_EVENT_OVERRUN_ERROR:
			ezErrorCheck(ADI_UART_EVENT_OVERRUN_ERROR);
			break;
			
	// ENDCASE
	}
	
	// return
}
Beispiel #2
0
void UARTinit( u32 baudrate )
{
    ADI_DCB_HANDLE			DCBManagerHandle = 0;		// handle to the callback service
	u32 cclk, sclk, vco;							// frequencies (note these are in MHz)
	u32 i; 											//loop variable
	
	ADI_DEV_CMD_VALUE_PAIR ConfigurationTable [] = {	// configuration table for the UART driver
		{ ADI_DEV_CMD_SET_DATAFLOW_METHOD, 	(void *)ADI_DEV_MODE_CHAINED	},
		{ ADI_UART_CMD_SET_DATA_BITS, 		(void *)8						},
		{ ADI_UART_CMD_ENABLE_PARITY, 		(void *)FALSE					},
		{ ADI_UART_CMD_SET_STOP_BITS, 		(void *)1						},
		{ ADI_UART_CMD_SET_BAUD_RATE, 		(void *)baudrate				},
		{ ADI_UART_CMD_SET_LINE_STATUS_EVENTS, 	(void *)TRUE					},
		{ ADI_DEV_CMD_END,					NULL							},
	};
	
	InputBufferhead = 0;
	InputBuffertail = 0;
	
	// create two buffers that will be initially be placed on the inbound queue
	// only the inbound buffer will have a callback
	InboundBuffer.Data = &InboundData;
	InboundBuffer.ElementCount = 1;
	InboundBuffer.ElementWidth = 1;
	InboundBuffer.CallbackParameter = (void*)&InboundBuffer;
	InboundBuffer.ProcessedFlag = FALSE;
	InboundBuffer.pNext = NULL;
	
	sending_done = 1;
	OutboundBuffer.Data = OutboundData;
	OutboundBuffer.ElementCount = 1;
	OutboundBuffer.ElementWidth = 1;
	OutboundBuffer.CallbackParameter = (void*)&OutboundBuffer;
	OutboundBuffer.ProcessedFlag = TRUE;
	OutboundBuffer.pNext = NULL;

	// open the UART driver for bidirectional data flow
	ezErrorCheck(adi_dev_Open(DeviceManagerHandle, &ADIUARTEntryPoint, 0, NULL, &DriverHandle, ADI_DEV_DIRECTION_BIDIRECTIONAL, NULL, DCBManagerHandle, Callback));
		
	// configure the UART driver with the values from the configuration table
   	ezErrorCheck(adi_dev_Control(DriverHandle, ADI_DEV_CMD_TABLE, ConfigurationTable));
		
	// give the device the inbound buffer
	ezErrorCheck(adi_dev_Read(DriverHandle, ADI_DEV_1D, (ADI_DEV_BUFFER *)&InboundBuffer));

	// enable data flow
	ezErrorCheck(adi_dev_Control(DriverHandle, ADI_DEV_CMD_SET_DATAFLOW, (void *)TRUE));	
	
}
Beispiel #3
0
void UARTwrite(u8* data, u32 len)
{
    while (len>0)
    {
		while (UARTsending());
		sending_done = 0;
		
		OutboundBuffer.ElementCount = min(OUTBUFLEN,len);
		memcpy( OutboundData, data, OutboundBuffer.ElementCount );
		len -= OutboundBuffer.ElementCount;
		data+= OutboundBuffer.ElementCount;
		OutboundBuffer.ProcessedFlag = 0;
		
		// requeue the outbound buffer
		ezErrorCheck(adi_dev_Write(DriverHandle, ADI_DEV_1D, (ADI_DEV_BUFFER *)&OutboundBuffer));
    }
	while (UARTsending());
}
Beispiel #4
0
u8 UARTread()
{
	u8 data;
	
	while (!UARThit());
	
	data = InputBuffer[InputBuffertail];
	InputBuffertail = (InputBuffertail +1) % INBUFLEN;
	
	if (InboundBuffer.ProcessedFlag == 1)
	{
	    InboundBuffer.ProcessedFlag = 0;
	
		// requeue the inbound buffer
		ezErrorCheck(adi_dev_Read(DriverHandle, ADI_DEV_1D, (ADI_DEV_BUFFER *)&InboundBuffer));
	}
		
	return data;
}
Beispiel #5
0
/*********************************************************************
*	Function:	main
*********************************************************************/
void main(void) {
	
	u32 ResponseCount;
	void *pExitCriticalArg;
	u32 i; //loop variable

	
	// initialize the EZ-Kit
	ezInit(1);

	// initialize the flag manager because the LEDs and buttons connect via flags
	// Since callbacks are not being used memory does not to be given to the service
	ezErrorCheck(adi_flag_Init(NULL, 0, &ResponseCount, NULL));
	
 	//***CODE SNIPPED****//		
	
	InitTimers();
	
	while (1) {
 	//***CODE SNIPPED****//
		}			
		
	} // END WHILE