zoukankan      html  css  js  c++  java
  • xilinx基础入门

    2019.09.03

    一、基础部分及语法

    一、FPGA程序的固化

    [USF-XSim-62] 'simulate' step failed with errors. Please check the Tcl console or log files for more information.

    1、  在C语言代码中,行结尾反斜杠 起到换行作用,用于宏定义和字符串换行。其中宏定义使用居多。如果一行中有很多元素导致太长影响阅读,可以在结尾加 的方式实现换行,编译时会忽略以及其后的换行符,当做一行处理。………就是表示一行不间断。

    2、  关于各种电压:

    VCCINT:内部PL核心电压

    VCCAUX:辅助PL电压

    VCCBRAM:PL BRAM电压

    VCCPINT:PS内部核心电压

    VCCPAUX:PS辅助电压

    VCCDDR:DDR RAM的工作电压

    VREFP:XADC正参考电压

    VREFN:XADC负参考电压

    3、

    #ifdef __cplusplus

    Extern “C”{

    #endif

    代码说明:

    为了在C++代码中调用用c写成的库文件,就需要用extern”C”来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。

    二、断言函数

    #define Xil_AssertNonvoid(Expression)            

    {                                                 

        if (Expression) {                             

            Xil_AssertStatus = XIL_ASSERT_NONE;      

        } else {                                      

            Xil_Assert(__FILE__, __LINE__);           

            Xil_AssertStatus = XIL_ASSERT_OCCURRED;  

            return 0;                                  }}

    这个assert宏将用于返回值的函数,与Xil_AssertWait boolean进行容纳测试,以便失败的断言继续执行。

    一旦参数错误,将会执行  Xil_Assert(__FILE__, __LINE__);

     Xil_AssertStatus =XIL_ASSERT_OCCURRED; 

    他只需设置Xil_AssertStatus标志,并将错误位置信息转换为指定的路由。

    其中XIL_Assert的代码为

    void Xil_Assert(const char *File, int Line)

    {

        /* if the callback has been set then invoke it */

        if (Xil_AssertCallbackRoutine != 0) {

            (*Xil_AssertCallbackRoutine)(File, Line);

        }

    /* if specified, wait indefinitely such that the assert will show up in testing  */

      while (Xil_AssertWait) {

        }

    }

    一旦路由(route)等于0,即进行无限循环。

    中断的结束到底是怎么返回的?

    SDK函数库中在xil_assert文件中定义了两种函数返回的方式。

    第一种:

    typedef void (*Xil_AssertCallback) (const char8 *File, s32 Line);

    此处通过typedef定义了一个指针,该指针指向的数据类型为一个文件地址和一个操作属性。该定义在库中的说明是:

    This data type defines a callback to be invoked when an assert occurs. The callback is invoked only when asserts are enabled

    意思是次数据类型定义在发生断言时要调用的回调,只有在启用Assert时才会调用回调。

    这个定义在void Xil_AssertSetCallback(Xil_AssertCallback Routine) {

        Xil_AssertCallbackRoutine = Routine;

    };中进行引用,该函数的传入参数是Xil_AssertCallback类型的参数,参数Routine是一个指针,改指针所指向的地址寄存器中包含中文件(即主函数中上次执行的位置)和操作类型(Line)。对于赋值的Xil_AssertCallbackRoutine将在

    void Xil_Assert(const char8 *File, s32 Line)

    {

        /* if the callback has been set then invoke it */

        if (Xil_AssertCallbackRoutine != 0) {

            (*Xil_AssertCallbackRoutine)(File, Line);

        }

     

        /* if specified, wait indefinitely such that the assert will show up

         * in testing

         */

        while (Xil_AssertWait != 0) {

        }

    }

    中进行判断,该值就是一个进程的位置和操作属性的存储位置的指针。如果指针不为NULL,则toggle to该指针指向的位置按照操作说明进行对应的操作。

    接下来,该函数在

    #define Xil_AssertNonvoid(Expression)            

    {                                                 

        if (Expression) {                             

            Xil_AssertStatus = XIL_ASSERT_NONE;      

        } else {                                       

            Xil_Assert(__FILE__, __LINE__);           

            Xil_AssertStatus = XIL_ASSERT_OCCURRED;  

            return 0;                                 

        }                                             

    }

    中进行调用,如果传入的expression==1则断言状态变量为0,否则为1。但是,需要注意的是:Xil_Assert(__FILE__, __LINE__);由于没有有效的文件名称和操作属性传入,程序会在该函数中无限循环,不要被后面的return 0骗了,后面的语句是在test条件下才会有的,所以,如果传入的表达式是false,则程序无限循环。

    以上即为AssertNonvoid(expression)函数的原理!

    三、IIC配置与实现

    3.1 Ps(programming system)IIC 初始化

    入口参数: 配置实例地址和设备ID

    3.1.1 配置与复位

    实例初始化配置完毕之后,复位IIC设备使其进入初始化状态,设备配置在初始化完成之后,设备启动之前进行。

    -------XIixPs_Reset()函数

    1、  中止正在进行的所有传输__XiixPs_Abort()

    (1)、读取IIC中断屏蔽寄存器IMR,地址(0xe0004000+0x20)

    (2)、写中断禁用寄存器IDR,地址(0xe0004000+0x28),在中断禁用寄存器设置一个位,设置中断掩码寄存器中的相应位,有效的禁用要生成的相应中断。

    (3)、写中断控制寄存器ICR,地址(0xe0004000+0x00),写入0x40,复位控制寄存器并将fifi初始化为0,清除传输寄存器,设置后将在下一个APB时钟自动清除。

    (4)、读中断状态寄存器ISR,地址(0xe0004000+0x10),再写入该寄存器防止中断挂起

    (5)、恢复中断状态,由于已经读取了中断掩码寄存器,掩码寄存器为1的位对应的中断不能使能,所以对掩码寄存器的允许的中断对应的位即为0,进行去反操作写入中断使能寄存器,从而有效的产生对应中断。

     

    inclusion

    在进行复位之前要先终止所有的数据传输,这里的传输不仅仅是清除fifo,还有防止有突发中断的产生,所以首先读取中断掩码寄存器,该寄存器中为1的位禁止对应的中断,然后再读取清除fifo,然后再读取中断状态寄存器再写入防止中断悬空,最后使能中断,使能的是中断掩码寄存器允许的位,最后退出。

    2、寄存器写操作

    2.1 复位中断控制寄存器

    2.2复位中断超时寄存器

    2.3 复位所有中断使能寄存器(全部禁止)

    -------XiicPs_SelfTest()

    此函数用于中断控制寄存器和中断掩码寄存器是否为默认值,读取完毕之后进行比较,比较成功之后再写入控制、超时、使能寄存器,因为读取的时候对应寄存器的显示电平状态可能发生了改变,所以要再写一次。

    最后再写入、读取一次,再写入,这次写入的寄存器为从设备暂停寄存器,需单独写入配置,最后在进行复位操作。

    -------XiicPs_SetSclk( )

    传入参数为(I2C_Ptr,IIC_SCLK_RATE),,输入实例和理想baudrate

    Include:

    主要是寄存器的初始化为中断配置,然后进行自检测,最后设置BAUDRATE。

    四、AXI(Advanced eXtensible Interface)

    一、模块信号

    输入信号

    输入信号

    信号名

    功能描述

    S00_axi_aclk

    总线信号

     

    Axi_aresetn

    总线复位,低电平有效

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    iMX287A嵌入式Qt环境搭建
    iMX287A多种方法实现流水灯效果
    iMX287A交叉编译环境搭建
    cmake用法及常用命令总结(全)
    webrtc中AGC的应用
    h264和aac封装flv
    C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作
    关于Git无法提交 index.lock的解决办法
    git回滚到任意版本
    Git Submodule管理项目子模块
  • 原文地址:https://www.cnblogs.com/luxinshuo/p/11962889.html
Copyright © 2011-2022 走看看