Здраствуйте!
Пытаюсь получить с компа строку символов, ничего не получается.
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, т.е. последний символ.
Подскажите, где может быть проблема.