如题
使用芯片为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试试,或者你看一下汇编代码,这里方是不是在寄存器取值,没有从物理地址取值,所以一直是前面的值。