Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с UART1
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Novichok1
Доброго времени суток!
Использую LPC2478, возникла задача использовать UART1, провожу его инициализацию следующим образом:

Код
void initUart1(tU16 div_factor, tU8 mode, tU8 fifo_mode)
{
  volatile tU32 dummy;
  
  //UART1 power/clock control bit.
  //Power: In the PCONP register (Table 4–63), set bits PCUART1.
  //Remark: On reset, UART1 is enabled (PCUART1 = 1).
  PCONP |= 1<<4;

  //Peripheral clock: In the PCLK_SEL0 register (Table 4–56), select PCLK_UART1.
  //9:8 PCLK_UART1 Peripheral clock selection for UART1.
  PCLKSEL0 |= (1<<8)|(1<<9);

  //enable uart #1 pins in GPIO (P3.16 = TxD1, P3.17 = RxD1)
  PINSEL7 = (PINSEL7 & 0xfffffff0) | 0x0000000F;

  U1IER = 0x00;                        //disable all uart interrupts
  dummy = U1IIR;                       //clear all pending interrupts
  dummy = U1RBR;                       //clear receive register
  dummy = U1LSR;                       //clear line status register

  //Baud rate: In register U1LCR (Table 17–405), set bit DLAB =1. This enables access
  //to registers DLL (Table 17–399) and DLM (Table 17–400) for setting the baud rate.
  //Also, if needed, set the fractional baud rate in the fractional divider register
  //(Table 17–412).
  //set the bit rate = set uart clock (pclk) divisionfactor
  U1LCR = 0x80;                        //enable divisor latches (DLAB bit set, bit 7)
  U1DLL = (tU8)div_factor;             //write division factor LSB
  U1DLM = (tU8)(div_factor >> 8);      //write division factor MSB

  //set transmissiion and fifo mode
  U1LCR = (mode & ~0x80);              //DLAB bit (bit 7) must be reset

  //UART FIFO: Use bit FIFO enable (bit 0) in register U0FCR (Table 17–404) to enable FIFO.
  U1FCR = fifo_mode;

  //initialize the interrupt vector
  VICIntSelect &= ~0x00000080;      // UART1 selected as IRQ
  VICVectCntl7  =  0x00000027;
  VICVectAddr7  =  (tU32)uart1ISR;  // address of the ISR
  VICIntEnable |=  0x00000080;      // UART1 interrupt enabled

  //Interrupts: To enable UART interrupts set bit DLAB =0 in register U1LCR
  //(Table 17–405). This enables access to U1IER (Table 17–401). Interrupts are enabled
  //in the VIC using the VICIntEnable register (Table 7–106).
  //enable receiver interrupts
  //U1IER = 0x01;
  U1IER = 0x03;
}


Джамперы J23 и J24 выставлены на UART1.
Посылаю быйты на U1THR, срабатывает прерывание завершение передачи (хотя оно срабатывает и в том случае, когда инициализировано только прерывание, а остального кода в initUart1 вообще нет), но ничего на выход не отправляется. Проверял с помощью осциллографа - никаких сигналов не возникает.
Подскажите, пожалуйста, что еще я упустил, при инициализации, или может еще какой джампер надо задействовать?
Novichok1
Причем, что интересно, UART0 и UART2 работают!
GetSmart
Цитата(Novichok1 @ Nov 10 2009, 16:01) *
Причем, что интересно, UART0 и UART2 работают!

Процессоры уже с джамперами штампуются? smile.gif
HARMHARM
Поскольку UART1 отличается от остальных наличием аппаратного управления потоком, для начала отключите его.
Novichok1
Цитата
Поскольку UART1 отличается от остальных наличием аппаратного управления потоком, для начала отключите его.


Так на сколько я понимаю, оно регулируется через регистр UART1 Modem Control Register (U1MCR)(бииты 6 и 7 -RTSen и CTSen), а они по умолчанию нули, то есть неактивны auto-rts flow control и auto-cts flow control.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.