预先设计的NiosIIIO驱动与HALAPI.PDFVIP

  • 2
  • 0
  • 约1.3万字
  • 约 17页
  • 2018-06-08 发布于江苏
  • 举报
预先设计的NiosIIIO驱动与HALAPI

预先设计的Nios II I/O驱动和HAL API 预先设计的Nios II I/O驱动和HAL API 除了通用的I/O内核,Altera也提供了一些用于访问底层硬件的预先设计的设备驱 动程序和软件库。这些驱动程序和软件库都被整合到硬件抽象层(HAL)框架下。 软件工程师可以方便地使用这些系统库来访问底层硬件,而无需关心底层硬件的 实现细节。因此对于通用的I/O功能,应用程序便可使用API 函数或者C库函数与 I/O设备交互。 前续课程为闪烁LED系统开发了特定的设备驱动程序,但是这些驱动程序必须进 行相应的修改才能用于其它的应用之中,这将浪费大量的时间和精力。对于众多 的通用I/O外设,更好的方案是开发一套能够被多个应用所共享的灵活且稳健的 驱动程序。为了这个目的,Altera提供了一个框架,即HAL。 _regs.h文件 HAL为每个I/O设备和每个寄存器定义了独一无二的读和写宏,其的基本格式是: IORD_dev_reg(base_address) IOWR_dev_reg(base_address, data) (dev和reg分别是I/O设备和寄存器的名字) 这些宏存放在标记为dev_regs.h的头文件中。 例如,altera_avalon_pio_regs.h文件包含了用于PIO核访问的宏。 #define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0) #define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data) #define IORD_ALTERA_AVALON_PIO_DIRECTION(base) IORD(base, 1) #define IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data) IOWR(base, 1, data) #define IORD_ALTERA_AVALON_PIO_IRQ_MASK(base) IORD(base, 2) #define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data) IOWR(base, 2, data) #define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base) IORD(base, 3) #define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data) IOWR(base, 3, data) 偏移量 寄存器名称 R/W (n-1) … 2 1 0 数据 读访问 R 读入输入引脚上的逻辑电平值 0 寄存器 写访问 W 向PIO输出口写入新值 1 方向寄存器 R/W 控制每个I/O口的输入输出方向。0 :输入;1:输出。 2 中断屏蔽寄存器 R/W 使能或禁止每个输入端口的中断请求。1:中断使能;0 :禁止中断。 3 边沿捕获寄存器 R/W 当边沿事件发生时对应位置1。 _regs.h文件(续) 对于含有多个字段的寄存器,HAL定义针对位字段屏蔽和偏移量的常量。 例如,altera_avalon_jtag_uart_regs.h 中JTAG UART 的数据寄存器的代码段为: #define IOWR_ALTERA_AVALON_JTAG_UART_DATA(base, data) IOWR(base, 0, data) #define IORD_ALTERA_AVALON_JTAG_UART_DATA(base) IORD(base, 0) …… #define ALTERA_AVALON_JTAG_UART_DATA_DATA_MSK (0x000000FF) #define ALTERA_AVALON_JTAG_UART_DATA_DATA_OFST

文档评论(0)

1亿VIP精品文档

相关文档