|
高手帮我看看程序错在哪里,为什么第一次数据能发送出去,第二次就发不出去了<br />void __irq InterUart0()<br />{<br /> <br /> if((U0IIR&0x02)!=0) <br /> { <br /> if(in_send)<br /> {<br /> U0THR = outbuff[send_num++];; <br /> if(send_num>=send_total)<br /> {<br /> in_send = 0;<br /> }<br /> }<br /> } <br /> else <br /> {<br /> rec_flag = 1; //接受标志置一<br /> inbuff[in_num++] = U0RBR;<br /> if(in_num>=MAX_IN)<br /> {<br /> in_num = 0;<br /> }<br /> }<br /> VICVectAddr = 0; <br />}<br /><br />void SendStart() //启动发送<br />{<br /> U0THR = outbuff[0];<br /> //while( (U0LSR&0x40)==0); <br /> send_num = 1;<br /> send_total = send_ptr-outbuff;//计算发送数据总数<br /> in_send = 1;<br />}<br /><br />void SendToBuffStart()<br />{<br /> while(in_send==1); // 等待串口发送完<br /> send_ptr = outbuff;// 发送指针复位<br />}<br /> <br />void InitUart0(void)<br />{<br /> unsigned int fdiv;<br /> VICIntSelect = 0x00; //设置所有中断为IRQ方式<br /> VICIntEnable = 1<<6; //使能串口中断<br /> VICVectAddr1 = (uint32)InterUart0; //设置串口中断地址<br /> VICVectCntl1 = 0x26; //分配到IRQ1<br /> ////////////////////<br /> <br /> U0LCR = 0X83; //允许访问除数寄存器<br /> fdiv = (Fpclk/16)/9600; //<br /> U0DLM = fdiv>>8;<br /> U0DLL = fdiv&0xff;<br /> <br /> U0FCR = 0x01; <br /> U0LCR = 0x03;<br /> U0IER = 0x03; //必须在DLAB==0时,访问<br /> <br />}<br /><br />void main(void)<br />{<br /> PINSEL0 |= 0x05; <br /> <br /> IRQEnable(); //IRQ <br /> InitUart0();<br /><br /> SendToBuffStart(); <br /> *send_ptr++ = 0x30;<br /> *send_ptr++ = 0x30;<br /> *send_ptr++ = 0x30;<br /> *send_ptr++ = 0x30;<br /> SendStart(); //发送第一次数据<br /><br /> SendToBuffStart(); //程序停在这了,奇快,发送完数据就应该清<br /> //掉in_send了啊<br /> *send_ptr++ = 0x30;<br /> *send_ptr++ = 0x30;<br /> *send_ptr++ = 0x30;<br /> *send_ptr++ = 0x30;<br /> SendStart(); //发送第二次数据<br />}<br /> |
|