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;
}
posted @ 2022-03-02 09:27  solonj  阅读(1050)  评论(0编辑  收藏  举报