打印

MSP430F149串口收发正常 但接收中断进不了

[复制链接]
1631|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
午夜粪车|  楼主 | 2019-1-10 20:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lizye| | 2019-1-10 20:06 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
午夜粪车|  楼主 | 2019-1-10 20:09 | 只看该作者
#include "msp430x14x.h"

unsigned char flag;

void Init_Clk(void)
{
  volatile unsigned char i;
  BCSCTL1 &= ~XT2OFF;                       // XT2on
  BCSCTL2 |= SELM_2 + SELS + DIVS_2;        //MCLK=XT2,SMCLK=XT2/4=2MHz;

  do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);               // Time for flag to set
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?
}

void Init_UART(void)
{
  P3SEL |= BIT6;
  P3SEL |= BIT7;                             // P3.6,7 = USART1 option select
  P3DIR |= BIT6;
  UCTL1 |= SWRST;
  UCTL1 |= CHAR;                            // 8-bit character
  UTCTL1 |= SSEL0 + SSEL1;;                          // UCLK = SMCLK
  U1BR0=0Xd0;                             //9600
  U1BR1=0X00;
  UMCTL1=0X40;                            // modulation
  ME2 |= UTXE1 + URXE1;                     // Enable USART1 TXD/RXD
  UCTL1 &= ~SWRST;                          // Initialize USART state machine
//  IFG2  &= ~URXIFG1;
  IE2 |= URXIE1;                            // Enable USART1 RX interrupt
}

void Send_Byte(unsigned char data)
{
  U1TXBUF = data;
  while (!(IFG2 & UTXIFG1));    //USART1 TX buffer ready?
}  

int main(void)
{
  volatile unsigned int j;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  Init_Clk();
  Init_UART();
  _EINT();
  for(;;)
  {
    if(flag == 1)
    {
      flag = 0;
      Send_Byte(0x10);
      for(j=0;j<5000;j++)
        ;
    }
  }
}

#pragma vector = UART1RX_VECTOR
__interrupt void uart1_rx_isr(void)
{
  _DINT();  
  flag = 1;
  _EINT();
}

使用特权

评论回复
地板
午夜粪车|  楼主 | 2019-1-10 20:13 | 只看该作者
程序是根据TI的例程修改的

使用特权

评论回复
5
午夜粪车|  楼主 | 2019-1-10 20:17 | 只看该作者

IE2 |= URXIE1;
_EINT();
串口接收中断难道不是开启这两个就行了?

使用特权

评论回复
6
zhaoxqi| | 2019-1-10 20:19 | 只看该作者

楼主怎么知道接收中断进不了?在板子上试了?

使用特权

评论回复
7
午夜粪车|  楼主 | 2019-1-10 20:22 | 只看该作者
对,在板子上试验的~~在中断服务程序加断点调试发现进不去

使用特权

评论回复
8
aqawasaz| | 2019-1-11 10:09 | 只看该作者
接收中断进不了,怎么确认接收正常的?

使用特权

评论回复
9
aspoke| | 2019-1-11 21:36 | 只看该作者
上传你的代码看看

使用特权

评论回复
10
232321122| | 2019-1-11 21:39 | 只看该作者
或者是发送数据寄存器中有数据

使用特权

评论回复
11
ghuca| | 2019-1-11 21:39 | 只看该作者
再是有些外部中断进去是要关闭中断的

使用特权

评论回复
12
soodesyt| | 2019-1-11 21:39 | 只看该作者
用示波器看一下。         

使用特权

评论回复
13
mnynt121| | 2019-1-11 21:40 | 只看该作者
P3SEL|=BIT4;  
  P3SEL|=BIT5;  
  P3DIR=0xD0;  
  P3OUT=0X80;   
   .......................
  UCTL0 |= ~SWRST;     //开始设置串口   
  UCTL0 |= CHAR;   
  UTCTL0 |= SSEL0+ TXEPT;  //选择模块时钟源

  UBR00 = 0x03;     //设置波特率
  UBR10 = 0x00;   
  UMCTL0 = 0x4A;   
  UCTL0 &= ~SWRST;     //设置串口 完毕
  

使用特权

评论回复
14
plsbackup| | 2019-1-11 21:40 | 只看该作者
设置完后打开全局中断  

使用特权

评论回复
15
kmzuaz| | 2019-1-11 21:40 | 只看该作者
设置对应的中断向量及中断服务函数。

使用特权

评论回复
16
qiufengsd| | 2019-1-11 21:41 | 只看该作者
串口使能吧               

使用特权

评论回复
17
wengh2016| | 2019-1-11 21:41 | 只看该作者
// Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  BCSCTL2|=DIVM_3+SELS+DIVS_3;//DCO-MCLK 8分频   SMCLK-XT2-8分频 1M
  //配置串口
  UCTL1|=CHAR+SWRST;//8位数据模式;URAT模式;串口模块复位
  UTCTL1|=SSEL1; //TX时钟  SSEL1(0x20)(SMCLK)  SSEL0(0x10)(ACLK)

  UBR01=0x68; //配置波特率9600  
  UBR11=0x00;
  UMCTL1|=0x10;

   ME2|=UTXE1+URXE1;//串口发送、接收使能
   IE2|=URXIE1;//串口接收中断使能
   _EINT(); //开总中断
  
  //配置IO
  P3SEL|=BIT6+BIT7;//P3.6 TX  P3.7 RX
  P3DIR|=BIT6; //配置为输出  
// P3DIR&=~BIT7; //配置为输入  
  
  P2DIR|=BIT0+BIT1;
  P2OUT&=~(BIT0+BIT1);
  
  UCTL1&=~SWRST;//串口模块正常工作
  
  TXBUF1='a'; //发送测试
  while((UTCTL1&TXEPT)==0);
   
  while(1); //等待接收中断

使用特权

评论回复
18
uiint| | 2019-1-11 21:42 | 只看该作者
可以在串口助手观察到接收的数据

使用特权

评论回复
19
plsbackup| | 2019-1-11 21:42 | 只看该作者
使能你的接收或发送中断

使用特权

评论回复
20
aspoke| | 2019-1-11 21:42 | 只看该作者
是不是中断信号存在问题?

使用特权

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

本版积分规则

867

主题

10194

帖子

3

粉丝