TI中文支持网
TI专业的中文技术问题搜集分享网站

如何用MCBSP实现中断收发的UART

如题

使用芯片为5509A。

我用MCBSP实现了UART,查询方式和中断方式都实现了。但是中断方式无法连续发送数据。

中断程序如下:

interrupt void MCBSP_X(void){  

if(count < (BUFFER_SIZE )){  

          MCBSP_write16(hMcbsp1,xmitbuf[count++]); //xmitbuf是发送数组的首地址,BUFFER_SIZE为数组大小,count为计数变量

          }else{   

                  IRQ_disable(7);   //当发送完xmitbuf中的数据后,禁能发送中断

                  flag = 1;   //发送完数据后,标志位置1

                  count = 0;   //发送完数据后,计数清零

                  }

}

主程序中等待flag的状态,当flag为1后,赋给发送数组新的值,并使能发送中断,开始新的发送。

大概如下:

while(1){

   if(flag == 1){        \\判断上一次发送是否完成

      flag=0;

      xmitbuf = newData;  \\给发送数组赋新值

      IRQ_enable(7);        \\使能发送中断

   }

}

问题出在,中断程序里对flag赋值这里。如果将if(flag == 1)改为while(flag == 0),程序会卡在循环这里,通过查看变量值,发现flag已经被置1了,循环依旧无法通过。是否在中断程序里对全局变量操作会有什么问题?

后来我通过查看IER寄存器的状态,也无法使循环通过。不知道我这么说能否表达清楚。

希望Shine和大家能帮我提供一点思路。

谢谢。

Tony Tang:

#1. 不改能通过吗?

#2. 将全局变量flag定义加在volatile试试,或者你看一下汇编代码,这里方是不是在寄存器取值,没有从物理地址取值,所以一直是前面的值。

赞(0)
未经允许不得转载:TI中文支持网 » 如何用MCBSP实现中断收发的UART
分享到: 更多 (0)

登录

注册