最新日志

发表于:2008-3-25 20:19:27
标签:le78d11,勤务电话  

0

关于电话的奇怪问题

    最近调试LE78D11很郁闷。老是不断出现问题。我使用的是MSP430F169,LE78D11+1E77D11的组合。刚开始是摘挂机中断可以正常触发,拨号不能正常触发。参考电路图发现VSW少了一个220uf的滤波电容。加上后输出电压正常,可是芯片寄存器不能正常访问。另一块板子也有问题。+12V输入电压没有,可能被拉低了,具体也不清楚被什么拉低了,很是郁闷。

希望能早日解决问题!

点击开大图

 

点击此处查看原文 >>

系统分类: 通信网络   |    用户分类:    |    来源: 原创

评论(1) | 阅读(179)
发表于:2008-3-23 21:46:19
标签:华为笔试,FPGA,verilog  

0

2008华为武汉最新网络逻辑部笔试题目(记忆写下)

一.填空
1.写出三个FPGA结构组成。
2.补码是什么,反码是什么
3.gray码的定义
4.逻辑函数的化简,题目大概就是使用吸收定律,摩根定律。
4.阻塞的符号,菲阻塞的符号。
5.异步时钟会带来的后果是什么。

二。选择
都是一些基础,有两个是关于流行软件的识别,问QUARTUS,ise,synopsys,,synplify那个软件与
其他不同。还有一个是关于测试的。

三。表达题
1.用时序图描述信号建立和保持
2.画了两个D触发器,第二个D触发器的时钟与第一个D触发器时钟之间有一个计数器连接。

四。用VHDL或者Verilog进行设计
1.写一个7位计数器代码
2.写一个1:2占空比分频器
3.用2种方法写一个8位输入优选器。

还有一些不记得了,主要是数字电路基础与VERILOG基础的,看来大公司对基础的要求还是很
严格的。相信通过自己不断的学习离他们的要求也不会太遥远,一起努力吧,朋友们!

点击此处查看原文 >>

系统分类: 显示光电   |    用户分类:    |    来源: 原创

评论(1) | 阅读(335)
发表于:2008-3-17 22:29:19
标签:MSP430  

0

MSP430系列单片的中断实现与中断嵌套!

1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT;

2)当进入中断程序时,只要不在中断中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行;

3)若在中断A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开;

4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!中断服务不执行抢先原则。

5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;

对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用"EINT();"开中断,而在打开中断前没有清标志,就会有相同的中断断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(0) | 阅读(228)
发表于:2008-3-17 22:24:19
标签:MSP430  

0

MSP430中断服务函数的定义

MSP430的时钟问题

 

MSP430的时钟周期(振荡周期)、机器周期、指令周期之间的关系

通用知识

时钟周期也称为振荡周期:定义为时钟脉冲的倒数(时钟周期就是直接供内部CPU使用的晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,工作速度就越快。

机器周期:在计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期。8051系列单片机的一个机器周期由6S周期(状态周期)组成。一个S周期=2个时钟周期,所以8051单片机的一个机器周期=6个状态周期=12个时钟周期。

指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期也不同。

专用知识:

430中,一个时钟周期 = MCLK晶振的倒数。如果MCLK8M,则一个时钟周期为1/8us

一个机器周期 = 一个时钟周期,即430每个动作都能完成一个基本操作;

一个指令周期 = 16个机器周期,具体根据具体指令而定。

另:指令长度,只是一个存储单位与时间没有必然关系。

 

 

MSP430根据型号的不同最多可以选择使用3个振荡器。我们可以根据需要选择合适的振荡频率,并可以在不需要时随时关闭振荡器,以节省功耗。这3个振荡器分别为:

1DCO  数控RC振荡器。它在芯片内部,不用时可以关闭。DCO的振荡频率会受周围环境温度和MSP430工作电压的影响,且同一型号的芯片所产生的频率也不相同。但DCO的调节功能可以改善它的性能,他的调节分为以下3步:a:选择BCSCTL1.RSELx确定时钟的标称频率;b:选择DCOCTL.DCOx在标称频率基础上分段粗调;c:选择DCOCTL.MODx的值进行细调。

 

2LFXT1  接低频振荡器。典型为接32768HZ的时钟振荡器,此时振荡器不需要接负载电容。也可以接450KHZ~8MHZ的标准晶体振荡器,此时需要接负载电容。

3XT2  450KHZ~8MHZ的标准晶体振荡器。此时需要接负载电容,不用时可以关闭。

低频振荡器主要用来降低能量消耗,如使用电池供电的系统,高频振荡器用来对事件做出快速反应或者供CPU进行大量运算。当然高端430还有锁频环(FLL)FLL+等模块,但是初步不用考虑那么多。

MSP4303种时钟信号:MCLK系统主时钟;SMCLK系统子时钟;ACLK辅助时钟。

1MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1248分频作为其信号源。

2SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择任何一个振荡器所产生的时钟信号并进行1248分频作为其信号源。

3ACLK辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但ACLK只能由LFXT1进行1248分频作为信号源。

PUC复位后,MCLKSMCLK的信号源为DCO,DCO的振荡频率默认为800KHZACLK的信号源为LFXT1

MSP430内部含有晶体振荡器失效监测电路,监测LFXT1(工作在高频模式)和XT2输出的时钟信号。当时钟信号丢失50us,监测电路捕捉到振荡器失效。如果MCLK信号来自LFXT1或者XT2,那么MSP430自动把MCLK的信号切换为DCO,这样可以保证程序继续运行。但MSP430不对工作在低频模式的LFXT1进行监测。

 

为了实现具体的时钟可以设置跟时钟相关的寄存器,在低端430中是DCOCTLBCSCTL1BCSCTL2三个寄存器。而对于高端的430,则要考虑SCFI0SCFQCTLFLL_CTL0FLL_CTL1BTCTL等几个寄存器。具体设置,参看DataSheet

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(248)
发表于:2008-3-17 22:22:06
标签:MSP430  

0

MSP430入门

本人学习和使用msp430几个月,偶在微控论坛看到一笔记,记载的蛮好的,现转载到自己博客以做备忘。

硬件初步

这只是我在学习TI公司生产的16位超的功耗单片机MSP430的随笔,希望能对其他朋友有所借鉴,不对之处还请多指教。

下面,开始430之旅。

讲解430的书现在也有很多了,不过大多数都是详细说明底层硬件结构的,看了不免有些空洞和枯燥,我认为了解一个MCU的操作首先要对其基础特性有所了解,然后再仔细研究各模块的功能。

1.首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。

00xf特殊功能寄存器;0x100x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x10000x107f seg_b0x1080_0x10ff seg_a flash信息存储剩下的从0xffff开始向下扩展,根据不同容量,例如14960KB0xffff0x1100

2.复位信号是MCU工作的起点,430的复位信号有两种:上电复位信号POR和上电清除信号PUCPOR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误是产生。但是,无论那种信号触发的复位,都会使msp430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。复位后的状态不写了,详见参考书,嘿嘿。

3.系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。430最多有三个振荡器,DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ8M,需接负载电容;XT2接高频450KHZ8M,加外接电容。(经验中发现,接XT2时,需要注意自己开启XT2,并延时50us等待XT2起振,然后手工清除IFG1中的OFIFG位,其操作顺序为:打开XT2->等待XT2稳定->切换系统时钟为XT2

430有三种时钟信号:MCLK系统主时钟,可分频1 2 4 8,供cpu使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。

4.中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状态,有事件时中断唤醒cpu,处理完毕再次进入低功耗状态。

整个中断的响应过程是这样的,当有中断请求时,如果cpu处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的pc值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位SR.GIE复位,相应的中断向量值装入pc,程序从这个地址继续执行。

这里要注意,中断允许位SR.GIE和中断嵌套问题。如果当你执行中断程序过程中,希望可以响应更高级别的中断请求时,必须在进入第一个中断时把SR.GIE置位。

其实,其他的外围模块时钟沿着时钟和中断这个核心来执行的。具体的结构我也不罗索了,可以参考430系列手册。

 

C语言编程起步

因为常用的430编程开发是c语言,所以下面讲解C语言对430编程的整体结构。基本上属于框架结构,即整体的模块化编程,其实这也是硬件编程的基本法则拉(可不是我规定的法则哦)。

首先是程序的头文件,包括#include <MSP430x14x.h>,这是14系列,因为常用149;其他型号可自己修改。还可以包括#include "data.h" 等数据库头文件,或函数变量声明头文件,都是你自己定义的哦。

接着就是函数和变量的声明 void Init_Sys(void),即系统初始化。系统初始化是个整体的概念,广义上讲包括所有外围模块的初始化,你可以把外围模块初始化的子函数写到Init_Sys()中,也可以分别写各个模块的初始化。但结构的简洁,最好写完系统的时钟初始化后,其他所用到的模块(包括一些中断初始化)也在这里初始化。

void Init_Sys()

{

   unsigned int i;

   BCSCTL1&=~XT2OFF;                //打开XT2振荡器

   do

   {

   IFG1 &= ~OFIFG;              // 清除振荡器失效标志

   for (i = 0xFF; i > 0; i--);  // 延时,等待XT2起振

}

while ((IFG1 & OFIFG) != 0);    // 判断XT2是否起振

BCSCTL2 =SELM_2+SELS;           //选择MCLKSMCLKXT2

 

//以下对各种模块、中断、外围设备等进行初始化

........................................

_EINT(); //打开全局中断控制

}

这里涉及到时钟问题,通常我们选择XT28M晶振,也即系统主时钟MCLK8M,cpu执行命令以此时钟为准;但其他外围模块可以在相应的控制寄存器中选择其他的时钟,ACLK;当你对速度要求很低,定时时间间隔大时,就可以选择ACLK,例如在定时器Timea初始化中设置。

主程序:

void main( void )

{

   WDTCTL = WDTPW + WDTHOLD;//关闭看门狗

   InitSys();               //初始化

//自己任务中的其他功能函数

 。。。。。。。。。。。。。。。。。。。。。

   while(1);

}

主程序之后我要讲讲中断函数,中断是你做单片机任务中不可缺少的部分,也可以说是灵魂了(夸张吗)。

/***********************************************************************

                         各中断函数,可按优先级依次书写

***********************************************************************/

举个定时中断的例子:

//初始化

void Init_Timer_A(void)

{

    TACTL = TASSEL0 + TACLR;               // ACLK, clear TAR
        CCTL0 = CCIE;                         // CCR0
中断使能
        CCR0=32768;                           //
定时1s
        TACTL|=MC0;                           //
增计数模式
    }
//    
中断服务

#pragma vector="TIMERA0"_VECTOR

__interrupt void TimerA0()

{

// 你自己要求中断执行的任务

}

当然,还有其他的定时,和多种中断,各系列芯片的中断向量个数也不同。

 

学完并懂得以上知识后,接下去推荐看微控论坛上的msp430常用模块应用原理

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(185)
发表于:2008-3-16 23:14:48
标签:嵌入式  

1

嵌入式工作心得

工作一年半有余,也来发表一点开发调试心得。

1.对于开发过程中的问题要有信心解决。嵌入式开发是一个长期过程,中间问题多而且不容易发现,需要反复不断的去查。心态是很重要的,只有保持积极的心态才有信心继续下去。

2.要善于从不同的角度来思考问题,一条路行不同就从另外一条路来思考,不要一条胡同走到底,这样是行不通的。

3.要善于记录调试中的问题,多问有经验的同志,多思考。

4。不要忽视每一个细节。往往就是细节决定成败。有时一个电阻一个电容焊错导致调试过程中很多一项不到的问题,往往很难发现,所以细节很重要。

5.多用对比的方式来思考问题,多借鉴别人成功的经验,这样可以少走许多的弯路。

以后再补充,这只是本人一点小小的体会。

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(258)
发表于:2008-3-16 22:55:05
标签:ARM,WINCE  

1

ARM之旅开始咯!~~

最近买了广州友善之臂公司的ARM9开发板,打算利用业余时间学习操作系统和应用程序编程相关的工作。

 

在板上装了WINCE,也下载了PLATFORM BUILDER,应用程序编程还没有开始。开始本来是打算学习linux的,现在它比较流行,而且是开源的。装了WMWARE环境下的REDHAR LINUX,编译的时候总是提示找不到一个库文件,命令行的界面我也不太习惯,就先搁置了。

希望和各位志同道合的朋友一起学习讨论点击开大图

知识在于积累,坚持就是胜利。相信在技术的道路上我们可以走的更远!

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 无分类

评论(1) | 阅读(216)
总共 , 当前 /