打印

USCI无法进入串口中断(其他中断也进不去)

[复制链接]
2194|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
banalmaster|  楼主 | 2013-9-15 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 banalmaster 于 2013-9-15 18:15 编辑

用的是MSP430G2353单片机,UART在9600波特率下可以成功发送数据,但是是在主函数里发送的,没有进入发送中断。
但是测试接收数据功能时,就是进不去中断。
我没有用外部晶振,MCLK、SMLCK的时钟来源均为内部DCO,UART时钟来源为SMCLK,但是进不去中断。一开始以为是时钟问题,将UART时钟调为ACLK后,还是进不去中断。
后来测试了下看门狗的中断程序,也无法进入中断。
论坛的大大们看看可能是什么原因?
顺便把接收的代码贴出来:
#include <msp430g2353.h>
void CLK_INIT(void);
void USCI_UART_INIT(void);
int flag=1;

void main(void)
{
  volatile unsigned int i;
   WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗
  CLK_INIT();                               // SMCLK=1.6MHz
  _EINT()
  USCI_UART_INIT();


void CLK_INIT(void)
{
  BCSCTL1 = 0X00;                           // 将寄存器的内容清零; XT2震荡器开启; LFTX1工作在高频模式; ACLK的分频因子为1      
  DCOCTL  |= DCO1+DCO0;
  BCSCTL1 |= RSEL3;                                         // DCO Rsel=8,DC0=3,MOD=0(Freq=1.6MHz)
  BCSCTL2 |= 0x00;                         // MCLK和SMCLK的时钟源为DCOCLK,分频因子为1
}

void USCI_UART_INIT(void)
{
  P1SEL |= 0x06;                            // P1.1,1.2作为UART的RXD/TXD
  P1SEL2 |= 0x06;
  UCA0CTL0=0x00;                                                        // 默认设置:无校验位、8位字符、1位停止位、UART模式
  UCA0CTL1 |= UCSSEL1;                                // UCLK = SMCLK
  //ME1 |= UTXE0 + URXE0;                     // 使能USART0的TXD/RXD,ME1为使能寄存器

  //9600
  UCA0BR1 = 0x00;
  UCA0BR0 = 0xA6;                           // 1.6MHz/9600 = 1600000/9600=166.67 ≈ 166 (00A6h)                              
//  UCA0MCTL = 0x57;                          // 波特率调整控制寄存器 */
  UCA0CTL1 &= ~UCSWRST;                     // Initialize USCI state machine
  IE2 |= UCA0RXIE;                          // IE1 |= UCA0TXIE+UCA0RXIE;  只使能USART0 RX中断,否则会发生乱码
  UCA0TXBUF=0x03;
}


#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}


相关帖子

沙发
dirtwillfly| | 2013-9-15 10:57 | 只看该作者
你关了看门狗,怎么可能会进入看门狗中断

使用特权

评论回复
板凳
dirtwillfly| | 2013-9-15 10:57 | 只看该作者
本帖最后由 dirtwillfly 于 2013-9-15 11:04 编辑

也没看到你开中断功能

使用特权

评论回复
地板
banalmaster|  楼主 | 2013-9-15 18:12 | 只看该作者
dirtwillfly 发表于 2013-9-15 10:57
你关了看门狗,怎么可能会进入看门狗中断

这个是串口的程序,看门狗的代码没有关看门狗的语句。

使用特权

评论回复
5
banalmaster|  楼主 | 2013-9-15 18:14 | 只看该作者
dirtwillfly 发表于 2013-9-15 10:57
也没看到你开中断功能

_EINT()语句有没有都进不去中断,贴代码的时候我把_EINT()注释掉了,所以就给删了:P。
不知道还有没有别的可能?
现在在主函数里可以收到串口数据。

使用特权

评论回复
6
mmbs| | 2013-9-15 23:13 | 只看该作者
你的主函数写全了?

使用特权

评论回复
7
mmbs| | 2013-9-15 23:13 | 只看该作者
还有while呢吧

使用特权

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

本版积分规则

个人签名:email:life.2@qq.com QQ:1917294316 欢迎探讨嵌入式、单片机知识。

2

主题

128

帖子

0

粉丝