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

[复制链接]
2232|32
 楼主| 午夜粪车 发表于 2019-1-10 20:02 | 显示全部楼层 |阅读模式
MSP430F149串口收发正常 但接收中断进不了
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的例程修改的
 楼主| 午夜粪车 发表于 2019-1-10 20:17 | 显示全部楼层

IE2 |= URXIE1;
_EINT();
串口接收中断难道不是开启这两个就行了?
zhaoxqi 发表于 2019-1-10 20:19 | 显示全部楼层

楼主怎么知道接收中断进不了?在板子上试了?
 楼主| 午夜粪车 发表于 2019-1-10 20:22 | 显示全部楼层
对,在板子上试验的~~在中断服务程序加断点调试发现进不去
aqawasaz 发表于 2019-1-11 10:09 | 显示全部楼层
接收中断进不了,怎么确认接收正常的?
aspoke 发表于 2019-1-11 21:36 | 显示全部楼层
上传你的代码看看
232321122 发表于 2019-1-11 21:39 | 显示全部楼层
或者是发送数据寄存器中有数据
ghuca 发表于 2019-1-11 21:39 | 显示全部楼层
再是有些外部中断进去是要关闭中断的
soodesyt 发表于 2019-1-11 21:39 | 显示全部楼层
用示波器看一下。         
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;     //设置串口 完毕
  
plsbackup 发表于 2019-1-11 21:40 | 显示全部楼层
设置完后打开全局中断  
kmzuaz 发表于 2019-1-11 21:40 | 显示全部楼层
设置对应的中断向量及中断服务函数。
qiufengsd 发表于 2019-1-11 21:41 | 显示全部楼层
串口使能吧               
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); //等待接收中断
uiint 发表于 2019-1-11 21:42 | 显示全部楼层
可以在串口助手观察到接收的数据
plsbackup 发表于 2019-1-11 21:42 | 显示全部楼层
使能你的接收或发送中断
aspoke 发表于 2019-1-11 21:42 | 显示全部楼层
是不是中断信号存在问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

867

主题

10194

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部