|
我使用USART1模块进行串口通讯,但调试的时候发现程序进不了中断。
相关代码:
- #include "msp430x14x.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define URXD1 BIT7
- #define UTXD1 BIT6
- uchar dataSedBuffer[100]={"123"}; //发送数据缓存区
- uchar redySedLen = 3; //准备发送的数据的总长度
- uchar curtSedLen = 0; //当前已经发送的数据的长度
- uchar dataSedFlag = 1; //0->没有数据需要发送,1->有数据发送
- void Delay_us(uchar count)
- {
- while(count-- ){};
- }
- void Init_clk()
- {
- uchar i;
-
- WDTCTL = WDTPW +WDTHOLD;
- BCSCTL1 &= ~XT2OFF;
- BCSCTL2 &= SELM1 +SELS;
- do
- {
- IFG1 &= ~OFIFG;
- for(i=0;i<100;i++);
- }while((IFG1 & OFIFG)!=0);
- IFG1 &= ~OFIFG;
- }
- void Init_port()
- {
- P3SEL |= URXD1+UTXD1; //端口功能设置为第二功能
- P3DIR |= UTXD1; //发送端口为输出
- P3DIR &= ~URXD1; //接受端口为输入
- }
- void Init_usart()
- {
- U1CTL = 0x00;
- U1CTL |= CHAR; //8位数据
-
- U1TCTL = 0x00;
- U1TCTL |= SSEL1; //时钟SMCLK
-
- U1BR0 = 0x45;
- U1BR1 = 0x00; //波特率115200
-
- U1MCTL = 0x4a; //小数设置
-
- ME2 |= UTXE1 + URXE1; //使能UART的发送和接收
- IE2 |= URXIE1; //UART接收中断使能
- IE2 |= UTXIE1; //UART发送中断使能
- }
- #pragma vector = UART1TX_VECTOR
- __interrupt void UART1_TX_ISR()
- {
- if(redySedLen != 0)
- {
- dataSedFlag = 0; //缓冲区里数据没发送完
- TXBUF1 = dataSedBuffer[curtSedLen]; //发送数据
- curtSedLen += 1; //当前位置加1
- Delay_us(10);
- if(curtSedLen >= redySedLen) //判断是否发送完毕
- {
- redySedLen = 0; //清空数据总长度
- dataSedFlag = 1; //设置发送完毕标识
- curtSedLen = 0; //清空已发送长度
- }
- }
- }
- void test()
- {
- _DINT();
- Init_port();
- Init_usart();
- _EINT();
- if(dataSedFlag == 1) //如果有需要发送
- {
- IFG2 |= UTXIFG1; //设置发送中断
- Delay_us(5);
- }
- }
- void main()
- {
- Init_clk();
- test();
- }
复制代码
我的思路是,在程序执行了test()函数里的IFG2 |= UTXIFG1 之后,程序进入串口发送的中断。但是调试的时候发现没进去。
大家帮我看看为什么没有进中断,谢谢了
|
|