| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> NIOS ii 实战篇 --- 按键控制LED -> 正文阅读 |
|
[嵌入式]NIOS ii 实战篇 --- 按键控制LED |
目录 1. 生成PIO,并配置? ? ? ? PIO IP核为avalon-MM从端口(NIOS内部互联总线接口)和通用I/O端口(FPGA PIN脚或verilog的设计接口)提供一个存储器映射(memory-mapped,存储区域和地址线一一对应的)接口。如下图所示:? ? ?????? ??1)添加PIO的IP(对于NIOS内核,需要的功能基本都是通过搭建一个个IP核实现软核的功能 。STM32的IC包含MCU、存储器、中断、外设、FLASH、JTAG接口等,对应到NIOS,基本都是以IP核的形式出现)。 其中,数据宽度选择4,代表着一共需要配置4个外设接口。 ????????2)每添加一个IP结构,均需要重新分配基地址,即为这个功能/外设分配寄存器的访问地址。 ????????3)? 生成NIOS II 核后,新建软件程序工程。可以在BSP的system.h中查看这个内核可以操作的外设包含哪些,一般与调用的IP核相关。例如在本项目中使用了PIO,那么就可以看到与PIO相关的配置。如下: ???????? ? ? ? ? 可以在driver目录下,查看这个项目支持包里面定义的函数。如下:这个项目里只有jtag、时钟、nios、system ID、on-chip-ram以及PIO这些IP核,因此包含的函数主要时uart的以及pio的。例如:altera_avalon_pio_regs.h中包含了PIO的API函数。 2. PIO对应的寄存器? ? ? ? 对PIO进行编程,就如对STM23的I/O口的操作,均是对寄存器进行操作。对地址的操作主要是通过基地址+偏移地址。如下所示: ?????????edgecapture是与中断配合使用。 ? ? ? ? 每个IP在eclipse中都有对应的寄存器描述文件,主要定义了IP的寄存器映射,硬件设备的宏定义以及操作的方法和函数等。? 3. API函数? ? ? ? 这里,与STM32的编程很相似,都是对外设的寄存器所在的地址进行操作,对一个外设,包含了各种不同的寄存器,但是这里面又与STM32有一些不同,例如,在STM32中要实现点亮LED灯,需要配置接口的使能寄存器,还有输出使能,并对ODR寄存器置位或清零,但是这里只需要操作下面的函数即可,因此有些不同,不同处还需要进一步研究。 ?IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LED_BASE,1<<i); 这里关于PIO包含的API函数有:
?4. PIO外部中断? ? ? ? NIOS ii的中断。其支持32个硬件中断,和STM32一样,每个中断都会对应一个中断服务函数(ISR),检测到中断时,都会现判断中断的优先级,然后再调用ISR。因此,同样与STM32,我们在应用中断时,首先需要使能中断,并且确定其优先级。然后编写中断服务函数。 ? ? ? ? 1)硬件配置:按键使用中断,确定优先级 ? ? ? ? 上面相当于硬件配置,要使用中断还需要软件注册中断函数,相当于SM32的配置中断向量表?。 ? ? ? ? 2)软件注册中断函数 ????????注册中断函数ISR,函数原型为: int alt_irq_register(alt_u32 id, alt_u32_irq, alt_irq_func_isr,void*isr_context, void* flag); id:中断优先级,即所注册的ISR是为哪个中断优先级的中断服务的; alt_u32_irq:中断号; alt_irq_func_isr:中断服务函数; void*isr_context:中断服务函数的形参,没有时给0就行; void* flag:保留的参数,没有时给0就行。 ????????3)编写中断服务函数 ????????与一般的函数定义没什么区别,只是对ISR的函数原型有特定的要求:void ISR_handler(void* context, alt_u32 id); context:传给ISR的形参,可以是UNLL; ? ? ? ? 如下: ????????中断函数为:(中断函数的执行需要先对中断进行注册)
? ? ? ? 中断初始化函数:
? ? ? ? 程序运行开始时,先使能按键对应的中断,然后将边沿捕捉寄存器清零,以便在中断来临时可以置1。然后用alt_ic_isr_register函数来进行中断注册,这样在中断产生时就知道需要执行哪个中断函数。其中,PIO_KEY_IRQ_INTERRUPT_CONTROLLER_ID,PIO_KEY_IRQ来自于system.h。 在使用上面的函数时,注意需要调用一些PIO的头文件以及中断的头文件:
5. 上电自启动功能? ? ? ? 即如果使用RAM作为程序的存储会,掉电后数据和程序均丢失。如果使用外部的flash存储程序就不会丢失,上电后会自动读取flash程序,称为上电自启动。方法如下面。 6. 程序flash固化? ? ? ? 要实现掉电程序不丢失,首先需要将程序存储在flash中,因此用Qsys生成NIOS II时,需要调用EPCS FLASH,并配置如下: ? ? ? ? 1)IP核内部的参数可以默认,生成IP核并连线。同时双击export栏的PIN,将外部接口输出; ? ? ? ? 2)配置NIOS的基地址,reset vector为FPGA复位或上电时从外部的flash中读取程序。Exception vector为其他的RAM存储器,这里是on-chip-ram,意思是FPGA把从flash的应用程序拷贝到RAM中后,应用程序才开始执行。 ? ? ? ? 3) 生成NIOS II,更新并生成引脚。通过pin planning与外部PIN连接。 ? ? ? ? 4)编写程序并building project。下载.sof文件到FPGA(nios ii --> quartus ii programmer)。 ? ? ? ? 5)nios ii --> flash programmer -->file --> new -->选择 get flash programmer system details from SOPC information file -->在SOPC information file name 选择本项目对应的 kernel.sopcinfo-->ok;? ? ? ? ? 6)? -->Connections ,连接成功后,有弹框出现。-->close; ? ? ? ? 7)-->add,在output_file文件夹下找到.sof文件,flash programmer工具会自动将.sof文件转换成.flash文件,用于EPCS FLASH烧录; ? ? ? ? 8)-->add,继续添加nios ii的应用程序.elf文件? --->start 开始烧写。通过短暂的 FLASH 擦除,编程,读取和校验的步骤,烧写完成。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 12:30:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |