This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【活动结束】- 快来讲述您成功采用TI MCU的故事!我们热切期待ing!

Other Parts Discussed in Thread: OMAP3530, LM3S811, MSP430F147, CC2530, CC2430, AM3517, LM3S8962, TMS320F28335, ADS805, TLC5510, MSP430F149, MSP430F5438, TMS320F2812, TMS320F28027, CONTROLSUITE, MAX3232, CC2500, MSP430F2417, MSP430F2617, DXP, TMS320C6747, MSP430F1611, LM3S5632, MSP430F449, TMS320F2808, LM3S615, MSP430F2618, CC2420, MSP430F438, MSP430F435, BQ20Z80, BQ2050, BQ2060, OPA335, MSP430F2132, LM3S5749, MSP430F413, MSP430F425, MSP430G2211, TMS570LS20216, TMS320F2801, AM1810
在您的产品设计中,您是否有采用TI MCU的成功经历?也许是MSP430、也许是C2000,或Stellaris® ARM® Cortex™-M如果您有这样的成功故事,我们期待您的分享!

活动时间:即日到2012215

 

参与方式:可跟帖讲述
     采用TI MCU的设计经验总结和技巧心得;           
     采用TI MCU碰到的问题和后来的解决办法

 

 

参与评奖要求:
  1、所有故事均须为参与者原创;
  2、文字150字以上;
  3、描述清晰、具体。

 

 

奖品
一等奖1 : 拉杆电脑包一个9B96EVM板子一块F28035开发板(内置XDS100仿真器)
二等奖 2 : 蓝牙键盘
三等奖5名:  电脑背包
热心参与奖50(先到先得):8*20mm迷你望远镜  

一等奖、二等奖、三等奖分别由TI FAE团队评出。每个 ID 不限制参与次数,但每个 ID 只有 1 次获奖机会。

 

  •       我于2011年4月份走出校门踏入工作,开始接触TI DSP C2000 系列,至今已过去8个月,也与大家一起来分享自己在这段时间使用TMS320F28335芯片的一些心得:

       1.TI公司提供了芯片的datasheet以及内部资源的参考文档和代码,都能在TI公司的主页上找到并下载。感谢TI公司技术人员的辛勤劳动,为芯片的开发使用人员提供了这么多有用的参考资料,节省产品的研发的时间,避免少走很多弯路。

       2.在使用DMA资源搬运数组的时候,有这么一行代码 DmaRegs.CH1.CONTROL.bit.PERINTFRC = 1; 殊不知DmaRegs寄存器是受保护的,要修改寄存器的值必须在这行代码的前后增加两行代码,修改后如下:

       EALLOW;             //允许对寄存器的操作                                                        

           DmaRegs.CH1.CONTROL.bit.PERINTFRC = 1;  

           EDIS;                   //禁止对寄存器的操作

    28335芯片中有很多寄存器的都是有读写保护的,大家在使用这些寄存器时要注意。

       3.在使用SCI资源时设置其波特率时,我用了以下宏

       #define CPU_FREQ     150E6

           #define LSPCLK_FREQ  (CPU_FREQ/4)

           #define SCI_FREQ 9600

           #define SCI_PRD ((LSPCLK_FREQ/(SCI_FREQ*8))-1)

    我的目的是设置波特率为9600,通过计算得到SCIHBAUD和SCILBAUD但是这时候我发现SCI_PRD这个值不是我要的487,而是3328,原因出在(SCI_FREQ*8) = 9600 * 8 = 76800(0x12c00)>65536,这时候(SCI_FREQ*8) 溢出得到的16位值是0x2c00 = 11264  得到SCI_PRD = 37500000/11264 - 1 = 3328,修改宏定义为:

       #define CPU_FREQ     150E6

           #define LSPCLK_FREQ  (CPU_FREQ/4)

           #define SCI_FREQ 9600

           #define SCI_PRD ((LSPCLK_FREQ/SCI_FREQ/8)-1)

    得到正确值。28335是16位的,使用的时候切记注意。

       4.在写好代码测试的时候发生DSP复位的情况,查了好久后发现是由于数组溢出的关系。在使用数组的时候,要避免出现类似的错误。

       希望我的分享能给大家一些提醒和帮助,共同进步!

  •        我第一次接触TI的产品应该是TI的计算器,在中国的大学和中学中使用较多的应该是卡西欧的计算器,当时拿到TI的计算器就感觉功能很复杂也很强大,毕竟说明书都比卡西欧的厚嘛。

           在大三的时候参加了学校的机器人小组,这时候对TI的产品开始有了深入的了解。我们机器人控制板使用的主控芯片是TI的TMS320F2812,使用时感觉这款DSP好像就是为我们“量身订做”的一般:PWM模块用于直流电机控制、QEP模块用于编码器计数、SCI SPI用于通信、还有丰富的GPIO资源。虽然它是一款定点DSP,但对于我们大量的浮点运算一点也感觉不到吃力。我感觉我们只用到了它大概50%的潜力。

           后来随着机器人功能的复杂,我们还开发了DSP2812+FPGA来满足我们的需求。值得一体的是我们还将μCOS系统移植进了DSP,这更加方便我们去开发它的潜能了。记得当时我们小组使用的集成开发环境是CCS2.2,由于CCS2.2不兼容Win7,于是我就把我们的开发环境移植到了CCS3.3,感觉3.3的用户界面比2.2好多了。现在CCS V5都出来了,好想去试用一下呐。

          还记得当时快临近比赛的时候,2812突然变得缺货起来,在网上甚至抬到了1000元一片,但为了比赛还是得储备几块以防万一呐,现在想起来就心痛。。

          还值得一提的是,TI中国的团队来我们学校开宣讲会了,看到他们去美国TI总部培训的照片很羡慕呐。。

          新的一年,希望TI中国将更好的服务带给中国广大电子发烧友。。

  • 今天才看到这个TI的邮件,顺便进来瞧瞧,想不到那么热闹,我也来瞎扯几句吧,首先我声明一下我不是TI的托,也不是为了要得奖而写下面的文字,文笔不好,大家不要介意,我只是说说的这几年来用TI产品的感受。

    -----------------------------------------------------------------------------------------------------------------------------------------------------

         我是07年开始工作,从事无线传感网一些产品开发,大家应该都能猜到我用的芯片了,我也不卖关子了,单片机开始用MSP430F149到后来MSP430F5438在到现在公司的MSP430F5510,射频芯片刚开始是CC1100到后来的CC1101,也在用TI的zigbee芯片CC2530,还有一些电源芯片等。

       我第一次接触到的TI芯片是从我大学毕业工作的第一家公司开始的,后来在2010年的时候,我跳槽到另一家公司,刚好碰到要研发新的产品,我不假思索的用了TI的zigbee产品CC2530.

         大家可能会问,你工作那么多年,你没有动过心用其他公司的产品吗?那我可以告诉你,这个确实有过,但是最终我还是选择了TI的产品,主要是一下几点。

       1.技术支持好,资料多。我刚开始用的是MSP430F149,那是07年的事情了,这个片子有个毛病,因为没有BOR,导致上电有时候不能正常复位。我们也查了很长时间,后来打电话到lierda,碰到一个姓朱的技术支持,态度是相当好,同样,我在用MSP430F5510遇到问题,在这个论坛里一发帖子,就会有技术支持帮我解决。更可贵的是TI官网上的技术支持还会亲自打电话过来给我指导,相当热情,虽然很多问题最后都是自己解决的,不过这个还是要赞一个,做的真不错。

       有一次,我们想调研xT半导体的8位低功耗芯片,碰到问题的需要技术支持的,其实就是一个很简单的电路复位问题,是我不小心搞错了,出现无法下载的问题,后来我打电话到xT上海总公司的电话,那接电话女的直接一句冷冷的话,叫我找代理商,把我蒙了,我本来就是调研阶段,就在电子市场搞回几个样片,那些卖芯片的摊位会搭理我的。只从那一次之后,那个方案本来想用xT公司的芯片直接被我给否定掉了。

       2.大方。这个我就不多说了,大家都懂的,很多芯片厂家都是很小气的,就像我在某某公司网站上申请了N久的芯片,那是1年了,还没到我手里。大家可能就会说,你可以找代理商要的啊?确实,代理商那边很快就能拿到样品,作为电工,如果遇到与自己公司有往来的代理商正好有这个芯片那最好了,但是很多新的芯片还是要重新找代理商,有时候只是做个调研,不一定将来在产品上就会用,电工自己找来的代理商,自己公司的采购部分不一定认,这个是很麻烦的问题。更重要的事情就是,如果从代理商那边拿了几个样品,那些代理商三天两头的打电话过来问东问西,比较烦人。

       其实我觉得TI这点做的很好,很多芯片都是用着用着就习惯了。说句心里话,论坛里面的很多电工都是帮公司打工的,我估计大多数人和我一样,芯片的价格不会很敏感,但是东西一定要好用,自己有熟悉的才是最重要的,除非老板自己钦点的芯片。

      3.质量和性能相当OK。这个我也不多说了,大家也是懂的,这也是最重要的一点。不像某某公司一样,牛吹的很大,但是芯片存在很大一个BUG,就是解决不了,TI实力还是在那边的。

    ----------------------------------------------------------------------------------------------------------------------------------------------------

    以上是个人感受,如果雷同,纯属巧合

  •       看到大家都这么给力,我也来讲讲我与TI的故事。。。

       最初接触单片机是在大二,第一次参观学校的实验室,看到那么多新奇的电子制作,立刻被迷了双眼,暗自决定我以后要学习这个,和大多数电子类学生一样我最开始接触的也是51的MCU,当时的AT89C51至今印象深刻,大封装,插针式管脚。第一次接触TI的MCU是在大三的电子设计大赛,因为控制较复杂,所需外设较多,同时需要在线编程和自带LCD驱动,为比赛加分,当然需要系统有低功耗的特点,在指导老师的推荐下,我们毫不犹豫的选择了TI的单片机,当时使用的是F44X系列的单片机,当即被MSP430的强悍所折服,丰富的外设和极低的功耗完全将89C51系列PK掉,它那简单易学的开发工具和完整的软件库让人非常容易上手,虽然那次比赛只得了二等奖却从此让我与TI的MCU结下了不解之缘,成了它的忠实粉丝。

       后来上了研究生,项目需要又接触了TI的CC系列zigbee芯片,实验室购买了一系列的CC2530开发板,由

    于对TI的单片机比较了解,上手快,但是芯片自带的协议栈Z-stack代码量巨大,本着不怕苦的精神,我一

    头扎进实验室,整天研究代码结构,网上查资料,从那时起我也就成了德仪社区的常客,有事没事逛社区成

    了我的习惯。经过三个月的研究,当我的光传感器的数据第一次发送接收正确的时候那种兴奋真是无以言表

       后来历史进入cortex时代,TI收购了LUMINARY公司,从此有了自己的cortex-m3系列,在网上关注很久,很想接触这一彪悍的处理器。后来参加活动获赠了一块LM3S811的开发板,从此开始了我的cortex-m3学

    习之旅。和以往一样TI提供了丰富的软件库StellarisWare,丰富的库函数让我们的编程变得更容易。从最简单的流水灯开始,现在做成了一个集LCD12864,温湿度传感器,实时时钟,TEA5767FM收音于一体的功能模块。目前正在继续学习。。。

       希望德仪在线社区越办越好,内容越来越丰富!

  • MSP430学习小结-看门狗的使用总结

    看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。在很多单片机中都内置了看门狗,看门狗本身是一个定时器,当定时器溢出时即进行系统复位,因此需要在程序中对看门狗定时器进行清零,即常说的喂狗。

    由于我用过AVR的单片机,和AVR的相比,MSP430的看门狗要灵活的多,首先默认看门狗是开着的,因此如果不使用看门狗的话要关闭,指令如下:

    WDTCTL = WDTPW + WDTHOLD

    如果打开看门狗则需要在程序中清零,指令如下:

    WDTCTL=WDTPW+WDTCNTCL

    这只是基本的应用,430的看门狗要稍微复杂一些,首先从IAR的头文件中看看定义了几种工作状态:

    2.WDT通过SSEL 和IS0 IS1 3位可以确定与8种时钟源相关的时间(ACLK=32768Hz,SMCLK=1MHz)

    SMCLK=1MH(对应8种)

    WDT_MDLY_32

    WDT_MRST_32

    WDT_MDLY_8

    WDT_MRST_8

    WDT_MDLY_0_5

    WDT_MRST_0_5

    WDT_MDLY_0_064

    WDT_MRST_0_064

    ACLK=32768Hz(对应8种)

    WDT_ADLY_1000

    WDT_ARST_1000

    WDT_ADLY_250

    WDT_ARST_250

    WDT_ADLY_16

    WDT_ARST_16

    WDT_ADLY_1_9

    WDT_ARST_1_9

    WDTCTL =WDT_ARST_1000;

    在头文件中看到WDT_ARST_1000的定义为:(WDTPW+WDTCNTCL+WDTSSEL0+WDTIS2)      

    即上一条指令执行的是WDTCTL=

    WDTPW+WDTCNTCL+WDTSSEL0+WDTIS2。

    WDTCTL设置每条命令中必有WDTPW+..因为WDTPW代表写WDTCTL的时候高八位写05Ah,读的时候高八位为069h,否则触发PUC。

    WDTCNTCL:看门狗计数器清零.

    WDTSSEL0:表示WDTSSEL第0位置1,既0001.

    WDTIS2: 表示WDTIS2第2位置1,既0100.

    设置的含义看MSP4305438 PDF文档

    从头文件的定义中可以看出主要有两种方式,一种就是当做普通的定时器使用,一种才是作为看门狗,另外就是时钟源可选,选择8M或者32K的晶振来获得不同的延时,通过上面可以看出看门狗定时器最大的时间可以到1S,在程序中可以灵活的利用看门狗定时器实现想要的功能。

    下面介绍两个典型应用:

    1、在动态数码管显示中的应用,具体代码可以参考我之前的笔记,部分代码如下:

    WDTCTL = WDT_ADLY_1_9;      

    //  

    设置内部看门狗工作在定时器模式,1.9ms中断一次  

    //可以去看头文件中具体的配置,这里使用的手表晶振64分频计算可得是1.9ms  

        SFRIE1 |= WDTIE;  

    // 使能看门狗中断

    __interrupt void watchdog_timer(void)  

    {

    }

    这个程序主要是将看门狗定时器当做普通定时器使用,1.9ms刚好适合动态扫描间隔,在看门狗中断中对数码管进行动态扫描,这样使用相对于开一个定时器来说要有所方便。因此在需要的定时与看门狗定时器的几个时间相同时可以考虑使用看门狗。

    2、普通延时

    WDTCTL = WDT_ADLY_1000;              

    //间隔定时器,定时1000ms

    //延时2s

    for(i = 0; i < 3; i++)

    {

    IFG1 &= ~WDTIFG;

    while(!(IFG1 & WDTIFG));

    IFG1 &= ~WDTIFG;

    }

    这个程序同样是将看门狗当普通定时器使用,在主程序中读取中断标志位,实现延时效果,上面的程序为什么是延时2S自己分析。

    这里面举了两个例子,是最近学习的一点小体会,当然还是不能忘了看门狗的本能工作,在程序较为简单时可以考虑使用看门狗定时器简化设计。另外还有一点觉得比较重要的是虽然头文件中对寄存器都有了很好的定义,但是还是很有必要对着头文件和寄存器把主要的寄存器看一面,弄清每一种工作模式的使用方式和注意点。


  •      记得那年冬天是在威海出差,那天外面下着大雪,周六早晨没什么事,为下一个项目搜索些mcu的器件,条件是I/O 端口要多,AD位数至少10位, 上google搜索完,不记得当时提供的是哪个链接,看了一篇介绍了TI MSP430系列芯片的文章,常用的几种型号,全部都能满足项目的需要,16位, ,12位AD,48个I/O,...超低功耗低到μA级,到不是我的环保意识有多高,只是项目开发的手持便携的仪器,电池容量确实有限,设计电路都是按1mA度量的,当时第一个念头,MCU就它了,不在想别的了。
            现在想想当时实在是孤陋寡闻了,也怪不得俺,大学里讲单片机就是8051,所有的单片机的资料都是讲8051,51=单片机,单片机=51,似乎也没听到老师讲过单片机还等于别的什么。
          威海的冬天很冷,就是大太阳照着,头上飘过一片云,也会有雪花飘下来,宾馆房间有地暖,还是冷,于是在抱着笔记本在被窝里,专门找MSP430的资料从头看。最终决定弄套开发板学学。弄本入门的书看看。于是又在网上寻摸,居然还有卖开发板把图书当配套资料说明书的,感觉一定很详细。于是又做了个决定:买了。网络可以改变世界,不知道是谁说的,看来是对的,起码我的下个项目原来的设计是要改变了。 ( 《MSP430系列16位超低功耗单片机原理与实践》,沈建华编。当时是24元,现在出新版48元了,呵呵,这里可没有做广告的意思,这本书讲各个寄存器比较详细,我们项目组现在单片机都用MSP430,这本书后来又单买了几本,当做快速查阅的中文的数据手册好了)
          出差到家一周后,开发板到手了,照着例程点LED,两个LED等交替闪着,很兴奋,激动了半天和当时搞 51 的片子一样。。。,接着点数码管,扫LCD屏,烧I2C,算ADC,调串口.....好在C语言底子还行,大约个把月,把MSP430的最常用的知识点都弄的差不多熟了,然后结合项目,在开发板上挂外设,编程,测试,规划 产品板子的I/O,外设,出原理图,订做PCB样板,当时对能不能手工焊接好64个1.27mm脚间距的片了很焦虑,等PCB板到手尝试了各种不同焊接方法后,最后的操作手法练得 一个64脚片子 十多分钟搞定。对齐焊好后和别的用回流焊的没啥区别,看来搞开发焊接手艺还是不能丢的。现在焊100个脚的ARM片子也不惧了。焊接有麻烦的兄弟可以回头再切磋了。
          弄完项目的系统程序,定版pcb ,做外壳,工业现场测试...用户试用,是半年以后的事了,MCU能力强,编的辅助功能多,产品在用户工业现场用的很顺手,很稳定,市场推进也很顺利。后来项目组单片机开发平台都彻底放弃了51,加上公司又是做测量仪器的,都转到430平台上了。和51简单的速度比较是指令周期, 常用51典型的是1us,430系统是0.125us,两个long型变量加法,51大约要80到100行汇编代码,16位的430的汇编代码几行就搞定了,可能这样比较不恰当,但对于一般的项目应用效果来说,优势是很明显的。
         前些天周日休息,带着儿子去书店逛,门口进来个小伙子,带着眼镜大概是个学生,问店员有没有单片机的书,我犹豫了下,本来想问问他是不是找51单片机的书,还是别的,推荐学下430 ,可回头想想,估计学校教的大概是51,毕竟是基础嘛,就算人家以后搞嵌入式开发,或许有一天也会有惊奇的发现作为自己的选择。我有时在想进入嵌入式开发的路程,是不是都要从8位的51开始,然后是16位MCU,32位的DSP,ARM.... 目前来看或许是必须的过程,也或许是一种无奈。
        

  • 作为嵌入式系统主控单元——单片机,其软件往往是一个微观的实时操作系统,且大部分是为某种应用而专门设计的。系统程序有实时过程控制或实时信息处理的能力,要求能够及时响应随机发生的外部事件并对该事件做出快速处理。而分时操作系统却是把CPU的时间划分成长短基本相同的时间区间,即“时间片”,通过操作系统的管理,把这些时间片依次轮流地分配给各个用户使用。如果某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做。此时CPU又分配给另一个作业去使用。由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所“停顿”;但用户察觉不出来,好像整个系统全由它“独占”似的。分时操作系统主要具有以下3个特点:① 多路性。用户通过各自的终端,可以同时使用一个系统。② 及时性。用户提出的各种要求,能在较短或可容忍的时间内得到响应和处理。③ 独占性。在分时系统中,虽然允许多个用户同时使用一个CPU,但用户之间操作独立,互不干涉。

      分时操作系统主要是针对小型机以上的计算机提出的。一般而言,微处理器(MPU)驱动的通用计算机,系统设计人员对每一台的最终具体应用都是不得而知的,因此,在价格允许的情况下,硬件设计务求CPU时钟尽可能的快;计算及管理能力尽可能的强;程序和数据存储器的容量尽可能的大;各种计算机外设的配接尽可能的详尽等等,特别是采用分时操作系统的机器,因为是一机多用户的管理系统,它的要求就更高了。相对而言,微控制器(MCU)俗称单片机,是一个单片集成系统,它将这些或那些计算机所需的外设,诸如程序和数据存储器、端口以及有关的子系统集成到一片芯片上。从硬件上,单片机系统与采用分时操作系统的计算机系统是无法比拟的。但是,在单片机系统的设计中,设计人员对其最终具体应用是一清二楚的,它的使用环境相对是单一固定的。所控制的过程的可预见性为分时系统思想的实现提供了可能性。具体一点就是:虽然单片机的CPU速度较低,但其任务是可预见的,这样作业调度将变得简单而无须占用很多的CPU时间,同时“时间片”的设计是具体而有针对性的,因此可变得很有效。

    一、 单片机分时系统的设计

      单片机系统往往是一个嵌入式的控制系统,因此目前绝大部分的单片机系统还是一实时系统。能够真正体现分时系统的设计思想的往往是那些多路重复检测控制系统。即便是在这些多路重复检测控制系统中,它的实时性也是非常重要的。也就是说,在单片机系统中应用了分时系统设计思想,但其及时性应首先进行考虑。

    1. 对单片机分时系统硬件设计的建议

      随着单片机性能的提高,单片机系统设计中的一些硬件功能软件化是大势所趋。但同时,一日千里的芯片技术也为低成本的硬件完成高性能的功能提供可能。让一种功能到底是通过硬件实现还是通过软件来实现不能一概而论,只能是通过系统设计让整个系统的性能价格比最高才是每个单片机系统设计者孜孜追求的目标。

      在单片机分时系统的硬件设计中,由于对系统的及时性的要求不能降低,而大多数单片机的处理速度相对而言是较慢的。因此,在接口硬件的设计上应采用一些能将信息量保持的器件,如触发器、锁存器。同时要求这些器件应该是三态门输出,因为是多路分时系统,当CPU没有访问到时,器件输出呈现高阻,以利于总线对其他器件的访问。还有,一些用软件比较费时的操作应转给硬件完成。如LED动态显示,没有必要一定用intel 8155或intel 8255硬件接口让软件时时为显示数字而煞费苦心,完全可以用intel 8279或MAX7218及MAX7219这些可编程外围器件来完成,使显示既漂亮又简单。当然,到底哪些功能留给硬件完成,哪些功能留给软件完成,应根据系统的不同而具体设计。总之,应总体考虑,追求最高的性能价格比。

    2. 单片机分时系统的软件设计

      为了合理实现单片机分时系统,还须有完善的调度机制。完善的调度机制主要由调度指针和调度表组成。系统的调度分成两级,一是“路”的调度,相当于指示程序横向进行:从第一路的某一作业到第二路的某一作业,从第二路的某一作业再到第三路的某一作业……从最后一路回到第一路,循环往复。“路”调度的调度指针变化规律是固定不变的,算法简单,即递增一或递减一,循环到头后,再返回到起始。相对应的“路”调度指针还应构造“路”调度表。“路”调度表每一项表示各“路”程序入口地址及跳转指令。以MCS-51单片机为例,采用AJMP addr11作为每一项的内容,则调度表的每一表项占2个字节;当程序较长超过2K字节,则采用LJMP addr16作为每一项内容,占3个字节。所设计的单片机系统共有多少“路”,该调度表就有多少项数。二是作业调度,即相当于指示程序纵向进行:从某一路的第一作业指向该路第二作业,第二作业指向第四作业……也有从第六作业指回第三作业的等等。因稍复杂任务的流向都不可能是单方向性的,从上一作业流到下一作业都要根据系统的检测或运算结果来决定,因此作业调度指针的变化是随机决定的。作业调度表的构成形式与“路”调度表相同,每一项表示各作业模块的程序入口地址及跳转指令。作业调度表指示出各作业执行的一般先后次序,表项数等于一路任务的最大作业数。为了分清每路的任务进程,单片机系统要控制多少路就必须有多少个作业调度指针及相应作业调度表。以上两级指针都为1个字节的整数变量。调度指针与调度表的联系是通过指令JMP @A+DPTR实现的。DPTR中是调度表的首地址。累加器A中的内容是调度指针的整数倍,若表项内容是AJMP addr11,则A的值为调度指针乘2;若表项内容是LJMP addr16,则A的值为调度指针乘3。

      除了以上主程序的调度设计外,各个作业中共同的功能应放在中断中实现,主要是放在定时器中断。如计时功能应放在定时器定时中断中实现,定时参数的选择应考虑到系统各个作业中各种计时的要求,定时频率一般为最小计时频率的整数倍。任何软件延时都是不允许的。 实现分时控制的关键是在于合理地将系统的功能分解成各个作业模块。作业模块分得越细系统的实时性就越好。虽然单片机的时钟频率较低,在实际应用中当各个作业模块被细分成各个“动作”及简单的运算后,分时系统的实时性是能得到保证的。缺点就是各“路”的控制处理程序被分割得支离破碎,模块化得不到保证。

  •         大学时对ti的认识只限于DSP,只知道TI在DSP方面很火。

            如今的工作是做基于cortex-m3架构的芯片方面的开发,当然基于cortex-m3架构的实现和芯片厂商很多,公司最初也是几个公司的产品开发同步进行的。一段时间 后发现开发进度缓慢,于是开发组开始评估和讨论新的开发流程。

            第一个问题就是具体开发载体的选择。都知道基于cortex-m3的开发选择还是很丰富的,有TI、NXP、ST、小壁虎、富士通等等。NXP的外设寄存器具有简洁灵活的特点,但是其产品阵容还比较单一,而且同系列之间的兼容性不是很好,加之相应的资料也还比较少。ST的stm32系列在市场的价格优势吸引了不少关注,相应其产品真正在市场是比较普及的,因此在参考资料方面相对较丰富,但是其stm32系列的内置flash在较高频率下无法完成单周期访问,对其性能稍有打折。TI的基于cortex-m3架构的单片机是继承的lm3s系列,而推出lm3s系列的流明诺瑞本身就是最早推出cortex-m3的厂商,该系列产品其单周期flash是其一个优点,产品线齐全,更重要的是lm3s系列之间是相互兼容的,这两点就给用户有很大的选择空间。公司最后选择以TI的开发为重点也是基于TI的这两点。做出这样的选择目的,一是公司可以集中力量先做好单个系列的系统,二是即使这个系统暂时只是针对单个系列,但仅在这单个系列中就可以根据客户的要求选择不同的载体来满足客户的要求,这样使系统以最小的改动快速适应变化的需要,对于工业级的应用较少的改动就意味着较少的不确定因素会被引入,这也增加了产品的可靠性。当然TI的外设驱动和配套开发在开发人员中也是一件值得称道的事,样片申请也做得不错。

            但上面的优点并不能掩盖lm3s中许多的问题,当然我不会细说每一个lm3s中存在的问题,只是列举一些我在开发中遇到的一些典型以及我从ti得到的回应,以及我对ti的回应的想法。lm3s1138实际是不能实现休眠功能,当然这个bug后来也在刊物表中予以了说明,lm3s8962的can必须要读写等待和双读机制才能正确完成操作,这在后来的勘误中也做出了说明,lm3s8962以太网控制器其中一个中断的产生来因不确定。这些问题其实不算bug而算是芯片功能的缺陷,只是芯片最终流片后没达到设计要求。好在这些问题在lm3s中并不是通病,由于产品丰富,这种互补的优势就体现出来了。但是TI对lm3s勘误的特点是,一指出芯片存在问题,二是应对方法并不是ti自己从根本去解决芯片存在的问题,而是叫用户用变通的方法去避免芯片的缺陷或者直接说某个功能不要用。这种勘误给人感觉要么ti不重视从别人抱养的这个孩子(lm3sxxx)发展,至少没有考虑自己从设计上去为芯片来解决这些问题,要么就是ti最近扩展太快对产品线的验证支持人手不够,缺乏专业设计人员来对产品线进行维护。

             以上只是个人看法,欢迎ti的工作人员对上面的疑问做出解释。也在这里提前祝大家农历年:新年快乐,龙马精神,事业龙腾虎跃,身体生龙活虎。

  • 我是一名新手,刚刚接触dsp 我来自烟台大学,听学长说以前烟大和ti还是合作关系不过因为烟台这几年没什么成绩就不怎么合作了,其实我还是希望ti和我们多多合作的,因为这届的学生有很多很厉害的,电子设计大赛很牛的,我也是刚刚接触这方面,我们导师现在也是刚刚搞这个东西,我是做语音方面的,想利用dsp的高速处理将语音信号在dsp上实现,我以前没搞过,希望有这方面的朋友互相交流一下。我不是来拿奖的,是来交流学习的,谁有dsp这方面的资料告诉小弟一下我的联系邮箱  zhangwantao.hero@163.com  谢谢了

  • 我是去年接触的MSP430芯片,当时老师在做一个“校园智能安全用电管理系统”,用的是MSP430F149,那时只知道430是一个功耗低的芯片,但是并不知道到底哪里好,刚上手的时候觉得好陌生啊,通过对开发板的学习,总算有点了头绪,也开始和老师师姐们一起设计和编程了。现在这个项目也结束了,说说我的心得体会吧。我用的是IAR编译器,总体感觉是挺好使的,也许是因为我没用过别的芯片吧,呵呵。当时编程的时候也遇到了很多的问题,比如说,当时改程序的时候新加了一个数组,当把程序烧到芯片里的时候,发现通过nrf905发送出来的数据不对了,一直以为是自己的程序设计有问题导致的,后来查了半天才发现是栈空间不足了,发现问题所在之后,我们通过修改软件参数,成功解决了这个问题。而且听老师说,当时选芯片的时候,在差不多的类型里,就430AD最好,而且它的功耗低,很适合用在用电管理的方面。下面发上我们产品的靓照

    中间那个黑色的就是430芯片

     

  • 我也来分享下同TI接触。

    我参加工作5年了,一直从事消费小电子产品的研发,期间陆陆续续接触过很多的MCU,刚入职的时候,经验不足,对各家的IC没有什么认识,在MCU选型方面很被动,都是沿用前辈的型号,那个时候一般是台系的MCU使用量大,比如snoix,Alpha,EMC,之类的台湾厂,他们IC的最大特点是价格低廉,但随之而来的技术支持和稳定性也加大了我们开发的难度;

    慢慢做了十几款产品之后,每次MCU选型时就得心应手了,接触TI的产品是从2010年起,当时有一个玩具飞行器的项目,要求速度分级精细,并且功耗极低以保证更长久的待机和使用时间,在尝试了几款台系的MCU后发现他们要AD精度不够高,要么工作电压范围要求高,待机功耗也很高,这个时候一位参加过TI产品推介会的朋友向我推荐了MSP430系列,我马上到TI网站下载了相应的DataSheet,发现它的AD采样精度不仅能做到10bit,12bit;更重要的是它的工作电压可以低到2V甚至是1.8V,而且在TI一直强调的功耗控制方面,工作电流可以低到1ma以下,AD等模块转换结束还可以关闭模块的供电进一步降低功耗。凭借这些优势,我们在该产品的研发过程中无论在时间还是性能上都超出对手很多,得到了客户的嘉许,随即而来的订单使公司在外围经济不好的情况下也有充足的订单。对我来说,是我深刻地认识到TI关于低功耗的理念不是只停留在口号上,而是从方方面面细微的环节出发,实实在在的向着目标前进。

    在后续过程中,陆续解除了LaunchPad开发板,EZ430-RF2500,最近又入手了LM3S9B96,虽然不是每个产品都有用到,但是捣鼓这些东西确实是我这个技术宅男工作之余最大的爱好。谢谢TI带我一起进步!

  • 从用库编程想到的

    记得我以前搞51时候就是操作几个寄存器及一百多条指令,我从汇编开始的。记得那时有个汇编器叫爱思仿真器。还有南京的仿真器,名字都忘了。反正操作那几个寄存器。编程特别上手。我玩汇编曲也还觉得可以。

    后来,我换了单位就是现在我在的单位。全是C啦。但我有汇编的功底,三下五除二就掌握了。C的用库是建立在调用C的库函数基础之上。这也没有超出直接操作寄存器基础之上的。后来无论是什么公司的单片机CPU基本上就是这个模式。

    给我冲击力最大的是ST公司的STM32,刚出时我就注意它了。但它出了个用库的例程和不用库的例程。我当时在论坛上还反对用库,当然同我的工作经历有关系。

    二年前一个偶然的机会我得到了LM3S8962开发板。我看了上边的例程根本就没有什么不用库的。我是老古董自然有些不习惯。硬着头皮把每个例程做了。思考分析。后来又看了TI的网站。后来大悟。用库确实开发东西快。

      不用库开发简单的还能应付高难点的象CAN USB直到图形库都很难处理了。

      这就象人类从原始工具到现代工具一样,人类社会总是向前发展地,同样在电子行业工具也是向前发展地甚到编程工具到编程思想。

  • 我使用TI芯片也有三年时间了,期间开发过低功耗无线传感器、无线转以太网网关等设备

    现在讲一下用LM3S9B90芯片开发的无线转以太网网关设备中遇到的一些问题吧!

    以太网用的是LWIP协议,这也是我第一次用32位机、第一次用ARM内核芯片、也是第一次与LWIP接触;

    一开始我没有什么信心会做好,还好在TI例程及技术支持的帮助下,半年内将产品设计出来,并且相当稳定的运行。

    这其间遇到最大的问题是TCP运行的问题:(前两个还是小问题,最后一个才是问题致命的所在)

       问题一,IP地址分配的问题;当时利用例程的办法,调用lwIPInit,和lwIPLocalIPAddrGet的办法获取IP地址,如果当时没接网线,或者路由器没有开启DHCP功能怎么办?

      最开始我采用重新调用以上函数的办法,进行处理,发现系统会复位;可见这个办法行不通,

      后来通过对LWIP的认识发现可以通过修改IP地址的方式,调用lwIPNetworkConfigChange函数,将IP地址设置成上次分配的IP,这样一来,只要设备能正常使用过一次,以后都不会有问题了!

      问题二,调用tcp_output函数,为了提高发送速度,在每次调用tcp_write函数前,先调用一次tcp_output函数;加了这个函数后,短时间内使用是不会有问题的,但时间长了以后,发现系统也会复位;经过一系列的查找,终于锁定是tcp_output函数的问题,取消后,系统不再复位了

      问题三,网络异常的处理;在正常的使用过程中,会遇到设备端网线断开、服务器网线断开、服务器软件关闭、服务器电脑死机等等情况,其它几种都比较好判别,唯独服务器网线断开这种情况不能区分;

       服务器网线断开(设备与路由器链接是好的)的时候,设备不会得到异常报告,也不会有PHY寄存器标志,只能通过给服务器发送数据时,判断是否有发送完成回调函数;如果没有回调函数,服务器链路一定有问题。

       一旦出现服务器网线断开的情况,设备的LWIP中的pcb->state一直处理链接成功的状态,而服务器在一定时间后会删除这条链接,也就是说,超过一定的时间后,设备与服务器之间的链接状态是不一样的;同时,设备一直处于虚假链接,不会重新与服务器建立链接;

       最后导致,服务器与设备是永远也不可能建立链接。

       这个问题困扰了我们好长一段时间,而且是在客户的使用中才发现,客户的压力可想而知。

       还好,经过一段时间的排查,终于找到问题的所在、以及解决问题的办法:

       效仿服务器的办法,在经过一段超时后,主动断开与服务器(确切来说是路由器)的链接,给服务器发送close命令;发完后,pcb进入FIN_WAIT_1状态和FIN_WAIT_2状态,如果期间链接上,服务返回ACK确认关闭链接, 否则超时后,设备自动进入CLOSE状态;最终达到两端的链接状态一致;一旦链路恢复正常,设备与服务器就能再次正常建立链接。这个问题总算是解决了。

       设备运行到现在已经快半年了,目前为止,还没有发现什么问题。

  •   从2009年开始使用MSP430F417,到后来的CC2430/31、CC2520、CC2530、LM3S3739,完成了从8位到32位和有线到无线的转变。这中间感触很多,开始用417是感慨功耗能这么低,到用LM3S3739时很佩服实用外设库的完善程度。

     使用CC2530和LM3S系列是碰到比较多的问题,CC2530是传输距离、协议栈的理解应用,而LM3S最开始是芯片解锁开始的,不知道是什么原因,刚刚还好好的芯片写不进程序了,这个问题折腾了两天,最后还是用Jlink解锁完事,在这一点上我感觉不太好。

  • 本人25至今未婚,已经谈过三个“女友”,正在交往的还有两个,我这个人比较花心 ,第一个“女友”是我大学时谈的——

    51,当时比较年轻不懂爱情,只知道玩游戏,所以与第一个女友的感情基础不太牢靠。第二个"女友"是来到单位时在部门经

    理的介绍下相识的——PIC,交往了小半年,后来由于我出国深造了(调部门了),就没有再与她联系了。第三个“对象”是

    (出国后)另一个部门经理介绍的,这个部门经理说这个对象比我以前交往的条件的好,人家有车有房有姿色(频率高,速

    度快,资源多)——STM32,于是我便与她交往了一年,至今还藕断丝连,没办法已经有了孩子(产品)。

    就在8月8日那天我在菜农老师的介绍下认识了她(我正在交往的女友)——NUC,在日常生活中她很照顾我,给了我很多好处(千万表要多想奥),现在我与她的情感已经升华,一天都离不开她,时不时去逛逛街,吃吃饭,看看电影。在这里我要真心的感谢菜农老师这位月老儿 ,给我介绍这么好的美眉 ,以后有时间我会带更多的孩子去您的菜地看望您。

    后来在二姨家偶然的机会,我看到了一位美眉应招男友的帖子——免费申请LM3S811开发板,之前说了我比较好色,这等好

    事我哪能放过,于是乎我给那位美眉写了封信,有可能是我的真诚打动了她,在9月18日那天我突然收到这位妹妹给我的定

    情信物——LM3S811开发板,这位美眉就是——TI,在这种情况下我认识了她,TI美眉很会关心人,前几天说天气冷了,给我买了件外套(TI的礼品)我处于感动,感激,感谢中 ,由于最近我与第三个前女友的那个孩子(产品

    )身体不太好,老生病(bug),由于孩子不断地长大,我需要挣更多的奶粉钱(升级),所以忙的是焦头烂额 ,没有时间与TI美眉交往,俗话说一会生二回熟,三回....,等以后有时间

    我会与TI美眉好好交往,促进感情的升华,争取早日有我们的宝宝!匆忙之中写的不好希望大家拍砖!

  • 从去年下半年德州仪器在线技术支持社区开办后,各种活动是越来越多了,人气也是越来越旺了,当然了,最主要的还是使用TI器件和采用TI作为解决方案的工程师是越来越多,我想这主要得益于TI在中国高校的各种运营,以及全面的设计、支持服务。好啦,恭维的话也不说的太多,还是转入正题。

    我学习和使用TI的MCU已经有5年的时间了,其间使用了TI好几款MCU:2812、2808、28335、28346;从器件来看,新MCU的主频更高了,外设的功能更加强大了,外设的性能也提升了好多;但从开发的角度看,并没有特别大的跨度,所以从最初的2812平台经历数个平台再转到28346平台,我觉得从没有那种需要完全重新开始的感觉,这样自然而然就能很快的开始新的设计。

    对于用TI MCU来进行设计,我的经验是以下几点:

    ① 多看TI的设计文档,说实话要是能把每款MCU的文档看懂、看全了,那基本上就无敌了,TI的设计文档可以说是业内做的最好的了,从硬件设计、到软件设计、再到MCU的外设等等,几乎囊括了设计人员所需要的方方面面;

    ② 遇到无法解决的问题可以向TI官方求助,在社区开办前我一直是通过与ti-china的邮件来解决自己遇到的问题,现在有了社区就更方便了;(顺便说一下:TI官方的工程师都会很乐意的帮你解决各种问题,无论你是很小的客户,还是学生【就像是我】,不会将你置之不理,一般的问题会在1~2天内解决;而有些公司的技术支持,就显得高高在上,对你爱理不理,给人以店大欺客的感觉);

    ③ 多看社区和论坛上别人的发帖和问题,因为很多问题都是些共性的问题,可能在你遇到之前,别人已经遇到了;

    针对具体芯片的经验:

    2812和2808现在来看也算是老片子了,用的人也少了,就不多说了;28346太新现在转入的人也不多,所以也不提了;就说说主流28335吧,在硬件设计上需要注意几点:

    ① BOOTROM选择模式的拨码在板子上最好留着,因为如果你不小心在烧FLASH的时候给硬件加了密,要是没有拨码的话,你的仿真器将再也连接不上片子了,TI这么做是为了设备和程序的安全,但是如果你不预留拨码,那么你就会很麻烦了,当然这个问题也可以通过复位的方式来解决,但是那样会很不方便;

    ② 28335运行在150MHz且外设使用的比较多的情况下会很热,所以需要考虑加散热片;

    软件上需要注意的是:

    在TI的例程里面函数InitPeripheralClocks()中以下几句语句是不起任何作用的:

    // XTIMCLK = SYSCLKOUT/2

       XintfRegs.XINTCNF2.bit.XTIMCLK = 1;

       // XCLKOUT = XTIMCLK/2

       XintfRegs.XINTCNF2.bit.CLKMODE = 1;

       // Enable XCLKOUT

       XintfRegs.XINTCNF2.bit.CLKOFF = 0;

    这些语句只有在【SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;     // XTIMCLK】,即XINTF的时钟开启后才有作用;所以如果不打开XINTF的时钟,想关掉XCLKOUT是不可能的,那么你的板子上将会有一个高频的时钟信号。

    要说的就这么多了,要是有不妥的地方也请大家批评指正。

    最后,祝论坛里的各位新年快乐!也祝TI的设计支持服务越办越好!

  •    我是一名大四本科生,在大三的暑假留校参与完成了一个由基于MSP430F1611的机械手操控的中国象棋盘的教师科技制作项目,在这期间,借由这个项目,我逐渐了解、认识、掌握了MSP430单片机的基本使用方法。

       由于我校是全国高校中最早引进MSP430单片机用于教学与实践的,我们积累了大量的MSP430单片机学习应用资料,所以我的单片机入门是直接从MSP430单片机开始的。参考书是我校一位老师编写的《MSP430系列超低功耗单片机系统设计与实践》,其中以MSP430FE425为例,分别阐述了MSP430FE425的片上配置资源、各种资源的使用方法,以及在IAR for MSP430的开发环境下对各种资源使用的各种例子程序。正是从MSP430FE425开始,我进入了430单片机的世界。

       先说说MSP430FE425,它各种资源齐全,特别是带有液晶驱动,这一点对于学生来说很好,可以使得学生在有限的片子上尽可能多的见识各种资源,熟悉给各种资源编程,得到多方面的锻炼。在基于MSP430FE425的学习板上,我学习了流水灯,测温计,定时器应用,电机PWM调速,触摸按键设计,简单音乐设计,液晶显示设计等等程序,对该型单片机所配置的资源有了更加深入的了解。在平时使用中,该型单片机有时会让人有I/O口(共14个)不够用的感觉,我想是因为该型单片机把许多引脚分配给了液晶驱动的缘故。

       再说说MSP430F1161,这是一款比MSP430FE425的配置资源更加强大的单片机,包含有48KBflash;1024BRam;8通道12bitA/D;双12bitD/A;DMA;48个I/O口;16位WDT;1个16位Timer_A(3个捕获/比较寄存器);1个16位Timer_B(7个捕获/比较寄存器);2个USART接口;I2C;MPY;比较器_A;温度传感器。我所做的项目主要用到flash,ram,Timer,UART模块,在PC机上的上位机程序发送数据,并通过UART模块传送给下位机,来控制立体坐标系中的x,y,z三个坐标方向来分别驱动三个直线电机,使得机械手走到准确的位置,再驱动一个舵机控制机械手的开合,来完成机械手对象棋棋子的夹持,然后再驱动电机使机械手走到目标位置,放下棋子,完成一次走棋;同时每个方向上要加装两个限位开关以防止电机跑飞,所以整体来说,就要求单片机的I/O口比较多,而MSP430F1161正好满足项目的要求,我们便采用其作为系统下位机的MCU。在编写程序中遇到的最大的的问题就是中断的执行,程序中电机的驱动,限位开关的触发等等都是写成中断函数的形式,所以有许多中断的嵌套,曾经发生过在x,y方向上走位完成后,z方向上程序卡住不执行了,后来经过检查发现是因为程序进入电机的中断后,又执行了限位开关的中断,进入了死循环,导致后续的程序无法执行,处理办法是进入电机中断后,就把总中断关闭,以防止其他中断的干扰,这样终于解决了这个问题,项目也顺利的完成。

       以上就是我学习使用MSP430系列单片机的一些认识和体会,今后我还将继续钻研,努力把MSP430单片机用精用通。

  •        从2008年开始,采用 MSP430F2122 开发新一代智能接触器,到现在4年多了,系列产品也开始陆续向全球发布。作为项目电子硬件开发负责人,对该单片机可以说了解颇深,现在将其经验与大家一起分享。

       相对于同类单片机,其优点体现为:性价比比较高、功能较完善、AD采样速度比较快、功耗比较低、带内部参考电压(1.5V和2.5V可选)、带内部FLASH、外围电路设计比较简单。其缺点主要体现为:内部晶振存在较大偏差、内部参考电压不太准确、价格相对同类产品无优势。

       在设计调试过程中,遇到过以下问题并采取措施进行解决:1、复位引脚通过RC电路连电源时,当电源从0V开始慢慢上升到3.3V时,单片机有时候不能复位。 采取措施:设计了一个施密特触发复位电路,既使得单片机可靠复位,又监视电源电压。2、对功耗要求非常小的场合,所有引脚的上拉电阻、下拉电阻、无功率要求的限流电阻都不能太小,以百K级为好来减小功耗。

        总体来说,MSP430F2122是一款性价比比较高的单片机,可替代昂贵的专用集成芯片应用在接触器等工业产品上来节约开发成本,减小开发难度。

  • 看了这么多;我也讲讲

     我最先学的是ATMEL89C52  改了一些软件,做仪表方面用的还是PL/M语言;这个很少人会;资料几乎没有。当时就只有公司有一本;啃了一段时间后开始改软件。后来用台湾华邦51 基本一个控制器,外部资源都用了。再后来用国内的STCMCU一直用了几年。便宜。就是功能没什么长进。现在时代发展了。51做工业品比较落后了。C2000的TMS320F28035刚出来时候就用,中文资料非常少。第三方的FAE更不行;根本解决不了什么深入的实际问题。还是TIFAE厉害。 最后发现TMS320  PWM 资源丰富, 灵活。HRPWM很牛,但是有缺陷。 ADC的速率够快。 后来公司想用M3;做机电产品。后来发现M3AD精度不高 还有ADC速率也不够快。  算了还是换了C2000的 28027这个快。目前性能稳定。  目前看好28069准备2012年应用一把。现在学习阶段。

  • 恩 马上开学了,再过来看看。

  • 既然赶上了,就不能错过。就简单描述一下前几天遇到的问题吧

    硬件环境:LM3S1608+Jlink

    软件环境:IAR 6.2

    开发工具:XP2系统PC机

    项目描述:基于UCOS2移植主程序,实现产品的IAP功能。

    说明:

    用UCOS2写程序还是第一次,没有太多的经验,《嵌入式实时操作系统μC/OS-2》是我唯一的成长靠山。好在,操作系统的变成集成度也比较高,都有库函数可以直接调用,因此,在尝试了几个例程之后,就上手了。由于只是移植,因此程序编写不是很复杂,设计周期也短。大概一个月的时间,就完成了主程序的全部内容移植。紧接着,就是移植原先单线程程序下的Bootloader和在主程序中的BL接口了。

    bootloader不难,一天时间就顺利通过仿真可以使用了。然而在设计主程序与BL之间的接口是,时候问题就出现了。(具体问题看我以前的描述:https://www.deyisupport.com/question_answer/f/57/t/5944.aspx

    接口函数中,我是这样调用的:

    IntMasterDisable();         //关总终端

    ModifeMSP(myaddr);    //调整向量表地址

    (*((void (*)(void))myaddr))();  //程序跳转

    然而,等运行了上面三行语句,程序就跑飞了,我查看此时的PC指针,指向的是一个无效的地址。

    每次仿真到这里,就飞;仿真到这里,就飞! 你知道,程序有BUG不可怕,至少还在可控范围之内,但是直接跑飞,那就恐怖了,如何去找原因?哪里去分析问题! 无奈,只能一次又一次的重复仿真着,重复的看着它跑飞······

    不过,也正是一次又一次的重复,让我发现了一个规律!每次跑飞,PC指针指向的都是同一个地址:0x1FEDE。既然每次都指向同一个地址,那应该不叫跑飞!但是,这个地址又代表了什么呢?

    我查看了主程序向量表和BL程序向量表,也没有什么收获,唯一可以知道的是,这个0x1FEDE与BL程序向量表(如下图)中无效中断地址0x1FEDF紧相差一个字节···(别以为这是无意义的发现!接下去就知道奥秘了^_^)

     

    我的BL程序是放在FLASH绝对地址0x1E400处的,占用了flash内容的最后7KB,这BL程序本身是没有问题(已经在单线程程序系统得到验证)。

    下面讲讲跑飞时地址0x1FEDE与0x1FEDF的联系。这个要从ARM体系结构讲起,我呢就不深入了,到处可以百度到,直接说说LM3S1608吧。我们的LM3S1608采用的是了兼容ARM的Thumb指令集的Thumb2指令集,也就是说,这个芯片虽然是32位的,但也是兼容16位的。因此,地址在传送给PC寄存器时,至少要保持半字对齐,于是,0x1FEDF处的程序地址也就变成了0x1FEDE了。

    到此,跑飞的直接原因找到了,是BL中的某个无效中断函数承接了PC指针,而这个函数正是一个while(1)死循环。

    于是,问题就变成了为什么BL进去后,会去执行一个无效的中断函数呢?BL里,并没有使能我不需要的外设中断呀?那么,我来告诉你缘由。

    回到我的BL跳转接口,当程序完成MSP改变和PC改变后,所有原程序中设置的外设均未发生变化,即,原本使能的依然使能!如果这么理解,那么问题就简单了。于是,我在BL跳转接口函数前,对程序中开设的中断逐个进行了禁能。再次测试,哈哈,BL工作开启了!

    问题解决了,然后分析一下这个跳转。我一直以为这个跳转如同系统复位函数SysCtlReset(),唯一不同的是程序执行首地址一个为设定地址,一个为0x00。而事实上,系统复位指令在执行的是:HWREG(0xE000.ED0C) = 0xFA050004语句,他会复位所有外设寄存器,这个你可以在《CortexTM-M3 技术参考手册》中找到,见Table 8-16中对SYSRESETREQ的描述内容

     

    END,谢谢!

  • 活动快截止了,来凑个热闹:)这回不说具体的技术问题,只想分享一些选型的心得。

    在产品上选择使用一款单片机需要衡量多方面因素,比如价格、供货、技术支持等。MSP430进入国内已有不少年头,我在六七年前也已经开始接触MSP430的解决方案,但直到两年前才开始在产品中使用430单片机。这漫长的握手过程,总结起来有以下几点:

    (1)选型时一定要弄清自己的设计需求,功能够用、性能达标的前提下,再选择最优价格,不要被别人牵着鼻子走,尤其是不要被IC代理商的“花言巧语”所左右。俗话说的好,鞋好不好穿只有自己的脚知道,芯片能否用好,也因人而异。

    (2)供货及价格也是产品选型时需要考虑的因素,一定要跟代理商详细咨询芯片的供货情况,根据自己实际的预计用量,货比三家,常用的、出货量大的型号是首选,不排除有的芯片比按第1点选出的芯片功能还多但供货和价格却更好的情况,这时候还是遵循性价比最优的原则,这是企业生存的根本。430的价格不便宜应该大家都知道,但个别型号是代理商或TI在国内主推的,而且有比较稳定的出货量,其价格也还是可以做得较好的。

    (3)选择一款芯片时,技术支持、应用文档、样片等设计资源也需充分考虑,尤其是选择新的单片机时,虽然现在普遍使用C语言,也有很多典型应用电路,降低了设计者的设计难度,但要真正掌握一款单片机,还是需要花费很多精力和动手实践的,特别是硬件电路,如果对硬件没有深入的了解,很可能会在调试过程中遇到难题而耽误时间,此外,汇编语言如果能稍微了解一下,也有助于程序的调试和优化。在这方面,MSP430做得相当出色,大学计划、MCU(原430)Day、高质量的代理商、众多的论坛、TI自己的技术支持中心、各种研讨会、样片、评估板,不管你在哪个城市,总能找到合适的支持途径,个人感觉这么多的厂商中,TI算是最慷慨、也最平易近人的,本地化的支持力度也是最大的。

    以上就是我个人的一些体会,最终您是否选择TI MCU,还需您自己去斟酌。

  • 我说下我用TI的芯片故事吧::

    我在读大学前完全没接触过TI的芯片~•也就是ARM也没接触过~~ 只停留在51 AVR等层面。。。后来毕业了, 第一个项目: 以太网工程。 那叫一个头大啊。。。 叫我搞51的情何以堪啊。。。。

    后来接触了TI的 L,3S9B96   发现这真是个好货色, 速度快,  带以太网,。音频。DMA等功能,。  虽然学着并痛苦着, 但是最后通过例子文件。 还是给搞好了。 哈哈。那叫一个开心啊。

    总结了一下,以太网就是说9B96会接受所有广播包和属于你的包, 并且通过层层解剖,获得你想要的数据信息。

    9B96还是蛮强大的,因为高度集成, 很多东西都省去了。

    期间遇到的问题就是版本问题。~~C3版本的居然烧写进入的代码会丢失~坑爹哦真是~~~后来发现换成C5版本就没事了。 希望大家注意注意~~~~

    现在想学430了。 因为发现这个低功耗真正不是吹的~~~人嘛  就是要活到老学到老的。

    就说这么多吧, 经验我也说不上~~以后再给大家总结吧呵呵~~有机会给大家上传资料来着~~以太网的资料~~~

  • 讲述MCU故事的活动今天结束。非常感谢各位朋友的热情参与!看到这么多朋友的分享,让我们更有信心一定把这个社区办好,一定为大家提供更好的服务。

    说心里话,大家的分享都十分中肯,感觉很多文章都难分伯仲。我们会在下周三之前公布获奖结果。

    再次感谢大家的积极参与和对论坛的持续关注!

  • 哈,今天会过来看看自己的帖子,发现芯片型号给写错了···应该是1608

  • 正如上贴所说,很多朋友的文章写地非常好,难分伯仲。对我们来说,这是一场艰难的选择。经过工程师的评选,此次活动的结果是:

    一等奖:hasten lin

    二等奖:Jinchen Wang, Alonesky

    三等奖:Jerry Zhang, zhonghua He, William Zhang, guoqing gu, Dulili

    恭喜这些获奖的朋友!同时也感激大家的热情参与,尤其是很多老朋友,如azhiking, zhy Ruan等在MCU学习和设计中给出的建议!

    基于此次活动的热烈气氛,在未来活动中,我们将会考虑扩大奖励的范围!希望TI提供的这个平台成为大家在学习、使用MCU产品的一块非常有效的交流园地。同时,我们希望未来更多朋友的参与、支持和关注!

    礼品寄送将由我们物流公司与大家联络确认地址,然后安排尽快寄出。再次感谢大家的积极参与和无私分享!

  • 真是太遗憾了 木有获奖 不知道有木有纪念奖

  • 矮油 还不错 得了个二等奖 一定会再接再厉 争取在今年的C2000前竞赛中获得好的成绩

  • 真幸运,得到个一等奖,自己都没想到,因为大家写得都太好了!

    谢谢各位评委、谢谢各位同行朋友的支持,我将在TI的运用方面再接再厉

  • 三等,不错不错,有斩获就好

  • 获奖固然好,不获奖也无妨,TI提供这个平台最重要的是能够让大家快速解决工作中学习中遇到的问题……所以不管怎么样,多关注这个论坛,多多交流,才是最重要的哦~

  • 三等奖,有些意外,有些惊喜!谢谢TI的FAE团队!

    继续支持TI!

  • 恭喜获奖者,期待纪念奖!

  • 虽没得到板子,刚收到邮件说可能有纪念奖。

    期待ing  感谢TI !!!

  • 您好, 我最近正在使用C28346芯片,我想请教一下,如何将程序烧写到外扩的Flash中。 

    正常CCS编译得到的.hex文件,通过C2Prog用串口可以直接烧写到外扩的Flash中吗? 还是需要对烧写的程序做一些处理,谢谢! 

  • 想要请教下turbo编解码和均衡部分的程序,没接触过DSP不知道如何上手,忘大神指点一二