int SetupPeripherals( void ) { int status; XGpio_Initialize(&gpio_blinky, XPAR_AXI_GPIO_LED_DEVICE_ID); XGpio_SetDataDirection(&gpio_blinky, 2, 0); XGpio_SetDataDirection(&gpio_blinky, 1, 0); XGpio_DiscreteWrite(&gpio_blinky, 1, 0); XGpio_DiscreteWrite(&gpio_blinky, 2, 0); XGpio_Initialize(&gpio_gain, XPAR_AXI_GPIO_GAIN_DEVICE_ID); XGpio_SetDataDirection(&gpio_gain, 1, 0); // out XGpio_Initialize(&gpio_sw_test, XPAR_AXI_GPIO_SWITCH_TEST_MODES_DEVICE_ID); XGpio_SetDataDirection(&gpio_sw_test, 1, 3); XGpio_Initialize(&gpio_sw_tx_pa, XPAR_AXI_GPIO_PA_DEVICE_ID); XGpio_SetDataDirection(&gpio_sw_tx_pa, 1, 1+2+4+8+16); XGpio_Initialize(&gpio_btn, XPAR_AXI_GPIO_BUTTON_DEVICE_ID); XGpio_SetDataDirection(&gpio_btn, 1, 1); pUartPsConfig = XUartPs_LookupConfig(XPAR_PS7_UART_1_DEVICE_ID); if (NULL == pUartPsConfig) { return XST_FAILURE; } status = XUartPs_CfgInitialize(&uartPs, pUartPsConfig, pUartPsConfig->BaseAddress); if (status != XST_SUCCESS) { return XST_FAILURE; } XUartPs_SetBaudRate(&uartPs, 115200); return XST_SUCCESS; }
/** * * This function sends 'Hello World' to an external terminal in polled mode. * The purpose of this function is to illustrate how to use the XUartPs driver. * * * @param DeviceId is the unique ID for the device from hardware build. * * @return * - XST_FAILURE if the UART driver could not be initialized * successfully. * - A non-negative number indicating the number of characters * sent. * * @note None. * ****************************************************************************/ int UartPsHelloWorldExample(u16 DeviceId) { u8 HelloWorld[] = "Hello World"; int SentCount = 0; int Status; XUartPs_Config *Config; /* * Initialize the UART driver so that it's ready to use * Look up the configuration in the config table and then initialize it. */ Config = XUartPs_LookupConfig(DeviceId); if (NULL == Config) { return XST_FAILURE; } Status = XUartPs_CfgInitialize(&Uart_Ps, Config, Config->BaseAddress); if (Status != XST_SUCCESS) { return XST_FAILURE; } XUartPs_SetBaudRate(&Uart_Ps, 115200); while (SentCount < (sizeof(HelloWorld) - 1)) { /* Transmit the data */ SentCount += XUartPs_Send(&Uart_Ps, &HelloWorld[SentCount], 1); } return SentCount; }
/*************************************************************************** * Sets a new BAUDRATE for Uart * * @InstancePtr: Pointer to the UART instance * * @Device_ID: Device ID of the UART * * @Baud: Enter the desired baudrate ***************************************************************************/ void Set_Baud_UART(XUartPs *InstancePtr, int Device_ID,u32 Baud) { int Status; Status = XUartPs_SetBaudRate(InstancePtr, Baud); if (Status != XST_SUCCESS) { xil_printf("Setting new baudrate for UART%i FAILED!\n \r",Device_ID); //return XST_FAILURE; } else { xil_printf("Setting new baudrate for UART/i SUCCESS!\n \r", Device_ID); } }
void init_uart() { #ifdef STDOUT_IS_PS7_UART /* Use the PS UART for Zynq devices */ XUartPs Uart_Ps_0; XUartPs_Config *Config_0 = XUartPs_LookupConfig(UART_DEVICE_ID); XUartPs_CfgInitialize(&Uart_Ps_0, Config_0, Config_0->BaseAddress); XUartPs_SetBaudRate(&Uart_Ps_0, UART_BAUD); #elif defined(STDOUT_IS_16550) XUartNs550_SetBaud(STDOUT_BASEADDR, XPAR_XUARTNS550_CLOCK_HZ, UART_BAUD); XUartNs550_SetLineControlReg(STDOUT_BASEADDR, XUN_LCR_8_DATA_BITS); #endif }
/* * See the serial2.h header file. */ xComPortHandle xSerialPortInitMinimal( uint32_t ulWantedBaud, UBaseType_t uxQueueLength ) { BaseType_t xStatus; XUartPs_Config *pxConfig; /* Create the queue used to hold received characters. NOTE THE COMMENTS AT THE TOP OF THIS FILE REGARDING THE USE OF QUEUES FOR THIS PURPSOE. */ xRxQueue = xQueueCreate( uxQueueLength, sizeof( char ) ); configASSERT( xRxQueue ); /* Create the semaphore used to signal the end of a transmission, then take the semaphore so it is in the correct state the first time xSerialSendString() is called. A block time of zero is used when taking the semaphore as it is guaranteed to be available (it was just created). */ xTxCompleteSemaphore = xSemaphoreCreateBinary(); configASSERT( xTxCompleteSemaphore ); xSemaphoreTake( xTxCompleteSemaphore, 0 ); /* Look up the UART configuration then initialise the dirver. */ pxConfig = XUartPs_LookupConfig( XPAR_XUARTPS_0_DEVICE_ID ); /* Initialise the driver. */ xStatus = XUartPs_CfgInitialize( &xUARTInstance, pxConfig, XPAR_PS7_UART_1_BASEADDR ); configASSERT( xStatus == XST_SUCCESS ); ( void ) xStatus; /* Remove compiler warning if configASSERT() is not defined. */ /* Misc. parameter configuration. */ XUartPs_SetBaudRate( &xUARTInstance, ulWantedBaud ); XUartPs_SetOperMode( &xUARTInstance, XUARTPS_OPER_MODE_NORMAL ); /* Install the interrupt service routine that is defined within this file. */ xStatus = XScuGic_Connect( &xInterruptController, XPAR_XUARTPS_1_INTR, (Xil_ExceptionHandler) prvUART_Handler, (void *) &xUARTInstance ); configASSERT( xStatus == XST_SUCCESS ); ( void ) xStatus; /* Remove compiler warning if configASSERT() is not defined. */ /* Ensure interrupts start clear. */ XUartPs_WriteReg( XPAR_PS7_UART_1_BASEADDR, XUARTPS_ISR_OFFSET, XUARTPS_IXR_MASK ); /* Enable the UART interrupt within the GIC. */ XScuGic_Enable( &xInterruptController, XPAR_XUARTPS_1_INTR ); /* Enable the interrupts of interest in the UART. */ XUartPs_SetInterruptMask( &xUARTInstance, XUARTPS_IXR_RXFULL | XUARTPS_IXR_RXOVR | XUARTPS_IXR_TOUT | XUARTPS_IXR_TXEMPTY ); /* Set the receive timeout. */ XUartPs_SetRecvTimeout( &xUARTInstance, 8 ); return ( xComPortHandle ) 0; }
void BSP_Init (void) { CPU_IntDis(); /* Disable all interrupts. */ Xil_ICacheEnable(); /* Enable the instruction cache. */ Xil_DCacheEnable(); /* Enable the Data cache. */ CSP_IntInit(); /* Initialize Interrupt controller module. */ #ifdef STDOUT_IS_PS7_UART XUartPs Uart_Ps_0; /* Use the PS UART for Zynq devices. */ XUartPs_Config *Config_0; Config_0 = XUartPs_LookupConfig(UART_DEVICE_ID); XUartPs_CfgInitialize(&Uart_Ps_0, Config_0, Config_0->BaseAddress); XUartPs_SetBaudRate(&Uart_Ps_0, 115200); #elif defined(STDOUT_IS_16550) XUartNs550_SetBaud(STDOUT_BASEADDR, XPAR_XUARTNS550_CLOCK_HZ, UART_BAUD); XUartNs550_SetLineControlReg(STDOUT_BASEADDR, XUN_LCR_8_DATA_BITS); #endif }
int SetupPeripherals( void ) { int status; XGpio_Initialize(&gpio_blinky, XPAR_AXI_GPIO_LED_DEVICE_ID); XGpio_SetDataDirection(&gpio_blinky, 2, 0); XGpio_SetDataDirection(&gpio_blinky, 1, 0); XGpio_DiscreteWrite(&gpio_blinky, 1, 0); XGpio_DiscreteWrite(&gpio_blinky, 2, 0); pUartPsConfig = XUartPs_LookupConfig(XPAR_PS7_UART_1_DEVICE_ID); if (NULL == pUartPsConfig) { return XST_FAILURE; } status = XUartPs_CfgInitialize(&uartPs, pUartPsConfig, pUartPsConfig->BaseAddress); if (status != XST_SUCCESS) { return XST_FAILURE; } XUartPs_SetBaudRate(&uartPs, 115200); return XST_SUCCESS; }
int Init_UART(void) { int Status = XST_SUCCESS; XUartPs_Config *Config_0; /* * Initialize the UART 0 and 1 driver so that it's ready to use * Look up the configuration in the config table, * then initialize it. */ Config_0 = XUartPs_LookupConfig(UART_DEVICE_ID); if (NULL == Config_0) { return XST_FAILURE; } Status = XUartPs_CfgInitialize(&Uart_Pss_0, Config_0, Config_0->BaseAddress); if (Status != XST_SUCCESS) { return XST_FAILURE; } XUartPs_SetBaudRate(&Uart_Pss_0, 9600); return XST_SUCCESS; }
int setupUartControl(){ int Status; u32 IntrMask; Config = XUartPs_LookupConfig(UART_DEVICE_ID); if (NULL == Config) { return XST_FAILURE; } Status = XUartPs_CfgInitialize(&Uart_Ps, Config, Config->BaseAddress); if (Status != XST_SUCCESS) { return XST_FAILURE; } XUartPs_SetBaudRate(&Uart_Ps, 115200); /* * Check hardware build. */ Status = XUartPs_SelfTest(&Uart_Ps); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* * Connect the UART to the interrupt subsystem such that interrupts * can occur. This function is application specific. */ Status = SetupInterruptSystem(&InterruptController, &Uart_Ps, UART_INT_IRQ_ID); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* * Setup the handlers for the UART that will be called from the * interrupt context when data has been sent and received, specify * a pointer to the UART driver instance as the callback reference * so the handlers are able to access the instance data */ XUartPs_SetHandler(&Uart_Ps, (XUartPs_Handler)Handler, &Uart_Ps); /* * Enable the interrupt of the UART so interrupts will occur */ IntrMask = XUARTPS_IXR_TOUT | XUARTPS_IXR_PARITY | XUARTPS_IXR_FRAMING | XUARTPS_IXR_OVER | XUARTPS_IXR_TXEMPTY | XUARTPS_IXR_RXFULL | XUARTPS_IXR_RXOVR; XUartPs_SetInterruptMask(&Uart_Ps, IntrMask); /* * Set the receiver timeout. If it is not set, and the last few bytes * of data do not trigger the over-water or full interrupt, the bytes * will not be received. By default it is disabled. * * The setting of 8 will timeout after 8 x 4 = 32 character times. * Increase the time out value if baud rate is high, decrease it if * baud rate is low. */ XUartPs_SetRecvTimeout(&Uart_Ps, 255); return 0; }
/** * * Initializes a specific XUartPs instance such that it is ready to be used. * The data format of the device is setup for 8 data bits, 1 stop bit, and no * parity by default. The baud rate is set to a default value specified by * Config->DefaultBaudRate if set, otherwise it is set to 19.2K baud. The * receive FIFO threshold is set for 8 bytes. The default operating mode of the * driver is polled mode. * * @param InstancePtr is a pointer to the XUartPs instance. * @param Config is a reference to a structure containing information * about a specific XUartPs driver. * @param EffectiveAddr is the device base address in the virtual memory * address space. The caller is responsible for keeping the address * mapping from EffectiveAddr to the device physical base address * unchanged once this function is invoked. Unexpected errors may * occur if the address mapping changes after this function is * called. If address translation is not used, pass in the physical * address instead. * * @return * * - XST_SUCCESS if initialization was successful * - XST_UART_BAUD_ERROR if the baud rate is not possible because * the inputclock frequency is not divisible with an acceptable * amount of error * * @note * * The default configuration for the UART after initialization is: * * - 19,200 bps or XPAR_DFT_BAUDRATE if defined * - 8 data bits * - 1 stop bit * - no parity * - FIFO's are enabled with a receive threshold of 8 bytes * - The RX timeout is enabled with a timeout of 1 (4 char times) * * All interrupts are disabled. * *****************************************************************************/ s32 XUartPs_CfgInitialize(XUartPs *InstancePtr, XUartPs_Config * Config, u32 EffectiveAddr) { s32 Status; u32 ModeRegister; u32 BaudRate; /* * Assert validates the input arguments */ Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(Config != NULL); /* * Setup the driver instance using passed in parameters */ InstancePtr->Config.BaseAddress = EffectiveAddr; InstancePtr->Config.InputClockHz = Config->InputClockHz; InstancePtr->Config.ModemPinsConnected = Config->ModemPinsConnected; /* * Initialize other instance data to default values */ InstancePtr->Handler = XUartPs_StubHandler; InstancePtr->SendBuffer.NextBytePtr = NULL; InstancePtr->SendBuffer.RemainingBytes = 0U; InstancePtr->SendBuffer.RequestedBytes = 0U; InstancePtr->ReceiveBuffer.NextBytePtr = NULL; InstancePtr->ReceiveBuffer.RemainingBytes = 0U; InstancePtr->ReceiveBuffer.RequestedBytes = 0U; /* * Flag that the driver instance is ready to use */ InstancePtr->IsReady = XIL_COMPONENT_IS_READY; /* * Set the default baud rate here, can be changed prior to * starting the device */ BaudRate = (u32)XUARTPS_DFT_BAUDRATE; Status = XUartPs_SetBaudRate(InstancePtr, BaudRate); if (Status != (s32)XST_SUCCESS) { InstancePtr->IsReady = 0U; } else { /* * Set up the default data format: 8 bit data, 1 stop bit, no * parity */ ModeRegister = XUartPs_ReadReg(InstancePtr->Config.BaseAddress, XUARTPS_MR_OFFSET); /* * Mask off what's already there */ ModeRegister &= (~((u32)XUARTPS_MR_CHARLEN_MASK | (u32)XUARTPS_MR_STOPMODE_MASK | (u32)XUARTPS_MR_PARITY_MASK)); /* * Set the register value to the desired data format */ ModeRegister |= ((u32)XUARTPS_MR_CHARLEN_8_BIT | (u32)XUARTPS_MR_STOPMODE_1_BIT | (u32)XUARTPS_MR_PARITY_NONE); /* * Write the mode register out */ XUartPs_WriteReg(InstancePtr->Config.BaseAddress, XUARTPS_MR_OFFSET, ModeRegister); /* * Set the RX FIFO trigger at 8 data bytes. */ XUartPs_WriteReg(InstancePtr->Config.BaseAddress, XUARTPS_RXWM_OFFSET, 0x08U); /* * Set the RX timeout to 1, which will be 4 character time */ XUartPs_WriteReg(InstancePtr->Config.BaseAddress, XUARTPS_RXTOUT_OFFSET, 0x01U); /* * Disable all interrupts, polled mode is the default */ XUartPs_WriteReg(InstancePtr->Config.BaseAddress, XUARTPS_IDR_OFFSET, XUARTPS_IXR_MASK); Status = XST_SUCCESS; } return Status; }