山外长山跨山与水向那苍天发问看解三个阿拉伯数字

已选条件:
13000元以上
临港开发区
低层(1-3层)
多层(4-6层,含花园洋房)
小高层(7-11层)
高层(11层以上)
写字楼(办公)
公寓式酒店
酒店式公寓
藏品敔山湾
/ 已有291128人关注藏品敔山湾
共(14)张高清图片
行政区域:
楼盘地址:
敔山湾内·长山大道99号
所在方位:
售楼地址:
交付标准:
楼盘形态:
低层住宅,高层住宅,商铺
400-828-0083 转 1
咨询电话(工作时间以内)
销售公司:
无锡市广联不动产顾问有限公司
开 发 商:
无锡惠泽置业有限公司 ()
主推房源:
三期93㎡-141㎡高层
藏品敔山湾动态和详解 藏品敔山湾的最新楼盘资料
已有291128人关注藏品敔山湾
藏品敔山湾由无锡惠泽置业有限公司开发建设,项目位于长山大道东、环山路南、环湖路北侧,占地约163亩,建筑面积约21万㎡。由77套低层住宅、10幢高层住宅及商铺组成。低层住宅的面积约300-400㎡,目前剩余20套左右,均价在20000元/㎡左右。高层住宅分为三期。一期为1、2、3三幢,面积段为140-180㎡,目前已经基本售罄。二期为4、5、6三幢,面积段为85-181㎡,目前已经售罄。一期、二期均为现房。三期由7、8、9、10四幢组成,面积段为93-141㎡,目前主推7号楼95单元122㎡户型,以及8号楼100单元94㎡户型,均价在7500元/㎡左右。9、10号楼还在建设中,未取得预售证。三期预计于2018年6月交房。整体为中式简约风格建筑,前面无遮挡的房源的以及楼层较高的房源都能眺望敔山湖。
批准套数:
物管公司:
广州中奥物业江阴分公司
物 管 费:
低层2.5元/㎡·月,高层1.8元/㎡·月
教育资源:
敔山湾实验学校
建筑面积:
21.80 万平米
占地面积:
土地总价:
竞得时间:
容 积 率:
绿 地 率:
土地用途:
土地备注:
藏品敔山湾资讯
您的姓名:
您的手机:
藏品敔山湾沙盘图一览 藏品敔山湾根据楼栋定位,查找房源更精准
藏品敔山湾分期业态详细参数 藏品敔山湾分期业态详细参数
指导价 (元/m2)
面积区间 (m2)
总套数 (套)
藏品敔山湾位置区位和配套 藏品敔山湾周边交通,配套,周边楼盘情况
71路到“会展中心”站下77路到“美兆体验中心”站下
学校:敔山湾实验学校商业:敔山美嘉城(招商建设中)医院:江阴市医疗中心(建设中)休闲娱乐:敔山湖公园、御府国宴大酒店、敔山嘉菏大酒店、国际会展中心等主要道路:东西走向芙蓉大道,南北走向长山大道
指导价对比
高层6800,别墅14950元
高层10000 洋房11500元
洋房:,别墅:元
藏品敔山湾全部户型 共有29个户型 以下显示藏品敔山湾户型
藏品敔山湾楼盘相册 藏品敔山湾全部户型
藏品敔山湾在线咨询 
藏品敔山湾相关楼盘答疑400-828-0083 转 1
1、在线咨询的问题,通过审核,即可出现在楼盘答疑栏目中。
2、咨询问题前,先在楼盘答疑中搜索相关关键词,如若没有您意向咨询的问题,您可在右侧咨询相关信息。
目前藏品敔山湾在售7号、8号楼,702已经售罄,具体可咨询400-828-0083转1.
藏品敔山湾三期目前在售7号、8号楼,均价在9500元/㎡左右,具体优惠可咨询400-828-0083转1.
藏品敔山湾目前已停售,具体可咨询:400-828-0083转1
经咨询售楼处,藏品目前没有商铺在售,具体您可以向售楼处咨询或登陆我们的二手房市场了解一下。
在线咨询 请认真填写您所遇到的疑问?
您的姓名:
您的电话:
提问楼盘:
您的问题:
问题补充:
可输入200字,问题说明越详细,回答也会越准确!
验 证 码:
点击图片刷新
|| | Copyright(&)2008-版权所有@江阴伍壹零传媒有限公司,未经同意,不得转载
除声明外,本站文章数据内所指面积均为建筑面积6408人阅读
CCD传感器智能车比赛学习笔记(7)
K60引脚功能表
注意:本功能表只是阐述各个引脚支持的功能,具体引脚名称标注和排列方式以相应最小系统板为准
IAR工程的建立
建立工作空间
File-&New-&WorkSpace
Project-&Create New Project
工程文件配置
工程名上右键选择options
(具体)配置方法参照《一天攻破K60》中的IAR配置章节
山外库工程目录结构
App(用户程序)
Inc(头文件)
Board(开发板驱动程序,用于驱动山外开发板上的外设)
Inc(头文件)
Src(源文件)
Chip(K60芯片驱动程序)
Inc(头文件)
IAR(与IAR相关的头文件)
kinetis(与kinetis muc相关的头文件)
Src(源文件)
IAR (与IAR相关源文件)
Lib(库代码)
Prj(工程文件)
IAR(IAR相关工程文件)
config files (配置文件)
复用管脚的配置
(复用管脚:多功能管脚)
复用管脚配置文件位置
App\Inc\PORT_cfg.h
使用时,根据文件内的注释对各功能模块的对应复用管脚号进行修改即可(也可以之后用PORT库函数port_init实现管脚复用,这样就不用麻烦的修改文件了)
PS:ADC模块因为固定了对应端口,因此无法自行配置对应的端口管脚,可在Chip\Inc\MK60_ADC.h中查询对应的端口管脚
中断函数的配置
使用中断的方法
在App\MK60_it.c中编写好中断函数(函数应该无参数,并且返回类型为void)
通过在使能中断之前运行set_vector_handler函数来修改中断向量表中的中断函数入口
set_vector_handler函数说明
原型:void set_vector_handler(VECTORn_t vector,void pfun_handler(void))
参数:vector
中断号枚举类型(VECTORn_t)的参数,在Chip\Inc\common.h中定义了这个枚举类型(中断向量表编号声明部分),使用时可查询
pfun_handler(void)
返回值为void类型的函数,填入自己的中断函数函数名
NVIC_EnableIRQ函数说明
原型:static inline void NVIC_EnableIRQ(VECTORn_t vector)
参数:vector
中断号枚举类型(VECTORn_t)的参数,在Chip\Inc\common.h中定义了这个枚举类型(中断向量表编号声明部分),使用时可查询
NVIC_DisnableIRQ函数说明
原型:static inline void NVIC_DisableIRQ(VECTORn_t vector)
参数:vector
中断号枚举类型(VECTORn_t)的参数,在Chip\Inc\common.h中定义了这个枚举类型(中断向量表编号声明部分),使用时可查询
PS:关于关键字inline:
内联inline是给编译器的优化提示,如果一个函数被编译成inline的话,那么就会把函数里面的代码直接插入到调用这个函数的地方,而不是用调用函数的形式。如果函数体代码很短的话,这样会比较有效率,因为调用函数的过程也是需要消耗资源的。但是你inline只是给编译器的提示,编译器会根据实际情况自己决定到底要不要进行内联,如果函数过大、有函数指针指向这个函数或者有递归的情况下编译器都不会进行内联。
PORT模块驱动库
port模块简介
port模块是管脚管理模块,用于控制每个管脚复用到不同的内部模块,以及配置管脚属性
常用枚举说明
PTXn_e,管脚编号(PTA0,PTA1,…,PTE31)每个编号是独一无二的
PTn_e,管脚位号(PT0,PT1,…,PT31)每个端口包含31位
PTx_e,管脚端口(PTA,PTB,…,PTE)共5个端口
cfg,属性配置(具体可以使用的值见下方截图)
库函数说明
函数原型:void port_init(PTXn_e,uint32 cfg)
作用:用于初始化引脚,并配置MUX复用功能
例子:port_init (PTA8, IRQ_RISING | PF | ALT1 | PULLUP );
//初始化 PTA8 管脚,上升沿触发中断,带无源滤波器,复用功能为 GPIO ,上拉电阻
port_init_NoALT
函数原型:void port_init_NoALT (PTXn_e , uint32 cfg)
作用:用于初始化引脚,不改变原有的MUX复用功能
例子:port_init_NoALT(PTA8, IRQ_RISING | PF | PULLUP );
//初始化 PTA8 管脚,上升沿触发中断,带无源滤波器,上拉电阻
//这本质上是一个宏定义,不过用法和库函数相同
函数原型:PORT_FUNC(管脚模块号(ABCDE),管脚位号(1~31),用户函数名);
作用:用于PORT中断函数(PORT中断函数:类似于51单片机中的外部中断,通过管脚电平的改变来触发的中断)中,简化函数编写
例子:常规的 PORT 中断服务函数(前者)与使用PORT_FUNC宏定义(后者)的比较:
void porta_handler(void)
uint8 n = 0;
if (PORTA_ISFR & (1 && n)) {
PORTA_ISFR = (1 && n);
void porta_handler(void)
PORT_FUNC(A,6,key);
GPIO即GeneralPurposeInputandOutput,通用输入输出接口。K60单片机中就是指那些PTA,PTB…口。所谓的GPIO就是最简单的数字输入输出引脚,作为输出可以有两种状态:0和1;作为输入,它接收外面输入的数字信号。 在一般单片机上GPIO是组织成几个组的,比如K60单片机把GPIO组织成5个组:
(1)A口有26个引脚,分别为PTA0~PTA19、PTA24~PTA29;
(2)B口有20个引脚,分别为PTB0~PTB11、PTB16~PTB23;
(3)C口有20个引脚,分别为PTC0~PTC19;
(4)D口有16个引脚,分别为PTD0~PTD15;
(5)E口有18个引脚,分别为PTE0~PTE12、PTE24~PTE28
GPIO的应用场合非常多,可以是驱动LED,也可以驱动继电器,也可以是接收外部传来的任何数据信号,所以它才被称为通用输入输出接口。
许多引脚都是复用的,利用Port控制模块选择控制每个引脚上的可用的复用功能(详见前文引脚功能表)。
指明操作的管脚编号
PTA0 ~ PTE31
输入输出配置
GPI(输入)、GPO(输出)
1(一般指高电平)、0(一般指低电平)
库函数原型
原型:void gpio_init (PTXn_e, GPIO_CFG, uint8 data)
用途:初始化 gpio,设置端口的输入输出方向,输出数据。初始化后,才能对 IO 口进行读取或电平设置。
例子:gpio_init (PTA8, GPI,0); //初始化 PTA8 管脚为输入
原型: void gpio_ddr (PTXn_e, GPIO_CFG)
用途:设置引脚数据方向。
例子:gpio_ddr (PTA8, GPI); //设置 PTA8 管脚为输入
原型:void gpio_set (PTXn_e, uint8 data)
用途:设置引脚状态。(只用于输出引脚,即GPO)
例子:gpio_set (PTA8, 1); // PTA8 管脚 输出 1
原型:void gpio_turn (PTXn_e)
用途:翻转 IO 口电平(只用于输出引脚,即GPO)
例子:gpio_turn (PTA8); // PTA8 管脚 输出 反转
原型:uint8 gpio_get (PTXn_e)
用途:读取引脚状态并返回 1bit 的端口电平状态。(只用于输入引脚,即GPI)
例子:uint8 pta8_data = gpio_get (PTA8); // 获取 PTA8 管脚 输入电平
宏定义用法
1位引脚配置宏
参数说明:
x = 端口号(A~E)
n = 位号(具体可用位号总每个端口不同,可查阅文章第一节的表格的ALT1列)
设置电平输出(只用于输出引脚,即GPO)
PTA0_OUT = 1; //PTA0 输出高电平PTE28_OUT = 0; //PTE28 输出低电平
1为高电平0为低电平
读取电平输入(只用于输入引脚,即GPI)
data=PTA0_IN; //读取 PTA0 输入电平
设置引脚数据方向
PTA0_DDR=0; //设置 PTA0 为输入PTB16_DDR=1; //设置 PTB16 为输出
1为输出0为输入
翻转 IO 口电平(只用于输出引脚,即GPO)
PTB16_T=1; //反转 PTB16 引脚输出电平状态PTE28_T=0; //保持 PTE28 引脚输出电平状态
1为翻转0为保持
8位引脚配置宏
参数说明:
x = 端口号(A~E)
n = 可选:0 ~ 3(0 = 7~0位;1 = 15~8位;2 = 23~16位;3 = 31~24位)
PTx_Bn_OUT
设置 8 位引脚输出电平(只用于输出引脚,即GPO)
PTA_B0_OUT=0x12 //表示 PTA7~ PTA0 8 位输出 0x12PTA_B2_OUT=0x12 //表示 PTA23~ PTA16 8 位输出 0x12
共8bit数据,由高位到低位分别对应到序号由大到小的管脚
读取 8 位引脚输入电平(只用于输入引脚,即GPI)
char data = PTA_B0_IN; //表示 PTA7~ PTA0 8 位数据输入到 data 变量
共8bit数据,由高位到低位分别对应到序号由大到小的管脚
PTx_Bn_DDR
设置 8 位引脚输入输出方向
PTA_B0_DDR=0xFF; // 表示 PTA7~ PTA0 8 位设置输入输出方向为输出PTB_B0_DDR=0xF0; //表示PTB7~PTB4输出高电平,PTB3~PTB0输出低电平
1为高电平0为低电平共8bit,由高位到低位分别对应到序号由大到小的管脚
翻转 8 位引脚状态
PTA_B2_T=0xFF; // 表示 PTA23~ PTA16 8 位管脚的输出电平反转PTA_B2_T=0x0F; // 表示 PTA23~ PTA20 4 位管脚的输出电平反转,PTA19~ PTA16 4 位管脚的输出电平保持不变
1为翻转0为保持原状共8bit,由高位到低位分别对应到序号由大到小的管脚
16位引脚配置宏
参数说明:
x = 端口号(A~E)
n = 可选:0 ~ 1(0 = 15~0位;1 = 31~16位)
PTx_Wn_OUT
PTx_Wn_DDR
PS:功能与使用方法参考上文8位引脚配置宏中的方法和例程(赋值数据改为16位,eg.0xFFFF)
32位引脚配置宏
参数说明:
x = 端口号(A~E)
PS:功能与使用方法参考上文8位引脚配置宏中的方法和例程(赋值数据改为32位,eg.0xFFFFFFFF)
自定义位数引脚配置宏
参数说明:
NBIT = 要配置的位数(包括最低位)
PTxn = 最低位(X = 端口号,n = 位号)
data = 数据(数据位数根据选择的位数决定)
ddr = 翻转配置参数(1 = 翻转IO口,0 = 保持不变)
GPIO_SET_NBIT(NBIT,PTxn,data)
设置 NBIT 位 (最低位为 PTxn)的输出电平为 data
GPIO_SET_NBIT(4,PTA8,9); //PTA11~PTA8 输出数据为 9GPIO_SET_NBIT(2,PTA8,9); //PTA9 ~PTA8 输出数据为 1( 9 超过 2bit,仅低位数据有效)
GPIO_GET_NBIT(NBIT,PTxn)
读取 NBIT 位 (最低位为 PTxn)引脚输入状态
data = GPIO_GET_NBIT(4,PTA8); //读取 PTA11~PTA8,共 4bit 输入电平到变量 data 里
GPIO_DDR_NBIT(NBIT,PTxn,ddr)
设置 NBIT 位 (最低位为 PTxn)引脚输入输出方向
GPIO_DDR_NBIT(4,PTA8,9); //PTA11,PTA8 为输出;PTA10,PTA9 为输入
GPIO_T_NBIT(NBIT,PTxn,data)
反转 NBIT 位 (最低位为 PTxn)管脚的输出电平
GPIO_T_NBIT(4,PTA8,9); //反转 PTA11,PTA8 的输出电平;保持 PTA10,PTA9 为输出电平不变
UART模块简介
Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置
UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
常用形参说明
PS:可以在App/Inc/port_cfg.h文件中查询与配置各个UART模块通道对应的管脚(一个通道对应RXD,TXD两个引脚)
库函数说明
接收类函数
void uart_init (UARTn_e, uint32 baud);
初始化 uartx 模块
uart_init (UART1,19200); //初始化 串口 1 波特率为 19200
void uart_getchar (UARTn_e, char *ch);
等待接收 1 个字节,如果一直没接收到数据,会一直卡住循环里等到接收到为止。
uart_getchar (UART3,&ch); //等待接收 1 个字节,保存到 ch 里
第二个参数是存储字符的地址
char uart_querychar (UARTn_e, char *ch);
char uart_querychar (UARTn_e, char *ch);
查询接收 1 个字符,若接收到数据则返回1并存储到ch形参指向的地址,否则返回0
if( uart_querychar (UART3,&ch) == 1) //查询接收通信缓冲区内 1 个字符,保存到 ch 里{printf(“成功接收到一个字节”);}
uint32 uart_querystr (UARTn_e, char *str, uint32 max_len);
查询接收通信缓冲区内字符串,最后接收到的字符后会自动加入 0x00 表示字符串结尾。返回接收到的字节数
char str[100];uint32num = uart_querystr(UART3,&str,100-1);//在最大可存储字节上减一字节空出给’\0’is(num != 0){printf(“成功接收到%d 个字节:%s”,num,str);}
uint32 uart_querybuff (UARTn_e, char *buff, uint32 max_len);
查询接收通信缓冲区内数据
参照uart_querystr,唯一不同是不会因为遇到字符串结尾标志’\0’而退出,会持续读取通讯缓冲区直到规定的最大值max_len
char uart_query (UARTn_e);
查询是否接收到一个字节返回1 表示接收到一个字节了;返回 0 表示没有接收到
if(uart_query(UART3) == 1)//查询是否接收到数据{ch = uart_getchar (UART3); //等待接收一个数据,保存到 ch 里 }
发送类函数
void uart_putchar (UARTn_e, char ch);
发送 1 个字节。
uart_putchar (UART3, ‘A’); //发送字节’A’
void uart_putbuff (UARTn_e , uint8 *buff, uint32 len);
发送 len 个字节,包括 NULL 也会发送。
uart_putbuff (UART3,”1234567”, 3); //实际发送了 3 个字节’1’,’2’,’3’
void uart_putstr (UARTn_e , const uint8 *str);
发送字符串。
uart_putstr (UART3,”1234567”); //实际发送了 7 个字节
发送时会自动省略字符串的结尾标志’\0’
UART模块中断控制函数
void uart_rx_irq_en (UARTn_e); //开串口接收中断
void uart_rx_irq_dis(UARTn_e); //关串口接收中断
void uart_tx_irq_en (UARTn_e); //开串口发送中断
void uart_tx_irq_dis(UARTn_e); //关串口发送中断
void uart_txc_irq_en (UARTn_e); //开串口发送完成中断
void uart_txc_irq_dis(UARTn_e); //关串口发送完成中断
发送中断和发送完成中断区别的一点理解
一般单片机的数据发送用到两个寄存器:发送数据寄存器和移位寄存器
发送中断:是相对于发送数据寄存器来说的,只要他空了,就会发生中断,而此时移位寄存器有可能还在工作。
发送完成中断:是相对于移位寄存器来说的,移位寄存器中数据完全发送完成了才会发生中断。
I2C(iic)是一种主要用于内部部件近距离通讯的同步半双工通讯协议,有主从机之分,主机通过分配给从机地址码与一个或多个从机通讯。
硬件部分,一组I2C通讯端口需要占用单片机的两个引脚,一个引脚负责提供时钟信号(CLK),一个引脚负责数据(DATA)的双向传输
库函数常用参数表
库函数说明
extern uint32 i2c_init(I2Cn_e i2cn, uint32 baud);
初始化 I2C,设置期待的波特率,返回值为实际配置的波特率。
i2c_init(I2C0,400*1000); // 初始化 I2C0,期待的波特率为 400k
void i2c_write_reg(I2Cn_e, uint8 SlaveID, uint8 reg, uint8 Data);
写入一个字节数据到 I2C 设备指定寄存器
i2c_write_reg(I2C0, 0x1D, 1,2); //向从机 0x1D 的寄存器 1 写入数据 2
uint8 i2c_read_reg (I2Cn_e, uint8 SlaveID, uint8 reg);
读取 I2C 设备指定寄存器的一个字节数据
uint8 value = i2c_read_reg(I2C0, 0x1D, 1);
SPI协议简介
SPI通讯协议是一种高速的,全双工,同步的通信总线协议,一般最少需要占用四个管脚(只读不写或只写不读可以减少为最少3个引脚),此协议以主从机方式工作(一个主机与一个或多个从机)。
占用的四个管脚用途如下:
(1)SDI – 主设备数据输入,从设备数据输出;
(2)SDO – 主设备数据输出,从设备数据输入;
(3)SCLK – 时钟信号,由主设备产生;
(4)CS – 从设备使能信号,由主设备控制。(每增加一个从设备,此信号管脚增加一个,即每个CS信号对应一个从设备)
库函数常用形参
SPI0,SPI1,SPI2
SPIn_PCSn_e
(可多选,用|分隔)SPIn_PCS0,SPIn_PCS1……SPIn_PCS5
具体每个SPI通道支持的片选号数不同,在App\Inc\PORT_cfg.h 中查询
主从机模式配置
MASTER、SLAVE
期待的波特率
要发送数据的存储地址
要接收数据的存储地址
发送或接收的数据长度
要发送命令的存储地址
要接收命令的存储地址
发送或接收的命令长度
库函数原型
uint32 spi_init (SPIn_e, SPIn_PCSn_e , SPI_CFG,uint32 baud);
SPI 初始化,选择片选信号,设置模式,波特率。 返回值为实际配置的波特率。
uint32 baud = spi_init(SPI0,SPIn_PCS0, MASTER,10*);//初始化 SPI,选择 CS0,主机模式, 波特率为 1M ,返回真实波特率到 baud 变量
void spi_mosi (SPIn_e,SPIn_PCSn_e,uint8 *modata,uint8 *midata,uint32 len);
SPI 发送接收函数,发送 databuff 数据,并把接收到的数据存放在 databuff 里
void spi_mosi(SPI0,SPIn_PCS0,buff,buff,2); //发送 buff 的内容,并接收到 buff 里,长度为 2 字节
void spi_mosi_cmd(SPIn_e,SPIn_PCSn_e,uint8 *mocmd, uint8 *micmd , uint8 *modata, uint8 *midata,uint32 cmdlen , uint32 len);
SPI 发送接收函数,与 spi_mosi 相比,多了先发送 cmd 缓冲区的步骤,即分开两部分发送
spi_mosi_cmd (SPI0,SPIn_PCS0,cmd,NULL,buff,buff,1,2);//发送 cmd/buff 的内容,不接收 cmd 发送时的数据,接收 buff 发送时的数据到 buff 里,长度分别为 1、 2 字节
PS:发送和接受的存储地址可用同一个,先发送存储地址中的8位数据到从机SPI缓冲区,然后从接收缓冲区中将接收的数据写入存储地址(覆盖发送的数据)。
FTM模块用途简介
FTM是一个神奇的模块,他能输出PWM,能输入捕获,能输出比较还能正交解码。英文全称是FlexTimer Module,你可以理解为高级定时器模块、易用定时器模块等等。我们可以用FTM模块来实现PWM、输入捕获和正交解码等常用功能
FTM0~FTM3(只有FX型号可以选FTM3)
FTM_CH0~FTM_CH7
在App/Inc/port_cfg.h中配置通道对应管脚
通道占空比
Duty&=FTM_PRECISON
FTM_PRECISON为精度定义,默认值为100,值越大,精度越高。在Chip/Inc/MK60_ftm.h中修改值
FTM_Input_cfg
FTM输入捕捉配置
FTM_Rising //上升沿捕获FTM_Falling//下降沿捕获FTM_Rising_or_Falling//上升或下降沿(跳变沿)捕获
分频因子(分频值 = 1&
FTM_PS_e具体可用值可在Chip/Inc/MK60_ftm.h中查询
例子:FTM_PS_8对应分频值 = (1 && FTM_PS_8) = (1 && 7) = ((二进制)) = (128(十进制))
库函数原型
PWM输出类函数
void ftm_pwm_init(FTMn_e, FTM_CHn_e, uint32 freq, uint32 duty);
初始化 FTM 的 PWM,设置频率和空比。
ftm_pwm_init(FTM0, FTM_CH6,200, 10); //初始化 FTM0_CH6 为 频率 200Hz 的 PWM,占空比为10/FTM0_PRECISO
void ftm_pwm_duty(FTMn_e, FTM_CHn_e, uint32 duty);
设置通道占空比,占空比为 ( duty /FTM_PRECISON) *100% 。
ftm_pwm_duty(FTM0, FTM_CH6, 10);//设置 FTM0_CH6 占空比为 10/FTM0_PRECISON
void ftm_pwm_freq(FTMn_e, uint32 freq);
设置 FTM 的频率。设置后,需要重新调用 ftm_pwm_duty 设置占空比。
ftm_pwm_freq(FTM0,200);//设置 FTM0 的 频率 为 200Hz
输入捕捉类函数
void ftm_input_init (FTMn_e, FTM_CHn_e,FTM_Input_cfg,FTM_PS_e ps);
输入捕捉初始化函数。
ftm_input_init(FTM0,FTM_CH0,FTM_Rising,FTM_PS_2);//设置 FTM0_CH0 上升沿触发输入捕捉,二分频
uint16 ftm_input_get (FTMn_e, FTM_CHn_e);
输入捕捉模式下,读取并返回捕捉事件发生时的计数器值(根据两次捕捉之间的差值可判断周期频率)。
uint16 data = ftm_input_get (FTM0, FTM_CH0);// 获取 FTM0_CH0 输入捕捉事件触发时的计数值
void ftm_input_clean(FTMn_e );
清空计数器的值。即计数器重新开始计数。
正交解码类函数
void ftm_quad_init (FTMn_e);
初始化 FTM 的正交解码 功能。
ftm_quad_init(FTM1);//初始化 FTM1 为正交解码模式
int16 ftm_quad_get (FTMn_e);
获取并返回 FTM 正交解码 的脉冲数(负数表示反方向)。
int16 count = ftm_quad_get(FTM1);//获取 FTM1 交解码 的脉冲数
void ftm_quad_clean(FTMn_e ftmn)
清 FTM 正交解码 的脉冲数。
ftm_quad_clean(FTM1);//复位 FTM1 正交解码 的脉冲数
PIT定时器模块
PIT定时模块类似于51单片机中的定时器,主要用于周期性的触发中断,各种计时或者延时。K60有4个PIT模块,每个模块拥有独立的中断。
常用形参说明
定时器计时时长(时长 = bus时钟周期*cnt)
ms*bus_clk_Khz & uint32
bus_clk_Khz这个变量存储的是K60的总线频率(extern int bus_clk_Khz)
us*bus_clk_Khz/1000 & uint32
ns*bus_clk_Khz/1000000 & uint32
库函数原型说明
void pit_init(PITn_e, uint32 cnt);
初始化 PITn,并设置定时时间(单位为 bus 时钟周期)。计时器每到设定的时间就触发中断(如果使能了相应中断的话),然后重新开始计时
pit_init(PIT0, 1000); //定时 1000 个 bus 时钟 后中断set_vector_handler(PIT0_VECTORn,pit_hander); // 设置中断服务函数到中断向量表里 enable_irq(PIT0_IRQn); // 使能 PIT 中断
void pit_delay(PITn_e, uint32 cnt);
PIT 延时(不需要初始化的) ,延时时间单位为 bus 时钟周期。
pit_delay(PIT0, 1000); //延时 1000 个 bus 时钟
void pit_time_start (PITn_e);
PIT 开始计时(不需要初始化 ,直接调用)
pit_time_start(PIT0); //PIT0 计时开始
uint32 pit_time_get (PITn_e);
获取 PITn 计时时间并返回(超时时会关闭 定时器)(单位为 bus 时钟) (若值为0xFFFFFFFF,则表示超时溢出)
uint32 time = pit_time_get(PIT0); //获取 PITn 计时时间if(time != ~0) //没超时{printf(“\n 计时时间为: %d us”,time*1000/bus_clk_khz);}
void pit_close (PITn_e pitn);
pit_close(PIT0); //关闭 PIT0
PIT_Flag_Clear(PITn_e)
清 PITn 中断标志。一般在中断服务函数和 pit 初始化函数里用到
PIT_Flag_Clear(PIT0);
这实际是一个宏定义,不过用法和函数一样
初始化并设定定时时间
pit_init_ms(PITn_e,ms)
//初始化 PITn,并设置定时时间(单位为 ms)
pit_init_us(PITn_e,us)
//初始化 PITn,并设置定时时间(单位为 us)
pit_init_ns(PITn_e,ns)
//初始化 PITn,并设置定时时间(单位为 ns)
设定延时时间
(不需要初始化,可直接调用)
pit_delay_ms(PITn_e,ms)
//PIT 延时 ms
pit_delay_us(PITn_e,us)
//PIT 延时 us
pit_delay_ns(PITn_e,ns)
//PIT 延时 ns
LPTMR低功耗定时器模块
和PIT一样也是定时器,要注意的是LPTMR模块的计数寄存器虽然是32位的但是31-16位是只读预留位,始终为0,所以计数时最大数字只能有16位
延时,定时,计时,脉冲技术(前三个功能与PIT定时器基本一致),K60只有一个LPTMR模块
毫秒定时与延时类
void lptmr_delay_ms(uint16 ms);
LPTMR 延时函数(ms),不需要初始化就可以直接调用。
lptmr_delay_ms(32); // LPTMR 延时 32ms
void lptmr_timing_ms(uint16 ms);
LPTMR 定时函数,定时时间到了会触发中断。
lptmr_timing_ms(32); // LPTMR 定时 32msset_vector_handler(LPTimer_VECTORn,lptmr_hander); // 设置中断服务函数到中断向量表里enable_irq(LPTimer_IRQn); // 使能 LPTMR 中断
void lptmr_time_start_ms(void);
uint32 lptmr_time_get_ms(void);
获取计数时间( 不同的开始计时单位,需要配套相应不同的获取计时时间单位函
参考 lptmr_time_start_ms 例子
微秒定时与延时类
void lptmr_delay_us(uint16 us);
LPTMR 延时函数(us),不需要初始化就可以直接调用。
lptmr_delay_us(32); // LPTMR 延时 32us
void lptmr_timing_us(uint16 us);
LPTMR 定时函数,定时时间到了会触发中断。
例子参照毫秒类
void lptmr_time_start_us(void);
例子参照毫秒类
uint32 lptmr_time_get_us(void);
获取计数时间( 不同的开始计时单位,需要配套相应不同的获取计时时间单位函数)。
参考 lptmr_time_start_ms 例子
void lptmr_time_close();
关闭 LPTMR 计时
脉冲计数类
void lptmr_pulse_init (LPT0_ALTn, uint16 count, LPT_CFG);
LPTMR 脉冲计数初始化
lptmr_pulse_init(LPT0_ALT1,0xFFFF,LPT_Rising);// LPTMR 脉冲计数, 计数 0xFFFF 后触发中断请求(需要开中断才执行中断服务函数),上升沿捕捉
uint16 lptmr_pulse_get (void);
LPTMR 获取计数值
uint16 data = lptmr_pulse_get(); //获取脉冲计数值
void lptmr_pulse_clean (void);
清空 LPTMR 脉冲计数
lptmr_counter_clean(); //清空 LPTMR 脉冲计数
ADC模块简介
ADC,Analog-to-Digital Converter的缩写,指模/数转换器,用于将模拟信号转换为CPU可以处理的数字信号。
K60有两个ADC模块,每个模块有多个通道
查阅Chip/Inc/MK60_ADC.hn代表模块号,e代表通道号
因为山外库的相关函数采用的是软件触发ADC模块的方式,故不支持需要硬件触发的B通道,具体查看文件注释
转换位数(位数越多精度越高)
ADC_8bit,ADC_12bit,ADC_10bit,ADC_16bit
void adc_init (ADCn_Ch_e);
ADC 初始化
adc_init (ADC0_SE10 ); //初始化 ADC0_SE10 , K60 使用 PTA7 管脚
uint16 adc_once (ADCn_Ch_e, ADC_nbit);
采样一次一路模拟量的 AD 值,返回采样数值。按采集精度来返回不同大小, 16 位精度最大返回: 65535
uint16 var = adc_once(ADC0_SE10, ADC_8bit);
void adc_stop (ADCn_e);
停止 ADC 模块的 AD 转换,同一个模块的所有通道都会停止。
adc_stop(ADC0);
模/数转换模块,用于使用数字型号转换输出模拟信号,K60有两个DAC模块,每个模块只有一个通道
数字量(对应某一点的电平,最大为0xFFF)例如,参考电源为U(单位:V),则 输出电平=U*(val/0xFFF)
void dac_init(DACn_e);
初始化 DAC 模块
dac_init (DAC0 ); //初始化 DAC0
void dac_out(DACn_e, uint16 val);
DAC 一次转换操作
dac_out (DAC0 ,0x100); //初始化 DAC0 输出 0x100 数字量对应的模拟量: 3300*(1 + 0x100)/4096 mV
DMA 的作用是一个专业的数据搬运工,只需要告诉它数据源地址在哪里,数据目的地址在哪里,每次传输多少 个 数据,一共传输多少次,什么时候触发传输,它就会根据条件来自动搬运数据,从而释放了 CPU,可以让 CPU 干其他的活。另外,它是专业的,初始化后就可以自动地工作,所以不需要像 CPU 那样执行代码来搬运数据,所以 DMA 传输数据的速度更快。
K60 的 DMA 共有 63 个 DMA 源(称为槽: slots) , 16 个独立的 DMA 通道。
DMA 源,即请求 DMA 传输一次的请求源,换句话说就是触发什么时候传输的触
DMA 通道,就是传输数据的线路。
山外库目前的DMA例程仅提供了GPIO端口数据到内存的参考例程,其他的模块需要自行配置
DMA_cfg形参枚举
DMA每传输一次,目的地址会自动加一,此形参用于选择传输完成后是否恢复目的地址。
void dma_portx2buff_init(DMA_CHn, void *SADDR, void *DADDR, PTXn_e, DMA_BYTEn, uint32count, uint32 cfg);
初始化 DMA,使得 PORT 端口数据通过 DMA 传输到 BUFF 缓冲区
注意:用到的输入端口和触发端口已经内部初始化,不需要再额外初始化。默认触发端口为上升沿触发,如果需要配置为下降沿触发,可调用 port_init 函数来重新配置。
void dma_repeat(DMA_CHn CHn,void *SADDR, void *DADDR,uint32 count)
DMA 重新配置,传输完毕后,一些参数会改变,需要重新赋值。
dma_repeat(DMA_CH0, (void )&PTE_B2_IN, (void )img_buff,CAMERA_DMA_NUM);
DMA 的目的地址每次传输都会加一,有时不需要加一可以使用此函数复位
DMA_IRQ_EN
允许 DMA 通道传输完成中断
DMA_IRQ_EN(DMA_CH3); //允许 DMA 通道 3 传输完成中断
DMA_IRQ_DIS
禁止 DMA 通道传输完成中断
DMA_IRQ_DIS(DMA_CH3); //禁止 DMA 通道 3 传输完成中断
DMA_IRQ_CLEAN
清除通道传输中断标志位
DMA_IRQ_CLEAN(DMA_CH3); //清除 DMA 通道 3 传输中断标志位
一般用于中断程序中
使能通道硬件 DMA 请求
DMA_EN(DMA_CH3); //使能 DMA 通道 3 硬件 DMA 请求
禁止通道硬件 DMA 请求
DMA_DIS(DMA_CH3); //禁止 DMA 通道 3 硬件 DMA 请求
访问:48337次
排名:千里之外
原创:53篇
(1)(1)(2)(1)(1)(2)(4)(3)(6)(1)(5)(1)(1)(10)(13)(9)

我要回帖

更多关于 人道山长山又断 的文章

 

随机推荐