求教LPC934串口收发问题,问题有点奇怪!
用LPC934做了个收转发的程序,上位机下发数据给934,934在接收中断里收数据,保存到缓冲区,在主程序里将收到的数据再转发给上位机,现在碰到的问题是,明明上位机下发了180个字节,但实际收到的转发数据却只有143个。934的程序已经精简到最小,只开了一接收中断,发送是放在主程序里,用的查询方式,缓冲区用来平衡收发速度,缓冲区调整大小也没有效果。整了两天了,实在是找不到原因。求解,求指点! 本帖最后由 abuffalo 于 2012-3-29 19:43 编辑
void UartInit(void)
{
P1M1 &= 0xFE; // For TxD = P1.0 Push-Pull (M1=0, M2=1)
P1M2 |= 0x01;
SCON = 0x50; // select BRG as UART Baud Rate Gen
SSTAT = 0x60; // separate Rx / Tx interrupts
BRGR0 = 0xB0; // setup BRG for 38400 baud @ 7.373MHz internal RC oscillator
BRGR1 = 0x00;
BRGCON = 0x03; // enable BRG
ESR = 1; // enable UART interrupt
//EST = 1;
}
uint8 RcvBuffer;
uint8 WritePtr = 0;
uint8 ReadPtr = 0;
void UART_RX_ISR(void) interrupt 4// 接收中断
{
RI = 0; // 清接收标志位为0
RcvBuffer = SBUF;
if (WritePtr == 30) WritePtr = 0;
}
extern uint8 RcvBuffer[];
extern uint8 WritePtr;
extern uint8 ReadPtr;
void main(void)
{
// IO初始化
IOInit();
// Uart初始化
UartInit();
// 开中断
EA = 1;
while(1)
{
if (ReadPtr != WritePtr)
{
TI = 0;
SBUF = RcvBuffer;
while (!TI);
if (ReadPtr == 30) ReadPtr = 0;
}
}
} 求指点!{:time:}{:time:}{:time:}{:time:}{:time:} 帖子沉的太快,顶起!
页:
[1]