Здраствуйте! Пытаюсь получить с компа строку символов, ничего не получается.
void UART0init(unsigned int baudrate) { PINSEL0_bit.P0_0 = 0x01; //линию P0.0 сделать выходом TXD0 UART0 PINSEL0_bit.P0_1 = 0x01; //линию P0.1 сделать входом RXD0 UART0
U0LCR_bit.DLAB = 1; //разрешить запись в настройки делителя UART0 U0DLL = 15000000/(16*baudrate); // задание мл байта скорости обмена U0DLM = ((15000000/(16*baudrate)) >> 8); // задание ст байта скорости обмена U0LCR_bit.DLAB = 0; //разрешить обращение к буферам UART0 U0LCR_bit.WLS = 0x03; //длина символа 8 битов U0LCR_bit.SBS=1; //1 стоповый бит
U0FCR_bit.FCRFE =0; U0FCR_bit.RFR = 1; //сбросить приемный буфер FIFO U0FCR_bit.TFR = 1; //сбросить передающий буфер FIFO U0FCR_bit.RTLS =0; U0FCR_bit.IIRFE =0; U0FCR_bit.IP =0; U0IER_bit.RDAIE = 1; //разрешить прерывание по приему данных в буфер }
//Функция передачи байта через UART0 void UART0send_byte(unsigned char tx_byte) { while(U0LSR_bit.THRE==0);
U0THR = tx_byte; //запись в буфер передачи UART0 }
void INITInterrupt(void) { VICProtection=0; VICIntSelect=0x00000000;
VICVectAddr2=(unsigned int)&Int0; VICVectAddr1=(unsigned int)&Int2; VICVectAddr0=(unsigned int)&UART0_tx;
VICVectCntl2=0x0000002E; VICVectCntl1=0x00000030; VICVectCntl0=0x00000026;
VICIntEnable=0x00014040; }
#pragma vector=0x18 __irq __arm void irq_handler(void) { void (*interrupt_function)(); unsigned int vector; vector=VICVectAddr; interrupt_function=(void(*)())vector; (*interrupt_function)(); VICVectAddr=0; }
static void UART0_tx() { tx_byt=U0RBR; while(U0LSR_bit.DR==0); UART0send_byte(tx_byt);
} При передаче одного символа все нормально, а если передавать строку все плохо. Например если передавать 123, то возвращается 3, если 12345- 5, т.е. последний символ. Подскажите, где может быть проблема.
|