id) //将McBSP0初始化为SPI
{
SPSA0=SPCR10_SUB;
SPSD0=0x00; //接收端复位RRST=0
SPSA0=SPCR20_SUB;
SPSD0=0x00; //发送端复位XRST=0
SPSA0=SPCR10_SUB;
SPSD0=0x1800; //CLKSTP=11
SPSA0=PCR0_SUB;
SPSD0=0x0A08; //CLKXM=1(主设备);CLKXP=0
SPSA0=RCR10_SUB;
SPSD0=0x00; //RWDLEN1=000,接收包长度为8
SPSA0=RCR20_SUB;
SPSD0=0x0001; //在BFSX信号上提供正确的建立时间
SPSA0=XCR10_SUB;
SPSD0=0x00; //XWDLEN1=000,发送包长度为8
SPSA0=XCR20_SUB;
SPSD0=0x0001; //在BFSX信号上提供正确的建立时间
SPSA0=SRGR10_SUB;
SPSD0=0x00FE; //为采样率时钟定义分频因子
SPSA0=SRGR20_SUB;
SPSD0=0x2000; //CLKSM=1,从CPU得到时钟;每个包传送时,激活BFSX信号
SPSA0=SPCR20_SUB;
SPSD0=0x0063; //发送端脱离复位XRST=1
SPSA0=SPCR10_SUB;
SPSD0|=0x0001; //接收端脱离复位RRST=1;采样率产生器脱离复位GRST=1
delay(256); //为使McBSP逻辑稳定,需等待两个采样率产生器时钟周期
}
二.HDn作为片选信号时DSP与MCP2510通信过程
21读程序
211 MCP2510读取过程
在读 *** 作开始时,CS引脚将被置为低电平。随后读指令和8 位地址码(A7 至 A0)将被依次送入MCP2510 。在接收到读指令和地址码之后, MCP2510 指定地址寄存器中的数据将被移出通过SO引脚进行发送。每一数据字节移出后,器件内部的地址指针将自动加一以指向下一地址。因此可以对下一个连续地址寄存器进行读 *** 作。通过该方法可以顺序读取任意个连续地址寄存器中的数据。通过拉高CS引脚电平可以结束读 *** 作。
编程时需注意问题:
1. SPI的读 *** 作是通过写 *** 作完成的。因此在DSP发送地址字节后,再发送一任意8位数据以产生接收时钟。
2. 在发送完任意8位数据后,DSP要有个延时,以等待写入DXR的数据从发送端移出,从而保证从2510输出的数据能够正确地被DSP接收。延时时间应大于采样率产生器输出的8个周期,最好长一些。
3. 由于SPI在发送数据的同时也在接收数据,所以在读取有效数据前(即在发送地址字节完毕后)要先清空接收缓冲器,否则可能会因为接收缓冲器溢出而无法接收有用的数据。可以通过读取3次(因为5402的McBSP有3个接收缓冲器)接收缓冲器DRR的值来实现清空缓冲器的 *** 作,读取之前要注意延时(等待地址字节发送完毕)。
212 示例程序
Uint16 ReadMCP2510(Uint16 Addr)
{
ChipSlctMCP2510(0); //打开片选
NOP;
NOP;
NOP;
//发送读指令
DXR10=READ_MCP2510;
SPSA0=SPCR20_SUB;
while(!(SPSD0&0x02)) //等待上一个数据发送完毕
//发送地址
DXR10=Addr;
SPSA0=SPCR20_SUB;
while(!(SPSD0&0x02)) //等待上一个数据发送完毕
delay(1000); //延时,等待地址字节从DX移出
//读取数据
Addr=DRR10; //读3次,清空缓冲器
Addr=DRR10;
Addr=DRR10;
DXR10=0; //发送任意数据,以便产生接收时钟
SPSA0=SPCR20_SUB;
while(!(SPSD0&0x02)) //等待上一个数据发送完毕
delay(1000); //延时,等待数据接收
Addr=DRR10; //第一次为无效数据
ChipSlctMCP2510(3);
return Addr;
}
22写程序
221 MCP2510写 *** 作
置CS引脚为低电平启动写 *** 作。 启动写指令后,地址码以及至少一个字节的数据被依次发送到MCP2510 。只要 CS 保持低电平,就可以对连续地址寄存器进行顺序写 *** 作。在SCK 引线上的上升沿,数据字节将从D0位开始依次被写入。如果CS 引脚在字节的8 位数据尚未发送完之前跳变到高电平,该字节的写 *** 作将被中止,而之前发送的字节已经写入。
编程时需注意问题:
1 2510如何区分指令、地址和数据?由于读写指令、地址字节和数据字节的值可能会一样,所以有必要通过一定的时序来将他们区分开来。经实验验证,2510应该是通过片选信号CS来区分这几个数据的,当CS从高变低后,第一个字节就是指令,哪怕上次没有正确的读写,只要将CS置1,然后再置0,就会重新开始一个指令的周期。
2 发送完数据字节后一定要有个延时来等待数据字节从DX引脚发送出去,之后才能将片选信号CS置1,否则无法正确写入数据。
222 示例程序
void WriteMCP2510(Uint16 Addr,Uint16 wrData)
{
ChipSlctMCP2510(0);
NOP;
NOP;
NOP;
DXR10=WRITE_MCP2510;
SPSA0=SPCR20_SUB;
while(!(SPSD0&0x02)) //等待上一个数据发送完毕
DXR10=Addr;
SPSA0=SPCR20_SUB;
while(!(SPSD0&0x02)) //等待上一个数据发送完毕
DXR10=wrData;
SPSA0=SPCR20_SUB;
while(!(SPSD0&0x02)) //等待上一个数据发送完毕
delay(1000);
ChipSlctMCP2510(3);
}
三.BFSX作为片选信号时DSP与MCP2510通信过程
由于要完成2510的读写 *** 作需要3个字节,所以采用BFSX引脚作为MCP2510的片选信号时需要将XCR1和RCR1中的XWDLEN1、RWDLEN1设置为100(24bit)。
由于发送接收字长度设置为24位,因此在发送过程中需要用到DXR2和DRR2寄存器,在此需要注意的一点就是,DXR2(DRR2)必须要比DXR1(DRR1)先初始化或读取。其中DXR2(DRR2)中存放的是24bit的高8位,DXR1(DRR1)中存放的是24bit的低16位。发送时DXR2中的数据首先发送,接收时数据首先存放到DRR2中,因此DXR2(DRR2)中存放指令字节,DXR1(DRR1)中由高到低存放地址和数据。
下面为一个简单的调试程序。
Uint16 Debug24bit( )
{
int i;
DXR20=0x02; //写指令
DXR10=0x0F01; //0F为CANCTRL地址,01为待写入的数据
delay(3000); //延时,等待发送完毕
i=DRR10; //清空接收缓冲器
i=DRR10;
i=DRR10;
DXR20=0x03; //读指令
DXR10=0x0F00; //0F为CANCTRL地址,00用于读取数据
delay(3000); //延时,等待接收完毕
i=DRR10&0x00FF; //DRR10低8位为有用数据
return i;
}
四. 通信时MCP2510的初始化
411 确定时间份额
计算公式:
时间份额TQ定义为:TQ = 2(BaudRate + 1)TOSC
其中,BaudRate 是由 CNF1BRP<5:0> 表征的二进制数。
标称位时间 = TQ (Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)
- 同步段(Sync_Seg)
- 传播时间段(Prop_Seg)
- 相位缓冲段1 (Phase_Seg1)
- 相位缓冲段2 (Phase_Seg2)
假设每个标称位包含N个时间份额TQ,则根据以上公式有:1/100K = NTQ
现设定分频值BaudRate为1,根据以上公式计算,得出在4MHz时钟时,要实现100Kbps的波特率每个标称位包含个10时间份额TQ,在N满足要求的情况下BaudRate还可以设置为其他值,由MCP2510的手册得知的TQ数量N应在6-25之间。然而在满足这个前提下,应尽量使TQ的时间短一些,即一个标称位的时间份额数量N多一些,这样选择采样点位置时具有更好的分辨率。
412 设置时间段和采样点
在确定了一个标称位包含的时间份额数量后,还需要对各个时间段包含的时间份额进行分配,以确定采样点的位置。位的采样时刻取决于系统参数,通常应发生在位时间的60-70%处。同时,同步段的时间份额为1 TQ,TDELAY典型值为1-2TQ。因此时间份额分配如下:
(Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)=(1+2+3+4)
413 确定同步跳转宽度和采样次数
根据规则,SJW最大值 为4TQ。然而通常情况下,只有当不同节点的时钟发生不够精确或不稳定时,例如采用陶瓷谐振器时,才需要较大的SJW。一般情况下, SJW取1即可满足要求。
看了你就明白了!
目前云计算是新新事物,新新事物风险和机遇并存。
以直白的方式来表达:
“云”是技术炒作专家搞出来忽悠你的,
其实就是一个代表透明的资源池和服务站,不用太理会!
云计算是整合资源以即方式提供服务,它主要在三个层面体现技术和服务。
一个是硬件基础设施层面(IAAS),让硬件资源以即方式提供服务;
(客户要硬件环境资源,登录资源池自己定制、然后交钱、最后获取资源,用多少付多少钱;
付费对象是:应用开发者,企业IT管理者,应用平台供应商等。);
一个是应用平台层面,让应用平台以即方式提供服务;
(供应商提高软件平台,平台可以开发、部署、管理、监控应用,提供开放的类APP商店;
付费对象是:应用开发者。)
一个是应用层面,让应用以即方式提供服务;
(应用开放商,把应用部署在应用平台,用户可以去使用这些应用,按即方式享受服务和付费;
付费对象是:终端消费者。)
即方式服务:
像水电一样,从你开始使用到你结束使用进行度量,你登录应用入口就可以直接使用应用,
甚至不用在你本地安装应用,就像打开水龙头就可以用水一样,然后付费,它本质是一种推
的服务、盈利模式。
所以,云计算要学习就多方多面。
不过,他们的根本基础还是计算机科学与技术,包括网络、硬件、软件等,
只是硬件或平台会比较侧重虚拟机、网格计算、分布式计算等方面的技术,
而应用会比较在意用户体验、大众互联方面,应用主要技术还是软件开放技术,
特别可能会热于android或ios或wm的WIFI移动应用的开发。
下一波的IT浪潮就是云计算、物联网、人工智能、生物技术。
目前云计算是新新事物,教学资源紧张是正常的,新新事物风险和机遇并存。
请相信机遇的东西确实是过了这个村,没了这个店,云计算目前就像初期的计算机专业一样,
等它成熟了,等你看到它的发展了,那时候你就落后,只能在前人后面捡烟头。
好好把握学习这个专业的机会,目前云计算处于发展初期,等你毕业刚好是大展拳脚的好时机!
相信选择这个新新行业有风险,但机会总是给第一个敢吃螃蟹的人。
~~~~~~~~~~~~~~~~~~~~~~~~
来自:广州溯源—物联网、云计算、人工智能---构建绿色未来
当然可以,方法主要有两种:
1、等你进入调试状态时,在Project_Workspace下的“寄存器”标签页下有一个“Sec”,这个就是用来模拟记录程序运行的时刻的,如果你要查看一段程序运行了多长时间,可以笔记记录运行到程序开头的时刻,在记录运行到程序尾的时刻,两者相减,就能得到运行的时间了。
2、运行调试状态下的“性能分析器”(菜单“调试”---“性能分析器”),同样能通过两个时刻的相减来得到程序运行时间。
两种方法中,第2中方法能得到更多信息。
注意:你必须在编译之前设置你时钟频率和你实际使用的时钟频率一样(其实在Keil的设置是来模拟实际运行的情况的),方法:右键“目标1”---“为目标1设置选项”----“项目”标签页,在下面的“时钟”里设置你所用的频率。
我个人通常用第1种方法来查看时间,主要用于延时函数、IIC时序延时、SPI延时等,非常有用。
Good Luck
着半导体技术的不断发展,热敏电阻作为一种新型感温元件应用越来越广泛。他具有体积小、灵敏度高、重量轻、热惯性小、寿命长以及价格便宜等优点。
传统的热敏电阻温度计硬件上大多采用普通单片机(MCS-51系列)+A/D转换器以及LED显示模块构成,分立元件多、功耗大、设计复杂且难以调试;软件上也多采用冗长繁琐的汇编语言来实现,设计效率低、可移植性差、性能难以保证。
目前,嵌入式系统的应用已经进入到一个高、低端并行发展的阶段,其标志就是32位微控制器的发展。ARM(Advanced RISC Machines)是嵌入式系统应用比较广泛的一种32位微处理器核,具有体积小、功耗低、集成度高、硬件调试方便和可移植 *** 作系统等优点。为智能仪器向轻便化、智能化、微机一体化等方向发展提供了必要条件。
由于电子技术的飞速发展,电子元器件的性价比不断得到提高。本文采用32位的ARM7 TDMI-S微处理器核LPC2142为控制核心,利用其内部自带的A/D转换器和SPI接口来控制LED显示驱动器MC14489进行温度的实时显示。
2 热敏电阻温度的转换原理
热敏电阻是温度传感器
的一种,他由仿陶瓷半导体组成。热敏电阻(NTC)不同于普通的电阻,他具有负的电阻温度特性,即当温度升高时,其电阻值减小。图1为热敏电阻的特性曲线。 热敏电阻的阻值~温度特性曲线是一条指数曲线,非线性较大,因此在使用时要进行线性化处理。线性化处理虽然能够改善热敏电阻的特性曲线,但是比较复杂。为此,在要求不高的一般应用中,常做出在一定的温度范围内温度与阻值成线性关系的假定,以简化计算。使用热敏电阻是为了感知温度,给热敏电阻通以恒定的电流,电阻两端就可测到一个电压,然后通过公式下面的公式可求得温度:
T为被测温度;T0为与热敏电阻特性有关的温度参数;K为与热敏电阻特性有关的系数;VT为热敏电阻两端的电压。
根据这一公式,如果能测得热敏电阻两端的电压,再知道参数T0和K,则可以计算出热敏电阻的环境温度,也就是被测的温度,这样就把电阻随温度的变化关系转化为电压随温度变化的关系了。数字式电阻温度计设计的主要工作,就是把热敏电阻两端电压值经过A/D转换成数字量送到单片机中,然后通过软件方法计算出温度值,再进行显示、打印等处理。
3硬件电路设计
在电子技术迅猛发展的今天,一些功能强大的元器件价格不断下降,使其性价比不断得到提高,应用领域越来越广泛。本文就是采用32位的ARM微处理器核LPC2142代替传统的805l单片机为控制核心,进行A/D转换和温度实时显示。图2为整个系统的结构原理图。
热敏电阻NTC串联上一个普通电阻R,再接+5V电源,取RT两端电压,并送入微控制器LPC2142的AINl(P0.28引脚)通道进行A/D转换。转换启动方式以及转换通道的选择可通过设置ADC控制寄存器ADC0DR来实现。转换的结果通过一个同步、全双工串行SPI接口输出到LED显示驱动器MCl4489进行温度的实时显示。
3.1 ARM微控制器LPC2142简介
ARM 7 TDMI-S核是通用的32位微处理器核,采用冯.诺依曼结构,具有高性能和低功耗特性。ARM结构是基于精简指令集计算机(RISC)原理设计的,指令集和相关的译码机制比复杂指令集计算机要简单得多。.ARM 7 TDMI-S处理器使用流水线技术,处理和存储系统的所有部分都可以连续工作。这样,使用一个小的、廉价的处理器核就可以非常容易地实现很高的吞吐量和实时的中断响应。
LPC2142是基于一个支持实时仿真和嵌入式跟踪的3Z/16位ARM7TDMI-s CPU的微控制器,内嵌有64 kB的高速FLASH存储器和16 kB的片内SRAM。128位宽度的存储器接口和独特的加速接口使32位代码能够在最高时钟频率下运行,对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而其性能的损失却很小。
LPC2142内部带有一个10位逐次逼近式A/D转换器,其主要特性为:
(1)6个引脚复用为输入脚;
(2)掉电模式;
(3)测量范围O V~Vref通常为3 V,不超过VDDA电压);
(4)每个转换器包含一个可编程分频器,可将时钟调整至逐次逼近转换所需的4.5 MHz(最大)。这样,10位转换时间大于或等于4.55μs;
(5)一个或多个输入的突发转换模式;
(6)可选择由直接启动、输入跳变或定时器匹配信号触发转换;
LPC2142内部还拥有一个硬件SPI(Serial Peripheral InteRFace)接口。他是一个同步、全双工串行接口,最大数据位速率为时钟速率的1/8,可配置为主机或者从机。
3.2 LED显示驱动管理芯片MC14489
MCl4489是美国MOTOROLA公司生产的串行接口LED显示驱动管理芯片。其输入端与系统主CPU之间只有3条I/0口线相联,用来接收待显示的串行数据。输出端既可以直接驱动七段LED显示器,也可以驱动指示灯。
MCl4489内部集成了数据接收/译码/扫描输出/驱动显示所需的全部电路,仅需要外接一具电流设定电阻就可以对LED的显示高亮度进行控制。每个MC14489芯片可以用以下任意一种显示方式进行显示:5位LED数字加小数点显示; 4位半数字加小数点带符号显示;25支指示灯显示;5位半数字显示。该芯片内含的译码器电路可输出七段格式的数字0~9,16进制的字母A~F以及15个字母和符号。
图2是用单片MC14489构成一个5位LED显示器的例子。由图可知,用MC14489构成显示电路既不用加任何限流电阻,也不用附加反相或驱动电路,电路设计非常简捷。
MC14489芯片采用特殊的设计技术,使其电源引脚在大电流工作的情况下仍具有最低的尖峰和较小的EMI(电磁交互干扰)。
4系统软件设计
由前面热敏电
阻温度转换原理的简述可知:热敏电阻特性曲线是一条指数曲线,非线性度较大,又由于非线性处理比较复杂,在本文设计要求不是很高的情况下可以做以简化来处理。
4.1程序设计流程图
限于篇幅,本文只给出程序设计的流程图。整个程序的流程图如图3所示。
4.2温度计算程序
在公式T=T0-KVT中,系数值K是一个很小的数。为了方便计算,取扩大256倍后的K值和VT作乘积,即256×K×VT。相乘后,对乘积只取高8位舍弃低8位,就可以抵消系数值K扩大256倍的影响,得到正确的结果。
此外,从图1中热敏电阻的阻值一温度特性曲线可以看出,在+10~150℃的温度范围内,阻值与温度的关系线性度较好。通常就把这个温度范围作为有效温度范围。当温度超出这个范围时,用数码管全部显示F作为标志。
由于有效温度范围没有超过150℃,所以温度显示用3位数码管,其显示格式为:AD XXX其中,XXX为温度值,图2中的LED1和LED2只显示字符A和D,后面三只数码管LED3,LED4和LED5显示温度值。
5 结 语
采用SPI串行接口和MCl4489管理芯片来构成智能化仪器仪表的显示驱动电路可使系统的性能价格比获得大幅度的提高。本文在要求精度不是很高的情况下,将热敏电阻的特性做了简单化线形处理,并利用本文的设计电路对+10~150℃范围内的温度进行了测量,达到了良好效果。在整个设计过程中需要注意的问题有以下几点:
(1)LPC2142微控制器具有独立的模拟电源引脚VDDA,USSA,为了降低噪声和出错几率,模拟电源与数字电源应当用一个10μH的电感进行隔离。
(2)A/D转换参考电压Vref的选择要满足测量精度的需要。如果想提高A/D转换精度,一般均采用基准源芯片来提供参考电压。TL431是一个具有良好热稳定性能的、低噪声的三端可调分流基准源(温度系数为30×10-6/℃)。本文就是采用该基准源芯片来提供参考电压。
(3)由于本系统中LPC2142微控制器作为SPI主机来使用,故其P0.7引脚SSEL要接一个10 kΩ的上拉电阻
一、什么是冯诺依曼体系结构?它的主要内容是什么?20世纪30年代中期,德国科学家冯诺依曼提出,抛弃十进制,采用二进制作为数字计算机的数制基础。同时,他还说预先编制计算程序,然后由计算机来按照人们事前制定的计算顺序来执行数值计算工作,冯诺依曼理论的要点是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯诺依曼的这个理论称为冯诺依曼体系结构。从ENIAC到当前最先进的计算机都采用的是冯诺依曼体系结构。根据冯诺依曼体系结构构成的计算机,必须具有如下功能: 把需要的程序和数据送至计算机中。 必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。 能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。 能够根据需要控制程序走向,并能根据指令控制机器的各部件协调 *** 作。 能够按照要求将处理结果输出给用户。二、微机的总线有哪几种类型?它们各自的作用是什么?微机主板常用总线有系统总线、I/O总线、ISA总线、IPCI总线、AGP总线、IEEE1394总线、USB总线等类型;总线就是主板上各部件之间互相传输数据的通道,有了总线,各板卡才能与主板建立联系,供计算机使用。扩展槽口中的金属线就是扩展总线,板卡插到扩展槽中时,其管脚的金属线与槽口的扩展总线相接触,就达到了信号互递的作用。扩展槽有ISA、PCI、AGP三种类型,相应的扩展总线也分为ISA、PCI和AGP三种类型。 三、中文windows98桌面的概念?屏幕保护的概念?桌面是指Windowss所占据的屏幕空间,即为窗口、图标、对话框等工作项所在的屏幕背景。特点:由于Windows98的Web集成特点,桌面可以由传统方式变为"按Web页查看"方式,将"活动内容"从Web页移到桌面上,使桌面成为"活动桌面"。屏幕保护程序最初是被用来保护显示器的,因为以前的显示器在高亮显示情况下,如果长时间只显示一种静止的画面,有可能会造成对荧光屏的伤害(如果是低亮画面,如黑屏,则不会造成对荧光屏的伤害,因此黑色可被视为一种屏幕保护色。),所以屏幕保护程序就出现了,它使用一些动态画面使荧光屏避免受伤。但是现在的显示器对长时间静止画面的承受能力已经非常强了,所以屏保的作用便发生了一些变化,现在屏保多被用来当作一种艺术品来欣赏或者利用屏保的密码来保护电脑在主人离开时不被他人使用。
用定时中断控制闪烁。
时间间隔则由主程序,根据按键次数来变更。
程序可见:
>
仿真实验截图如下:
以上就是关于dsp中系统时钟初始化程序应该怎么写全部的内容,包括:dsp中系统时钟初始化程序应该怎么写、云计算中 IAAS是什么意思、keil-3中能不能查看某一段C程序运行的所需时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)