ZYNQ c语言基础

377 阅读2分钟

1 什么是bsp

board support package 板级支持包,硬件支持包

使用bsp提供的驱动程序和函数。

也可以自己去编写基于寄存器的程序

2 实现对指定地址进行读写

使用指针读写

0x00000020

return *(volatile u8 *) 0x00000020 读操作

*(volatile u8 *) 0x00000020 = 0x12 将0x12写入地址中去。

u8:u8表示无符号char字符类型。

volatile修饰的数据,便一起不能对其进行优化,程序员不能改变他们的值,但是可以通过外部工具对其进行修改。

如: u8 a,b; { a=2; b=a; } 这时编器会把它改成: u8 a,b; { a=2; b=2; } 当运行到中间位置,中断把a改了,结果就是错的。 vol ...

使用IO读写函数

提供读写函数

xli_io.h文件

cpu的本质就是对地址不断读取数据。

3 知道各个外设的硬件信息,寄存器地址,位功能

CPU的编程就是对各个地址的存储器/寄存器进行读写操作,如何知道哪个地址的数据能够对应什么功能。 指定功能由哪个地址的存储器中的值控制。

UG585查看cpu数据手册,datasheet

image.png

image.png

通过绝对地址直接写入数据,absolute address

image.png *(volatile u32 *) 0xE000A04C = 0x123456

xuartps_hw.h

xspips_hw.h

xsdps_hw.h

4如何解决程序中的延时

sleep 函数 usleep 单位为1s

包含unistd.h头文件即可使用

include "unistd.h"

unistd.h提供对POSIX操作系统API的访问功能的头文件名称。

也可以使用定时器中断的形式

5 使用跨平台可移植的数据类型

包含了xil_types.h 头文件就可以使用这些数据类型定义变量。

u8

u16

换开发平台,跨平台会出现问题。

include "stdint.h"头文件

c语言标准的头文件stdint.h,使用该文件提供的数据类型。

unit8_t

unit16_t

unit32_t