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