打印
[MCU]

该怎样执行?

[复制链接]
252|14
手机看帖
扫描二维码
随时随地手机跟帖
沙发
liliang9554| | 2020-9-3 23:58 | 只看该作者
啥意思?没看懂啊

使用特权

评论回复
板凳
airwill| | 2020-9-6 21:52 | 只看该作者
估计还是新人吧,  中断使能, 一定要有对应的中断服务程序.

使用特权

评论回复
地板
shimx|  楼主 | 2020-9-7 20:58 | 只看该作者
比如:官方给的2553中ADC10程序:
#include  "msp430g2553.h"

long temp;
long IntDegF;
long IntDegC;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  //Configure ADC10
  ADC10CTL1 = INCH_10 + ADC10DIV_3;         // Choose ADC Channel as Temp Sensor
  ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;        //Choose ADC Ref source
  __enable_interrupt();                     // Enable interrupts.
  TACCR0 = 30;                              // Delay to allow Ref to settle
  TACCTL0 |= CCIE;                          // Compare-mode interrupt.
  TACTL = TASSEL_2 | MC_1;                  // TACLK = SMCLK, Up mode.
  LPM0;                                     // Wait for delay.
  TACCTL0 &= ~CCIE;
  __disable_interrupt();                       // Disable timer Interrupt
  while(1)
  {
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
    __bis_SR_register(LPM0_bits + GIE);        // LPM0 with interrupts enabled

    // oF = ((A10/1024)*1500mV)-923mV)*1/1.97mV = A10*761/1024 - 468
    temp = ADC10MEM;
    IntDegF = ((temp - 630) * 761) / 1024;

    // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278
    temp = ADC10MEM;
    IntDegC = ((temp - 673) * 423) / 1024;

    __no_operation();                       // SET BREAKPOINT HERE
  }
}
里面呢,ADC10和TIMERA出现中断,但是没有中断程序,中断之后是顺序执行吗?

使用特权

评论回复
5
chenjun89| | 2020-9-7 21:01 | 只看该作者
没有中断函数的话,只是相关寄存器变化,不会响应。

使用特权

评论回复
6
zhanghqi| | 2020-9-7 21:03 | 只看该作者
也就是说中断是一个空函数,进去就出来了,目的是用来唤醒LPM0低功耗模式,流程如下:,
低功耗模式,
中断进入
中断返回
(LPM0后面的程序继续执行):
,清除定时器中断标志,
关闭总中断

使用特权

评论回复
7
jiajs| | 2020-9-7 21:10 | 只看该作者
楼上解释的非常好的,中断嵌套的也需要注意的,这个就是要看中断优先级的

使用特权

评论回复
8
shimx|  楼主 | 2020-9-7 21:14 | 只看该作者

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
  __bic_SR_register_on_exit(LPM0_bits);        // Clear CPUOFF bit from 0(SR)
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
  TACTL = 0;
  __bic_SR_register_on_exit(LPM0_bits);        // Clear CPUOFF bit from 0(SR)
}
亲们,疏忽,没有复制到这些中断程序。

使用特权

评论回复
9
wuhany| | 2020-9-7 21:18 | 只看该作者
中断有什么情况

使用特权

评论回复
10
shimx|  楼主 | 2020-9-7 21:25 | 只看该作者
如果中断函数为空或者没有在中断函数之中退出低功耗,CPU回到主程序仍然保持低功耗。

使用特权

评论回复
11
zhaoxqi| | 2020-9-7 21:28 | 只看该作者
不太懂了,等高手吧

使用特权

评论回复
12
spark周| | 2020-9-7 21:33 | 只看该作者
这个又中断与查询两种方式的。

使用特权

评论回复
13
jiajs| | 2020-9-7 21:36 | 只看该作者
这个又中断与查询两种方式的。

使用特权

评论回复
14
liliang9554| | 2020-9-7 21:39 | 只看该作者
是不是到中断子程序就跳过去了

使用特权

评论回复
15
shimx|  楼主 | 2020-9-7 21:46 | 只看该作者

呵呵,解决了,结贴了哈

使用特权

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

本版积分规则

857

主题

10661

帖子

5

粉丝