博客列表

为mspdebug的prog命令添加烧写uuid序列号的功能
发表于:2015-04-21 17:44:53 | 分类:MSP430
浏览( ) | 评论( )

mspdebug是Linux下调试msp430系列单片机的工具,它能够实现JTAG的所有功能。uuidgen是Linux下生成随机序列号的工具。msp430系列单片机是不包含唯一序列号的,想用?Sorry,自己烧写到flash里面去!虽然这个功能使用mspdebug的mw命令很容易实现,可难道每烧写一块单片机都要执行一次uuidgen命令,然后将序列号粘贴在mw命令里,uuidgen的输出还得分割成一个字节一个字节才能使用,这样实在是有点麻烦。一直说Linux代表了freedom,代表了unlimited

msp430-gcc在Fedora21下找不到libgcc.a的问题
发表于:2015-04-17 14:28:27 | 分类:MSP430
浏览( ) | 评论( )

https://bugzilla.redhat.com/show_bug.cgi?id=1175942这个报告bug的帖子里面有详细的说明,原因是Fedora20和Fedora21的strip版本区别。解决方法:将/usr/lib64/gcc/msp430/*替换成Fedora20的版本即可。

MSP430F2616开发笔记(十一)题外话之LM358做电压跟随器的输出电压
发表于:2014-03-18 19:45:07 | 分类:MSP430
浏览( ) | 评论( )

由于DAC的输出可能会经过电阻分压、经过加减法器运算之类的,所以很多时候在它的后级会加上电压跟随器,以增加输入阻抗、减小输出阻抗;使用ADC时,也同样经常会使用它来处理信号。在使用LM358搭建电压跟随器时,我遇到过输入电压接近零点而输出电压保持在0.6V以上的情况,从网上了解到这并不是个别现象,而是经常出现,有人给出的解决方法是使用正负电源供电,或者加下拉电阻。但是LM358的技术手册描述,它的输出电压摆幅在0V附近时并没有问题(技术手册上提供的最低输出电压典型值为5mV),同样有人做过实验,确实表现非常好。那这个0.6V到底从哪里来呢?难道买到的LM358是假货吗?为了找出问题所在,首先根据下面的原理图,使用实验板搭建出电路:第一步:电位器的输出从0V~+5V,无论抽头是悬空还是接到5pin,IC5A的1pin输出电压摆幅为0V~+3.8V,这说明第一个电压跟随器工作正常;第二步:1pin的输出为0V~+3.8V时,无论它是悬空还是接到ADC引脚,IC5B的7pin输出电压摆幅为0V~+3.8V,这说明第二个跟随器也工作正常,前一个电压跟随器接到后一个电压跟随器是没有问题的。第三步:此时把一个10K的电阻

MSP430F2616开发笔记(十)题外话之如何产生负压电源(LM2611的使用)
发表于:2014-03-17 15:32:28 | 分类:MSP430
浏览( ) | 评论( )

如果电路板需要处理负电平或者零点附近的信号,通常需要给电路板上提供一个负压电源,负压电源大部分时候主要供运算放大器使用。处理零点附近的信号,使用负压电源,能够得到更加好的特性表现。(轨对轨运放的特点是,输出电压几乎等于VCC的值,实际上像LM358这样的普通运放在零点处的表现还算不错。)有很多种方法可以提供负压电源,很常用的方法是使用DC-DC模块,比如兵装、金升阳等等,他们提供了多种正负电压输出的产品型号,而且通常是前后级隔离的;还有是使用带正负电压输出的开关电源,它们的价格也并不贵,正负电压输出的类型也非常多;另外,使用NE555等PWM输出芯片配合LC滤波器,也能够得到相当不错的效果,与此类似的还有LT1615(ZXLD1615),虽然是升压(boost)转换器芯片,但是技术手册中也提供了负压电源的应用电路;除此之外,半导体厂商通常还提供反向(inverter)转换器芯片,比如TI公司的TPS65130、Maxim公司的MAX743等等。设计负压电源的时候,通常要考虑以下几点:第一,是否有隔离需求;第二,负压输出电平高低,比如需要-5V还是-12V;第三,带载能力大小,是几个mA就可以,还是需要几百个m

MSP430F2616开发笔记(九)使用12-bit DAC
发表于:2014-03-14 20:21:12 | 分类:MSP430
浏览( ) | 评论( )

MSP430的DAC使用起来比ADC要简单得多,简单的设置就能够正常工作。如果使用内部参考的话,需要从ADC模块中启动内部参考源。DAC不需要选择时钟,它会使用当前的MCLK,这里是默认的1.1MHz的DCOCLK。/**************************************************/int main (void){    uint16_t i = 0, j = 0;    WDTCTL = WDTPW + WDTHOLD;        // 首先需要打开ADC的内部参考,因为这里DAC需要使用它,如果选择外部参考源的话,就不用设置    // 等待内部REF稳定,MSP430的延时函数需要根据MCLK的时钟源不同调整    ADC12CTL0 = REFON + REF2_5V;    DelayMs_sys(18);    // 选择

MSP430F2616开发笔记(八)使用12-bit ADC
发表于:2014-03-14 18:23:27 | 分类:MSP430
浏览( ) | 评论( )

ADC,analog-to-digital conversions,模数转换器,需要使用它的场合非常多,但是能让它发挥完美性能的电路设计却不多。电源本身自带的噪声、PCB板布线引入的干扰、信号放大电路糟糕的设计……太多的因素会影响ADC的表现。几乎所有的主流单片机都集成了ADC模块,ATmega16是10位,而MSP430F2616和STM32F103RBT6是12位,同样,它的使用也有很多需要注意的地方。最简单的ADC使用方法是,单次转换一个通道,不产生中断,即Single-channel, single-conversion (CONSEQ=0)。这里时钟源设置为8MHz的MCLK,相应的采集周期和时钟分频可以拉长一些,使用内部的2.5V参考源,所以外部的正负参考引脚eREF+/REF-可以不接或者接地。/************************************************/void wait_xt2clock(void){    BCSCTL1 &= ~XT2OFF;    BCS

MSP430F2616开发笔记(七)USCI之UART Mode from ACLK
发表于:2014-03-13 23:12:54 | 分类:MSP430
浏览( ) | 评论( )

大部分单片机的外设时钟,比如UART、SPI、TIMER等等,都是由主时钟SYSCLK产生,它们可以单独关断以节省功耗,但是只要有任何一个外设还在工作,MHz级别的主时钟就不能够停止,这也意味着,单片机要么休眠,要么运转。MSP430系列超低功耗单片机,外设的时钟可以来自MCLK、SMCLK、ACLK,而ACLK(Auxiliary Clock备用时钟)可以来自外部的32768-Hz watch crystal(或高速crystal),也可以来自内部的12KHz的VLO,这意味着MSP430可以相当于其他类型单片机休眠状态的功耗,维持外设的正常运行。比如这里的UART。使用UART(RS232协议)来唤醒设备,是非常常见的应用方式,这种方式比外部中断唤醒,更适用于远程场合,而MSP430自带的address检测,使得UART(RS485协议)的唤醒也变得方便;否则,RS485就得响应总线上的每一个字节,即使地址字节后面跟随的一大串和自己完全没有关系。USCI_Ax工作在UART模式下,时钟源可以是UC0CLK(?)、ACLK、SMCLK,在开发笔记(五)中使用的是SMCLK,即校正为1MHz的DCOCLK,以

MSP430F2616开发笔记(六)实用的Flash Memory Controller
发表于:2014-03-13 17:49:10 | 分类:MSP430
浏览( ) | 评论( )

从本科时代开始学习单片机,研究生两年半也一直在做有关单片机的事情,工作两年继续进行单片机开发,开始是ATmega8/16/128,后来以STM32F103为主,最近在学习MSP430。虽然8位/16位/32位的单片机都用过了,但一直是专注于外设的使用,关于FLASH、SRAM、EEPROM等存储和地址特性了解很少。现在学到了MSP430的FLASH存储控制器,正好趁这个机会搞搞清楚,也是因为MSP430的仿真器FET430UIF和它在Linux下的应用程序MSPDEBUG,实在是很好用,读写CPU寄存器和地址空间的命令都相当简单。MSP430F2616有92KB+256B的Flash存储空间,以及4KB的SRAM;另外,ATmega8有8K的Flash、1K的SRAM和512字节的EEPROM;而STM32F103RBT6有128K的Flash,以及20K的SRAM。以MSP430F2616为例,执行烧写命令:(mspdebug) prog maria.elf Erasing...Programming...Writing 2770 bytes at 2100 [section: .text]...Writi

MSP430F2616开发笔记(五)USCI之UART Mode from SMCLK
发表于:2014-03-12 21:10:00 | 分类:MSP430
浏览( ) | 评论( )

几乎所有的单片机都会集成UART外设,但是调试MSP430的UART功能比想象的要有挑战性也更有乐趣。MSP430的UART外设提供了更丰富的硬件可定制性,允许用户使用更简洁的代码和更少的外围器件,实现非常实用的功能,比如address选择、break信号、baudrate自动检测等等。当然,UART外设有丰富的时钟选项,32.768KHZ的ACLK时钟源也可以被使用,CPU可以最大限度的处于未唤醒状态,这是为低功耗而考虑的设计。(USI外设:Universal Serial Interface,提供这一功能的MSP430型号并不多,在调试它之前得先确认是否具备它,MSP430F2616不提供USI外设,所以直接从USCI开始。)USCI外设:Universal Serial Communication Interface,大部分单片机会将UART、SPI、I2C外设功能分开,它们通常会使用不一样的IO引脚,不共用寄存器和中断向量;MSP430将这些外设功能集成到USCI中,它支持不同的(UART、SPI、I2C)模式,不同模式之间虽然不共用IO引脚,但是却共用寄存器和中断向量。USCI之间以不同的字母后缀来

MSP430F2616开发笔记(四)DMA的Burst-Block Transfers模式
发表于:2014-02-27 01:23:15 | 分类:MSP430
浏览( ) | 评论( )

虽然在DMA模式下,不使用CPU就能进行不同地址之间的数据传输,但是并不意味着进行DMA传输的时候CPU可以继续做其他的事情,实际情况是,DMA传输的时候CPU会被挂起,也就是说它什么也干不了;等DMA结束了,CPU就会继续之前的工作。如果数据很少,挂起了也无所谓,但是如果数据量很大或者不间断,有可能就会出问题了,好在除了之前所说的Single Transfer模式和Block Transfers模式之外,MSP430还提供一种Burst-Block Transfers模式。在此模式下,DMA每传输4个byte/word就回来执行两个MCLK指令,每个DMA的byte/word传输需要2个MCLK时间,就是说,CPU挂起8个MCLK再运行2个MCLK。/************************************************/uint16_t dma_temp_A[256];uint16_t dma_temp_B[256];int main (void){    uint16_t i = 0;    WDTCTL = WDTP