ZYNQ: 驅動初始化--UART串口


@

套路如下:

1、定義硬件信息結構體

namePs_Config *Config;

2、定義驅動信息結構體

namePs name_Ps;

3、根據設備號和自動生成的硬件.c文件,獲取外設硬件信息

Config = namePs_LookupConfig(DEVICE_ID); //uart0、SD0都是0,uart1、SD1都是1

4、調用外設初始化函數對name_Ps賦值,后期就只需用name_Ps進行各種操作了!

Status = namePs_CfgInitialize(&name_Ps, Config, Config->BaseAddress);
if (Status != XST_SUCCESS)
{
	return XST_FAILURE;
}

5、這一步不同外設就不同了:調用配置函數對外設進行配置,例如uart就設置波特率等,MIO就設置輸入輸出等。。。

UART 串口

ZYNQ使用的UART1,在PL中使能。使用時想在PS改下串口波特率,發現代碼中沒有串口初始化函數。

BSP中有串口初始化函數,是以中斷方式初始化的,但是沒有調用。

int UartPDSA_Initiation(XScuGic *IntcInstPtr, XUartPDSA *xptrUartRs232, u16 DeviceId, u16 UartIntrId)

后使用如下代碼,加在main()函數中即可改變波特率:

XUartPs_Config *Config;
XUartPs Uart_Ps;
Config = XUartPs_LookupConfig(1);//UART0寫0,UART1寫1
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, 128000);//寫入想用的波特率

是PL完成了串口初始化?SDK 的BSP完成的初始化?

偶然在官方例程發現:UART被bootrom初始化完成:
在這里插入圖片描述


GPIO之 MIO控制 LED

MIO0、7、8接LED燈

#include "xparameters.h" //器件參數信息
#include "xstatus.h"     //包含XST_FAILURE和XST_SUCCESS的宏定義
#include "xil_printf.h"  //包含print()函數
#include "xgpiops.h"     //包含PS GPIO的函數聲明
#include "sleep.h"       //包含sleep()函數

//宏定義GPIO_DEVICE_ID
#define GPIO_DEVICE_ID      XPAR_XGPIOPS_0_DEVICE_ID
//連接到MIO的LED
 #define MIOLED0    7     //連接到MIO7
 #define MIOLED1    8     //連接到MIO8
 #define MIOLED2    0     //連接到MIO0
 
 XGpioPs Gpio;            // GPIO設備的驅動程序實例
 
 int main()
 {
     int Status;
     XGpioPs_Config *ConfigPtr;
 
     print("MIO Test! \n\r");
     ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
     Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
                     ConfigPtr->BaseAddr);
     if (Status != XST_SUCCESS){
         return XST_FAILURE;
     }
     //設置指定引腳的方向:0輸入,1輸出
     XGpioPs_SetDirectionPin(&Gpio, MIOLED0, 1);
     XGpioPs_SetDirectionPin(&Gpio, MIOLED1, 1);
     XGpioPs_SetDirectionPin(&Gpio, MIOLED2, 1);
     //使能指定引腳輸出:0禁止輸出使能,1使能輸出
     XGpioPs_SetOutputEnablePin(&Gpio, MIOLED0, 1);
     XGpioPs_SetOutputEnablePin(&Gpio, MIOLED1, 1);
     XGpioPs_SetOutputEnablePin(&Gpio, MIOLED2, 1);
 
     while (1) {
         XGpioPs_WritePin(&Gpio, MIOLED0, 0x0); //向指定引腳寫入數據:0或1
         XGpioPs_WritePin(&Gpio, MIOLED1, 0x0);
         XGpioPs_WritePin(&Gpio, MIOLED2, 0x0);
         sleep(1);                              //延時1秒
         XGpioPs_WritePin(&Gpio, MIOLED0, 0x1);
         XGpioPs_WritePin(&Gpio, MIOLED1, 0x1);
         XGpioPs_WritePin(&Gpio, MIOLED2, 0x1);
        sleep(1);
    }
    return XST_SUCCESS;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM