NIOS II的UART
NIOS II的UART 与通用串口兼容,用于可以设置自己的需求通信模式,比如波特率奇偶校验停止位数据位和其他控制信号
主要的寄存器有: txdata,rxdata,status control divisor endof packet,串口要说的东西其实不是很多,但是其确有很多很多的位定义,比如irrdy itrdy等等发送接受传输和错误检测等控制位,这里就不一一列出了,太多了,用的东西在NIOS中看名字大概也能看出来.具体见头文件
#i nclude"altera_avalon_uart_regs.h"
下面是我曾经用过的一个UART通信中断程序
int handle_uart_interrupts(void* context, alt_u32 id)
{
FILE *uart_file;
uart_file=fopen("/dev/uart_0","r+");
if (uart_file == NULL)
{
printf("can't open uart_device!");
return 0 ;
}
uart_buf[k++]=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE);
if(uart_buf[k-1]=='f')
{
char search[20] = "s ";
uart_buf[k-1]='\0';
k=0;
//printf("串口%s ", uart_buf);
if (cur_panel.id == 0)
{
search[0] = 'c';
if (strlen(uart_buf) == 2)
{
search[2] = '0';
search[3] = '\0';
}
}
if (strlen(uart_buf) == 6)
{
search[2] = '9';
search[3] = '\0';
}
strcat(search, uart_buf);
strcpy(sendbuf, search);
}
fclose(uart_file);
return 0;
}
仔细看看上面的程序,并与头文件#i nclude"altera_avalon_uart_regs.h"中所定义的可用寄存器比较一下会发现,上述写法并不可取,上述程序接受数据是字符的依次读入,其实可以在控制位和发送接受寄存器的配合下,则可以很高效的写出通信程序,而不必像上面那样显得有点"笨".
NIOS II的PIO
PIO模块也作为SOPC Builder库中的一个组件,可以是1-32位的并行接口,有多种配置选项,比如输入\输出\双向\触发方式(若用于中断的话)
其相关的寄存器如下:
数据寄存器data
方向寄存器direction
中断允许寄存器interruptmask
边沿捕获寄存器(edgecapture) (RISING.FALLING.ANY)
PIO的应用还是比较简单的,一般作为NIOS 与外部电路(还是FPGA内)的接口,比如数据\中断控制等等,下面贴上PIO的一些设置项,同样在system.h头文件中,几乎所有的设置都可以在system.h和PTF文件中找到原型.
#define PIO_NAME "/dev/pio"
#define PIO_TYPE "altera_avalon_pio"
#define PIO_BASE 0x00001000
#define PIO_SPAN 16
#define PIO_DO_TEST_BENCH_WIRING 0
#define PIO_DRIVEN_SIM_VALUE 0x0000
#define PIO_HAS_TRI 0
#define PIO_HAS_OUT 1
#define PIO_HAS_IN 0
#define PIO_CAPTURE 0
#define PIO_EDGE_TYPE "NONE"
#define PIO_IRQ_TYPE "NONE"
#define PIO_FREQ 50000000
我想上述各个选项的含义就不多说了,应该很好理解,下面贴一个当时写过的一个PIO中断控制程序,求大家批评.
#i nclude "altera_avalon_pio_regs.h"
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xf);
alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts);
void handle_button_interrupts()
{}
大概好象是这个样子的,不是记得很清楚了,仅供参考
NIOS II 的定时器
如果你对单片机熟悉的话,那么NIOS II的定时器会很简单的理解,并很好的应用.定时器模块是NIOS 开发工具包的一个库组件,其可用于周期脉冲发生器或看门狗定时器.记得当时参加NIOS 竞赛的时候发现很多的资料不仅老,而且少,所以我这里先把一些关键寄存器说一下(想到哪,说到哪,有点乱)
NIOS 定时器模块是32位的内部定时器,以下寄存器均为16位.
寄存器名status 位0 : to位,内部计时器为0时,to 位置1
位1: run位,内部计时器运行时,run位置1,否则0
control 位0: ito 位,如果该位置1,则当状态寄存器的to 位置1(定时器溢出),计时器发出中断请求.若其置0,则不产生中断.
位1: cont 位内部计时器为0时,,计时器重载preiodl和preiodh,若cont 为1,则定时器连续计时,只有写stop位停止,若cont 为0,则重载初值后,停止计时.
位2: start 见名知意
位3: stop 见名知意
periodl 计数器低16位
periodh 计数器高16位
snapl 计数器捕捉寄存器(读地位状态)
snaph 计数器捕捉寄存器(读高位状态)
对nios中的定时器的具体功能设定可以通过SOPC中进行相应勾选
若需要watch dog的话,则在SOPC中选择Timer,在Preset configration选择watch dog
关于对看门狗的具体设置,则在头文件system.h中加以修改,具体如下:
#define WATCH_DOG_NAME "/dev/watch_dog"
#define WATCH_DOG_TYPE "altera_avalon_timer"
#define WATCH_DOG_BASE 0x00001020
#define WATCH_DOG_SPAN 32
#define WATCH_DOG_IRQ 0
#define WATCH_DOG_ALWAYS_RUN 1
#define WATCH_DOG_FIXED_PERIOD 1
#define WATCH_DOG_SNAPSHOT 0
#define WATCH_DOG_PERIOD 1
#define WATCH_DOG_PERIOD_UNITS "ms"
#define WATCH_DOG_RESET_OUTPUT 1
#define WATCH_DOG_TIMEOUT_PULSE_OUTPUT 0
#define WATCH_DOG_MULT 0.001
#define WATCH_DOG_FREQ 50000000
若应用为计时器的话,则关于在NIOS IDE中的具体编程,在头文件include "altera_avalon_timer_regs.h"中定义了所有的寄存器的地址,通过IOWR IORD等指令可以很方面的进行定时器的设计
/******************************************************************************
* *
* License Agreement *
* *
* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. *
* All rights reserved. *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the "Software"), *
* to deal in the Software without restriction, including without limitation *
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
* and/or sell copies of the Software, and to permit persons to whom the *
* Software is furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included in *
* all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
* DEALINGS IN THE SOFTWARE. *
* *
* This agreement shall be governed in all respects by the laws of the State *
* of California and by the laws of the United States of America. *
* *
******************************************************************************/ #ifndef __ALTERA_AVALON_TIMER_REGS_H__
#define __ALTERA_AVALON_TIMER_REGS_H__
#i nclude
/* STATUS register */
#define ALTERA_AVALON_TIMER_STATUS_REG 0
#define IOADDR_ALTERA_AVALON_TIMER_STATUS(base) \
__IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_STATUS_REG)
#define IORD_ALTERA_AVALON_TIMER_STATUS(base) \
IORD(base, ALTERA_AVALON_TIMER_STATUS_REG)
#define IOWR_ALTERA_AVALON_TIMER_STATUS(base, data) \
IOWR(base, ALTERA_AVALON_TIMER_STATUS_REG, data)
#define ALTERA_AVALON_TIMER_STATUS_TO_MSK (0x1)
#define ALTERA_AVALON_TIMER_STATUS_TO_OFST (0)
#define ALTERA_AVALON_TIMER_STATUS_RUN_MSK (0x2)
#define ALTERA_AVALON_TIMER_STATUS_RUN_OFST (1)
/* CONTROL register */
#define ALTERA_AVALON_TIMER_CONTROL_REG 1
#define IOADDR_ALTERA_AVALON_TIMER_CONTROL(base) \
__IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_CONTROL_REG)
#define IORD_ALTERA_AVALON_TIMER_CONTROL(base) \
IORD(base, ALTERA_AVALON_TIMER_CONTROL_REG)
#define IOWR_ALTERA_AVALON_TIMER_CONTROL(base, data) \
IOWR(base, ALTERA_AVALON_TIMER_CONTROL_REG, data)
#define ALTERA_AVALON_TIMER_CONTROL_ITO_MSK (0x1)
#define ALTERA_AVALON_TIMER_CONTROL_ITO_OFST (0)
#define ALTERA_AVALON_TIMER_CONTROL_CONT_MSK (0x2)
#define ALTERA_AVALON_TIMER_CONTROL_CONT_OFST (1)
#define ALTERA_AVALON_TIMER_CONTROL_START_MSK (0x4)
#define ALTERA_AVALON_TIMER_CONTROL_START_OFST (2)
#define ALTERA_AVALON_TIMER_CONTROL_STOP_MSK (0x8)
#define ALTERA_AVALON_TIMER_CONTROL_STOP_OFST (3)
/* PERIODL register */
#define ALTERA_AVALON_TIMER_PERIODL_REG 2
#define IOADDR_ALTERA_AVALON_TIMER_PERIODL(base) \
__IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIODL_REG) #define IORD_ALTERA_AVALON_TIMER_PERIODL(base) \
IORD(base, ALTERA_AVALON_TIMER_PERIODL_REG)
#define IOWR_ALTERA_AVALON_TIMER_PERIODL(base, data) \
IOWR(base, ALTERA_AVALON_TIMER_PERIODL_REG, data)
#define ALTERA_AVALON_TIMER_PERIODL_MSK (0xFFFF)
#define ALTERA_AVALON_TIMER_PERIODL_OFST (0)
/* PERIODH register */
#define ALTERA_AVALON_TIMER_PERIODH_REG 3
#define IOADDR_ALTERA_AVALON_TIMER_PERIODH(base) \
__IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIODH_REG) #define IORD_ALTERA_AVALON_TIMER_PERIODH(base) \
IORD(base, ALTERA_AVALON_TIMER_PERIODH_REG)
#define IOWR_ALTERA_AVALON_TIMER_PERIODH(base, data) \
IOWR(base, ALTERA_AVALON_TIMER_PERIODH_REG, data)
#define ALTERA_AVALON_TIMER_PERIODH_MSK (0xFFFF)
#define ALTERA_AVALON_TIMER_PERIODH_OFST (0)
/* SNAPL register */
#define ALTERA_AVALON_TIMER_SNAPL_REG 4
#define IOADDR_ALTERA_AVALON_TIMER_SNAPL(base) \
__IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAPL_REG) #define IORD_ALTERA_AVALON_TIMER_SNAPL(base) \
IORD(base, ALTERA_AVALON_TIMER_SNAPL_REG)
#define IOWR_ALTERA_AVALON_TIMER_SNAPL(base, data) \
IOWR(base, ALTERA_AVALON_TIMER_SNAPL_REG, data)
#define ALTERA_AVALON_TIMER_SNAPL_MSK (0xFFFF)
#define ALTERA_AVALON_TIMER_SNAPL_OFST (0)
/* SNAPH register */
#define ALTERA_AVALON_TIMER_SNAPH_REG 5
#define IOADDR_ALTERA_AVALON_TIMER_SNAPH(base) \
__IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAPH_REG)
#define IORD_ALTERA_AVALON_TIMER_SNAPH(base) \
IORD(base, ALTERA_AVALON_TIMER_SNAPH_REG)
#define IOWR_ALTERA_AVALON_TIMER_SNAPH(base, data) \
IOWR(base, ALTERA_AVALON_TIMER_SNAPH_REG, data)
#define ALTERA_AVALON_TIMER_SNAPH_MSK (0xFFFF)
#define ALTERA_AVALON_TIMER_SNAPH_OFST (0)
#endif /* __ALTERA_AVALON_TIMER_REGS_H__ */
NIOS II DMA
NIOS DMA同样是Altera SOPC Builder库组件
DMA可用于存储器之间、存储器与外设、外设之间的数据传输,允许没有CPU干预,完成固定长度或者可变长度的数据传输
DMA外设通过两个Avalon主端口(一读一写)和一从端口控制。
典型DMA传递过程如下:
1。通过写控制端口设置DMA的数据传输方式
2。启动DMA外设,实施数据传输(CPU不干预)
3。DMA读传输主端口从目标地址(内存或者外设)读取数据,写端口向目的地址(内存或者外设)写数据。读写之间通过FIFO进行数据缓冲。
4。只指定字节数的数据传输完成或者传输了一个包结束(EOP)时,DMA将结束传输。DMA外设可以在传输结束时发出中断请求。
5。传输当中或者结束后,都可以通过查看DMA的状态寄存器来判断传输在进行还是已经结束
主要寄存器:status 第0位:done
第1位:busy
第2位:reop(读取当前数据包结束)
第3位:weop(写当前数据包结束)
第4位:len(完成一次DMA传输,len置1)
readaddress(主读取起始地址),存放的是传输数据的源地址,其宽度由用户在SOPC中自己定义。(与外设匹配)
writeaddress(主写入起始地址),与上类似
length ,存放读写端口之间需要传输的字节数,长度寄存器宽度由系统生成时的设置决定,DMA每完成一次写传输,length寄存器值减一,当减为0时,len位使能。其寄存器的值按照字节数计算,双字传输,必须是4的倍数,字的传输,当然是2的倍数啦!!
control 寄存器:位0:byte 字节传输
位1:hw 字传输
位2:word双字传输
位3:go DMA 使能
位4:i_en 中断使能
位5:reen 读数据包使能
位6:ween写数据包使能
位7:leen ,置1时,DMA在传输完length数目数据的时候结束传输(已经知道传输数据量),若设置0,则不会停止,使用于数据量不确定的场合。
位8:rcon 从固定地址读取
位9:wcon 从固定地址写入
读数据的地址每次访问递增1.2.4个字节,具体是几取决去传输的是字节、字、或者半字,若rcon置1,则地址不递增。
当done&&i_en == 1时候,dma向外设发出中断请求,典型的中断处理程序首先读取状态寄存器的len,reop,weop位来判断中断原因。然后,写转台寄存器清除中断,处理后,进行下一次DMA传输。
NIOS II常用函数详解
IO操作函数
函数原型:IORD(BASE, REGNUM)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量
函数说明:从基地址为BASE的设备中读取寄存器中偏移量为REGNUM的单元里面的值。寄存器的值在地址总线的范围之内。
返回值:-
函数原型:IOWR(BASE, REGNUM, DATA)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据
函数说明:往偏移量为REGNUM寄存器中写入数据。寄存器的值在地址总线的范围之内。
返回值:-
函数原型:IORD_32DIRECT(BASE, OFFSET)
输入参数:BASE为寄存器的基地址,OFFSET为寄存器的的偏移量
函数说明:从地址位置为BASE+OFFSET的寄存器中直接读取32Bit的数据
返回值:-
函数原型:IORD_16DIRECT(BASE, OFFSET)
输入参数:BASE为寄存器的基地址,OFFSET为寄存器的的偏移量
函数说明:从地址位置为BASE+OFFSET的寄存器中直接读取16Bit的数据
返回值:-
函数原型:IORD_8DIRECT(BASE, OFFSET)
输入参数:BASE为寄存器的基地址,OFFSET为寄存器的的偏移量
函数说明:从地址位置为BASE+OFFSET的寄存器中直接读取8Bit的数据
返回值:-
函数原型:IOWR_32DIRECT(BASE, OFFSET, DATA)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据
函数说明:往地址位置为BASE+OFFSET的寄存器中直接写入32Bit的数据
返回值:-
函数原型:IOWR_16DIRECT(BASE, OFFSET, DATA)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据
函数说明:往地址位置为BASE+OFFSET的寄存器中直接写入16Bit的数据
返回值:-
函数原型:IOWR_8DIRECT(BASE, OFFSET, DATA)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据
函数说明:往地址位置为BASE+OFFSET的寄存器中直接写入8Bit的数据
返回值:-
Dma:
函数原型:int alt_dma_rxchan_close (alt_dma_rxchan rxchan)
输入参数:rxchan为接收信道
函数说明:函数alt_dma_rxchan_close ()通知系统:应用程序已经完成DMA
接收信道rxchan,目前执行是成功的
返回值:成功返回为0,反之为-1
函数原型:alt_dma_rxchan_depth(alt_dma_rxchan dma)
输入参数:dma
函数说明:函数alt_dma_rxchan_depth ()返回传送到特别DMA的最大数量(深度)的接收请求
返回值:DMA的最大数量
函数原型:int alt_dma_rxchan_ioctl (alt_dma_rxchan dma, int req, void* arg)
输入参数:dma直接存储器名, req为请求操作的列举, arg由请求决定
函数说明:通过DMA接收信道执行设备的具体I/O操作
返回值:成功返回请求具体值,反之返回为负数
请求类型
请求类型请求类型说明
ALT_DMA_SET_MODE_8 传输以8Bit为单位的数据,arg值忽略
ALT_DMA_SET_MODE_16 传输以16Bit为单位的数据,arg值忽略
ALT_DMA_SET_MODE_32 传输以32Bit为单位的数据,arg值忽略
ALT_DMA_SET_MODE_64 传输以64Bit为单位的数据,arg值忽略
ALT_DMA_SET_MODE_128 传输以128Bit为单位的数据,arg值忽略
ALT_DMA_TX_ONLY_ON (1) 软件控制下只能发送
ALT_DMA_TX_ONLY_OFF (1) 自定义模式,软件控制下可以接收,发送
ALT_DMA_RX_ONLY_ON (1) 软件控制下只能接收
ALT_DMA_RX_ONLY_OFF (1) 自定义模式,软件控制下可以接收,发送
函数原型:alt_dma_rxchan alt_dma_rxchan_open (const char* name)
输入参数:name为常数字符指针,如/dev/dma_0
函数说明:为DMA接收信道获得一个alt_dma_rxchan描述符
返回值:成功返回非0,反之返回为0
函数原型:int alt_dma_rxchan_prepare (alt_dma_rxchan dma, void* data,
alt_u32 length, alt_rxchan_done * done, void* handle)
输入参数:dma使用的信道;data接收数据位置的指针;length最大的接收数据长度;done一旦数据被接收,调用返回函数;handle,非透明值传到done
函数说明:发送一个接收请求到DMA接收信道,
返回值:成功返回0,反之返回为负数
函数原型:int alt_dma_rxchan_reg (alt_dma_rxchan_dev * dev)
输入参数:dev接收信道设备名
函数说明:给系统寄存DMA接收信道
返回值:成功返回0,反之返回为负数
函数原型:int alt_dma_txchan_close (alt_dma_txchan txchan)
输入参数:txchan发送信道名
函数说明:通知系统:应用程序已经完成DMA发送信道txchan
返回值:成功返回0,反之返回为负数
函数原型:int alt_dma_txchan_ioctl (alt_dma_txchan dma, int req, void* arg)
输入参数:dma直接存储器名;req为请求操作的列举;arg请求的额外参数,由请求决定
函数说明:通过DMA发送信道执行设备的具体I/O操作
返回值:成功返回请求具体值,反之返回为负数
函数原型:alt_dma_txchan alt_dma_txchan_open (const char* name)
输入参数:name为常数字符指针,如/dev/dma_0
函数说明:为DMA发送信道获得一个alt_dma_rxchan描述符
返回值:成功返回非0,反之返回为0
函数原型:int alt_dma_txchan_reg (alt_dma_txchan_dev* dev)
输入参数:dev接收信道设备名
函数说明:给系统寄存DMA发送信道
返回值:成功返回0,反之返回为负数
函数原型:int alt_dma_txchan_send (alt_dma_txchan dma, const void* from,
alt_u32 length, alt_txchan_done* done, void* handle)
输入参数:dma使用的信道;data接收数据位置的指针;length最大的接收数据长度;done一旦数据被接收,调用返回函数;handle,非透明值传到done
函数说明:发送一个发送请求到DMA发送信道,
返回值:发送成功返回0,反之返回为负数
函数原型:nt alt_dma_txchan_space (alt_dma_txchan dma)
输入参数:dma 直接存储器名
函数说明:返回被传送到具体DMA发送信道的发送请求数目
返回值:返回发送请求数目
Flash
函数原型:int alt_erase_flash_block(alt_flash_fd* fd, int offset, int length)
输入参数:fd为具体的flash设备;offset擦除的flash模块的偏移量;length擦除的flash模块的长度
函数说明:擦除单独的一个flash模块
返回值:发送成功返回0,反之返回为负数
函数原型:void alt_flash_close_dev(alt_flash_fd * fd)
输入参数:fd为具体的flash设备
函数说明:关闭flash设备
返回值:-
函数原型:alt_flash_fd * alt_flash_open_dev(const char* name)
输入参数:
函数说明:打开flash设备。一旦打开,函数alt_write_flash()用来写入,函数alt_read_flash()用来读取数据,或者使用函数alt_get_flash_info(), alt_erase_flash_block(), alt_write_flash_block(),控制单个模块
返回值:失败返回0,成功其他值
函数原型:int alt_get_flash_info(alt_flash_fd* fd, flash_region ** info,
int* number_of_regions)
输入参数:fd flash设备;info指向flash_region结构体的指针;number_of_regions
函数说明:得到擦除flash区域的细节
返回值:发送成功返回0,反之返回为负数
函数原型:int alt_read_flash(alt_flash_fd* fd, int offset, void* dest_addr, int length)
输入参数:dest_addr目标地址指针
函数说明:从flash偏移量为offset字节开始读取数据,写入到目标地址dest_addr中
返回值:成功返回0,反之为非0
函数原型:int alt_write_flash(alt_flash_fd* fd, int offset, const void* src_addr,
int length)
输入参数:src_addr源地址;fd,flash设备;offset 偏移量;length字节长度
函数说明:写数据到flsah中,要写的数据在源地址src_addr中
返回值:成功返回0,反之为非0
函数原型:int alt_write_flash_block(alt_flash_fd* fd, int block_offset, int data_offset,
const void *data, int length)
输入参数:fd;data_offset起始写数据的偏移量;length为要写数据的长度
函数说明:写入到一个已擦除的flash模块
返回值:成功返回0,反之为非0
Irq
函数原型:alt_irq_context alt_irq_disable_all (void)
输入参数:void
函数说明:禁止所有中断
返回值:传递的值作为随后的函数调用的输入参数
函数原型:void alt_irq_enable_all (alt_irq_context context)
输入参数:先前调用函数alt_irq_disable_all (void)的返回值,
函数说明:启动所有中断
返回值:-
函数原型:int alt_irq_enabled (void)
输入参数:void
函数说明:启动中断
返回值:禁止中断返回0,反之为非0
函数原型:int alt_irq_register (alt_u32 id, void* context, void (*isr)(void*, alt_u32))
输入参数:id,32位无符号数,中断使能;context和id是isr的两个输入参数;中断激活时调用isr
函数说明:寄存一个isr
返回值:成功返回0,反之为非0
函数原型:int alt_write_flash(alt_flash_fd* fd, int offset, const void* src_addr,
int length)
输入参数:src_addr源地址;fd,flash设备;offset 偏移量;length字节长度
函数说明:写数据到flsah中,要写的数据在源地址src_addr中
返回值:成功返回0,反之为非0
函数原型:int alt_write_flash_block(alt_flash_fd* fd, int block_offset, int data_offset,
const void *data, int length)
输入参数:fd;data_offset起始写数据的偏移量;length为要写数据的长度
函数说明:写入到一个已擦除的flash模块
返回值:成功返回0,反之为非0
函数原型:int close (int filedes)
输入参数:filedes,描述符
函数说明:标准的UNIX函数close(),关闭文件描述符filedes
返回值:成功返回0,反之为-1
函数原型:int open (const char* pathname, int flags, mode_t mode)
输入参数:pathname, 路径名;flags,O_RDONLY或O_WRONLY 或O_RDWR,分别对应着只读,只写,或
读写操作;mode,使用许可说明
函数说明:打开文件或设备,返回一个文件描述符(读写中使用的非负整数)
返回值:成功返回文件描述符,反之返回-1
函数原型:int read(int file, void *ptr, size_t len)
输入参数:file文件描述符;ptr为读数据的位置指针,len读数据的长度,单位为字节
函数说明:从文件或设备中读取数据块
返回值:成功返回读取的字节数,反之返回-1
函数原型:clock_t times (struct tms *buf)
输入参数:buf结构体指针
函数说明:兼容newlib,tms的结构体指针如下:
type struct
{clock_t tms_utime;
clock_t tms_stime;
clock_t tms_cutime;
clock_t tms_sutime;
};
tms_utime:CPU索取用户指令的执行时间
tms_stime:CPU索取由系统表示的过程的执行时间
tms_cutime:所有子进程tms_utime和tms_cutime的时间之和
tms_sutime:所有子进程tms_stime和tms_sutime的时间之和
返回值:返回时钟数,没有时钟则返回0
函数原型:int usleep (int us)
输入参数:us,单位为微秒
函数说明:直到us微秒后才解除阻塞,即其功能相当于延时us微秒
返回值:成功返回0,反之为-1,有错误发生显示错误发生原因
函数原型:int wait(int *status)
输入参数:status 进程状态指针
函数说明:功能是等候所有子进程退出,由于HAL不支持分散子进程,函数立即返回
返回值:status内容清0,表明没有子进程;返回值为-1,且errno置为ECHILD,表明没有子进程等候
函数原型:int write(int file, const void *ptr, size_t len)
输入参数:file文件描述符;ptr为读数据的位置指针,len读数据的长度,单位为字节
函数说明:往文件或设备写入数据块,
返回值:成功返回写入的字节数,也可能少于请求的长度;反之返回-1,万一有错误发生,errno被设置为发生的原因
数据的标准类型
类型说明
alt_8 符号8位整数
alt_u8 无符号8位整数
alt_16 符号16位整数
alt_u16 无符号16位整数
alt_32 符号32位整数
alt_u32 无符号32位整数
下面为自己整理
函数原型:int fopen (char * file_name, way_use);
输入参数:file_name文件名,way_use使用文件方式,比如r,w分别对应着读写
函数说明:打开文件,对其进行某种文件操作
返回值:打不开则出错,返回一个空指针NULL
函数原型:int fclose (fp)
输入参数:fp的定义为:FILE *fp
函数说明:关闭文件fp
返回值:成功返回0,反之为-1(EOF)
函数原型:int fread(void *ptr, int size, int count, FILE * fp);
输入参数:buffer为指针;是读入数据地存放地址;size读字节数;count读字节数地数目;fp文件型指针
函数说明:从一个流中读取数据
返回值:成功返回值为count
函数原型:int fwrite(void *ptr, int size, int count, FILE *fp)
输入参数:buffer为指针;是读入数据地存放地址;size读字节数;count读字节数地数目;fp文件型指针,
函数说明:写内容到流中
返回值:成功返回值为count
函数原型:int fprintf(FILE *fp, char *format[, argument,...]);
输入参数:fp文件型指针;format格式字符串;[, argument,...]输出列表,如:
fprintf(fp,“%d,%f”,i,t)
函数说明:传送格式化输出到一个流中
返回值:-
函数原型:int fscanf(FILE * fp, char *format[,argument...])
输入参数:fp文件型指针;format格式字符串;[, argument,...]输入列表,如:
fscanf(fp,“%d,%f”,i,t)
函数说明:从一个流中执行格式化输入
返回值:-
函数原型:int fputc(int ch, FILE *fp)
输入参数:ch字符;fp:文件型指针
函数说明:送一个字符到一个流中
返回值:成功返回字符,反之返回-1(EOF)
函数原型:int fgetc(FILE *fp);
输入参数:fp:文件型指针
函数说明:从流中读取字符
返回值:遇到文件结束返回-1(EOF)
函数原型:int putw(int w, FILE *fp)
输入参数:w: 字符或字; fp:文件型指针
函数说明:把一字符或字送到流中
返回值:-
函数原型:int getw(FILE *fp)
输入参数:fp:文件型指针
函数说明:从流中取一整数
返回值:-
函数原型:int rewind(FILE *fp)
输入参数:fp:文件型指针
函数说明:将文件指针重新指向一个流的开头
返回值:-
函数原型:int fseek(FILE *fp, long offset, int fromwhere);
输入参数:fp:文件型指针;offset:long型偏移量;fromwhere:起始点
起始点为0,1,2分别代表文件开始,当前位置,文件末尾
函数说明:重定位流上的文件指针
返回值:-
函数原型:int ferror(FILE *fp)
输入参数:fp:文件型指针
函数说明:检测流上的错误
返回值:未出错返回值为0,反之为非0
函数原型:long ftell(FILE *fp)
输入参数:fp:文件型指针
函数说明:返回当前文件指针,得到当前位置
返回值:返回值为-1表示出错,反之为非0
函数原型:void clearerr(FILE *fp)
输入参数:fp:文件型指针
函数说明:复位错误标志
返回值:出错为非0,反之为0
函数原型:char *fgets(char *string, int n, FILE *fp)
输入参数:string:字符串指针;fp:文件型指针
函数说明:从流中读取一字符串,但只从文件输入n-1个字符,后一个为…\0?结束标志位
返回值:-
函数原型:nt fputs(char *string, FILE *fp)
输入参数:string:字符串指针;fp:文件型指针
函数说明:送一个字符串到一个流中
返回值:-
函数原型:int feof(FILE *fp)
输入参数:fp:文件型指针
函数说明:检测流上的文件结束符
返回值:-
Nios II IDE Command Line Tools
Tool Descriptor
nios2-create-system-library 创建一个新系统库工程
nios2-create-application-project 创建一个C/C++应用库工程
nios2-build-project 使用Nios II IDE编译工程,创建或更新文件编写来编译工程,该操作工程必须是存在当前的Nios II IDE工作区间
nios2-import-project 导入一个以前创建的Nios II IDE工程到当前的工作区间
nios2-delete-project 从Nios II IDE工作区间删除工程
Altera Command-Line Tools
Tool Descriptor
nios2-download 为调试或运行下载代码到目标处理器
nios2-flash-programmer 编程数据到目标板的flash存储器上
nios2-gdb-server 通过TCP,用目标Nios II处理器把GNU调试器远程的串口协议分组翻译为共同测试行动小组(JTAG)的事务
nios2-terminal 用JTAG通用异步收发机(UART)执行终止Nios II系统里面的I/O
validate_zip 核实指定的zip文件是否兼容Altera只读zip文件系统
File Conversion Utilities
Utility Descriptor
bin2flash 为下载到flash存储器上,将二进制文件转换为.flash文件
elf2dat 为适应Verilog HDL硬件仿真,将.elf可执行文件格式转换为.dat文件格式
elf2flash 为下载到flash存储器上,将.elf可执行文件格式转换为.flash文件
elf2hex 将.elf可执行文件格式转换为Intel.hex文件格式
elf2mem 在指定的Nios II系统中为存储设备生成存储内容
elf2mif
将.elf可执行文件格式转换为Quartus II
内存初始化文件(.mif)格式
flash2dat
为适应Verilog HDL硬件仿真,将.flash可执行文件格式转换为.dat文件格式
mk-nios2-
signaltap-mnemonic-table 获得一个.elf文件和SOPC Builder 系统文件(.ptf),创建一个.stp包含Nios II 子令集记忆表和Altera?s SignalTap? II logic分析仪符号的文件
sof2flash
为下载到flash存储器上,将FPGA配置文件(.sof)转换为.flash文件
Backward Compatibility Tools
Tool Descriptor
nios2-build 基于传统SDK库的编译和链接软件工程
nios2-run 下载程序到Nios II处理器,终止I/O的变成
nios2-debug
下载程序到Nios II处理器,启动洞察力的调试器
nios2-console
打开FS2命令行接口(CLI),连接到Nios II处理器
IORD_16DIRECT(BASE, OFFSET)
从地址位置为BASE+OFFSET的寄存器中直接读取16Bit的数据
IORD_8DIRECT(BASE, OFFSET)
从地址位置为BASE+OFFSET的寄存器中直接读取8Bit的数据
IOWR_32DIRECT(BASE, OFFSET, DATA)
往地址位置为BASE+OFFSET的寄存器中直接写入32Bit的数据
IOWR_16DIRECT(BASE, OFFSET, DATA)
往地址位置为BASE+OFFSET的寄存器中直接写入16Bit的数据
IOWR_8DIRECT(BASE, OFFSET, DATA)
往地址位置为BASE+OFFSET的寄存器中直接写入8Bit的数据
IORD(BASE, REGNUM)
从基地址为BASE的设备中读取偏移量为REGNUM的寄存器里面的值。寄存器的值在地址总线的范围之内。IOWR(BASE, REGNUM, DATA)
BASE为基地址,往偏移量为REGNUM寄存器中写入数据。寄存器的值在地址总线的范围之内。
IORD_32DIRECT(BASE, OFFSET)
BASE为寄存器的基地址,OFFSET为寄存器的的偏移量。
从地址位置为BASE+OFFSET的寄存器中直接读取32Bit的数据
IORD_16DIRECT(BASE, OFFSET)
从地址位置为BASE+OFFSET的寄存器中直接读取16Bit的数据
IORD_8DIRECT(BASE, OFFSET)
从地址位置为BASE+OFFSET的寄存器中直接读取8Bit的数据
IOWR_32DIRECT(BASE, OFFSET, DATA)
往地址位置为BASE+OFFSET的寄存器中直接写入32Bit的数据
IOWR_16DIRECT(BASE, OFFSET, DATA)
往地址位置为BASE+OFFSET的寄存器中直接写入16Bit的数据
IOWR_8DIRECT(BASE, OFFSET, DATA)
往地址位置为BASE+OFFSET的寄存器中直接写入8Bit的数据
Proe中的部分函数关系 一、函数关系 sin 正弦Cos 余弦tan 正切asin 反正弦acos 反余弦atan 反正切sinh 双曲线余弦cosh 双曲线正弦tanh 双曲线正切spar 平方根exp e的幂方根abs 绝对值log 以10为底的对数ln 自然对数 ceil 不小于其值的最小整数floor 不超过其值的最大整数 二、齿轮公式 alpha=20 m=2 z=30 c=0.25 ha=1 db=m*z*cos(alpha) r=(db/2)/cos(t*50) theta=(180/pi)*tan(t*50)-t*50 z=0 三、蜗杆的公式da=8为蜗杆外径m=0.8 为模数angle=20压力角 L=30长度q直径系数d分度圆直径f齿根圆直径n实数
其中之间的关系 q=da/m-2 d=q*m df=(q-2.4)*m n=ceil(2*l/(pi*m)) 在可变剖面扫描的时候运用公式sd4=trajpar*360*n 在扫描切口的时候绘制此图形,其中红色的高的计算公式是sd5=pi*m/2 五、方向盘的公式sd4=sd6*(1-(sin(trajpar*360*36)+1)/8) 其中sd4是sd6的(3/4或者7/8),sin(trajpar*360*36的意思是转过360度且有36个振幅似的 六、凸轮的公式sd5=evalgraph("cam2",trajpar*360) r=150 theta=t*360 z=9*sin(10*t*360) 在方向按sin(10*t*360)的函数关系,9为高的9倍10为10个振幅似的 七、锥齿轮公式 m=4模数z =50齿轮齿数z-am=40与之啮合的齿轮齿数angle=20压力角b=30齿厚long分度圆锥角 d分度圆直径da齿顶圆直径df齿根圆直径db基圆直径关系:long=atan(z/z-am) d=m*z da=d+2*m*cos(long)
高中常用函数性质及图像 一次函数 (一)函数 1、确定函数定义域的方法: (1)关系式为整式时,函数定义域为全体实数; (2)关系式含有分式时,分式的分母不等于零; (3)关系式含有二次根式时,被开放方数大于等于零; (4)关系式中含有指数为零的式子时,底数不等于零; (5)实际问题中,函数定义域还要和实际情况相符合,使之有意义。 (二)一次函数 1、一次函数的定义 一般地,形如y kx b =+(k ,b 是常数,且0k ≠)的函数,叫做一次函数,其中x 是自变量。当0b =时,一次函数y kx =,又叫做正比例函数。 ⑴一次函数的解析式的形式是y kx b =+,要判断一个函数是否是一次函数,就是判断是否能化成以上形式. ⑵当0b =,0k ≠时,y kx =仍是一次函数. ⑶当0b =,0k =时,它不是一次函数. ⑷正比例函数是一次函数的特例,一次函数包括正比例函数. 2、正比例函数及性质 一般地,形如y=kx(k 是常数,k≠0)的函数叫做正比例函数,其中k 叫做比例系数. 注:正比例函数一般形式 y=kx (k 不为零) ① k 不为零 ② x 指数为1 ③ b 取零 当k>0时,直线y=kx 经过三、一象限,从左向右上升,即随x 的增大y 也增大;当k<0时,?直线y=kx 经过二、四象限,从左向右下降,即随x 增大y 反而减小. (1) 解析式:y=kx (k 是常数,k ≠0) (2) 必过点:(0,0)、(1,k ) (3) 走向:k>0时,图像经过一、三象限;k<0时,?图像经过二、四象限 (4) 增减性:k>0,y 随x 的增大而增大;k<0,y 随x 增大而减小 (5) 倾斜度:|k|越大,越接近y 轴;|k|越小,越接近x 轴 3、一次函数及性质 一般地,形如y=kx +b(k,b 是常数,k≠0),那么y 叫做x 的一次函数.当b=0时,y=kx +b 即y=kx ,所以说正比例函数是一种特殊的一次函数. 注:一次函数一般形式 y=kx+b (k 不为零) ① k 不为零 ②x 指数为1 ③ b 取任意实数 一次函数y=kx+b 的图象是经过(0,b )和(- k b ,0)两点的一条直线,我们称它为直线y=kx+b,它可以看作由直线y=kx 平移|b|个单位长度得到.(当b>0时,向上平移;当b<0时,向下平移)
计算机二级考试MS_Office应用Excel函数 =公式名称(参数1,参数2,。。。。。) =sum(计算范围) =average(计算范围) =sumifs(求和范围,条件范围1,符合条件1,条件范围2,符合条件2,。。。。。。) =vlookup(翻译对象,到哪里翻译,显示哪一种,精确匹配) =rank(对谁排名,在哪个范围里排名) =max(范围) =min(范围) =index(列范围,数字) =match(查询对象,范围,0) =mid(要截取的对象,从第几个开始,截取几个) =int(数字) =weekda y(日期,2) =if(谁符合什么条件,符合条件显示的内容,不符合条件显示的内容) =if(谁符合什么条件,符合条件显示的内容,if(谁符合什么条件,符合条件显示的内容,不符合条件显示的内容)) SUM函数 简单求和。 函数用法 SUM(number1,[number2],…) =SUM(A1:A5)是将单元格 A1 至 A5 中的所有数值相加; =SUM(A1,A3,A5)是将单元格 A1,A3,A5 中的数字相加。 SUMIFS函数 根据多个指定条件对若干单元格求和。 函数用法 SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) 1) sum_range 是需要求和的实际单元格。包括数字或包含数字的名称、区域或单元格引用。忽略空白值和文本值。 2) criteria_range1为计算关联条件的第一个区域。 3) criteria1为条件1,条件的形式为数字、表达式、单元格引用或者文本,可用来定义将对criteria_range1参数中的哪些单元格求和。例如,条件可以表示为32、“>32”、B4、"苹果"、或"32"。 4)criteria_range2为用于条件2判断的单元格区域。 5) criteria2为条件2,条件的形式为数字、表达式、单元格引用或者文本,可用来定义将对criteria_range2参数中的哪些单元格求和。 4)和5)最多允许127个区域/条件对,即参数总数不超255个。 VLOOKUP函数 是Excel中的一个纵向查找函数,按列查找,最终返回该列所需查询列序所对应的值。
Creo(PROE)中关系式的理解 一)关系式中可以用下列数学函数式表达: 1)、正弦 sin( ) 2)、余弦 cos( ) 3)、正切 tan( ) 4)、反正弦 asin( ) 5)、反余弦 acos( ) 6)、反正切 atan( ) 7)、双曲线正弦 sinh( ) 8)、双曲线余弦 cosh( ) 9)、双曲线正切 tanh( ) 以上九种三角函数式所使用的单位均为“度”。 10)、平方根 sqrt( ) 11)、以10为底的对数 log( ) 12)、自然对数 ln( ) 13)、e的幂 exp( ) 14)、绝对值 abs( ) 15)、不小于其值的最小整数(上限值) ceil( ) 16)、不超过其值的最大整数(下限值) floor( ) 可以给函数ceil和floor加一个可选的自变量,用它指定要圆整的小数位数。 带有圆整参数的这些函数的语法是: ceil(parameter_name或number, number_of_dec_places) floor (parameter_name 或 number, number_of_dec_places) 其中的parameter_name或number意为参数名称或者一个带小数位的精确数值 后面跟随着的number_of_dec_places意为十进位的小数位数,是可选值: A)可以被表示为一个数或一个使用者自定义参数。如果该参数值是一个实数,则被截尾成为一个整数。 B)它的最大值是8。如果超过8,则不会舍入要舍入的数(第一个自变量),并使用其初值。C)如果不指定它,则功能同前期版本一样。 使用不指定小数部分位数的ceil和floor函数,其举例如下: ceil (10.2) 值为11 floor (10.2) 值为 10
在ProE中,我们的关系可以直接很多系统已经预定义好的函数,通过这些函数我们可以来进行一些特定的运算得到所期望的值,下面我们就对一些常用函数进行一个概括和总结,方便大家在使用的时候查阅。 1.数学函数 在proe中,我们可以使用丰富的数学函数,常用的函数列表如下: sin()、cos()、tan()函数 这三个都是数学上的三角函数,分别使用角度的度数值来求得角度对应的正弦、余弦和正切值,比如: A=sin(30) A=0.5? B=0.866?B=cos(30) ?C=tan(30) C=0.577 asin()、acos()、atan()函数 这三个是上面三个三角函数的反函数,通过给定的实数值求得对应的角度值,如:A=asin(0.5) A=30? B=60?B=acos(0.5) C=26.6?C=atan(0.5)
sinh()、cosh()、tanh()函数 在数学中,双曲函数类似于常见的(也叫圆函数的)三角函数。基本双曲函数是双曲正弦“sinh”,双曲余弦“cosh”,从它们导出双曲正切“tanh”等。 sinh / 双曲正弦:sinh(x) = [e^x - e^(-x)] / 2 cosh / 双曲余弦:cosh(x) = [e^x + e^(-x)] / 2 tanh / 双曲正切:tanh(x) = sinh(x) / cosh(x)=[e^x - e^(-x)] / [e^x + e^(-x)] 函数使用实数作为输入值 log()函数 求得10为底的对数值,如: A=log(1) A=0;? A=1;?A=log(10) ?A=log(5) A=0.6989...; ln()函数 求得以自然数e为底的对数值,e是自然数,值是2.718...;如: A=ln(1) A=0;? ?A=ln(5) A=1.609...;
一.正比例函数的性质 1.定义域:R(实数集) 2.值域:R(实数集) 3.奇偶性:奇函数 4.单调性:当k>0时,图像位于第一、三象限,y随x的增大而增大(单调递增);当k<0时,图像位于第二、四象限,y随x的增大而减小(单调递减) 5.周期性:不是周期函数。 6.对称轴:直线,无对称轴。、 二.一次函数图像和性质 一般地,形如y=kx+b(k、b是常数,且k≠0?)的函数,?叫做一次函数(?linear function).一次函数的定义域是一切实数. 当b=0时,y=kx+b即y=kx(k是常数,且k≠0?).所以说正比例函数是一种特殊的一次函数. 当k=0时,y等于一个常数,这个常数用c来表示,一般地,我们把函数y=c(c是常数)叫做常值函数(constant function)它的定义域由所讨论的问题确定. 一般来说, 一次函数y=kx+b(其中k、b是常数,且k≠0)的图像是一条直线. 一次函数y=kx+b的图像也称为直线y=kx+b. 一次函数解析式y=kx+b称为直线的表达式. 一条直线与y轴的交点的纵坐标叫做这条直线在y轴上的截距,简称直线的截距. 一般地,直线y=kx+b(k0)与y轴的交点坐标是(0,b).直线y=kx+b(k0)的截距是b. 一次函数的图像: k>0 b>0 函数经过一、三、二象限 k>0 b<0 函数经过一、二、三象限 k<0 b>0 函数经过一、二、四象限