[MSP430]入门之中的一个 总体认识-程序员宅基地

技术标签: 嵌入式  

这是由TI公司推出的一款比較单片机, 相对stm32来说简单些, 由于它是16位的,  所以我们在学习中可能也会像51一样,  直接操纵寄存器.

TI设计这款单片机的初衷是, 让它用于低功耗的嵌入式设备中.

Reduced instruction set computing, or RISC (pronounced 'risk'), is aCPU design strategy based on the insight that a simplified instruction set (as opposed to a complex set) provides higher performance when combined with amicroprocessor architecture capable of executing those instructions using fewermicroprocessor cycles per instruction


以上是MSP430使用的精简混合指令集  wiki解释, 也是为了减少功率

MSP430也使用了集成模拟外设, 可以减少功耗。提高启动速度




单片机的自己主动执行与时钟系统分不开。始终系统通常须要满足4个条件:

1.高频率            用于高速响应

2.低频性           用于减少电流消耗

3. 稳定的频率  满足定时需求 如 RTC real-time clock

4.多时钟源      同意单片机在不同的频率下工作,能够同一时候使用外部晶振和内部振荡器,比如 DCO

MSP430内部有3个时钟, 用于应对不同系统最小化能量消耗

MCLK 主时钟

SMCLK副时钟

ACLK辅助时钟

The MSP430 features 3 clocks which can run at maximum of 16MHz depending upon the conditions. The reason we have three clocks instead of just one or even two is to compromise between systems that need speed and the ability to minimize power consumption, which is what the msp430 was designed for.  These three clocks are:-

  • MCLK:  This stands for Master Clock, and is the one that drives the processor most of the time.  
  •               由DCO产生 。也可由外部振荡器产生。 启动须要6us, 一般用于CPU 和快速外设
  • SMCLK: The Sub-Main Clock is a secondary clock which is used by other peripherals particularly the internal peripherals.
  •              外设选择时钟源的时候使用
  • ACLK: The Auxiliary Clock is usually timed outside the MSP430 and is typically used for peripherals.
  •              一般用于低俗外设,能够设置

開始一个project的开头必定是配置时钟了

DCO是digital controled Oscillator,  数字晶振,  它没有外部竞争准确,  可是控制的范围已经非常广了, 一定够用.

DCO能够控制时钟,  它由两个寄存器操作


Apart from a versatile clock system, we have 4 different sources to control these three clocks.  We will have a look at them at the correct time, however for now one of is theDCO. It’s the digitally controlled oscillator which might not be as accurate or stable while compared to external crystals, but still is quite good and can operate over a wide range of frequencies.

Lets’ move onto the DCO.  The advantage with the DCO is that it requires no external parts and can be fully controlled by the software.  There are only two registers should be configured to change yourDCO frequency and that areDCOCTL and BCSCTL1.

这两句话用寄存器把DCO设置为1MHZ;

basic clock select controller

BCSCTL1=CALBC1—1MHZ; 
DCOCTL=CALDCO—1MHZ。
设置MCLK

BCSCTL2 |= SELM——1+DIVM_3;



讲一讲引脚Pin的寄存器

每个Pin都有几个寄存器

PxDIR 数据方向, 假设选择复用功能这个不用管

P1DIR=0xff   将P1作为输出
P1OUT=0x20 P1输出20
P1DIR=0x00
data=P1IN  读取输入值


PxIES 0为上升沿中段,1 为下降沿中断

PxREN 上拉下拉电阻使能寄存器

PxIn Px Out 输入输出的数据

PxSEL(2) 复用选择

PxIFG interrupt Flag register  中断标志位, 使用后须要清理

要想打开中断呢, 一般就是 _EINT();

关闭就是 _DINT();


void main(void)
{	WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
	P1DIR |= BIT0;                            // Set P1.0 to output direction
	P1IES |= BIT3;                            // P1.3 下降沿
	P1IFG &= ~BIT3;                           // P1.3 中断标志清除
	P1IE |= BIT3;                             // P1.3 中断使能
	_BIS_SR(LPM4_bits + GIE);                 // 进入低功耗模式,开启全局中断
}
// Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)   //中断服务程序
{
	if (P1IFG & BIT3)
	{
		P1OUT ^= BIT0;                         // P1.0  led灯闪烁
		P1IFG &= ~BIT3;                        // P1.3 清除中断标志	
        }
}




再说说FLL+

frequency-locked loop (FLL+) clock

这个独特的模块就是 时钟了... 包括我前面说的几个


Timer

增计数模式下。

CCR0 代表周期 范围65535

TAR代表counter

void zengjishu()
{
  TACTL=TASSEL1+TACLR;  //选择计数时钟为ACLK。将计数器TAR清零
  CCTL0=CCIE;          //使能中断
  CCR0=200;            //计数终值。方波频率为:32768/200/2
  TACTL|=MC_1;          //选择Timer_A为增计数模式
  P1DIR|=BIT0;         //P1.0作为输出
  _EINT();             //使能总中断
 }
#pragma vertor =TIMERA0_VECTOR
__interrupt void Timer_A(void)
 {
   P1OUT^=0X01;  //P1.0取反
 }
capture compare

当CCTLx中的CAP=1时进入capture模式。  检測到设定的脉冲沿。TAxR会被写入TAxCCRx 而且CCIFG置位

CM1 CM0 能够选择捕获条件。  有 禁止 捕获 上升沿 下降沿  上升下降沿

可是中断请求 必需要 GIE CCIE都同意才干够

当CCTLx中的CAP=0时进入compare模式,

TAxR记数到TAxCCRn时  CCIFG置位 EQUx =1 

 ???                                  EQUx依据输出模式影响输出

                                        输入信号TAxCCI 被封锁到 SCCI中

Ø每一个捕获/比較模块都包括一个输出单元,用于产生输出信号。

Ø
Ø每一个输出单元有8种工作模式,可产生基于EQUx的多种信号。
Ø
Ø除模式0外。其它模式的输出都在定时器时钟上升沿时发生变化。
Ø
Ø输出模式2。3,6。7不适合输出单元0,由于EQUx=EQU0。

Ø
Ø输出单元在输出控制位OUTMODx的控制下,有8种输出模式输出信号。这些模式与TAxR、TACCTLx、TAxCCR0的值有关,例如以下表所看到的。
OUTMODx
模式
说明
000
输出模式0:
输出
输出信号取决与寄存器 TACCTLx 中的 OUT位。当 OUT位更新时。输出信号马上更新。

001
输出模式1:
置位
输出信号在TAxR等于TAxCCRn时置位。并保持置位到定时器复位或选择还有一种输出模式为止。
010
输出模式2:
翻转/复位
输出在TAxR的值等于TAxCCRn时翻转,当TAxR的值等于TAxCCR0时复位。
011
输出模式3:
置位/复位
输出在TAxR的值等于TAxCCRn时置位,当TAxR的值等于TAxCCR0时复位。
100
输出模式4:
翻转
输出电平在TAxR的值等于TAxCCRn时翻转,输出周期是定时器周期的2倍。
101
输出模式5:
复位
输出在TAxR的值等于TAxCCRn时复位。并保持低电平直到选择还有一种输出模式。
110
输出模式6:
翻转/置位
输出电平在TAxR的值等于TAxCCRn时翻转。当TAxR值等于TAxCCR0时置位。

111
输出模式7:
复位/置位
输出电平在TAxR的值等于TAxCCRn时复位,当TAxR的值等于TAxCCR0时置位。

PWM实例
void timerA1_init(){
  TA1CTL = TASSEL_2 + TACLR + MC_1; //SMCLK as clock, up mode
  TA1CCTL1 = OUTMOD_7; //Compare module 0 is set to Output Mode 7(PWM)
  TA1CCR0 = 200;
  TA1CCR1 = 100;
}
void PWM_update(float dew){
  uchar buffer;
TA1CCR1 = (uchar)((dew+60)/75*180);    // dew+15
}

串口设置一般步骤

    1、选择串口模块(USCI_A0、USCI_B0)。

  USCI_A0 :
 P1SEL = BIT1 + BIT2;
   P1SEL2 = BIT1 + BIT2;     //设置IO口,P1.2为发送TXD,P1.1为接收RXD
    2、在SWRST=1时,设置串口。
                  UCA0CTL=UCSWRST;      // 复位USART,并设置串口
    3、选择波特率发生器时钟。
                  UCA0TCTL1=UCSSEL1;      //UCLK=MCLK
    4、使能发送、接收。

                  ME2=UCA0TXE1+UCA0RXE1;   //使能RXD TXD
    5、设置字符长度。
                 UCA0CTL=CHAR;        //设置字符长度为8位,默认时为7位
    6、设置波特率。  注:UCA0BR=UCA0BR0+UCA0BR1;  其值应大于3
                 UCA0BR0=8;     //存放波特率分频因子的整数部分的低字节
                 UCA0BR1=0;    //存放波特率分频因子的整数部分的高字节
                 UCA0MCTL= UCBRS2 + UCBRS0;     //设置波特率为115200
    7、SWRST=0。串口设置完成。
                 UCA0CTL&=~UCSWRST;    //在SWRST为1之前设置串口
    8、使能中断。
                 IE2=UCA0RXIE1;      //使能接收 中断

SPI

void Configure_SPI(){
  //--- Initialization of SPI Commuinication (USCI_B) -------------------------
  P1SEL |= BIT5 + BIT6 + BIT7;                            // P1.5 6 7
  P1SEL2 |= BIT5 + BIT6 + BIT7;                            // P1.5 6 7
//  IE2 |= UCB0TXIE;
  UCB0CTL0 |= UCCKPH + UCMSB+ UCMST+ UCMODE_0 + UCSYNC;           // 3-pin, 8-bit SPI mstr, MSb 1st
  UCB0CTL1 |= UCSSEL_2;                     // SMCLK
  UCB0BR0 = 0x01;
  UCB0BR1 = 0;
  UCB0CTL1 &= ~UCSWRST;            // **Initialize USCI state machine**
  }
<div><div>•void TFT_SendData(uint8_t bdata)
</div><div>•{
</div><div>•//  uint8_t mask;
</div><div>•  ST7735_NCS_CLR();
</div><div>•  ST7735_DC_SET();
</div><div><span style="color:#BF0000;">•</span><span style="color:#BF0000;"> </span>/* for(mask=0x80;mask;mask>>=1){  // IO <span style="color:#BF0000;">模拟</span><span style="color:#BF0000;">SPI</span><span style="color:#BF0000;">。
</span></div><div><span style="color:#BF0000;">•</span><span style="color:#BF0000;">    </span>ST7735_SCL_CLR();
</div><div><span style="color:#BF0000;">•</span><span style="color:#BF0000;">    </span>if(bdata&mask)ST7735_SDA_SET();
</div><div><span style="color:#BF0000;">•</span><span style="color:#BF0000;">    </span>else ST7735_SDA_CLR();
</div><div><span style="color:#BF0000;">•</span><span style="color:#BF0000;">    </span>ST7735_SCL_SET();
</div><div><span style="color:#BF0000;">•</span><span style="color:#BF0000;">  </span>}*/
</div><div>• UCB0TXBUF = bdata;
</div><div>•  while((UCB0STAT & UCBUSY)==0x01);
</div><div>•    ST7735_NCS_SET();
</div><div>•}
</div></div> 

ADC

1、 10位转换精度。
2、有多种时钟源可供选择,内带时钟发生器。
3、配有6个外部通道和2个内部通道。

4、内置參考电源,而且參考电压Vref有8种组合。
5、採样速度快,最快200Ks/s。
6、四种工作模式:
                             1、单通道单次转换模式:   CONSEQ_0。
                             2、单通道多次转换模式:   CONSEQ_2。
                             3、序列通道单次转换模式:CONSEQ_1 。
                             4、序列通道多次转换模式:CONSEQ_3。

 P1SEL&=0x20;                        //使能A/D通道A5;

  ADC10CTL0 = ADC10SHT_1+ ADC10ON+SREF_1+REF2_5V+REFON+MSC; 
  // 打开ADC10内核。确定採样周期为8*ADC10OSC/2,选择内部參考电压为2.5v 选择时钟;

  ADC10CTL1 = INCH_5+ADC10DIV_1+CONSEQ_2; 
  // input A5模拟信号输入选择通道A5即P1.5,设置为单通道多次转换模式,分频因子为2

  ADC10AE0 |= BIT5;               // 使P1.5同意AD模拟输入信号

  ADC10CTL0|=ENC;               //使能转换。

  ADC10CTL0|=ADC10SC;      //開始转换。

LowPowerMode

"msp430g2553.h"
#define LPM0      _BIS_SR(LPM0_bits)     /* Enter Low Power Mode 0 */
#define LPM0_EXIT _BIC_SR_IRQ(LPM0_bits) /* Exit Low Power Mode 0 */
#define LPM1      _BIS_SR(LPM1_bits)     /* Enter Low Power Mode 1 */
#define LPM1_EXIT _BIC_SR_IRQ(LPM1_bits) /* Exit Low Power Mode 1 */
#define LPM2      _BIS_SR(LPM2_bits)     /* Enter Low Power Mode 2 */
#define LPM2_EXIT _BIC_SR_IRQ(LPM2_bits) /* Exit Low Power Mode 2 */
#define LPM3      _BIS_SR(LPM3_bits)     /* Enter Low Power Mode 3 */
#define LPM3_EXIT _BIC_SR_IRQ(LPM3_bits) /* Exit Low Power Mode 3 */
#define LPM4      _BIS_SR(LPM4_bits)     /* Enter Low Power Mode 4 */
#define LPM4_EXIT _BIC_SR_IRQ(LPM4_bits) /* Exit Low Power Mode 4 */
MSP430 具有一种执行模式及5 种可利用软件来选择的低功耗操作模式。一个中断事件可以将器件从任一低功耗
模式唤醒、处理请求、并在接收到来自中断程序的返回信号时恢复至低功耗模式。
下面6 种操作模式可利用软件来配置:
1、激活模式(AM)
– 全部时钟处于激活状态
2、低功耗模式0 (LPM0)
– CPU 被禁用
– ACLK 和SMCLK 仍然有效,MCLK 被禁用
3、低功耗模式1 (LPM1)
– CPU 被禁用
– ACLK 和SMCLK 仍然有效。MCLK 被禁用
– 假设DCO 不是在激活模式下被使用,则DCO 的dc 生成器被禁用
3、低功耗模式2 (LPM2)
– CPU 被禁用
– MCLK 和SMCLK 被禁用
– DCO 的dc 生成器保持启用
– ACLK 保持激活
4、低功耗模式3 (LPM3)
– CPU 被禁用
– MCLK 和SMCLK 被禁用
– DCO 的dc 生成器保持启用
– ACLK 保持激活
5、低功耗模式4 (LPM4)
– CPU 被禁用
– ACLK 被禁用
– MCLK 和SMCLK 被禁用
– DCO 的dc 生成器保持启用
– 晶体振荡器被停止
void main(void)
{
      WDT_init();  // initialize Watchdog Timer
      while(1)
      {
             __bis_SR_register(LPM3_bits + GIE);     // Enter LPM3, enable interrupts
             activeMode();                                               // in active mode. Do stuff!
      }
}

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
       __bic_SR_register_on_exit(LPM3_bits);      // Clear LPM3 bits from 0(SR), Leave LPM3, enter active mode
}






















版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34218890/article/details/85885223

智能推荐

2022黑龙江最新建筑八大员(材料员)模拟考试试题及答案_料账的试题-程序员宅基地

文章浏览阅读529次。百分百题库提供建筑八大员(材料员)考试试题、建筑八大员(材料员)考试预测题、建筑八大员(材料员)考试真题、建筑八大员(材料员)证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。310项目经理部应编制机械设备使用计划并报()审批。A监理单位B企业C建设单位D租赁单位答案:B311对技术开发、新技术和新工艺应用等情况进行的分析和评价属于()。A人力资源管理考核B材料管理考核C机械设备管理考核D技术管理考核答案:D312建筑垃圾和渣土._料账的试题

chatgpt赋能python:Python自动打开浏览器的技巧-程序员宅基地

文章浏览阅读614次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python自动打开浏览器

Linux中安装JDK-RPM_linux 安装jdk rpm-程序员宅基地

文章浏览阅读545次。Linux中安装JDK-RPM方式_linux 安装jdk rpm

net高校志愿者管理系统-73371,计算机毕业设计(上万套实战教程,赠送源码)-程序员宅基地

文章浏览阅读25次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-高校志愿者管理系统主要功能模块包括页、个人资料(个人信息。修改密码)、公共管理(轮播图、系统公告)、用户管理(管理员、志愿用户)、信息管理(志愿资讯、资讯分类)、活动分类、志愿活动、报名信息、活动心得、留言反馈,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取SQL Server 作为后台数据的主要存储单元,采用Asp.Net技术进行业务系统的编码及其开发,实现了本系统的全部功能。

小米宣布用鸿蒙了吗,小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们...-程序员宅基地

文章浏览阅读122次。原标题:小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们目前华为已开始对鸿蒙系统大规模宣传,不过中国手机四强中的另外三家小米、OPPO、vivo对于是否采用鸿蒙系统保持沉默,甚至OPPO还因此而闹出了一些风波,对此柏铭科技认为这是因为中国制造当下需要小米OV几家继续将手机出口至海外市场。 2020年中国制造支持中国经济渡过了艰难的一年,这一年中国进出口贸易额保持稳步增长的势头,成为全球唯一..._小米宣布用鸿蒙系统

Kafka Eagle_kafka eagle git-程序员宅基地

文章浏览阅读1.3k次。1.Kafka Eagle实现kafka消息监控的代码细节是什么?2.Kafka owner的组成规则是什么?3.怎样使用SQL进行kafka数据预览?4.Kafka Eagle是否支持多集群监控?1.概述在《Kafka 消息监控 - Kafka Eagle》一文中,简单的介绍了 Kafka Eagle这款监控工具的作用,截图预览,以及使用详情。今天_kafka eagle git

随便推点

Eva.js是什么(互动小游戏开发)-程序员宅基地

文章浏览阅读1.1k次,点赞29次,收藏19次。Eva.js 是一个专注于开发互动游戏项目的前端游戏引擎。:Eva.js 提供开箱即用的游戏组件供开发人员立即使用。是的,它简单而优雅!:Eva.js 由高效的运行时和渲染管道 (Pixi.JS) 提供支持,这使得释放设备的全部潜力成为可能。:得益于 ECS(实体-组件-系统)架构,你可以通过高度可定制的 API 扩展您的需求。唯一的限制是你的想象力!_eva.js

OC学习笔记-Objective-C概述和特点_objective-c特点及应用领域-程序员宅基地

文章浏览阅读1k次。Objective-C概述Objective-C是一种面向对象的计算机语言,1980年代初布莱德.考斯特在其公司Stepstone发明Objective-C,该语言是基于SmallTalk-80。1988年NeXT公司发布了OC,他的开发环境和类库叫NEXTSTEP, 1994年NExt与Sun公司发布了标准的NEXTSTEP系统,取名openStep。1996_objective-c特点及应用领域

STM32学习笔记6:TIM基本介绍_stm32 tim寄存器详解-程序员宅基地

文章浏览阅读955次,点赞20次,收藏16次。TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在 72MHz 计数时钟下可以实现最大 59.65s 的定时,59.65s65536×65536×172MHz59.65s65536×65536×721​MHz不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。_stm32 tim寄存器详解

前端基础语言HTML、CSS 和 JavaScript 学习指南_艾编程学习资料-程序员宅基地

文章浏览阅读1.5k次。对于任何有兴趣学习前端 Web 开发的人来说,了解 HTML、CSS 和JavaScript 之间的区别至关重要。这三种前端语言都是您访问过的每个网站的用户界面构建块。而且,虽然每种语言都有不同的功能重点,但它们都可以共同创建令人兴奋的交互式网站,让用户保持参与。因此,您会发现学习所有三种语言都很重要。如果您有兴趣从事前端开发工作,可以通过多种方式学习这些语言——在艾编程就可以参与到学习当中来。在本文中,我们将回顾每种语言的特征、它们如何协同工作以及您可以在哪里学习它们。HTML vs C._艾编程学习资料

三维重构(10):PCL点云配准_局部点云与全局点云配准-程序员宅基地

文章浏览阅读2.8k次。点云配准主要针对点云的:不完整、旋转错位、平移错位。因此要得到完整点云就需要对局部点云进行配准。为了得到被测物体的完整数据模型,需要确定一个合适的坐标系变换,将从各个视角得到的点集合并到一个统一的坐标系下形成一个完整的数据点云,然后就可以方便地进行可视化,这就是点云数据的配准。点云配准技术通过计算机技术和统计学规律,通过计算机计算两个点云之间的错位,也就是把在不同的坐标系下的得到的点云进行坐标变..._局部点云与全局点云配准

python零基础学习书-Python零基础到进阶必读的书藉:Python学习手册pdf免费下载-程序员宅基地

文章浏览阅读273次。提取码:0oorGoogle和YouTube由于Python的高可适应性、易于维护以及适合于快速开发而采用它。如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成。《Python学习..._零基础学pythonpdf电子书