Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания по УАРТ
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ruslannd
Помогите, пожалуйста сделать прерывания по приему байта по UART (контроллер LPC2388)
У меня получился следующий код, но он не работает:

nclude <RTL.h>
#include <LPC23xx.H>

#define Fcclk 48000000
#define Fpclk (Fcclk / 2)

U8 cnt;

__irq void recieveUART (void)
{
cnt++;
FIO2SET = cnt;
FIO2CLR = ~cnt;
}

void initUART (void)
{
U32 Fdiv;
PINSEL0 |= 0x40000000; /* TxD1 en */
PINSEL1 |= 0x00000001; /* RxD1 en */
U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
Fdiv = (( Fpclk / 16 ) / 57600); /* baud rate */
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = 0x03; /* DLAB = 0 */
U1IER = 0x01;

VICVectAddr4 = (unsigned long)recieveUART;
VICVectCntl4 = 15; /* use it for Timer0 Interrupt */
VICIntEnable = 0x00000080;

}

int main (void)
{
FIO2DIR = 0x000000FF;
FIO2MASK = 0x00000000;
FIO2PIN = 0x00000000;
PINSEL10 = 0;
FIO2CLR = 0xFF;
FIO2SET = 0x01;
cnt=0;
initUART();
while (1)
{
}
}
toweroff
а как же
VICVectAddr = 0; /* Acknowledge Interrupt */
в прерывании?

непонятно, что хотите впрерывании делать... я бы как минимум эхо сделал для проверки...


и вот пример инициализации от Keil UART1 для LPC23xx
Код
  PINSEL0 &= ~0xC0000000;
  PINSEL0 |=  0x40000000;             /* Enable TxD1 pin                     */
  PINSEL1 &= ~0x00000003;
  PINSEL1 |=  0x00000001;             /* Enable RxD1 pin                     */

  U1LCR = 0x83;                       /* 8 bits, no Parity, 1 Stop bit       */
  U1DLL = 3;                          /* 115200 Baud Rate @ 12MHz PCLK Clock */
  U1FDR = 0x67;                       /* Fractional Divider                  */
  U1LCR = 0x03;                       /* DLAB = 0                            */
  U1IER = 0x03;                       /* Enable RDA and THRE interrupts      */

  VICVectAddr7 = (U32)int_serial;     /* Set Interrupt Vector                */
  VICVectCntl7 = 7;                   /* use it for UART1 Interrupt          */
  VICIntEnable  = (1  << 7);          /* Enable Interrupt                    */


у Вас инициализация, честно говоря, странновата
ruslannd
Цитата(toweroff @ Feb 23 2010, 13:33) *
а как же
VICVectAddr = 0; /* Acknowledge Interrupt */
в прерывании?

непонятно, что хотите впрерывании делать... я бы как минимум эхо сделал для проверки...


и вот пример инициализации от Keil UART1 для LPC23xx
у Вас инициализация, честно говоря, странновата


Спасибо. Про VICVectAddr = 0; понял. Пример работает.
Не понял только одно
VICVectAddr7 и VICVectCntl7 обязательно с номером 7 брать? или любой подойдет?
toweroff
Цитата(ruslannd @ Feb 23 2010, 16:42) *
Спасибо. Про VICVectAddr = 0; понял. Пример работает.
Не понял только одно
VICVectAddr7 и VICVectCntl7 обязательно с номером 7 брать? или любой подойдет?

нужно смотреть по даташиту, какой вектор прерывания используется контроллером для UART1 и отсюда плясать
ruslannd
Цитата(toweroff @ Feb 23 2010, 17:15) *
нужно смотреть по даташиту, какой вектор прерывания используется контроллером для UART1 и отсюда плясать


Я из даташита понял, что можно использовать любой из 32-х доступных наборов регистров, только на практике не получилось.
toweroff
Цитата(ruslannd @ Feb 23 2010, 20:29) *
Я из даташита понял, что можно использовать любой из 32-х доступных наборов регистров, только на практике не получилось.

посмотрите в User Manual раздел VIC - Vectored Interrupt Controller, там есть часть с названием Interrupt sources
Там как раз расписано, что на каком векторе "висит"
ruslannd
Цитата(toweroff @ Feb 23 2010, 21:04) *
посмотрите в User Manual раздел VIC - Vectored Interrupt Controller, там есть часть с названием Interrupt sources
Там как раз расписано, что на каком векторе "висит"


Спасибо. Ответ получен. Тему можно закрывать.
one_man_show
Для истории было бы лучше перед закрытием темы написать, что почерпнули из документации. Тогда читающим будет проще искать на Форуме полные ответы
toweroff
Цитата(one_man_show @ Feb 24 2010, 11:05) *
Для истории было бы лучше перед закрытием темы написать, что почерпнули из документации. Тогда читающим будет проще искать на Форуме полные ответы

по ходу все как обычно - RTFM, не более smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.