打印

【MSP430i2xx教程第三讲】24-BitΣ-Δ ADC & FlashCtl-Flash存储控制器

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
141
luoxiao8302 发表于 2015-4-17 10:00
可以移植ucos系统吗?谢谢。

不可以。

使用特权

评论回复
142
lvyunhua| | 2015-4-17 21:31 | 只看该作者
贴个图就算了??

Vcore引脚是内部核心电源输出引脚,外面接个电容可以参考Cvcore值。
一般不驱动负载,只是用户测量芯片工作是否正常。

使用特权

评论回复
143
gaoyang9992006| | 2015-4-17 21:51 | 只看该作者
fyliuxue 发表于 2015-4-15 20:39
msp430的24位ADC精度确实相当不错,其他单片机里没见过这么高精度的,就是不知道采样速度怎么样,适不适合 ...

速度飞快飞快的。

使用特权

评论回复
144
强仔00001| | 2015-4-18 14:51 | 只看该作者
占个座,今晚看看,最近好忙

使用特权

评论回复
145
LED2013| | 2015-4-18 23:41 | 只看该作者
高精度的确是优势,但和稳定来比较,哪个更显得有优势呢,貌似有人说高精度和稳定有时无法同时做到最好,不知道具体是怎么做到这么好的

使用特权

评论回复
146
偏爱番茄酱| | 2015-4-19 12:46 | 只看该作者
下面是我对本章的学习总结::):)

使用特权

评论回复
147
偏爱番茄酱| | 2015-4-19 12:47 | 只看该作者
本章主要讲的是模数转换和闪存读写,本系列MCU集成24 Bit ADC,采用了优化的模数转换外设,以前的430自带了10位或12位adc这款工业级芯片用了24位,提供了更高的精度,性能更强。

使用特权

评论回复
148
偏爱番茄酱| | 2015-4-19 12:48 | 只看该作者
一、        24-BitΣ-Δ模数转换器
    SD24特性包括:
•        二阶Σ-Δ架构
•        高达7个(这个数量跟库函数手册有出入啊)可同时采样的ADC。
•        固定的1.024 MHz调制器输入频率。
•        软件可选择的内置和外置参考电压
•        软件可选的全通道温度传感器
•        函数分类
•            SD24 API可以分成三组函数:那些处理初始化和转换的,那些处理中断的,还有那些处理SD24的辅助功能的。
•        SD24 初始化和转换功能:
•               SD24_init()
        SD24_initConverter()
        SD24_initConverterAdvanced()
        SD24_startConverterConversion()
        SD24_stopConverterConversion()
        SD24_getResults()
        SD24_getHighWordResults()
•       
•        SD24 处理中断的有:
       SD24 enableInterrupt()
        SD24 disableInterrupt()
        SD24 clearInterrupt()
        SD24 getInterruptStatus()
•       
•        SD24处理辅助功能的有:
        SD24 setInputChannel()
        SD24 setConverterDataFormat()
        SD24 setInterruptDelay()
        SD24 setOversampling()
•                SD24 setGain()
如何使用SD-24:
1. 选择参考REF,是内置参考电压,还是选择外置参考电压。
  2. 高级配置转换器相关参数,共8个,这个很关键。
  3. 通过相关函数,将第2步配置的参数写入到系统。
  4. 延时一下,等待参考电压就绪,就可以启动转换器了。
  5. 根据所选转换器的中断标志位来判断转换完成了吗?
  6. 判断完成转换后就可以通过获取结果的相关函数,获取转换的结果了。
  7. 如果需要下次转换,记得清除中断标志。

使用特权

评论回复
149
偏爱番茄酱| | 2015-4-19 12:49 | 只看该作者
二、        FlashCtl-Flash存储控制器
      FlashCtl_segmentErase() 可以帮助清除单个块段的闪存。一个指向将要被擦除的闪存块段的指针传递给该函数。
   FlashCtl_performEraseCheck() 帮助检查在闪存中的特定数量的字节目前是否被擦除。指向擦除检查和要检查的字节数的起始位置的指针传递到此函数。
    根据即将被执行写入到闪存的类型,此库函数提供了Api用于闪存的写操作。
    FlashCtl_write8() 函数以字节为单位写入闪存。FlashCtl_write16() 函数以字为单位写入闪存。FlashCtl_write32() 以长整型为单位写入闪存,通过引用(指针)。FlashCtl_memoryFill32() 函数以长整型,通过传递值方式写入闪存。FlashCtl_getStatus() 检测是否闪存当前忙于擦写状态。FlashCtl_lockInfo() 锁信数据储区。FlashCtl unlockInfo() 解锁数据存储区。
    闪存API可以分为4组:那些处理闪存擦除的,那些写闪存的,那些获取闪存状态的,还有那些锁/解锁数据存储区的。
    擦除操作的有:
     FlashCtl_segmentErase()
     FlashCtl_massErase()

    写闪存操作的有:
     FlashCtl_write8()
     FlashCtl_write16()
     FlashCtl_write32()
     FlashCtl_memoryFill32()

    获取状态的有:
     FlashCtl getStatus()
     FlashCtl performEraseCheck()

    数据信息存储区(块、段)锁/解锁操作的有:
     FlashCtl lockInfo()
     FlashCtl unlockInfo()

     闪存时钟设置的有: FlashCtl setupClock()

使用特权

评论回复
150
偏爱番茄酱| | 2015-4-19 12:52 | 只看该作者
这个系列的430  最多就只有 4 对  外部通道,外部的ADC通道入口是不确定的,不同封装的MSP430i2040系列里,有封装三个的,也有4个的,,但是系统核心模块设计时候提供的最大值是7个,其中一个是内置温度传感器接口,对外设计的接入能力最大是4个,另外的两个通道是为其他功能,要根据根据所选型号和封装来确定用哪几个通道。

使用特权

评论回复
151
偏爱番茄酱| | 2015-4-19 12:53 | 只看该作者
Σ-Δ型ADC的优势:分辨率较高,高达24位;转换速率高,高于积分型和压频变换型ADC;价格低;内部利用高倍频过采样技术,实现了数字滤波,降低了对传感器信号进行滤波的要求。
24 Bit ADC与传统的ADC相比4通道过采样每个因子可以提高约6分贝或1位的信噪比
同步数据采样的 AD   单单一个AD  都比 这个CPU贵 。同步数据采样在很多场合是需要用到的,特别 是在电力系统中 ,相当有用。  还有就单单一个通道来说  (其实这个是 AD转换内核的优势),他的优势 就是 信噪比  别的同样的  24位AD  提高了(相对于CPU来说,AD公司的专门 AD比它的 好不少, 信噪比)。

使用特权

评论回复
152
daniellee1226| | 2015-4-19 13:38 | 只看该作者
gaoyang9992006 发表于 2015-4-17 20:41
这个系列去年年底才出现在TI官网,当时还没有提供手册,我很好奇,现在TI开始供货了,也出了库函数,所 ...

最近做项目,申请要用的运放的同时也申请了几片i系列的430。回来用用看,指不定哪天就需要用到了,毕竟430用起来挺顺手的,应该比mcu加一个外围AD要方便得多。
应用的话库函数确实方便得多,学习的话还是建议寄存器,毕竟当初是学430入门的。
推广的话,我倒是挺看好的,毕竟当初学校实验室用ti的片子多,现在工作了总是习惯ti的,ARM用TM4C,低功耗用430,运放也是,我也是醉了,当初不理解ti为什么可以辣么容易就申请芯片了,不亏么?现在终于懂了,都习惯ti的datasheet风格了。不过东西确实也是挺不错的。。。。

使用特权

评论回复
153
昱枫| | 2015-4-19 18:36 | 只看该作者
gaoyang9992006 发表于 2015-4-17 21:21
嗯,这个优势还是很明显的,可以完成那种要同时完成采样与检测的方案。 ...

是的,这是很好的优势,虽然说有的高速的循环的检测也可以实现,但是对于软件而言就有些复杂

使用特权

评论回复
154
昱枫| | 2015-4-19 18:36 | 只看该作者

你确定,我觉得应该也可以,51单片机都能够移植啊

使用特权

评论回复
155
昱枫| | 2015-4-19 19:06 | 只看该作者


从首地址写入16个0xF0 (字节)

1.通过循环的写的方式来实现写入,不知实际有没问题

#include "driverlib.h"

// Address of the beginning of the Flash Information Segment
#define  SEGSTART  0x1000

void main(void) {
    // Pointer to beginning of Flash segment
   
    uint8_t *flashPtr = (uint8_t *)SEGSTART;
    uint8_t  ch=0xf0;
    uint8_t  *data_ptr;
    data_ptr=&ch;
    uint8_t i;
    // Stop WDT
    WDT_hold(WDT_BASE);

    // Setting the DCO to use the internal resistor. DCO will be at 16.384MHz
    CS_setupDCO(CS_INTERNAL_RESISTOR);

    // Setting MCLK to DCO / 1. MCLK = 16.384MHz.
    CS_initClockSignal(CS_MCLK, CS_CLOCK_DIVIDER_1);

    // MCLK for Flash Timing Generator
    // Flash clock will run at ~390kHz. Datasheet recommends 257kHz - 476kHz
    FlashCtl_setupClock(390095, 16384000, FLASHCTL_MCLK);

    FlashCtl_unlockInfo();

    for(i=0;i<16;i++)
       {  
         FlashCtl_write8 (data_ptr, flash_ptr,1) ;
          flash_ptr++;
        }

    FlashCtl_lockInfo();

    while(1)
    {
        // Set breakpoint to view memory
        __no_operation();
    }
}



直接写入16个 一样的字符型数据
#include "driverlib.h"

// Address of the beginning of the Flash Information Segment
#define  SEGSTART  0x1000

void main(void) {
    // Pointer to beginning of Flash segment
   
    uint8_t *flashPtr = (uint8_t *)SEGSTART;
    uint8_t  ch=0xf0;
    uint8_t  *data_ptr;
    data_ptr=&ch;
    // Stop WDT
    WDT_hold(WDT_BASE);

    // Setting the DCO to use the internal resistor. DCO will be at 16.384MHz
    CS_setupDCO(CS_INTERNAL_RESISTOR);

    // Setting MCLK to DCO / 1. MCLK = 16.384MHz.
    CS_initClockSignal(CS_MCLK, CS_CLOCK_DIVIDER_1);

    // MCLK for Flash Timing Generator
    // Flash clock will run at ~390kHz. Datasheet recommends 257kHz - 476kHz
    FlashCtl_setupClock(390095, 16384000, FLASHCTL_MCLK);

    FlashCtl_unlockInfo();

         FlashCtl_write8 (data_ptr, flash_ptr,16) ;

    FlashCtl_lockInfo();

    while(1)
    {
        // Set breakpoint to view memory
        __no_operation();
    }
}

使用特权

评论回复
156
必胜客A| | 2015-4-19 20:30 | 只看该作者
1、根据MSP430i2040手册,查找VCORE管脚相关信息,并查找资料给出该管脚的作用,以及在使用中如何配置。
VCORE管脚相关信息:VCORE是MSP430i2040的第14号管脚

管脚的作用:Regulated core power supply (internal use only, no external current loading).
使用中如何配置:







使用特权

评论回复
157
必胜客A| | 2015-4-19 21:02 | 只看该作者
2、查找MSP430i2040手册,确定闪存部分的地址,以及结合例程距离如何从首地址写入16个0xF0 (字节)。

#include "driverlib.h"

// Address of the beginning of the Flash Information Segment
#define SEGSTART 0x1000
// Number of bytes within segment to write
#define SEG_LEN  0x10

unsigned char value = 0xF0;      // 8-bit value to write to segment

void write_InfoSeg(uint32_t value);

void main(void) {
    // Pointer to beginning of Flash segment
    uint32_t *flashPtr = (uint32_t *)SEGSTART;

    // Stop WDT
    WDT_hold(WDT_BASE);

    // Setting the DCO to use the internal resistor. DCO will be at 16.384MHz
    CS_setupDCO(CS_INTERNAL_RESISTOR);

    // Setting MCLK to DCO / 1. MCLK = 16.384MHz.
    CS_initClockSignal(CS_MCLK, CS_CLOCK_DIVIDER_1);

    // MCLK for Flash Timing Generator
    // Flash clock will run at ~390kHz. Datasheet recommends 257kHz - 476kHz
    FlashCtl_setupClock(390095, 16384000, FLASHCTL_MCLK);

    FlashCtl_unlockInfo();
    FlashCtl_write8(&value, flashPtr, SEG_LEN / 4 * 16);
    FlashCtl_lockInfo();

    while(1)
    {
        // Set breakpoint to view memory
        __no_operation();
    }
}




使用特权

评论回复
158
ccw1986| | 2015-4-19 21:16 | 只看该作者
好资料,正在用msp4302410做项目,正好也是学习
第一次用msp430的单片机

使用特权

评论回复
159
cowboy2014| | 2015-4-19 21:59 | 只看该作者

现在adi也有带高性能ADC的mcu了

使用特权

评论回复
160
112207301219| | 2015-4-19 22:30 | 只看该作者
daniellee1226 发表于 2015-4-19 13:38
最近做项目,申请要用的运放的同时也申请了几片i系列的430。回来用用看,指不定哪天就需要用到了,毕竟43 ...

确实是这样,总结的不错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则